The following is a transcript of me doing this on a 2.0 system. It should be an identical procedure for any other release. Text highlighted in green are commands you type. Anything in red is a note from me. I assume you already have the slice files in /var/packages (hint: copy them there now if they don't already exist). And of course, I hold no responsibility if you hose your TiVo doing this. If you screw something up, it's your responsibility to fix it, not mine.
Note: If you need to perform any modifications to the new system's boot sequence (i.e. enabling tnlited, or such) remount your current root drive rw (mount -o rw,remount /) and edit /tvbin/installSw.itcl. Somewhere you'll see a line that says "reboot". Comment that out (by prepending a #), save the file, and remount the drive ro (mount -o ro,remount /). Once you have completed all the steps here, instead of the system rebooting it'll return you to a bash prompt. Here you can mount your new root drive, make any necessary changes, and then manually reboot the system.
With all that being said, lets begin:
bash-2.02# cd /var/packages
bash-2.02# tivosh
% set db [dbopen]
db1
% foreach file [glob -nocomplain *.gz] {
exec /bin/gzip -d $file
}
% foreach file [glob *.{cpio,slice}] {
dbload $db $file
}
% mls /SwSystem
Directory of /SwSystem starting at ''
Name Type FsId Date Time Size
---- ---- ---- ---- ---- ----
2.0.1-001-000 tyDb 44503 09/01/01 16:08 1476
3.0-01-1-000 tyDb 79520 12/21/02 03:53 628
ACTIVE tyDb 44503 09/01/01 16:08 1476
(Note: If you don't see your new version listed here, stop. You're either missing the swsystem slice file, or you somehow managed to screw up.)
% exit bash-2.02# /tvbin/tivosh /tvbin/installSw.itcl 3.0-01-1-000 12/21:04:12:42: /tvbin/installSw.itcl: id of /SwSystem/ACTIVE is 3528061 12/21:04:12:42: /tvbin/installSw.itcl: id of /SwSystem/3.0-01-1-000 is 6406306 12/21:04:12:45: /tvbin/installSw.itcl: Installing "3.0-01-1-000". 12/21:04:12:45: /tvbin/installSw.itcl: Removing old package files 12/21:04:12:45: /tvbin/installSw.itcl: Getting packages from database 12/21:04:12:56: /tvbin/installSw.itcl: Executing jpm install of utils-1-1.cpio 12/21:04:13:02: /tvbin/installSw.itcl: Executing updateroot /dev/hda /install /var/packages Path prefix is /var/utils/ Searching /etc/fstab for current root Old root is on /dev/hda4, new one goes on /dev/hda7 Creating new filesystem on /dev/hda7 Mounting new root filesystem on /install Building basic filesystem skeleton on /install Build directories Uncompressing /var/packages/GZbin-1-1.cpio Uncompressing /var/packages/GZetc-1-1.cpio Uncompressing /var/packages/GZkernel-1-1.cpio Uncompressing /var/packages/GZlib-1-1.cpio Uncompressing /var/packages/GZprom-1-1.cpio Uncompressing /var/packages/GZsbin-1-1.cpio Uncompressing /var/packages/GZtvbin-1-1.cpio Uncompressing /var/packages/GZtvlib-1-1.cpio Install /var/packages/GZbin-1-1.cpio into /install Install /var/packages/GZetc-1-1.cpio into /install Install /var/packages/GZkernel-1-1.cpio into /install Install /var/packages/GZlib-1-1.cpio into /install Install /var/packages/GZprom-1-1.cpio into /install Install /var/packages/GZsbin-1-1.cpio into /install Install /var/packages/GZtvbin-1-1.cpio into /install Install /var/packages/GZtvlib-1-1.cpio into /install Install /var/packages/utils-1-1.cpio into /install Checking /install/etc/fstab newroot is 7, copying fstab from fstab.alternate Creating symlink for /install/etc/mtab Dismounting /install and checking its integrity Remounting /install read-only for comparison pretend to Verify /var/packages/GZbin-1-1.cpio in /install pretend to Verify /var/packages/GZetc-1-1.cpio in /install pretend to Verify /var/packages/GZkernel-1-1.cpio in /install pretend to Verify /var/packages/GZlib-1-1.cpio in /install pretend to Verify /var/packages/GZprom-1-1.cpio in /install pretend to Verify /var/packages/GZsbin-1-1.cpio in /install pretend to Verify /var/packages/GZtvbin-1-1.cpio in /install pretend to Verify /var/packages/GZtvlib-1-1.cpio in /install pretend to Verify /var/packages/utils-1-1.cpio in /install Dismounting /install Modifying bootparams to point to /dev/hda7 Flipping root, setting boot parameters to 'root=/dev/hda7 ' OK, reboot the system to use the new root filesystem 12/21:04:16:25: /tvbin/installSw.itcl: Attempting reboot...
At this point, the system should reboot, and you'll see a pleasant screen like:
After that's complete, you should be running your new version.