dce388fdc7
c3cdc53164 ag71xx: Fix rx ring buffer stall on small packets flood on qca956x and qca953x. e07ee06aad ar71xx: QCA956X: add missing register 7bc25dfa63 mvebu: fix mvneta build with Linux 4.4.110 541a1a7ff5 lantiq: activate noise margin delta for VDSL too dea8979a81 Lantiq: make possible to tweak DSL SRN from UCI 9934231670 libubox: update to latest lede-17.01 git HEAD 7f5a040359 kernel: update kernel 4.4 to version 4.4.110 ddedcb19e5 brcm47xx: relocate the stack in loader da43069f5b brcm47xx: relocate loader to higher address f19416ae9d fstools: backport fix from master branch 55c23e44f4 procd: update to latest git HEAD ffbbcc9b34 brcm47xx: image: build firmware for Asus WL-500g Deluxe 0426596453 Revert "iptables: fix nftables compile issue (FS#711)" da126d557c iptables: fix nftables compile issue (FS#711) 473e994571 rpcd: backport version 2017-12-07 from master b833944eb2 uci: update to HEAD of lede-17.01 branch dca4dfacf2 iproute2: cake: fix patch format error ee55629a30 kernel: bump 4.4 to 4.4.108 for 17.01 c4e9487cf5 iproute2: cake: support new operating modes for 17.01 4f1dca9eca kmod-sched-cake: bump to latest bake of cake for 17.01 959a49dc15 ramips: fix widora neo diag led a1908023cc base-files: fix logic when to show failsafe banner 1c9299877b base-files: set FAILSAFE in /etc/profile when /tmp/.failsafe exists 2603c85060 wireguard: bump to 20171221 f8a441e020 kernel: bump 4.4 to 4.4.107 ceea0ac25d wireguard: bump to 20171211 ebb54740c7 brcm47xx: remove target specific network preinit config b41d154f50 rules.mk: export TMPDIR e719a08cc1 usbutils: Update usb.ids file to latest 4cfcfecf76 hostapd: remove unused local var declaration 796bc21023 hostapd: don't set htmode for wpa_supplicant 50147d41b9 libnl-tiny: use fixed message size instead of using the page size 0625814426 packages: nvram: fix memory leak in _nvram_free 0f175041ad mac80211: don't pass the hostapd ctrl iface in adhoc 05f0fac189 hostapd: explicitly set beacon interval for wpa_supplicant 7f78a86254 hostapd: set mcast_rate in mesh mode c315843f88 igmpproxy: remove firewall rules when service is stopped 91e48304a9 openvpn: add support to start/stop single instances e5c284bb81 package/elfutils: add CFLAG -Wno-format-nonliteral dde29b2b01 tools/coreutils: install readlink 2f75641b1f uhttpd: fix query string handling 79024cd3be openssl: fix cryptodev config dependency bead60c2d3 uqmi: replace legacy command invoke with newer type 5872c19c63 procd: Always tell cmake whether to include seccomp support or not cd901ef1a6 libunwind: disable building with ssp 1aedf2f149 tools/squashfs: use host cflags 7fa70027d4 ppp: make the patches apply correctly again d63eb474b3 ppp: fix compile warning 9bd667fc24 dropbear: fix PKG_CONFIG_DEPENDS 9d1bfb8f4d dropbear: make ssh compression support configurable ed4f4f1a8e procd: Install seccomp-trace symlink 77e79b2dd0 openvpn: update to 2.4.4 5beb0abc83 build: remove @ as it's causing an error eff1f7e7ef usbutils: avoid duplicating the git revision 9cf371c1f4 dnsmasq: Pass TARGET_CPPFLAGS to Makefile 2f80d84638 wwan: json format in some modem definitions c61cf4a447 base-files: add /etc/profile.d to conffiles bdc998c696 base-files: order conffiles alphabetically c58e824acc procd: mdns: Support txt values with spaces aaa73fea36 ar71xx: fix switch port numbering on RB750r2 and RB750UPr2 b69ea02a00 scripts/dowload.pl: use glob to expand target dir 80a22eee4b samba36: Remove syslog and load printers lines. 71797b6eca samba36: Don't resolve interfaces. 1458bc2d9c samba36: Remove guest ok since LuCI configures it. f0065554b2 config: make CONFIG_ALL_* select other CONIFG_ALL_* options 2b88309335 nvram: add help message for nvram magic not found 118a2ea0bc nvram: improve argument check when program start c446ee4ad4 nvram: add usage() function 9e84d333b1 nvram: fix memory leak 3b6b892d67 ca-certificates: Update to 20170717 23b9dc2eca base-files: drop unused preinit_echo function ca7c9db47f tools/pkg-config: Update to 0.29.2 75d8127338 base-files: suppress uci not found output in login.sh b616aa6db7 scripts/package-metadata.pl: inhibit compile deps on missing build types 2e1a87a3e1 build: bundle-libraries.sh: do not override argv[0] in inner exec calls a37f8b0c6e samba36: Remove legacy options 89c4f47caa scripts/download.pl: Adjust URLs 338968a170 build: fix invocation of bundled ld.so in SDK and Imagebuilder 0a976262a5 kmod-sched-cake: drop maintainer 610e2afdcc zlib: use default Build/Configure rule cf11a41af6 lzo: use default Build/Configure rule c86490605c netfilter: add iptables-mod-rpfilter package ea23ba9a25 bzip2: add symlink to binary d413c75d24 dropbear: add option to set max auth tries 8693ab5152 dropbear: server support option '-T' max auth tries 0e6a6c8487 hostapd: configure NAS ID regardless of encryption ef3649d90e hostapd: add acct_interval option 3027a68093 valgrind: bump to 3.13.0 3129db331c busybox: backport 'ip rule suppress_{prefixlength, ifgroup}' 86158ad37d libunwind: update to version 1.2.1 59004433e9 imagebuilder: don't rewrite package list output 74eeb07817 imagebuilder: clean package_list 7f3f2bc03b build: remove old kernel-headers build directories c7234e3036 imagebuilder: add package_list function 9c3e4b5434 base-files: board.json's switch reset means existence, not argument 7d1f4073ce gdb: remove Build/Compile rule ; default one works 9a99039989 rb532: enable high-res timers, refresh kernel config e802cbfc25 xburst: enable high-res timers, refresh kernel config e01367e3af kernel: add CONFIG_SCHED_HRTICK=y to the generic config 6e1e2e7b96 package/grub2: update to 2.02 13a5568d6e ip17xx: correct aneg_done return value 816fb3433b mvswitch: fix autonegotiation issue 41ee45428b ppp: propagate master firewall zone to dynamic slave interface a44c44077e usbmode: remove devices with unsupported modes e8bd0a606a tar: override symlink permissions 59a1c1675d tools/sparse: Update to snapshot 2017-03-31 a6e5943a2a elfutils: Pass -Wno-unused-result to silence warnings as errors 08070221ed gcc: fix documentation entries added by 910-mbsd_multi.patch ef43c04c34 scripts/download.pl: print the command used to download files 6e09b20563 tools/libressl: update to 2.5.4 08be74f699 tools/isl: update to 0.18 26ea59cd01 lldpd: bump to 0.9.7 444b64f533 libunwind: update to 1.2 e5612d6640 lantiq: spi: double time out tolerance 28c350f2f0 base-files: fix default procd reload 108a42bcba ramips: support jumbo frame on mt7621 up to 2k 8d4c047dd1 lldpd: drop specific respawn params [use system-wide] 8ee15ed61a elfutils: bump to 0.169 9754a9c606 devel/trace-cmd: Update to 2.6.1 79def69047 comgt-3g: enable modem before to setpin 070463fb61 devel/strace: Update to 4.16 67caf6bbce network/utils/ipset: Update to 6.32 f0a493160c mac80211: gracefully handle preexisting VIF 827f108b42 scripts: Probe external toolchains for libthread-db bb9eb2c96e build: new fixes for symlinked .config handling 4607007a86 build: allow val.% targets to bypass the prepare steps 90575776b7 x86: keep /boot mounted for kexec 6b9eb0c73a hostapd: fix reload frequency change patch 040ff6fdbd build: remove absolute path to perl and replace with /usr/bin/env perl 98588273b1 kernel: allow selecting RTC drivers on targets without explicit RTC support f30114c7c4 dropbear: fix procd interface trigger install 3e7f191008 include/packages-defaults.mk: Remove LARGEFILE option a1392e08c5 netifd: return error status in reload_service 10182cb2c6 grub2: update to 2.02~rc2 38ea91ea9a base-files: use restart if no reload hook for service 9b24d99b91 iproute2: add libgenl.h and ll_map.h to InstallDev section 94597229c3 busybox: fix installation of cron and ntpd scripts in the default config 9ce30f7175 kernel: move initramfs's init script out of base-files c8a0f3aa29 target.mk: check that CPU_TYPE has known CPU_CFLAGS mapping 977db9f08a scripts/download.pl: fix error message on hash mismatch 7fb03d9610 netifd: fix fw3 warnings in dhcp script f69d73f1b2 build: allow specifying flow-control to grub on serial console 91821c8c0b kexec-tools: get kexec running on MUSL and x86 hardware affff02798 busybox: don't install NTP scripts if NTP isn't configured 7ccfa826ee ar8327: Add workarounds for AR8337 switch. 0aafbf6c00 build: fix STAMP_PREPARED with quilt 80304ace58 lantiq: remove lantiq_board_model, it is unused 8be5b12ea1 lantiq: remove lantiq_board_name, use the generic function instead 0f0d742ae3 lantiq: move lantiq_board_detect() to 03_preinit_board.sh f173464f13 base-files: add generic board_name function to functions.sh 62a8252a0f mac80211: Fix race condition leading to wifi interfaces not coming up at boot sometimes. 5f03ce1213 scripts: only generate config from feature flag if fully match f7f69130e5 lzo: Update to 2.10 6ba0cc14e9 tools/coreutils: Update to 8.27 100553d605 tools/libressl: Update to 2.5.1 25fe034861 tools/dosfstools: Update to 4.1 ed4976d884 tools/sed: Update to 4.4 7263e3cdca lldpd: bump to 0.9.6 3225fbfcbf x86: image: drop duplicated copy of bzImage into vmlinuz 37aae44a47 libnl: Fix building with uClibc 950439234e toolchain: add musl libc.so to external toolchain cfb5a550e4 iwcap: fix handling kill signal during dump 1411493569 x86: image: drop unneeded grub call 58e0c0feec x86: image: drop unused ROOTDELAY variable 05f0b8d18b ccache: update to 3.3.4 15efa09507 base-files: add submission service port 56b9f0ffc0 procd.sh: use parameterized respawn values 28c9731984 toolchain: Allow external toolchains to specify libthread-db 2dd9b62f82 rssileds: Fix build with external toolchains 2d31ec4c1b adb: Also pass TARGET_CPPFLAGS ec395eeb17 swconfig: Link with libubox c6dd059a9a px5g: Fix TARGET_LDFLAGS and add TARGET_CPPFLAGS 12b811a609 omcproxy: Update to latest HEAD 1e3ff02ea5 bsdiff: Also pass down TARGET_CPPFLAGS 051a33e7c9 thc-ipv6: Allow overriding CFLAGS a91d8dd162 tools/m4: update 1.4.18 acd481470c build: get rid of FIND_L from host.mk 11cd6077ba build: unsilence move command 903a404663 build: skip headers install and config on make target/linux/prepare a7fc27edce build: make Host/Install/Default use Host/Compile/Default with an extra argument 94f079e338 build: Pass -iremap gcc option as a single argument 3056122bf7 toolchain/gcc: parallelize make install a33b0ced78 toolchain/musl: parallelize make install 1d0f7e3136 imagebuilder: make submake invocations less verbose bdb05f5ef5 gcc: remove obsolete uclibc patch 90a43e508e toolchain/gcc: reduce source directory size by about 420 MB 82615922b0 bcm53xx: suppress osafeloader info error messages during flashing c566a9e563 toolchain: Broaden the executable loader pattern 3387158e45 build: Suffix build directory with _$(LIBC) for external toolchains 2428b6d6b6 tools/sstrip: Fix compile under standard linux. 50b478956a openssl: update to 1.0.2n 135aa3ba7e base-files: upgrade: make get_partitions() endian agnostic 207bcea1de cyassl: update to wolfssl 3.12.2 (1 CVE) 3bb881862b mdadm: fix parameter quoting 6c1b6e8221 mdadm: Fix config generation 4fc0fb3ca3 mdadm: Do not check RUN_DIR 157b892994 kernel: remove out of tree direct-io disable hack adc9f935c3 utils/mdadm: Update to 4.0 8bf67f63b9 mdadm: extend uci config support 4af145ea67 rules.mk: make PKG_CONFIG_DEPENDS properly track string values 2b664499cd kernel: bump 4.4 to 4.4.103 for 17.01 ed82c52a4a uqmi: also try newer pin verification b41a2e646e opkg: bump to version 2017-12-08 f5f5f583f9 hostapd: backport fix for wnm_sleep_mode=0 19ebc19f54 hostapd: Expose the tdls_prohibit option to UCI 3590316121 dnsmasq: backport infinite dns retries fix 060b7f1fbb curl: apply CVE 2017-8816 and 2017-8817 security patches 4b5861c47d mt76: update to the latest version f19d47f848 tools: patch various gnu tools for macOS 10.13 e5a10bc0fc samba36: backport an upstream fix for an information leak (CVE-2017-15275) d77fe9219a ramips: backport MT7628 pinmux fixes 9601e6a0e2 ramips: add missing reset button for Nexx WT1520 0946ec0f46 wireguard: bump to snapshot 20171127
477 lines
12 KiB
Diff
477 lines
12 KiB
Diff
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
|
Date: Sat, 22 Apr 2017 00:54:50 +0200
|
|
Subject: base-files: always use staged sysupgrade
|
|
|
|
Support for the -d and -p options is dropped; it may be added again at some
|
|
point by adding these flags to the ubus sysupgrade call.
|
|
|
|
A downside of this is that we get a lot less information about the progress
|
|
of the upgrade: as soon as the actual upgrade starts, all shell sessions
|
|
are killed to allow unmounting the root filesystem.
|
|
|
|
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
|
|
|
|
diff --git a/package/base-files/files/lib/upgrade/common.sh b/package/base-files/files/lib/upgrade/common.sh
|
|
index 3ddd1e74657e0f9893533f917cb56ed0c2e3196c..6f8e408401906666db945a981100962139fc7d32 100644
|
|
--- a/package/base-files/files/lib/upgrade/common.sh
|
|
+++ b/package/base-files/files/lib/upgrade/common.sh
|
|
@@ -56,7 +56,6 @@ run_ramfs() { # <command> [...]
|
|
/bin/rm /usr/bin/basename /bin/kill /bin/chmod /usr/bin/find \
|
|
/bin/mknod
|
|
|
|
- install_bin /bin/uclient-fetch /bin/wget
|
|
install_bin /sbin/mtd
|
|
install_bin /sbin/mount_root
|
|
install_bin /sbin/snapshot
|
|
@@ -96,51 +95,37 @@ run_ramfs() { # <command> [...]
|
|
exec /bin/busybox ash -c "$*"
|
|
}
|
|
|
|
-kill_remaining() { # [ <signal> ]
|
|
+kill_remaining() { # [ <signal> [ <loop> ] ]
|
|
local sig="${1:-TERM}"
|
|
+ local loop="${2:-0}"
|
|
+ local run=true
|
|
+ local stat
|
|
+
|
|
echo -n "Sending $sig to remaining processes ... "
|
|
|
|
- local my_pid=$$
|
|
- local my_ppid=$(cut -d' ' -f4 /proc/$my_pid/stat)
|
|
- local my_ppisupgraded=
|
|
- grep -q upgraded /proc/$my_ppid/cmdline >/dev/null && {
|
|
- local my_ppisupgraded=1
|
|
- }
|
|
-
|
|
- local stat
|
|
- for stat in /proc/[0-9]*/stat; do
|
|
- [ -f "$stat" ] || continue
|
|
-
|
|
- local pid name state ppid rest
|
|
- read pid name state ppid rest < $stat
|
|
- name="${name#(}"; name="${name%)}"
|
|
-
|
|
- local cmdline
|
|
- read cmdline < /proc/$pid/cmdline
|
|
-
|
|
- # Skip kernel threads
|
|
- [ -n "$cmdline" ] || continue
|
|
-
|
|
- if [ $$ -eq 1 ] || [ $my_ppid -eq 1 ] && [ -n "$my_ppisupgraded" ]; then
|
|
- # Running as init process, kill everything except me
|
|
- if [ $pid -ne $$ ] && [ $pid -ne $my_ppid ]; then
|
|
- echo -n "$name "
|
|
- kill -$sig $pid 2>/dev/null
|
|
- fi
|
|
- else
|
|
- case "$name" in
|
|
- # Skip essential services
|
|
- *procd*|*ash*|*init*|*watchdog*|*ssh*|*dropbear*|*telnet*|*login*|*hostapd*|*wpa_supplicant*|*nas*|*relayd*) : ;;
|
|
-
|
|
- # Killable process
|
|
- *)
|
|
- if [ $pid -ne $$ ] && [ $ppid -ne $$ ]; then
|
|
- echo -n "$name "
|
|
- kill -$sig $pid 2>/dev/null
|
|
- fi
|
|
- ;;
|
|
- esac
|
|
- fi
|
|
+ while $run; do
|
|
+ run=false
|
|
+ for stat in /proc/[0-9]*/stat; do
|
|
+ [ -f "$stat" ] || continue
|
|
+
|
|
+ local pid name state ppid rest
|
|
+ read pid name state ppid rest < $stat
|
|
+ name="${name#(}"; name="${name%)}"
|
|
+
|
|
+ # Skip PID1, ourself and our children
|
|
+ [ $pid -ne 1 -a $pid -ne $$ -a $ppid -ne $$ ] || continue
|
|
+
|
|
+ local cmdline
|
|
+ read cmdline < /proc/$pid/cmdline
|
|
+
|
|
+ # Skip kernel threads
|
|
+ [ -n "$cmdline" ] || continue
|
|
+
|
|
+ echo -n "$name "
|
|
+ kill -$sig $pid 2>/dev/null
|
|
+
|
|
+ [ $loop -eq 1 ] && run=true
|
|
+ done
|
|
done
|
|
echo ""
|
|
}
|
|
@@ -175,28 +160,31 @@ v() {
|
|
[ "$VERBOSE" -ge 1 ] && echo "$@"
|
|
}
|
|
|
|
+json_string() {
|
|
+ local v="$1"
|
|
+ v="${v//\\/\\\\}"
|
|
+ v="${v//\"/\\\"}"
|
|
+ echo "\"$v\""
|
|
+}
|
|
+
|
|
rootfs_type() {
|
|
/bin/mount | awk '($3 ~ /^\/$/) && ($5 !~ /rootfs/) { print $5 }'
|
|
}
|
|
|
|
get_image() { # <source> [ <command> ]
|
|
local from="$1"
|
|
- local conc="$2"
|
|
- local cmd
|
|
-
|
|
- case "$from" in
|
|
- http://*|ftp://*) cmd="wget -O- -q";;
|
|
- *) cmd="cat";;
|
|
- esac
|
|
- if [ -z "$conc" ]; then
|
|
- local magic="$(eval $cmd \"$from\" 2>/dev/null | dd bs=2 count=1 2>/dev/null | hexdump -n 2 -e '1/1 "%02x"')"
|
|
+ local cat="$2"
|
|
+
|
|
+ if [ -z "$cat" ]; then
|
|
+ local magic="$(dd if="$from" bs=2 count=1 2>/dev/null | hexdump -n 2 -e '1/1 "%02x"')"
|
|
case "$magic" in
|
|
- 1f8b) conc="zcat";;
|
|
- 425a) conc="bzcat";;
|
|
+ 1f8b) cat="zcat";;
|
|
+ 425a) cat="bzcat";;
|
|
+ *) cat="cat";;
|
|
esac
|
|
fi
|
|
|
|
- eval "$cmd \"$from\" 2>/dev/null ${conc:+| $conc}"
|
|
+ $cat "$from" 2>/dev/null
|
|
}
|
|
|
|
get_magic_word() {
|
|
@@ -328,12 +316,14 @@ default_do_upgrade() {
|
|
fi
|
|
}
|
|
|
|
-do_upgrade() {
|
|
+do_upgrade_stage2() {
|
|
v "Performing system upgrade..."
|
|
- if type 'platform_do_upgrade' >/dev/null 2>/dev/null; then
|
|
- platform_do_upgrade "$ARGV"
|
|
+ if [ -n "$do_upgrade" ]; then
|
|
+ $do_upgrade "$IMAGE"
|
|
+ elif type 'platform_do_upgrade' >/dev/null 2>/dev/null; then
|
|
+ platform_do_upgrade "$IMAGE"
|
|
else
|
|
- default_do_upgrade "$ARGV"
|
|
+ default_do_upgrade "$IMAGE"
|
|
fi
|
|
|
|
if [ "$SAVE_CONFIG" -eq 1 ] && type 'platform_copy_config' >/dev/null 2>/dev/null; then
|
|
@@ -341,12 +331,11 @@ do_upgrade() {
|
|
fi
|
|
|
|
v "Upgrade completed"
|
|
- [ -n "$DELAY" ] && sleep "$DELAY"
|
|
- ask_bool 1 "Reboot" && {
|
|
- v "Rebooting system..."
|
|
- umount -a
|
|
- reboot -f
|
|
- sleep 5
|
|
- echo b 2>/dev/null >/proc/sysrq-trigger
|
|
- }
|
|
+ sleep 1
|
|
+
|
|
+ v "Rebooting system..."
|
|
+ umount -a
|
|
+ reboot -f
|
|
+ sleep 5
|
|
+ echo b 2>/dev/null >/proc/sysrq-trigger
|
|
}
|
|
diff --git a/package/base-files/files/lib/upgrade/nand.sh b/package/base-files/files/lib/upgrade/nand.sh
|
|
index 6bd2005344c081df20e5a330a69e49e37225c39f..1e69c8f9657b39adf2a2c33bd9bac9303bcbc3d7 100644
|
|
--- a/package/base-files/files/lib/upgrade/nand.sh
|
|
+++ b/package/base-files/files/lib/upgrade/nand.sh
|
|
@@ -283,7 +283,16 @@ nand_upgrade_tar() {
|
|
}
|
|
|
|
# Recognize type of passed file and start the upgrade process
|
|
-nand_do_upgrade_stage2() {
|
|
+nand_do_upgrade() {
|
|
+ if [ -n "$IS_PRE_UPGRADE" ]; then
|
|
+ # Previously, nand_do_upgrade was called from the platform_pre_upgrade
|
|
+ # hook; this piece of code handles scripts that haven't been
|
|
+ # updated. All scripts should gradually move to call nand_do_upgrade
|
|
+ # from platform_do_upgrade instead.
|
|
+ export do_upgrade=nand_do_upgrade
|
|
+ return
|
|
+ fi
|
|
+
|
|
local file_type=$(identify $1)
|
|
|
|
if type 'platform_nand_pre_upgrade' >/dev/null 2>/dev/null; then
|
|
@@ -299,45 +308,6 @@ nand_do_upgrade_stage2() {
|
|
esac
|
|
}
|
|
|
|
-nand_upgrade_stage2() {
|
|
- [ $1 = "nand" ] && {
|
|
- [ -f "$2" ] && {
|
|
- touch /tmp/sysupgrade
|
|
-
|
|
- killall -9 telnetd
|
|
- killall -9 dropbear
|
|
- killall -9 ash
|
|
-
|
|
- kill_remaining TERM
|
|
- sleep 3
|
|
- kill_remaining KILL
|
|
-
|
|
- sleep 1
|
|
-
|
|
- if [ -n "$(rootfs_type)" ]; then
|
|
- v "Switching to ramdisk..."
|
|
- run_ramfs ". /lib/functions.sh; include /lib/upgrade; nand_do_upgrade_stage2 $2"
|
|
- else
|
|
- nand_do_upgrade_stage2 $2
|
|
- fi
|
|
- return 0
|
|
- }
|
|
- echo "Nand upgrade failed"
|
|
- exit 1
|
|
- }
|
|
-}
|
|
-
|
|
-nand_upgrade_stage1() {
|
|
- [ -f /tmp/sysupgrade-nand-path ] && {
|
|
- path="$(cat /tmp/sysupgrade-nand-path)"
|
|
- [ "$SAVE_CONFIG" != 1 -a -f "$CONF_TAR" ] &&
|
|
- rm $CONF_TAR
|
|
-
|
|
- ubus call system nandupgrade "{\"prefix\": \"$RAM_ROOT\", \"path\": \"$path\" }"
|
|
- exit 0
|
|
- }
|
|
-}
|
|
-
|
|
# Check if passed file is a valid one for NAND sysupgrade. Currently it accepts
|
|
# 3 types of files:
|
|
# 1) UBI - should contain an ubinized image, header is checked for the proper
|
|
@@ -364,13 +334,3 @@ nand_do_platform_check() {
|
|
|
|
return 0
|
|
}
|
|
-
|
|
-# Start NAND upgrade process
|
|
-#
|
|
-# $(1): file to be used for upgrade
|
|
-nand_do_upgrade() {
|
|
- echo -n $1 > /tmp/sysupgrade-nand-path
|
|
- install_bin /sbin/upgraded
|
|
- ln -s "$RAM_ROOT"/sbin/upgraded /tmp/upgraded
|
|
- nand_upgrade_stage1
|
|
-}
|
|
diff --git a/package/base-files/files/lib/upgrade/stage2 b/package/base-files/files/lib/upgrade/stage2
|
|
new file mode 100755
|
|
index 0000000000000000000000000000000000000000..4e2aa3a23c3bab07a795762a30a4d4f701081934
|
|
--- /dev/null
|
|
+++ b/package/base-files/files/lib/upgrade/stage2
|
|
@@ -0,0 +1,50 @@
|
|
+#!/bin/sh
|
|
+
|
|
+. /lib/functions.sh
|
|
+. /lib/functions/system.sh
|
|
+
|
|
+export IMAGE="$1"
|
|
+COMMAND="$2"
|
|
+
|
|
+export ARGV="$IMAGE"
|
|
+export ARGC=1
|
|
+
|
|
+export SAVE_CONFIG=1
|
|
+export SAVE_PARTITIONS=1
|
|
+
|
|
+export INTERACTIVE=0
|
|
+export VERBOSE=1
|
|
+export CONFFILES=/tmp/sysupgrade.conffiles
|
|
+export CONF_TAR=/tmp/sysupgrade.tgz
|
|
+
|
|
+
|
|
+[ -f "$CONF_TAR" ] || export SAVE_CONFIG=0
|
|
+[ -f /tmp/sysupgrade.always.overwrite.bootdisk.partmap ] && export SAVE_PARTITIONS=0
|
|
+
|
|
+include /lib/upgrade
|
|
+
|
|
+
|
|
+killall -9 telnetd
|
|
+killall -9 dropbear
|
|
+killall -9 ash
|
|
+
|
|
+kill_remaining TERM
|
|
+sleep 3
|
|
+kill_remaining KILL 1
|
|
+
|
|
+sleep 1
|
|
+
|
|
+
|
|
+if [ -n "$IMAGE" ] && type 'platform_pre_upgrade' >/dev/null 2>/dev/null; then
|
|
+ IS_PRE_UPGRADE=1 platform_pre_upgrade "$IMAGE"
|
|
+
|
|
+ # Needs to be unset again because of busybox weirdness ...
|
|
+ IS_PRE_UPGRADE=
|
|
+fi
|
|
+
|
|
+if [ -n "$(rootfs_type)" ]; then
|
|
+ echo "Switching to ramdisk..."
|
|
+ run_ramfs "$COMMAND"
|
|
+else
|
|
+ exec /bin/busybox ash -c "$COMMAND"
|
|
+fi
|
|
diff --git a/package/base-files/files/sbin/sysupgrade b/package/base-files/files/sbin/sysupgrade
|
|
index c095ca81c50c71021af2dc04a561ac22f6b7442b..2d67371ef74b4b970076a069e97f4fd6a1e0bc95 100755
|
|
--- a/package/base-files/files/sbin/sysupgrade
|
|
+++ b/package/base-files/files/sbin/sysupgrade
|
|
@@ -1,4 +1,7 @@
|
|
#!/bin/sh
|
|
+
|
|
+[ "$1" = "nand" ] && exec /lib/upgrade/stage2 "$2" "$3"
|
|
+
|
|
. /lib/functions.sh
|
|
. /lib/functions/system.sh
|
|
|
|
@@ -11,7 +14,6 @@ export VERBOSE=1
|
|
export SAVE_CONFIG=1
|
|
export SAVE_OVERLAY=0
|
|
export SAVE_PARTITIONS=1
|
|
-export DELAY=
|
|
export CONF_IMAGE=
|
|
export CONF_BACKUP_LIST=0
|
|
export CONF_BACKUP=
|
|
@@ -25,7 +27,6 @@ export TEST=0
|
|
while [ -n "$1" ]; do
|
|
case "$1" in
|
|
-i) export INTERACTIVE=1;;
|
|
- -d) export DELAY="$2"; shift;;
|
|
-v) export VERBOSE="$(($VERBOSE + 1))";;
|
|
-q) export VERBOSE="$(($VERBOSE - 1))";;
|
|
-n) export SAVE_CONFIG=0;;
|
|
@@ -50,10 +51,9 @@ done
|
|
export CONFFILES=/tmp/sysupgrade.conffiles
|
|
export CONF_TAR=/tmp/sysupgrade.tgz
|
|
|
|
-export ARGV="$*"
|
|
-export ARGC="$#"
|
|
+IMAGE="$1"
|
|
|
|
-[ -z "$ARGV" -a -z "$NEED_IMAGE" -o $HELP -gt 0 ] && {
|
|
+[ -z "$IMAGE" -a -z "$NEED_IMAGE" -o $HELP -gt 0 ] && {
|
|
cat <<EOF
|
|
Usage: $0 [<upgrade-option>...] <image file or URL>
|
|
$0 [-q] [-i] <backup-command> <file>
|
|
@@ -90,7 +90,7 @@ EOF
|
|
exit 1
|
|
}
|
|
|
|
-[ -n "$ARGV" -a -n "$NEED_IMAGE" ] && {
|
|
+[ -n "$IMAGE" -a -n "$NEED_IMAGE" ] && {
|
|
cat <<-EOF
|
|
-b|--create-backup and -r|--restore-backup do not perform a firmware upgrade.
|
|
Do not specify both -b|-r and a firmware image.
|
|
@@ -136,14 +136,13 @@ sysupgrade_pre_upgrade="fwtool_pre_upgrade"
|
|
|
|
include /lib/upgrade
|
|
|
|
-[ "$1" = "nand" ] && nand_upgrade_stage2 $@
|
|
-
|
|
do_save_conffiles() {
|
|
local conf_tar="${1:-$CONF_TAR}"
|
|
|
|
[ -z "$(rootfs_type)" ] && {
|
|
echo "Cannot save config while running from ramdisk."
|
|
ask_bool 0 "Abort" && exit
|
|
+ rm -f "$conf_tar"
|
|
return 0
|
|
}
|
|
run_hooks "$CONFFILES" $sysupgrade_init_conffiles
|
|
@@ -184,8 +183,33 @@ type platform_check_image >/dev/null 2>/dev/null || {
|
|
exit 1
|
|
}
|
|
|
|
+case "$IMAGE" in
|
|
+ http://*)
|
|
+ wget -O/tmp/sysupgrade.img "$IMAGE"
|
|
+ IMAGE=/tmp/sysupgrade.img
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+IMAGE="$(readlink -f "$IMAGE")"
|
|
+
|
|
+case "$IMAGE" in
|
|
+ '')
|
|
+ echo "Image file not found."
|
|
+ exit 1
|
|
+ ;;
|
|
+ /tmp/*) ;;
|
|
+ *)
|
|
+ v "Image not in /tmp, copying..."
|
|
+ cp -f "$IMAGE" /tmp/sysupgrade.img
|
|
+ IMAGE=/tmp/sysupgrade.img
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+export ARGV="$IMAGE"
|
|
+export ARGC=1
|
|
+
|
|
for check in $sysupgrade_image_check; do
|
|
- ( eval "$check \"\$ARGV\"" ) || {
|
|
+ ( $check "$IMAGE" ) || {
|
|
if [ $FORCE -eq 1 ]; then
|
|
echo "Image check '$check' failed but --force given - will update anyway!"
|
|
break
|
|
@@ -211,6 +235,7 @@ elif ask_bool $SAVE_CONFIG "Keep config files over reflash"; then
|
|
[ $TEST -eq 1 ] || do_save_conffiles
|
|
export SAVE_CONFIG=1
|
|
else
|
|
+ [ $TEST -eq 1 ] || rm -f "$CONF_TAR"
|
|
export SAVE_CONFIG=0
|
|
fi
|
|
|
|
@@ -218,28 +243,18 @@ if [ $TEST -eq 1 ]; then
|
|
exit 0
|
|
fi
|
|
|
|
-run_hooks "" $sysupgrade_pre_upgrade
|
|
-
|
|
-# Some platforms/devices may want different sysupgrade process, e.g. without
|
|
-# killing processes yet or calling ubus system upgrade method.
|
|
-# This is needed e.g. on NAND devices where we just want to trigger stage1 at
|
|
-# this point.
|
|
-if type 'platform_pre_upgrade' >/dev/null 2>/dev/null; then
|
|
- platform_pre_upgrade "$ARGV"
|
|
+if [ $SAVE_PARTITIONS -eq 0 ]; then
|
|
+ touch /tmp/sysupgrade.always.overwrite.bootdisk.partmap
|
|
+else
|
|
+ rm -f /tmp/sysupgrade.always.overwrite.bootdisk.partmap
|
|
fi
|
|
|
|
-ubus call system upgrade
|
|
-touch /tmp/sysupgrade
|
|
-
|
|
-if [ ! -f /tmp/failsafe ] ; then
|
|
- kill_remaining TERM
|
|
- sleep 3
|
|
- kill_remaining KILL
|
|
-fi
|
|
+run_hooks "" $sysupgrade_pre_upgrade
|
|
|
|
-if [ -n "$(rootfs_type)" ]; then
|
|
- v "Switching to ramdisk..."
|
|
- run_ramfs '. /lib/functions.sh; include /lib/upgrade; do_upgrade'
|
|
-else
|
|
- do_upgrade
|
|
-fi
|
|
+install_bin /sbin/upgraded
|
|
+v "Commencing upgrade. All shell sessions will be closed now."
|
|
+ubus call system sysupgrade "{
|
|
+ \"prefix\": \"$RAM_ROOT\",
|
|
+ \"path\": $(json_string "$IMAGE"),
|
|
+ \"command\": \". /lib/functions.sh; include /lib/upgrade; do_upgrade_stage2\"
|
|
+}"
|