The upgrade scripts goes in a tarball with local.conf at the top level. The tree is a follows: . |-- install_list.txt |-- install_list.txt.md5 |-- install.sh* |-- install.sh.md5 |-- local.conf |-- local.conf.md5 |-- model `-- repo/ |-- arm926ejste/ | |-- busybox_1.24.1-r0.mlinux2.mlinux2.1_arm926ejste.ipk | |-- busybox-hwclock_1.24.1-r0.mlinux2.mlinux2.1_arm926ejste.ipk | |-- busybox-ifplugd_1.24.1-r0.mlinux2.mlinux2.1_arm926ejste.ipk | |-- busybox-syslog_1.24.1-r0.mlinux2.mlinux2.1_arm926ejste.ipk | |-- busybox-udhcpc_1.24.1-r0.mlinux2.mlinux2.1_arm926ejste.ipk | |-- initscripts_1.0-r155.3.40.0_arm926ejste.ipk | |-- initscripts-functions_1.0-r155.3.40.0_arm926ejste.ipk | |-- Packages | |-- Packages.gz | `-- Packages.stamps `-- Packages install.sh gets executed if it exists by /etc/init.d/umountfs The files are placed in a tarball called upgrade.bin, and it should be located in either /var/volatile/flash-upgrade or /media/card/flash-upgrade to be compatible with umountfs. The file /var/volatile/do_flash_upgrade must exist and be owned by root for umountfs to execute the upgrade procedure. install_list.txt is a list of packages to install after the upgrade. If some packages have mutual dependencies on each other, they should be put on the same line. The file local.conf should contain a list of architectures with priorities, and a list of repositories. The md5sums are created as follows: cat install.sh | md5sum -c install.sh.md5 md5sum install.sh >install.sh.md5 md5sum local.conf >local.conf.md5 model is from the part of the hardware version before the first hyphen. Example: MTCAP-0.1 Would be MTCAP MTCDT-0.0 Would be MTCDT MTCDTIP-0.1 Would be MTCDTIP