All of lore.kernel.org
 help / color / mirror / Atom feed
From: Reza Arbab <arbab@linux.ibm.com>
To: buildroot@buildroot.org
Cc: Laurent Vivier <laurent@vivier.eu>, Joel Stanley <joel@jms.id.au>
Subject: [Buildroot] [PATCH v3 5/8] package/petitboot: fix shutdown
Date: Mon,  9 Oct 2023 10:17:26 -0500	[thread overview]
Message-ID: <20231009151729.2223963-6-arbab@linux.ibm.com> (raw)
In-Reply-To: <20231009151729.2223963-1-arbab@linux.ibm.com>

There are a few ways to set HOST_PROG_SHUTDOWN that enable us to
successfully kexec the new kernel chosen from the petitboot menu.

1. HOST_PROG_SHUTDOWN=/usr/libexec/petitboot/bb-kexec-reboot
    `- bb-kexec-reboot does 'exec kill -QUIT 1'
        |- init sends SIGTERM to pb-console
        |   `- pb-console does 'trap 'reset; echo "SIGTERM received, booting..."; sleep 2' SIGTERM'
        `- init runs 'null::restart:/usr/sbin/kexec-restart'
            `- kexec-restart does '/usr/sbin/kexec -f -e'

2. HOST_PROG_SHUTDOWN=/usr/sbin/kexec-restart
    `- kexec-restart does '/usr/sbin/kexec -f -e'

3. unset HOST_PROG_SHUTDOWN (default is /sbin/shutdown)
    `- petitboot tries, in order:
        |- 1. '/sbin/shutdown -r now'
        |      `- file not found
        |- 2. '/usr/sbin/kexec -e'
        `- 3. '/usr/sbin/kexec -e -f'

If we're using busybox init, do (1). This performs a proper shutdown
before the kexec, giving us nice console output with a terminal reset
and the "booting..." notification. Otherwise, fall back to (2).

Signed-off-by: Reza Arbab <arbab@linux.ibm.com>
---
 package/petitboot/kexec-restart |  8 ++++++++
 package/petitboot/petitboot.mk  | 16 ++++++++++++++--
 2 files changed, 22 insertions(+), 2 deletions(-)
 create mode 100755 package/petitboot/kexec-restart

diff --git a/package/petitboot/kexec-restart b/package/petitboot/kexec-restart
new file mode 100755
index 000000000000..62fbea114513
--- /dev/null
+++ b/package/petitboot/kexec-restart
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+/usr/sbin/kexec -f -e
+
+while :
+do
+	sleep 1
+done
diff --git a/package/petitboot/petitboot.mk b/package/petitboot/petitboot.mk
index 0992111cb1ec..5c7913b560b1 100644
--- a/package/petitboot/petitboot.mk
+++ b/package/petitboot/petitboot.mk
@@ -21,7 +21,6 @@ PETITBOOT_CONF_OPTS = \
 	--without-twin-x11 \
 	$(if $(BR2_PACKAGE_BUSYBOX),--enable-busybox,--disable-busybox) \
 	HOST_PROG_KEXEC=/usr/sbin/kexec \
-	HOST_PROG_SHUTDOWN=/usr/libexec/petitboot/bb-kexec-reboot
 
 # HPA and Busybox tftp are supported. HPA tftp is part of Buildroot's tftpd
 # package.
@@ -46,6 +45,17 @@ else
 PETITBOOT_CONF_OPTS += --without-fdt
 endif
 
+ifeq ($(BR2_INIT_BUSYBOX),y)
+PETITBOOT_CONF_OPTS += HOST_PROG_SHUTDOWN=/usr/libexec/petitboot/bb-kexec-reboot
+define PETITBOOT_INITTAB
+	grep -q kexec-restart $(TARGET_DIR)/etc/inittab || \
+		printf "\nnull::restart:/usr/sbin/kexec-restart\n" >> $(TARGET_DIR)/etc/inittab
+endef
+PETITBOOT_TARGET_FINALIZE_HOOKS += PETITBOOT_INITTAB
+else
+PETITBOOT_CONF_OPTS += HOST_PROG_SHUTDOWN=/usr/sbin/kexec-restart
+endif
+
 define PETITBOOT_POST_INSTALL
 	$(INSTALL) -D -m 0755 $(@D)/utils/bb-kexec-reboot \
 		$(TARGET_DIR)/usr/libexec/petitboot/bb-kexec-reboot
