0112-base-files-add-support-for-staged-sysupgrades-from-failsafe-mode.patch 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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 cb43ad39cbae07c533af63d7ff445d41a5b988df..fee0c8f0e19f2bf46771cd23ceaaff2db7af7611 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. @@ -4,8 +4,12 @@
  10. run_failsafe_hook() {
  11. if [ "$FAILSAFE" = "true" ]; then
  12. + lock /tmp/.failsafe
  13. boot_run_hook failsafe
  14. - lock -w /tmp/.failsafe
  15. + while [ ! -e /tmp/sysupgrade ]; do
  16. + lock -w /tmp/.failsafe
  17. + done
  18. + exit
  19. fi
  20. }
  21. diff --git a/package/base-files/files/lib/preinit/99_10_failsafe_login b/package/base-files/files/lib/preinit/99_10_failsafe_login
  22. index 15dcbd884f1f2ec4fd84c92482a9b656d1a26dd7..96e95b1d99c631536c0b30ee5c2e19b3c63bbc64 100644
  23. --- a/package/base-files/files/lib/preinit/99_10_failsafe_login
  24. +++ b/package/base-files/files/lib/preinit/99_10_failsafe_login
  25. @@ -7,9 +7,13 @@ failsafe_netlogin () {
  26. }
  27. failsafe_shell() {
  28. - lock /tmp/.failsafe
  29. - ash --login
  30. - echo "Please reboot system when done with failsafe network logins"
  31. + local console="$(sed -e 's/ /\n/g' /proc/cmdline | grep '^console=' | head -1 | sed -e 's/^console=//' -e 's/,.*//')"
  32. + [ -n "$console" ] || console=console
  33. + [ -c "/dev/$console" ] || return 0
  34. + while true; do
  35. + ash --login <"/dev/$console" >"/dev/$console" 2>"/dev/$console"
  36. + sleep 1
  37. + done &
  38. }
  39. boot_hook_add failsafe failsafe_netlogin
  40. diff --git a/package/base-files/files/sbin/sysupgrade b/package/base-files/files/sbin/sysupgrade
  41. index 2060679e61948e4661a408df009ff3ef3c6faa91..853134a2cb8a2ef1d56671bfeee46704892909d8 100755
  42. --- a/package/base-files/files/sbin/sysupgrade
  43. +++ b/package/base-files/files/sbin/sysupgrade
  44. @@ -249,8 +249,16 @@ run_hooks "" $sysupgrade_pre_upgrade
  45. install_bin /sbin/upgraded
  46. v "Commencing upgrade. All shell sessions will be closed now."
  47. -ubus call system sysupgrade "{
  48. - \"prefix\": \"$RAM_ROOT\",
  49. - \"path\": $(json_string "$IMAGE"),
  50. - \"command\": \". /lib/functions.sh; include /lib/upgrade; do_upgrade_stage2\"
  51. -}"
  52. +
  53. +COMMAND='. /lib/functions.sh; include /lib/upgrade; do_upgrade_stage2'
  54. +
  55. +if [ -n "$FAILSAFE" ]; then
  56. + printf '%s\x00%s\x00%s' "$RAM_ROOT" "$IMAGE" "$COMMAND" >/tmp/sysupgrade
  57. + lock -u /tmp/.failsafe
  58. +else
  59. + ubus call system sysupgrade "{
  60. + \"prefix\": $(json_string "$RAM_ROOT"),
  61. + \"path\": $(json_string "$IMAGE"),
  62. + \"command\": $(json_string "$COMMAND")
  63. + }"
  64. +fi