0019-base-files-add-support-for-staged-sysupgrades-from-failsafe-mode.patch 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. From: Matthias Schiffer <mschiffer@universe-factory.net>
  2. Date: Mon, 24 Apr 2017 01:31:04 +0200
  3. Subject: base-files: add support for staged sysupgrades from failsafe mode
  4. Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
  5. diff --git a/package/base-files/files/lib/preinit/40_run_failsafe_hook b/package/base-files/files/lib/preinit/40_run_failsafe_hook
  6. index 7301f77349a1a1e42fcef9bcbc927ef55c83b991..533b0a9771e1aac603f00ecf7a4622ea9fee969d 100644
  7. --- a/package/base-files/files/lib/preinit/40_run_failsafe_hook
  8. +++ b/package/base-files/files/lib/preinit/40_run_failsafe_hook
  9. @@ -5,8 +5,12 @@
  10. run_failsafe_hook() {
  11. [ "$pi_preinit_no_failsafe" = "y" ] && return
  12. if [ "$FAILSAFE" = "true" ]; then
  13. + lock /tmp/.failsafe
  14. boot_run_hook failsafe
  15. - lock -w /tmp/.failsafe
  16. + while [ ! -e /tmp/sysupgrade ]; do
  17. + lock -w /tmp/.failsafe
  18. + done
  19. + exit
  20. fi
  21. }
  22. diff --git a/package/base-files/files/lib/preinit/99_10_failsafe_login b/package/base-files/files/lib/preinit/99_10_failsafe_login
  23. index 3147cdc5a68a69cef6b1af6618a4e2367a143c2c..728c63b2e8aebf970cd7dff0d15518ccda83029c 100644
  24. --- a/package/base-files/files/lib/preinit/99_10_failsafe_login
  25. +++ b/package/base-files/files/lib/preinit/99_10_failsafe_login
  26. @@ -8,10 +8,13 @@ failsafe_netlogin () {
  27. }
  28. failsafe_shell() {
  29. - lock /tmp/.failsafe
  30. - ash --login
  31. - echo "Please reboot system when done with failsafe network logins"
  32. - while true; do sleep 1; done
  33. + local console="$(sed -e 's/ /\n/g' /proc/cmdline | grep '^console=' | head -1 | sed -e 's/^console=//' -e 's/,.*//')"
  34. + [ -n "$console" ] || console=console
  35. + [ -c "/dev/$console" ] || return 0
  36. + while true; do
  37. + ash --login <"/dev/$console" >"/dev/$console" 2>"/dev/$console"
  38. + sleep 1
  39. + done &
  40. }
  41. boot_hook_add failsafe failsafe_netlogin
  42. diff --git a/package/base-files/files/sbin/sysupgrade b/package/base-files/files/sbin/sysupgrade
  43. index 200a0e520b5df8bcc208f4d8fd731756e94294fb..809e789f9f436aaeb47a906d46c94d5952583e5a 100755
  44. --- a/package/base-files/files/sbin/sysupgrade
  45. +++ b/package/base-files/files/sbin/sysupgrade
  46. @@ -251,8 +251,16 @@ run_hooks "" $sysupgrade_pre_upgrade
  47. install_bin /sbin/upgraded
  48. v "Commencing upgrade. All shell sessions will be closed now."
  49. -ubus call system sysupgrade "{
  50. - \"prefix\": \"$RAM_ROOT\",
  51. - \"path\": $(json_string "$IMAGE"),
  52. - \"command\": \". /lib/functions.sh; include /lib/upgrade; do_upgrade_stage2\"
  53. -}"
  54. +
  55. +COMMAND='. /lib/functions.sh; include /lib/upgrade; do_upgrade_stage2'
  56. +
  57. +if [ -n "$FAILSAFE" ]; then
  58. + printf '%s\x00%s\x00%s' "$RAM_ROOT" "$IMAGE" "$COMMAND" >/tmp/sysupgrade
  59. + lock -u /tmp/.failsafe
  60. +else
  61. + ubus call system sysupgrade "{
  62. + \"prefix\": $(json_string "$RAM_ROOT"),
  63. + \"path\": $(json_string "$IMAGE"),
  64. + \"command\": $(json_string "$COMMAND")
  65. + }"
  66. +fi