diff options
Diffstat (limited to 'scripts/upgrade/install.sh')
-rwxr-xr-x | scripts/upgrade/install.sh | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/scripts/upgrade/install.sh b/scripts/upgrade/install.sh new file mode 100755 index 0000000..4928d88 --- /dev/null +++ b/scripts/upgrade/install.sh @@ -0,0 +1,148 @@ +#!/bin/bash +# This script works with a tar archvie +# called upgrade.bin in either /var/volatile +# or on the SD card. +# +# This is what the tar file upgrade file +# should look like to create an ipk upgrade +# file. IPK files should be in all, +# arm926ejste, and mtcdt (for mtcdt) +cat <<'!EOF' >/dev/null +. +|-- 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 +!EOF +# +# The tarball must be called upgrade.bin. +# +# The file /var/volatile/do_flash_upgrade must exist and +# be owned by root. +# +# The tar file, upgrade.bin must be either in +# /var/volatile/flash-upgrade or +# /media/card/flash-upgrade +# +# Note that when this script is started, the +# tar file is already unpacked, since this script +# is in the tarball. + +# This script assumes that the rootfs and maybe /var +# are writable. For MTR, we may need to set +# root and var to read/write + +NAME=install.sh +echo "$NAME starting" + +umount_all() { + if [[ $1 == "error" ]] ; then + echo "Cannot continue" + err_leds + sleep 10 + fi + echo "Deactivating swap..." + swapoff -a + + # We leave /proc mounted. + echo "Unmounting local filesystems..." + grep -q /mnt/ram /proc/mounts && mount -o remount,ro /mnt/ram + umount -f -a -r > /dev/null 2>&1 + + mount -o remount,ro / + ${up_dir}/upgrade-reboot + + # Should not get here normally + echo "upgrade-reboot failed" + /sbin/reboot + exit 1 +} +err_leds() { + led_dir=/sys/class/leds + # blink all programmable LEDs except status + leds=$(ls $led_dir/ | grep -v status) + nleds=$(echo "$leds" | wc -w) + + # turn LEDs off + for led in $leds; do + echo "timer" > $led_dir/$led/trigger + echo 0 > $led_dir/$led/delay_off + done + + int=200 + total=$(( int * (nleds+1) )) + on=$(( total - int )) + off=$(( total - on )) + + # make a pattern + for led in $leds; do + echo "$on" > $led_dir/$led/delay_on + echo "$off" > $led_dir/$led/delay_off + done + sleep 5 +} +flash_dir="$1" +up_dir="${flash_dir}/flash-upgrade" +if ! [[ -d ${up_dir} ]] ; then + echo "\"${up_dir}\" is not present" + umount_all error +fi +echo "ls -l ${flash_dir}" +ls -l ${flash_dir} +echo "ls -l ${up_dir}" +ls -l "${up_dir}" +cd "${up_dir}" +if ! md5sum -c local.conf.md5 >/dev/null ; then + echo "md5sum of local.conf is bad" + umount_all error +fi + +# opkg needs /tmp, so recreate it. +# On a Conduit, this is always /var/volatile +mkdir -m 01777 /var/volatile/tmp +localcnf="${up_dir}/local.conf" +echo "Local configuration file: ${localcnf}" +echo mounts ... +cat /proc/mounts +echo "Update package list ... /usr/bin/opkg -f ${localcnf} update" +/usr/bin/opkg -f "${localcnf}" update +echo "List upgradable packages ... /usr/bin/opkg -f ${localcnf} list-upgradable" +/usr/bin/opkg -f "${localcnf}" list-upgradable +echo "Do package upgrade /usr/bin/opkg -f ${localcnf} upgrade" +/usr/bin/opkg -f "${localcnf}" upgrade +pkglist_file="install_list.txt" +if [[ -r ${pkglist_file} ]] ; then + if ! md5sum -c ${pkglist_file}.md5 ; then + echo "md5sum bad on ${pkglist_file}" + umount_all error + fi + OIFS="${IFS}" + IFS=$'\n' + for p in $(cat ${pkglist_file}) ; do + echo /usr/bin/opkg -f "${localcnf}" install $p + /usr/bin/opkg -f "${localcnf}" install $p + done + IFS="${OIFS}" +fi +echo "Rebooting..." + +umount_all ok +echo "upgrade-reboot failed" +exit 1 + |