3 [ "$1" = "nand" ] && exec /lib
/upgrade
/stage2
"$2" "$3"
6 .
/lib
/functions
/system.sh
9 RAMFS_COPY_BIN
="" # extra programs for temporary ramfs root
10 RAMFS_COPY_DATA
="" # extra data files
11 export MTD_CONFIG_ARGS
=""
16 export SAVE_PARTITIONS
=1
18 export CONF_BACKUP_LIST
=0
29 -i) export INTERACTIVE
=1;;
30 -v) export VERBOSE
="$(($VERBOSE + 1))";;
31 -q) export VERBOSE
="$(($VERBOSE - 1))";;
32 -n) export SAVE_CONFIG
=0;;
33 -c) export SAVE_OVERLAY
=1;;
34 -p) export SAVE_PARTITIONS
=0;;
35 -b|
--create-backup) export CONF_BACKUP
="$2" NEED_IMAGE
=1; shift;;
36 -r|
--restore-backup) export CONF_RESTORE
="$2" NEED_IMAGE
=1; shift;;
37 -l|
--list-backup) export CONF_BACKUP_LIST
=1; break;;
38 -f) export CONF_IMAGE
="$2"; shift;;
39 -F|
--force) export FORCE
=1;;
40 -T|
--test) export TEST
=1;;
41 -h|
--help) export HELP
=1; break;;
43 echo "Invalid option: $1"
51 export CONFFILES
=/tmp
/sysupgrade.conffiles
52 export CONF_TAR
=/tmp
/sysupgrade.tgz
56 [ -z "$IMAGE" -a -z "$NEED_IMAGE" -o $HELP -gt 0 ] && {
58 Usage: $0 [<upgrade-option>...] <image file or URL>
59 $0 [-q] [-i] <backup-command> <file>
62 -d <delay> add a delay before rebooting
63 -f <config> restore configuration from .tar.gz (file or url)
65 -c attempt to preserve all changed files in /etc/
66 -n do not save configuration over reflash
67 -p do not attempt to restore the partition table after flash.
69 Verify image and config .tar.gz but do not actually flash.
71 Flash image even if image checks fail, this is dangerous!
74 -h | --help display this help
77 -b | --create-backup <file>
78 create .tar.gz of files specified in sysupgrade.conf
79 then exit. Does not flash an image. If file is '-',
80 i.e. stdout, verbosity is set to 0 (i.e. quiet).
81 -r | --restore-backup <file>
82 restore a .tar.gz created with sysupgrade -b
83 then exit. Does not flash an image. If file is '-',
84 the archive is read from stdin.
86 list the files that would be backed up when calling
87 sysupgrade -b. Does not create a backup file.
93 [ -n "$IMAGE" -a -n "$NEED_IMAGE" ] && {
95 -b|--create-backup and -r|--restore-backup do not perform a firmware upgrade.
96 Do not specify both -b|-r and a firmware image.
101 # prevent messages from clobbering the tarball when using stdout
102 [ "$CONF_BACKUP" = "-" ] && export VERBOSE
=0
104 add_uci_conffiles
() {
106 ( find $
(sed -ne '/^[[:space:]]*$/d; /^#/d; p' \
107 /etc
/sysupgrade.conf
/lib
/upgrade
/keep.d
/* 2>/dev
/null
) \
108 -type f
-o -type l
2>/dev
/null
;
109 opkg list-changed-conffiles
) |
sort -u > "$file"
115 if [ -d /overlay
/upper
]; then
116 local overlaydir
="/overlay/upper"
118 local overlaydir
="/overlay"
120 find $overlaydir/etc
/ -type f
-o -type l |
sed \
121 -e 's,^/overlay\/upper/,/,' \
122 -e 's,^/overlay/,/,' \
123 -e '\,/META_[a-zA-Z0-9]*$,d' \
124 -e '\,/functions.sh$,d' \
125 -e '\,/[^/]*-opkg$,d' \
131 sysupgrade_image_check
="fwtool_check_image platform_check_image"
132 sysupgrade_pre_upgrade
="fwtool_pre_upgrade"
133 [ $SAVE_OVERLAY = 0 -o ! -d /overlay
/etc
] && \
134 sysupgrade_init_conffiles
="add_uci_conffiles" || \
135 sysupgrade_init_conffiles
="add_overlayfiles"
139 do_save_conffiles
() {
140 local conf_tar
="${1:-$CONF_TAR}"
142 [ -z "$(rootfs_type)" ] && {
143 echo "Cannot save config while running from ramdisk."
144 ask_bool
0 "Abort" && exit
148 run_hooks
"$CONFFILES" $sysupgrade_init_conffiles
149 ask_bool
0 "Edit config file list" && vi
"$CONFFILES"
151 v
"Saving config files..."
152 [ "$VERBOSE" -gt 1 ] && TAR_V
="v" || TAR_V
=""
153 tar c
${TAR_V}zf
"$conf_tar" -T "$CONFFILES" 2>/dev
/null
158 if [ $CONF_BACKUP_LIST -eq 1 ]; then
159 add_uci_conffiles
"$CONFFILES"
165 if [ -n "$CONF_BACKUP" ]; then
166 do_save_conffiles
"$CONF_BACKUP"
170 if [ -n "$CONF_RESTORE" ]; then
171 if [ "$CONF_RESTORE" != "-" ] && [ ! -f "$CONF_RESTORE" ]; then
172 echo "Backup archive '$CONF_RESTORE' not found."
176 [ "$VERBOSE" -gt 1 ] && TAR_V
="v" || TAR_V
=""
177 tar -C / -x${TAR_V}zf
"$CONF_RESTORE"
181 type platform_check_image
>/dev
/null
2>/dev
/null ||
{
182 echo "Firmware upgrade is not implemented for this platform."
188 wget
-O/tmp
/sysupgrade.img
"$IMAGE"
189 IMAGE
=/tmp
/sysupgrade.img
193 IMAGE
="$(readlink -f "$IMAGE")"
197 echo "Image file not found."
202 v
"Image not in /tmp, copying..."
203 cp -f "$IMAGE" /tmp
/sysupgrade.img
204 IMAGE
=/tmp
/sysupgrade.img
211 for check
in $sysupgrade_image_check; do
212 ( $check "$IMAGE" ) ||
{
213 if [ $FORCE -eq 1 ]; then
214 echo "Image check '$check' failed but --force given - will update anyway!"
217 echo "Image check '$check' failed."
223 if [ -n "$CONF_IMAGE" ]; then
224 case "$(get_magic_word $CONF_IMAGE cat)" in
228 echo "Invalid config file. Please use only .tar.gz files"
232 get_image
"$CONF_IMAGE" "cat" > "$CONF_TAR"
234 elif ask_bool
$SAVE_CONFIG "Keep config files over reflash"; then
235 [ $TEST -eq 1 ] || do_save_conffiles
238 [ $TEST -eq 1 ] ||
rm -f "$CONF_TAR"
242 if [ $TEST -eq 1 ]; then
246 if [ $SAVE_PARTITIONS -eq 0 ]; then
247 touch /tmp
/sysupgrade.always.overwrite.bootdisk.partmap
249 rm -f /tmp
/sysupgrade.always.overwrite.bootdisk.partmap
252 run_hooks
"" $sysupgrade_pre_upgrade
254 install_bin
/sbin
/upgraded
255 v
"Commencing upgrade. All shell sessions will be closed now."
256 ubus call system sysupgrade
"{
257 \"prefix\": \"$RAM_ROOT\",
258 \"path\": $(json_string "$IMAGE"),
259 \"command\": \". /lib/functions.sh; include /lib/upgrade; do_upgrade_stage2\"