Message ID | 20231009151729.2223963-7-arbab@linux.ibm.com |
---|---|
State | Accepted |
Headers | show |
Series | package/petitboot: misc fixes/enhancement | expand |
On 09/10/2023 17:17, Reza Arbab wrote: > Display the petitboot UI instead of a login prompt, allowing the > configuration of custom tty(s) as we do for the login prompt. > > petitboot already depends on udev, so let's use it instead of rcS to > launch pb-console. This has the advantage of easily wildcarding the list > of ttys ("hvc*") and enables hotplug devices ("ttyUSB0"). Indeed, hotplug devices is a good reason to use udev! > > Signed-off-by: Reza Arbab <arbab@linux.ibm.com> > --- > package/petitboot/Config.in | 8 ++++++++ > package/petitboot/pb-console | 36 ++++++++++++++++++++++++++++++++++ > package/petitboot/petitboot.mk | 10 ++++++++++ > system/Config.in | 2 +- > 4 files changed, 55 insertions(+), 1 deletion(-) > create mode 100644 package/petitboot/pb-console > > diff --git a/package/petitboot/Config.in b/package/petitboot/Config.in > index 4981c165bf76..5f1d91e77ecb 100644 > --- a/package/petitboot/Config.in > +++ b/package/petitboot/Config.in > @@ -28,3 +28,11 @@ comment "petitboot needs a uClibc or glibc toolchain w/ wchar, dynamic library, > !BR2_TOOLCHAIN_HAS_THREADS || \ > !(BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC) || \ > !BR2_PACKAGE_HAS_UDEV > + > +config BR2_PACKAGE_PETITBOOT_GETTY_PORT > + string "TTY port(s)" > + default "console" > + depends on BR2_PACKAGE_PETITBOOT > + help > + Specify a space-separated list of ports to run the petitboot UI on. This line was too long, as reported by check-package. > + Wildcards are allowed. Example: "hvc* ttys0 ttyS*" [snip] > diff --git a/system/Config.in b/system/Config.in > index 24798dc06803..9587dd9ce4db 100644 > --- a/system/Config.in > +++ b/system/Config.in > @@ -375,7 +375,7 @@ config BR2_SYSTEM_BIN_SH > > menuconfig BR2_TARGET_GENERIC_GETTY > bool "Run a getty (login prompt) after boot" > - default y > + default y if !BR2_PACKAGE_PETITBOOT Since the getty would conflict, I wonder if it shouldn't be a `depends on` instead of just a default. On the other hand, you could imagine a getty on one port and a pb-console on another port, so I guess it's OK. Regards, Arnout > > if BR2_TARGET_GENERIC_GETTY > config BR2_TARGET_GENERIC_GETTY_PORT
diff --git a/package/petitboot/Config.in b/package/petitboot/Config.in index 4981c165bf76..5f1d91e77ecb 100644 --- a/package/petitboot/Config.in +++ b/package/petitboot/Config.in @@ -28,3 +28,11 @@ comment "petitboot needs a uClibc or glibc toolchain w/ wchar, dynamic library, !BR2_TOOLCHAIN_HAS_THREADS || \ !(BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC) || \ !BR2_PACKAGE_HAS_UDEV + +config BR2_PACKAGE_PETITBOOT_GETTY_PORT + string "TTY port(s)" + default "console" + depends on BR2_PACKAGE_PETITBOOT + help + Specify a space-separated list of ports to run the petitboot UI on. + Wildcards are allowed. Example: "hvc* ttys0 ttyS*" diff --git a/package/petitboot/pb-console b/package/petitboot/pb-console new file mode 100644 index 000000000000..407ff3b30232 --- /dev/null +++ b/package/petitboot/pb-console @@ -0,0 +1,36 @@ +#!/bin/sh + +DAEMON="pb-console" + +PB_CONSOLE_PORT=${2:-"console"} +PB_CONSOLE_ARGS="--getty --detach -- -n -i 0 $PB_CONSOLE_PORT linux" + +# shellcheck source=/dev/null +[ -r "/etc/default/petitboot" ] && . "/etc/default/petitboot" + +start() { + printf 'Starting %s on %s: ' "$DAEMON" "$PB_CONSOLE_PORT" + mkdir -p /var/log/petitboot + + # shellcheck disable=SC2086 # we need the word splitting + start-stop-daemon -S -q -x "/usr/libexec/petitboot/$DAEMON" \ + -- $PB_CONSOLE_ARGS + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +case "$1" in + start) + "$1";; + stop|restart|reload) + ;; + *) + echo "Usage: $0 {start|stop|restart|reload} [port]" + exit 1 + ;; +esac diff --git a/package/petitboot/petitboot.mk b/package/petitboot/petitboot.mk index 5c7913b560b1..ff87f3498734 100644 --- a/package/petitboot/petitboot.mk +++ b/package/petitboot/petitboot.mk @@ -56,6 +56,8 @@ else PETITBOOT_CONF_OPTS += HOST_PROG_SHUTDOWN=/usr/sbin/kexec-restart endif +PETITBOOT_GETTY_PORT = $(patsubst %,'%',$(call qstrip,$(BR2_PACKAGE_PETITBOOT_GETTY_PORT))) + define PETITBOOT_POST_INSTALL $(INSTALL) -D -m 0755 $(@D)/utils/bb-kexec-reboot \ $(TARGET_DIR)/usr/libexec/petitboot/bb-kexec-reboot @@ -67,6 +69,14 @@ define PETITBOOT_POST_INSTALL $(TARGET_DIR)/etc/init.d/S15pb-discover $(INSTALL) -D -m 0755 $(PETITBOOT_PKGDIR)/kexec-restart \ $(TARGET_DIR)/usr/sbin/kexec-restart + $(INSTALL) -D -m 0755 $(PETITBOOT_PKGDIR)/pb-console \ + $(TARGET_DIR)/etc/init.d/pb-console + + mkdir -p $(TARGET_DIR)/etc/udev/rules.d + (for port in $(PETITBOOT_GETTY_PORT); do \ + printf 'SUBSYSTEM=="tty", KERNEL=="%s", RUN+="/etc/init.d/pb-console start $$name"\n' "$$port"; \ + done) > $(TARGET_DIR)/etc/udev/rules.d/petitboot-console-ui.rules + mkdir -p $(TARGET_DIR)/usr/share/udhcpc/default.script.d/ ln -sf /usr/sbin/pb-udhcpc \ $(TARGET_DIR)/usr/share/udhcpc/default.script.d/ diff --git a/system/Config.in b/system/Config.in index 24798dc06803..9587dd9ce4db 100644 --- a/system/Config.in +++ b/system/Config.in @@ -375,7 +375,7 @@ config BR2_SYSTEM_BIN_SH menuconfig BR2_TARGET_GENERIC_GETTY bool "Run a getty (login prompt) after boot" - default y + default y if !BR2_PACKAGE_PETITBOOT if BR2_TARGET_GENERIC_GETTY config BR2_TARGET_GENERIC_GETTY_PORT
Display the petitboot UI instead of a login prompt, allowing the configuration of custom tty(s) as we do for the login prompt. petitboot already depends on udev, so let's use it instead of rcS to launch pb-console. This has the advantage of easily wildcarding the list of ttys ("hvc*") and enables hotplug devices ("ttyUSB0"). Signed-off-by: Reza Arbab <arbab@linux.ibm.com> --- package/petitboot/Config.in | 8 ++++++++ package/petitboot/pb-console | 36 ++++++++++++++++++++++++++++++++++ package/petitboot/petitboot.mk | 10 ++++++++++ system/Config.in | 2 +- 4 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 package/petitboot/pb-console