-
part 2
echo "Mounting initial environment..."
mount -f /
mount -f /var
mount /proc /proc -t proc
echo "Cleaning up temporary files in /var/tmp"
rm -rf /var/tmp
mkdir /var/tmp
for dir in /var/log /var/run /var/packages /var/utils /var/persist /var/dev ; do
if [ ! -d $dir ] ; then
rm -rf $dir
mkdir $dir
fi
done
echo "Cleaning up old slices and bundles in /var/packages..."
rm -f /var/packages/*slice
rm -f /var/packages/*bnd
rm -f /var/packages/*jpm
rm -f /var/packages/*cpio
rm -f /var/packages/*gz
echo "Checking space in /var"
dfspace=$(df -P /var)
purge=0
if [ ! -z "$dfspace" ]; then
spacepct=$(nthword 12 $dfspace)
if [ ! -z "$spacepct" ]; then
spaceused=${spacepct%'%'}
if [ ! -z "$spaceused" ]; then
if [ $spaceused -gt 40 ]; then
purge=1
fi
fi
fi
fi
old_log_cleanup=0
too_big_logs=""
if [ $purge -ne 0 ]; then
echo "/var partition is rather full..."
du -s /var
echo "Removing old logs..."
rm -f /var/log/O*
old_log_cleanup=1
for foo in /var/log/* ; do
filesize=$(du -s "$foo")
if [ ! -z "$filesize" ]; then
kbytes=$(nthword 1 $filesize)
if [ ! -z "$kbytes" ]; then
if [ $kbytes -gt 10000 ]; then
echo "$foo is too big, removing it"
too_big_logs="$too_big_logs $foo"
rm -f "$foo"
fi
fi
fi
done
echo "Performed an emergency /var cleanup" >> /var/log/messages
fi
fixmodem
# Run the Phase 1 (/var is mounted and has some free space) scripts
runme phase1
echo "Initializing TiVo extension..."
# TODO: tivosetup ??? what does this do in tivosh?
echo "Set up environment vars for hardware configuration..."
# Need a way to override these...
# Should just source /etc/tivoconfig/hardware... It should set these up...
if [ "$TIVO_REMOTE" = "" ]; then export TIVO_REMOTE=TIVO; fi
echo "Remote control is " $TIVO_REMOTE
if [ "$MFS_DEVICE" = "" ]; then export MFS_DEVICE=/dev/hda10; fi
echo "MFS partition on " $MFS_DEVICE
echo "Loading media drivers..."
if [ "$runideturbo" = false ]; then
echo "Running without ideturbo mode ..."
else
echo "Loading ideturbo ..."
insmod /lib/modules/ideturbo.o
fi
if [ "$LOG5505TOSERIAL" = true ]; then
echo "installing oslink.o"
insmod /lib/modules/oslink.o
echo "Waiting for response on DSS serial port"
/bin/expect /etc/boot.expect > /dev/ttyDSS < /dev/ttyDSS
if [ ! $? = 0 ]; then
jeiboot=true
else
echo "Booting from oslink..." > /dev/ttyDSS
fi
fi
asicversion=`/bin/asicVersion`
if [[ "$oslink" = false || "$jeiboot" = true ]]; then
echo "Not going to boot over oslink ..."
case $asicversion in
0|1)
irmicrofile='/sbin/irmicro.hex'
;;
2|3|4|5)
irmicrofile='/sbin/irbmicro.hex'
;;
esac
else
echo "Auto-detecting oslink module (asic $asicversion)."
getTunerConfig
case $asicversion in
0|1)
echo "Not Installing oslink module."
irmicrofile='/sbin/irmicro.hex'
;;
2|3)
echo "Installing oslink module (tuner $tuner1)"
irmicrofile='/sbin/irbmicro.hex'
insmod /lib/modules/oslink.o
cat $tunerboot1 > /dev/oslink
;;
4)
echo "Installing both oslink (tuners $tuner1:$tuner2)"
irmicrofile='/sbin/irbmicro.hex'
insmod /lib/modules/oslink.o
cat $tunerboot1 > /dev/oslink
cat $tunerboot2 > /dev/oslink2
;;
5)
echo "Not Installing oslink module."
irmicrofile='/sbin/irbmicro.hex'
;;
esac
fi
echo "Loading fan ..."
insmod /lib/modules/fan.o
echo "Loading therm ..."
insmod /lib/modules/therm.o
echo "Loading output section drivers ..."
loadAllOutput
echo "Splash the screen..."
osdwriter /tvbin/PromScreen2Version7.$TV_STD.png
if [ -f /etc/cachecard ] ; then
insmod -f /lib/modules/cachecard.o
cachectl -t
osdwriter /tvbin/PromScreen2Version7.$TV_STD.png
fi
echo "Update IR microcode using $irmicrofile"
irprog -f $irmicrofile
# Figure out the system serial number. (On combo box,
# this is called the TiVo Service ID.)
SysSerial=`crypto -gsn`
if [ $? -ne 0 ]; then SysSerial=""; fi
if [ -z $SysSerial ]; then SysSerial=`driveid /dev/hda`; fi
if [ -z $SysSerial ]; then SysSerial=000000000000000; fi
export SerialNumber=$SysSerial
export HDA_ID=`/bin/driveid /dev/hda`
export HDB_ID=`/bin/driveid /dev/hdb`
export OzTiVoVersion=`cat /etc/oztivo_version`
# On combo box, determine the IRD Serial Number (which is
# dependent on the exported SerialNumber environment variable).
IrdSerial=`irdSerialNumber`
export IrdSerialNumber=$IrdSerial
#
# Export the prom version information
#
export PROMVERSION=`getprom -version`
if [ -f /sbin/update ] ; then
# ??? Does this really add value?
echo "Starting update ..."
/sbin/update
fi
echo "Look for debug board ..."
export DEBUG_BOARD=false
if checkEther ; then
PATH=/bin:/sbin:/tvbin:/devbin
export PATH
echo "Starting network ..."
configGateway
export TMK_DEBUGGER=sleep
export DEBUG_BOARD=true
echo "Starting Telnet Listener..."
if [ -x /bin/bash ] ; then
tnlited 23 -r 9911 /bin/bash -login &
else
export TIVOSH_POOLSIZE=800000
tnlited 23 -r 9911 /tvbin/tivosh -login &
fi
echo "Starting /proc Listener..."
procd
fi
echo "Enabling local route..."
ifconfig lo 127.0.0.1 up
echo "Setting TCP keepalive parameters..."
if [ -e /proc/sys/net/ipv4/tcp_keepalive_time ]; then
echo 60 > /proc/sys/net/ipv4/tcp_keepalive_time
fi
if [ -e /proc/sys/net/ipv4/tcp_keepalive_probes ]; then
echo 3 > /proc/sys/net/ipv4/tcp_keepalive_probes
fi
if [ "$runsyslog" = false ]; then
echo "No logging daemons started..."
else
echo "Starting logging daemons..."
rm -f /var/run/syslogd.pid /var/run/klogd.pid
syslogd -p /var/dev/log -m 10000
klogd
fi
echo "Check for PROM update ..."
if [ "$updateprom" = true ]; then
if [ -e /prom/TiVoProm.bin ]; then
osdwriter /tvbin/InstallingSoftware.$TV_STD.png
getprom -Update /prom/TiVoProm.bin
echo "Sleep...waiting for reboot"
osdwriter /tvbin/PromScreen2Version7.$TV_STD.png
sleep 1000000
restart
fi
echo "Can't find PROM image"
fi
echo "Updating system clock UID=$UID"
settime -rtc
# If the clock is set to before 1970, ntpdate won't work. So we will
# bump it up closer. The factory default seems to be 1910.
year=`date +%Y`
if [ $year -lt 1998 ] ; then
settime 199811241010
settime -rtc
fi
#
# Log into the moderated log any emergency cleanup deletions we
# did. We need the TCD_ID, TIME and CALL_ID for this
#
if [ -e /var/persist/lastCallId ] ; then
lastCallId=`cat /var/persist/lastCallId`
else
lastCallId="UNKNOWN"
fi
now=`date '+%s'`
if [ $old_log_cleanup -ne 0 ]; then
echo "emergency_cleanup TCD_ID=$SerialNumber TIME=$now CALL_ID=$lastCallId FILE=/var/log/O" >> /var/log/svclog
fi
for logf in $too_big_logs ; do
echo "emergency_cleanup TCD_ID=$SerialNumber TIME=$now CALL_ID=$lastCallId FILE=$logf" >> /var/log/svclog
done
unset DYNAMIC_NET_DEV
if [ -f /etc/rc.d/rc.net ]
then
echo "Configuring network..."
source /etc/rc.d/rc.net
fi
### Start oztivo networking hacks #####
setpri fifo 1 $PPID
setpri fifo 1 $$
. /etc/oztivo.conf
if [ "$pppondss" == "true" ] || [ "$pppondss" == "1" ]
then
echo "Starting PPP over serial"
/etc/rc.d/rc.ppp &
export DYNAMIC_NET_DEV=ppp0
else
echo "Starting BASH on serial port"
shondss.sh &
fi
## We don't do this anymore, since networking is setup via installer iso
##if [ -f /etc/rc.d/rc.net.${netcard} ]
##then
## echo "Configuring network...for ${netcard}"
## source /etc/rc.d/rc.net.${netcard}
##fi
-
part 3 rc.sysinit
## via boot params or /etc/oztivo.conf
## If TiVo doesn't find eth0, then it tries to find a ppp server
#if `cat /proc/net/dev |grep eth0` ; then
# NETCARDIP=`ifconfig eth0|grep "inet addr" |cut -d: -f2|cut -d' ' -f1`
# if [ $NETCARDIP == "0.0.0.0" ]
# then
# echo "$netcard driver loaded but no DHCP server found"
# kill -9 `cat /var/run/dhclient.pid`
# ifconfig eth0 down
# unset DYNAMIC_NET_DEV
# else
# echo IP for $netcard is $NETCARDIP
# fi
#else
#echo "No Network Card Present"
#fi
## If TiVo doesn't find eth0, then it tries to find a ppp server
#if [ "$DYNAMIC_NET_DEV" == "" ]
#then
# echo "Trying PPP over serial"
# /etc/rc.d/rc.ppp &
# export DYNAMIC_NET_DEV=ppp0
#fi
#Start the telnet server listener
tnlited.sh &
### End oztivo networking hacks #####
# Add second disk if there and uninitialized. No, we didn't take this out...
echo "Checking for additional disk..."
mfsadd
if [ $do_mfs_cleanup -eq 1 ] ; then
echo "Initiating MFS cleanup"
/tvbin/fsfix -nokill -splash -uncollide -rehash -salvage -reboot
fi
# Start the EventSwitcher and MfsDaemon
echo "Starting EventSwitcher..."
/tvbin/switcherstart -m
if [ $do_mfs_assert -eq 1 ] ; then
echo "Rebooting to perform MFS and database check"
/tvbin/mfsassert -please
/tvbin/reboot
fi
# Start the fan control process.
echo "Start fan control..."
fancontrol &
# Let him get started ??
sleep 1
# Run the Phase 2 (MFS is up) scripts
runme phase2
# Check for Diagnostics.
dodiag=false
case $asicversion in
2|3|4)
# this is ppc combo :
# The authserial program detects the presence of a diagnostics test fixture.
if [ ! -x /tvbin/genkey ] ; then
echo "Essential diagnostic file missing"
/tvbin/reboot
fi
/tvbin/genkey 128 1 > /var/tmp/challenge.dat
if [ "$runfactorydiag" = true ] ; then
if [ ! -x /diag/tvbin/authserial -o \
! -r /diag/tvlib/misc/diagkey.pub ] ; then
echo "Essential diagnostic file missing"
/tvbin/reboot
fi
dodiag=true
# the "runfactorydiag" bootparam indicates that we are in the factory
# with a brand new disk. Don't quit until we've established link
# with diag station
while ! /diag/tvbin/authserial -authslave /diag/tvlib/misc/diagkey.pub /var/tmp/challenge.dat ; do
echo Diagnostics station not found, trying again
sleep 1
done
else
if [ ! -x /diag/tvbin/authserial -o \
! -r /diag/tvlib/misc/diagkey.pub ] ; then
echo "Can not check for Test Master"
else
# Check whether we should enter diagnostics
# The authserial program detects the presence of a diagnostics test fixture.
if /diag/tvbin/authserial -authslave /diag/tvlib/misc/diagkey.pub /var/tmp/challenge.dat ; then
echo Diagnostics station present and authenticated
dodiag=true
fi
fi
fi
rm -f /var/tmp/challenge.dat
;;
0|1|5)
# this is ppc or mips standalone.
if [ "$runfactorydiag" = true ] ; then
dodiag=true
# we will just enter diagnostics
echo "Standalone diagnostics"
fi
;;
esac
# Run factory diagnostics?
if [ "$dodiag" = true ] ; then
if [ ! -x /diag/tvbin/factorydiag ] ; then
echo "No factorydiag TCL script!"
else
echo Entering diagnostics...
if /diag/tvbin/factorydiag ; then
echo "Diagnostics passed"
else
echo "Error running factory diagnostics"
reboot
fi
fi
fi
# Run the final test?
if [ "$runfinaltest" = true ] ; then
if [ -x /var/diag/finaltest ] ; then
if /tvbin/crypto -vfs /var/diag/finaltest.sig /var/diag/finaltest /tvlib/misc/service-v3-s.pub ; then
/var/diag/finaltest
else
echo "/var/diag/finaltest failed signature check."
reboot
fi
elif [ -x /diag/finaltest ] ; then
/diag/finaltest
else
echo "Final test not found!"
fi
fi
# see if we need to check the battery
if [ -f /var/log/battery-check-needed ] ; then
if [ -x /var/diag/batterycheck ] ; then
if /tvbin/crypto -vfs /var/diag/batterycheck.sig /var/diag/batterycheck /tvlib/misc/service-v3-s.pub ; then
/var/diag/batterycheck
else
echo "/var/diag/batterycheck failed signature check."
reboot
fi
elif [ -x /diag/batterycheck ] ; then
/diag/batterycheck
else
echo "Battery check not found!"
fi
fi
# combo diagnostics testmaster starts here
if [ "$testmaster" = true ]; then
if [ -f /etc/rc.d/rc.sysinit.diag ]; then
echo "Starting Diagnostic Test Master"
source /etc/rc.d/rc.sysinit.diag
else
echo "rc.sysinit.diag not found"
fi
fi
# Check for software upgrade
if [ "$swupgrade" = true ]; then
/tvlib/tcl/updateSoftware.tcl
fi
if [ "$runwriteback" = true ]; then
/diag/writeback /dev/hda11 256 -a2 &
/diag/writeback /dev/hdb3 256 -a2 &
while true; do sleep 1000; done
fi
if [ "$rundriverstress" = true ]; then
if [ -x /diag/SimpleStress ]; then
echo "Running SimpleStress"
/diag/SimpleStress
echo "SimpleStress exited"
reboot
fi
fi
if [ "$testmodemDSS" = true ]; then
echo "Connecting modem to DSS serial port, 115K baud"
/tvbin/modemtest -forward /dev/ttyDSS
handcraft=true
fi
# System Statistics to "messages" log file.
syslog -t Stats "== System startup resource statistics =="
syslog -t Stats "++ System build version numbers ++"
syslog -t Stats -f /etc/build-version
getprom -version | syslog -t Stats
echo `getprom -checksum` | syslog -t Stats
IRvers=`irtest -t /dev/ttyS0 -V`
syslog -t Stats "IR version $IRvers"
syslog -t Stats "System Serial Number: $SysSerial"
syslog -t Stats -f /proc/version
syslog -t Stats "++ Memory usage ++"
syslog -t Stats -f /proc/meminfo
syslog -t Stats "++ CPU info ++"
syslog -t Stats -f /proc/cpuinfo
syslog -t Stats "++ Module info ++"
syslog -t Stats -f /proc/modules
syslog -t Stats "++ Device info ++"
syslog -t Stats -f /proc/devices
syslog -t Stats "++ Network device info ++"
syslog -t Stats -f /proc/net/dev
# Database conversions must happen before myworld, mcp, etc. are started.
if [ "$handcraft" != true ]; then
echo "Checking for database conversions..."
convert-db
fi
if [ "$upgradesoftware" = false ]; then
echo "Not upgrading software"
else
# TODO... Find another way to do this...
tivosh /etc/rc.d/finishInstall.tcl
export -n EMERGENCY_REINSTALL
fi
# Run the Phase 3 (MyWorld is starting) scripts
runme phase3
cd /var/tmp
# Launch MyWorld and other services (apg, mcp, tcphonehome, dbgc) by telling
# the eventswitcher to launch it (via "switcherstart -l").
if [ "$handcraft" = true ]; then
echo "Running without services."
else
echo "Starting Services."
switcherstart -l
fi
if [ "$audiostress" = true ]; then
echo "Starting audio stress"
if [ -x /devbin/audiostress ]; then
audiostress &
else
echo "Could not find audio stress prog"
fi
fi
if [ "$maintuner" = "1" ]; then
echo "Starting camtest for dual verifier mode"
camtest &
else
maintuner=0
fi
# Run the Phase 4 (background tasks have been started) scripts
runme phase4
if [ ! "$NDS" = "" ]; then
echo "Sleeping before enabling NDS sniffer output"
sleep 120
echo "Enabling NDS sniffer output"
/tvbin/send5505 "sniff 1"
fi
if [ ! "$BERR" = "" ]; then
echo "Sleeping before enabling Tuner BERR Test"
sleep 60
echo "Enabling Tuner BERR Test"
/tvbin/send5505 "wr299 28 40"
/tvbin/send5505 -i1 "wr299 28 40"
fi
if [ ! "$vmstat" = "" ]; then
echo "Starting memory statistic gathering"
vmstat 10 &
fi
# Set a few useful things up to use Service Emulator instead of TiVo mothership
# Set the DialConfig to use our mothership emulator
#DialConfig127.tcl
dbsetx /State/PhoneConfig DialConfig 127
# This will make TiVo try a daily call over the network or modem depending on
# the setting in /etc/oztivo.conf.
if [ "$modem" = "1" ] ; then
dbrm /State/PhoneConfig DialPrefix
# This will make the modem behave better in Oz
dbsetx /State/PhoneConfig DialToneCheck 0
#dbsetx /State/PhoneConfig CallWaitingPrefix *44 # #87 for Optus and *11*3# for faxtream duet
#dbsetx /State/PhoneConfig TollFreeNum 99990000
#dbsetx /State/PhoneConfig DialInNum 99990000
else
dbsetx /State/PhoneConfig DialPrefix ',#401'
fi
# We tell TiVo we are in UTC
dbsetx /State/LocationConfig TimeZoneOld 7
# Tivo cannot handle all Daylight Savings Policies, especially those
# of the Southern Hemishphere. See /etc/postcodezones for for info on keeping time
dbsetx /State/LocationConfig DaylightSavingsPolicy 0
GSSTATE=`dbget /State/GeneralConfig Complete`
BOOTARGS=`bootpage -p /dev/hda`
NEWBOOTARGS=`echo $BOOTARGS |sed 's/GS=1/GS=0/g'`
#echo $NEWBOOTARGS
# Get rid of Guided Setup Hack on next reboot if is complete,
# or it will cause the "jitters"
if [ "$GSSTATE" = "7" ] || [ "$GSSTATE" = "6" ] || [ "$GSSTATE" = "3" ] ; then
echo "Guided Setup at sufficient State. Clearing GS flag"
bootpage -P "$NEWBOOTARGS" /dev/hda
fi
# Check to see if this is UK tivo, and if so, enable scart
if [ $videoconfig = 7 ]; then
echo "UK box, enable SCART"
scartctl.tcl &
fi
# Enable both remotes
# OzTivos images should support both remotes out of the box.
# This should be done on the master image, but its here in case somebody
# starts from scratch and wants to do it this way instead.
# If you want your TiVo to obey only one...
# run /hack/bin/selectremote.tcl from a telnet or bash on serial session
#
# setbothremotes.tcl
[ ! -f /etc/rc.d/rc.sysinit.author ] || /etc/rc.d/rc.sysinit.author
echo "rc.sysinit is complete"