base-files: add support for staged sysupgrades from failsafe mode

Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
This commit is contained in:
Matthias Schiffer 2017-04-24 01:31:04 +02:00
parent b2adb9a7b5
commit a5428244d9
No known key found for this signature in database
GPG key ID: 16EF3F64CB201D9C
3 changed files with 25 additions and 10 deletions

View file

@ -5,8 +5,12 @@
run_failsafe_hook() { run_failsafe_hook() {
[ "$pi_preinit_no_failsafe" = "y" ] && return [ "$pi_preinit_no_failsafe" = "y" ] && return
if [ "$FAILSAFE" = "true" ]; then if [ "$FAILSAFE" = "true" ]; then
lock /tmp/.failsafe
boot_run_hook failsafe boot_run_hook failsafe
lock -w /tmp/.failsafe while [ ! -e /tmp/sysupgrade ]; do
lock -w /tmp/.failsafe
done
exit
fi fi
} }

View file

@ -8,10 +8,13 @@ failsafe_netlogin () {
} }
failsafe_shell() { failsafe_shell() {
lock /tmp/.failsafe local console="$(sed -e 's/ /\n/g' /proc/cmdline | grep '^console=' | head -1 | sed -e 's/^console=//' -e 's/,.*//')"
ash --login [ -n "$console" ] || console=console
echo "Please reboot system when done with failsafe network logins" [ -c "/dev/$console" ] || return 0
while true; do sleep 1; done while true; do
ash --login <"/dev/$console" >"/dev/$console" 2>"/dev/$console"
sleep 1
done &
} }
boot_hook_add failsafe failsafe_netlogin boot_hook_add failsafe failsafe_netlogin

View file

@ -251,8 +251,16 @@ run_hooks "" $sysupgrade_pre_upgrade
install_bin /sbin/upgraded install_bin /sbin/upgraded
v "Commencing upgrade. All shell sessions will be closed now." v "Commencing upgrade. All shell sessions will be closed now."
ubus call system sysupgrade "{
\"prefix\": \"$RAM_ROOT\", COMMAND='. /lib/functions.sh; include /lib/upgrade; do_upgrade_stage2'
\"path\": $(json_string "$IMAGE"),
\"command\": \". /lib/functions.sh; include /lib/upgrade; do_upgrade_stage2\" if [ -n "$FAILSAFE" ]; then
}" printf '%s\x00%s\x00%s' "$RAM_ROOT" "$IMAGE" "$COMMAND" >/tmp/sysupgrade
lock -u /tmp/.failsafe
else
ubus call system sysupgrade "{
\"prefix\": $(json_string "$RAM_ROOT"),
\"path\": $(json_string "$IMAGE"),
\"command\": $(json_string "$COMMAND")
}"
fi