blob: face06d1dfcf1ee64e407cc60cbf7e567b9442b2 [file] [log] [blame]
Milton D. Miller IId89d5e02016-01-20 14:57:54 -06001#!/bin/sh
2
3echo update: "$@"
4
5export PS1=update-sh#\
6# exec /bin/sh
7
8cd /
9if ! test -r /proc/mounts || ! test -f /proc/mounts
10then
11 mkdir -p /proc
12 mount -t proc proc proc
13fi
14if ! test -d /sys/class
15then
16 mkdir -p /sys
17 mount -t sysfs sys sys
18fi
19if ! test -c /dev/null
20then
21 mkdir -p /dev
22 mount -t devtmpfs dev dev
23fi
24while grep mtd /proc/mounts
25do
26 echo 1>&2 "Error: A mtd device is mounted."
27 sulogin
28 # exec /bin/sh
29done
30
31findmtd() {
32 m=$(grep -xl "$1" /sys/class/mtd/*/name)
33 m=${m%/name}
34 m=${m##*/}
35 echo $m
36}
37
Milton D. Miller IId89d5e02016-01-20 14:57:54 -060038rwfs=$(findmtd rwfs)
39
Milton Miller54d882e2016-02-05 12:07:53 -060040rwdev=/dev/mtdblock${rwfs#mtd}
Milton D. Miller IId89d5e02016-01-20 14:57:54 -060041rwfst=ext4
Milton Miller54d882e2016-02-05 12:07:53 -060042rwopts=rw
43rorwopts=ro${rwopts#rw}
44
45rwdir=rw
46upper=$rwdir/cow
47save=save/${upper##*/}
Milton D. Miller IId89d5e02016-01-20 14:57:54 -060048
49if test -n "$rwfs" && test -s whitelist
50then
51
Milton Miller54d882e2016-02-05 12:07:53 -060052 mkdir -p $rwdir
53 mount $rwdev $rwdir -t $rwfst -o $rorwopts
Milton D. Miller IId89d5e02016-01-20 14:57:54 -060054
55 while read f
56 do
Milton Miller54d882e2016-02-05 12:07:53 -060057 if ! test -e $upper/$f
Milton D. Miller IId89d5e02016-01-20 14:57:54 -060058 then
59 continue
60 fi
Milton Miller54d882e2016-02-05 12:07:53 -060061 d="$save/$f"
Milton D. Miller IId89d5e02016-01-20 14:57:54 -060062 mkdir -p "${d%/*}"
Milton Miller54d882e2016-02-05 12:07:53 -060063 cp -rp $upper/$f "${d%/*}/"
Milton D. Miller IId89d5e02016-01-20 14:57:54 -060064 done < whitelist
65
Milton Miller54d882e2016-02-05 12:07:53 -060066 umount $rwdir
Milton D. Miller IId89d5e02016-01-20 14:57:54 -060067fi
68
Milton Millerd93b48e2016-02-05 11:19:58 -060069image=/run/initramfs/image-
70for f in $image*
Milton D. Miller IId89d5e02016-01-20 14:57:54 -060071do
Milton Millerd93b48e2016-02-05 11:19:58 -060072 m=$(findmtd ${f#$image})
Milton D. Miller IId89d5e02016-01-20 14:57:54 -060073 if test -z "$m"
74 then
Milton Miller54d882e2016-02-05 12:07:53 -060075 echo 1>&2 "Unable to find mtd partiton for ${f##*/}."
Milton D. Miller IId89d5e02016-01-20 14:57:54 -060076 exec /bin/sh
77 fi
78done
79
Milton Millerd93b48e2016-02-05 11:19:58 -060080for f in $image*
Milton D. Miller IId89d5e02016-01-20 14:57:54 -060081do
Milton Millerd93b48e2016-02-05 11:19:58 -060082 m=$(findmtd ${f#$image})
83 echo "Updating ${f#$image}..."
Milton D. Miller IId89d5e02016-01-20 14:57:54 -060084 # flasheraseall /dev/$m && dd if=$f of=/dev/$m
85 flashcp -v $f /dev/$m
86done
87
Milton Miller54d882e2016-02-05 12:07:53 -060088if test -d $save
Milton D. Miller IId89d5e02016-01-20 14:57:54 -060089then
Milton Miller54d882e2016-02-05 12:07:53 -060090 mount $rwdev $rwdir -t $rwfst -o $rwopts
91 cp -rp $save/. $upper/
92 umount $rwdir
Milton D. Miller IId89d5e02016-01-20 14:57:54 -060093fi
94
Milton Miller39b6faa2016-02-05 13:56:18 -060095exit
Milton D. Miller IId89d5e02016-01-20 14:57:54 -060096
Milton Miller39b6faa2016-02-05 13:56:18 -060097# NOT REACHED without edit
98# NOT REACHED without edit
Milton D. Miller IId89d5e02016-01-20 14:57:54 -060099
Milton Miller39b6faa2016-02-05 13:56:18 -0600100echo "Flash completed. Inspect, cleanup and reboot -f to continue."
Milton D. Miller IId89d5e02016-01-20 14:57:54 -0600101
102export PS1=update-sh#\
103exec /bin/sh