@@ -53,8 +63,10 @@ define PETITBOOT_POST_INSTALL
 		$(TARGET_DIR)/etc/petitboot/boot.d/01-create-default-dtb
 	$(INSTALL) -D -m 0755 $(@D)/utils/hooks/90-sort-dtb \
 		$(TARGET_DIR)/etc/petitboot/boot.d/90-sort-dtb
-	$(INSTALL) -m 0755 -D $(PETITBOOT_PKGDIR)/S15pb-discover \
+	$(INSTALL) -D -m 0755 $(PETITBOOT_PKGDIR)/S15pb-discover \
 		$(TARGET_DIR)/etc/init.d/S15pb-discover
+	$(INSTALL) -D -m 0755 $(PETITBOOT_PKGDIR)/kexec-restart \
+		$(TARGET_DIR)/usr/sbin/kexec-restart
 	mkdir -p $(TARGET_DIR)/usr/share/udhcpc/default.script.d/
 	ln -sf /usr/sbin/pb-udhcpc \
 		$(TARGET_DIR)/usr/share/udhcpc/default.script.d/
-- 
2.39.3

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

  parent reply	other threads:[~2023-10-09 15:19 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-09 15:17 [Buildroot] [PATCH v3 0/8] package/petitboot: misc fixes/enhancement Reza Arbab
2023-10-09 15:17 ` [Buildroot] [PATCH v3 1/8] package/petitboot: fix menu comment Reza Arbab
2023-11-09 16:59   ` Peter Korsgaard
2023-10-09 15:17 ` [Buildroot] [PATCH v3 2/8] package/petitboot: fix pb-discover pidfile creation Reza Arbab
2023-10-09 15:17 ` [Buildroot] [PATCH v3 3/8] package/petitboot: use default logfile dir Reza Arbab
2023-11-09 16:59   ` Peter Korsgaard
2023-10-09 15:17 ` [Buildroot] [PATCH v3 4/8] package/petitboot: prefer kexec-lite on powerpc Reza Arbab
2023-11-05 17:40   ` Arnout Vandecappelle via buildroot
2023-10-09 15:17 ` Reza Arbab [this message]
2023-11-05 17:57   ` [Buildroot] [PATCH v3 5/8] package/petitboot: fix shutdown Arnout Vandecappelle via buildroot
2023-11-09 16:13     ` Reza Arbab
2023-10-09 15:17 ` [Buildroot] [PATCH v3 6/8] package/petitboot: run petitboot UI on consoles Reza Arbab
2023-11-05 18:06   ` Arnout Vandecappelle via buildroot
2023-10-09 15:17 ` [Buildroot] [PATCH v3 7/8] package/petitboot: enable user separation Reza Arbab
2023-11-05 18:26   ` Arnout Vandecappelle via buildroot
2023-11-09 16:16     ` Reza Arbab
2023-11-10  9:01       ` Arnout Vandecappelle via buildroot
2023-11-14 15:25         ` Reza Arbab
2023-10-09 15:17 ` [Buildroot] [PATCH v3 8/8] package/petitboot: prefer UTF-8 support Reza Arbab
2023-11-05 18:30   ` Arnout Vandecappelle via buildroot
2023-11-09 16:17     ` Reza Arbab
2023-11-05 18:31 ` [Buildroot] [PATCH v3 0/8] package/petitboot: misc fixes/enhancement Arnout Vandecappelle via buildroot
2023-11-09 16:19   ` Reza Arbab

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231009151729.2223963-6-arbab@linux.ibm.com \
    --to=arbab@linux.ibm.com \
    --cc=buildroot@buildroot.org \
    --cc=joel@jms.id.au \
    --cc=laurent@vivier.eu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.