package/petitboot: misc enhancement
cover package/petitboot: misc enhancement
The br2-external tree used to build OpenPOWER firmware has long carried petitboot as a custom package[1]. Now that petitboot has been added to buildroot proper, it would be nice to leverage the base package instead.
To make that transition easier, here is a set of patches which port over some of the enhancements made to that external package.
Beyond these, there are a couple of more involved things left:
* User separation (i.e. the petitboot shell runs as 'petituser')
* Support for MTD devices
[1] https://github.com/open-power/op-build/tree/master/openpower/package/petitboot
Reza Arbab (5):
package/petitboot: fix HOST_PROG_SHUTDOWN value package/petitboot: run pb-console at boot package/petitboot: poll removable devices package/petitboot: enable discovery of software RAID devices package/petitboot: enable discovery of SCSI devices
package/petitboot/63-md-raid-arrays.rules | 41 ++++++++++++ package/petitboot/65-md-incremental.rules | 69 ++++++++++++++++++++ package/petitboot/66-add-sg-module.rules | 2 + package/petitboot/petitboot-console-ui.rules | 4 ++ package/petitboot/petitboot.mk | 20 +++++- package/petitboot/removable-event-poll.rules | 3 + package/petitboot/sysctl.conf | 1 + 7 files changed, 139 insertions(+), 1 deletion(-) create mode 100644 package/petitboot/63-md-raid-arrays.rules create mode 100644 package/petitboot/65-md-incremental.rules create mode 100644 package/petitboot/66-add-sg-module.rules create mode 100644 package/petitboot/petitboot-console-ui.rules create mode 100644 package/petitboot/removable-event-poll.rules create mode 100644 package/petitboot/sysctl.conf
Signature · 6 lines
2.39.3 _______________________________________________ buildroot mailing list [email protected] https://lists.buildroot.org/mailman/listinfo/buildroot
PATCH 1/5 package/petitboot: fix HOST_PROG_SHUTDOWN value
HOST_PROG_SHUTDOWN currently references a file that doesn't exist. Fix by setting it to /usr/libexec/petitboot/bb-kexec-reboot, which this package already installs but doesn't use.
--- package/petitboot/petitboot.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
package/petitboot/petitboot.mk +1 -1
@@ -21,7 +21,7 @@ PETITBOOT_CONF_OPTS = \ --without-twin-x11 \ $(if $(BR2_PACKAGE_BUSYBOX),--enable-busybox,--disable-busybox) \ HOST_PROG_KEXEC=/usr/sbin/kexec \ - HOST_PROG_SHUTDOWN=/usr/sbin/kexec-restart + HOST_PROG_SHUTDOWN=/usr/libexec/petitboot/bb-kexec-reboot # HPA and Busybox tftp are supported. HPA tftp is part of Buildroot's tftpd # package.
Signature · 6 lines
2.39.3 _______________________________________________ buildroot mailing list [email protected] https://lists.buildroot.org/mailman/listinfo/buildroot
Re: [Buildroot] [PATCH 1/5] package/petitboot: fix HOST_PROG_SHUTDOWN value
Le 06/09/2023 à 21:46, Reza Arbab a écrit :
Quoted 14 lines
HOST_PROG_SHUTDOWNcurrently references a file that doesn't exist. Fix by setting it to/usr/libexec/petitboot/bb-kexec-reboot, which this package already installs but doesn't use.Signed-off-by Reza Arbab <[email protected]>--- package/petitboot/petitboot.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)package/petitboot/petitboot.mk +0
-0
package/petitboot/petitboot.mk PETITBOOT_CONF_OPTS = \ · line 27
Quoted 8 lines
package/petitboot/petitboot.mk +1
-1@@ -21,7 +21,7 @@ PETITBOOT_CONF_OPTS = \ --without-twin-x11 \ $(if $(BR2_PACKAGE_BUSYBOX),--enable-busybox,--disable-busybox) \ HOST_PROG_KEXEC=/usr/sbin/kexec \ - HOST_PROG_SHUTDOWN=/usr/sbin/kexec-restart + HOST_PROG_SHUTDOWN=/usr/libexec/petitboot/bb-kexec-reboot # HPA and Busybox tftp are supported. HPA tftp is part of Buildroot's tftpd # package.
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot
Re: [Buildroot] [PATCH 1/5] package/petitboot: fix HOST_PROG_SHUTDOWN value
In reply to Reza ArbabQuoted 7 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Reza" == Reza Arbab <[email protected]> writes:
HOST_PROG_SHUTDOWNcurrently references a file that doesn't exist. Fix by setting it to/usr/libexec/petitboot/bb-kexec-reboot, which this package already installs but doesn't use.Signed-off-by Reza Arbab <[email protected]>
Committed to 2023.05.x and 2023.08.x, thanks.
Signature · 5 lines
Bye, Peter Korsgaard _______________________________________________ buildroot mailing list [email protected] https://lists.buildroot.org/mailman/listinfo/buildroot
PATCH 2/5 package/petitboot: run pb-console at boot
In reply to Reza ArbabInstall a udev rule to run the petitboot UI on commonly-known consoles. To prevent the kernel's console output from trampling the UI, also add a sysctl file to reduce the kernel log levels to KERN_ALERT.
--- package/petitboot/petitboot-console-ui.rules | 4 ++++ package/petitboot/petitboot.mk | 4 ++++ package/petitboot/sysctl.conf | 1 + 3 files changed, 9 insertions(+) create mode 100644 package/petitboot/petitboot-console-ui.rules create mode 100644 package/petitboot/sysctl.conf
package/petitboot/petitboot-console-ui.rules new file +4 -0
@@ -0,0 +1,4 @@ +# spawn a petitboot UI on common user-visible interface devices +SUBSYSTEM=="tty", KERNEL=="hvc*", RUN+="/usr/libexec/petitboot/pb-console --getty --detach -- -n -i 0 $name linux" +SUBSYSTEM=="tty", KERNEL=="tty0", RUN+="/usr/libexec/petitboot/pb-console --getty --detach -- -n -i 0 $name linux" +SUBSYSTEM=="tty", KERNEL=="ttyS*", RUN+="/usr/libexec/petitboot/pb-console --getty --detach -- -n -i 0 $name linux"
package/petitboot/petitboot.mk +4 -0
@@ -55,6 +55,10 @@ define PETITBOOT_POST_INSTALL $(TARGET_DIR)/etc/petitboot/boot.d/90-sort-dtb $(INSTALL) -m 0755 -D $(PETITBOOT_PKGDIR)/S15pb-discover \ $(TARGET_DIR)/etc/init.d/S15pb-discover + $(INSTALL) -D -m 0755 $(PETITBOOT_PKGDIR)/petitboot-console-ui.rules \ + $(TARGET_DIR)/etc/udev/rules.d/petitboot-console-ui.rules + $(INSTALL) -D -m 0755 $(PETITBOOT_PKGDIR)/sysctl.conf \ + $(TARGET_DIR)/etc/sysctl.d/petitboot.conf mkdir -p $(TARGET_DIR)/usr/share/udhcpc/default.script.d/ ln -sf /usr/sbin/pb-udhcpc \ $(TARGET_DIR)/usr/share/udhcpc/default.script.d/
package/petitboot/sysctl.conf new file +1 -0
@@ -0,0 +1 @@ +kernel.printk = 1 1 1 1
Signature · 6 lines
2.39.3 _______________________________________________ buildroot mailing list [email protected] https://lists.buildroot.org/mailman/listinfo/buildroot
Re: [Buildroot] [PATCH 2/5] package/petitboot: run pb-console at boot
Le 06/09/2023 à 21:46, Reza Arbab a écrit :
package/petitboot/petitboot.mk
Quoted 24 lines
Install a udev rule to run the petitboot UI on commonly-known consoles. To prevent the kernel's console output from trampling the UI, also add a sysctl file to reduce the kernel log levels to
KERN_ALERT.Signed-off-by Reza Arbab <[email protected]>--- package/petitboot/petitboot-console-ui.rules | 4 ++++ package/petitboot/petitboot.mk | 4 ++++ package/petitboot/sysctl.conf | 1 + 3 files changed, 9 insertions(+)create mode 100644 package/petitboot/petitboot-console-ui.rules create mode 100644
package/petitboot/sysctl.confpackage/petitboot/petitboot-console-ui.rules new file +4
-0@@ -0,0 +1,4 @@ +# spawn a petitboot UI on common user-visible interface devices +SUBSYSTEM=="tty", KERNEL=="hvc*", RUN+="/usr/libexec/petitboot/pb-console --getty --detach -- -n -i 0 $name linux" +SUBSYSTEM=="tty", KERNEL=="tty0", RUN+="/usr/libexec/petitboot/pb-console --getty --detach -- -n -i 0 $name linux" +SUBSYSTEM=="tty", KERNEL=="ttyS*", RUN+="/usr/libexec/petitboot/pb-console --getty --detach -- -n -i 0 $name linux"package/petitboot/petitboot.mk +0
-0
Could you add:
SUBSYSTEM=="tty", KERNEL=="ttyGF*", RUN+="/usr/libexec/petitboot/pb-console --getty=/sbin/getty --detach -- -n -i $name 0 linux"
It's needed for my work on virt-m68k petitboot.
Quoted 20 lines
index
8d220f88f45a..556d41230237100644package/petitboot/petitboot.mk +4
-0@@ -55,6 +55,10 @@ define PETITBOOT_POST_INSTALL $(TARGET_DIR)/etc/petitboot/boot.d/90-sort-dtb $(INSTALL) -m 0755 -D $(PETITBOOT_PKGDIR)/S15pb-discover \ $(TARGET_DIR)/etc/init.d/S15pb-discover + $(INSTALL) -D -m 0755 $(PETITBOOT_PKGDIR)/petitboot-console-ui.rules \ + $(TARGET_DIR)/etc/udev/rules.d/petitboot-console-ui.rules + $(INSTALL) -D -m 0755 $(PETITBOOT_PKGDIR)/sysctl.conf \ + $(TARGET_DIR)/etc/sysctl.d/petitboot.conf mkdir -p $(TARGET_DIR)/usr/share/udhcpc/default.script.d/ ln -sf /usr/sbin/pb-udhcpc \ $(TARGET_DIR)/usr/share/udhcpc/default.script.d/package/petitboot/sysctl.conf new file +0
-0
package/petitboot/sysctl.conf line 1
Quoted 1 line
package/petitboot/sysctl.conf new file +1
-0@@ -0,0 +1 @@ +kernel.printk = 1 1 1 1
I think you also need:
system/Config.in +1 -1
@@ -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
Otherwise the petitboot prompt will be mixed with getty prompt.
Thanks,
Laurent
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot
Re: [Buildroot] [PATCH 2/5] package/petitboot: run pb-console at boot
Quoted 12 lines · Laurent Vivier
Le 06/09/2023 à 21:46, Reza Arbab a écrit :
package/petitboot/petitboot.mk
Quoted 8 lines
package/petitboot/petitboot-console-ui.rules new file +4
-0@@ -0,0 +1,4 @@ +# spawn a petitboot UI on common user-visible interface devices +SUBSYSTEM=="tty", KERNEL=="hvc*", RUN+="/usr/libexec/petitboot/pb-console --getty --detach -- -n -i 0 $name linux" +SUBSYSTEM=="tty", KERNEL=="tty0", RUN+="/usr/libexec/petitboot/pb-console --getty --detach -- -n -i 0 $name linux" +SUBSYSTEM=="tty", KERNEL=="ttyS*", RUN+="/usr/libexec/petitboot/pb-console --getty --detach -- -n -i 0 $name linux"package/petitboot/petitboot.mk +0
-0Could you add:
Quoted 3 lines
SUBSYSTEM=="tty", KERNEL=="ttyGF*", RUN+="/usr/libexec/petitboot/pb-console --getty=/sbin/getty --detach -- -n -i $name 0 linux"
It's needed for my work on virt-m68k petitboot.
Sure, no problem.
Quoted 13 lines
I think you also need:
system/Config.in +0
-0@@ -375,7 +375,7 @@ config BR2_SYSTEM_BIN_SHmenuconfig
BR2_TARGET_GENERIC_GETTY
bool "Run a getty (login prompt) after boot"system/Config.in +1
-1- default y + default y if !BR2_PACKAGE_PETITBOOT
Quoted 4 lines
if
BR2_TARGET_GENERIC_GETTY
configBR2_TARGET_GENERIC_GETTY_PORTOtherwise the petitboot prompt will be mixed with getty prompt.
This makes sense, but oddly, all our configs have
BR2_TARGET_GENERIC_GETTY=y
BR2_TARGET_GENERIC_GETTY_PORT="hvc0"
Let me try to figure out why it's never caused problems.
Signature · 5 lines
Reza Arbab _______________________________________________ buildroot mailing list [email protected] https://lists.buildroot.org/mailman/listinfo/buildroot
Re: [Buildroot] [PATCH 2/5] package/petitboot: run pb-console at boot
Quoted 17 lines · Reza Arbab
Quoted 16 lines · Laurent Vivier
I think you also need:
system/Config.in +0
-0@@ -375,7 +375,7 @@ config BR2_SYSTEM_BIN_SHmenuconfig
BR2_TARGET_GENERIC_GETTY
bool "Run a getty (login prompt) after boot"system/Config.in +1
-1- default y + default y if !BR2_PACKAGE_PETITBOOTif
BR2_TARGET_GENERIC_GETTY
configBR2_TARGET_GENERIC_GETTY_PORT
Quoted 8 lines
Quoted 1 line
Otherwise the petitboot prompt will be mixed with getty prompt.
This makes sense, but oddly, all our configs have
BR2_TARGET_GENERIC_GETTY=y
BR2_TARGET_GENERIC_GETTY_PORT="hvc0"Let me try to figure out why it's never caused problems.
I found that the reason we've never had problems with this is because BR2_TARGET_GENERIC_GETTY operates on the default /etc/inittab, but we overwrite that file in our overlay.
So your suggestion seems good to me! I'll add it to v2.
Signature · 5 lines
Reza Arbab _______________________________________________ buildroot mailing list [email protected] https://lists.buildroot.org/mailman/listinfo/buildroot
PATCH 3/5 package/petitboot: poll removable devices
In reply to Reza ArbabAdd a udev rule to enable notification of media change events on removable devices, so petitboot can dynamically adapt to them.
--- package/petitboot/petitboot.mk | 2 ++ package/petitboot/removable-event-poll.rules | 3 +++ 2 files changed, 5 insertions(+) create mode 100644 package/petitboot/removable-event-poll.rules
package/petitboot/petitboot.mk +2 -0
@@ -57,6 +57,8 @@ define PETITBOOT_POST_INSTALL $(TARGET_DIR)/etc/init.d/S15pb-discover $(INSTALL) -D -m 0755 $(PETITBOOT_PKGDIR)/petitboot-console-ui.rules \ $(TARGET_DIR)/etc/udev/rules.d/petitboot-console-ui.rules + $(INSTALL) -D -m 0755 $(PETITBOOT_PKGDIR)/removable-event-poll.rules \ + $(TARGET_DIR)/etc/udev/rules.d/removable-event-poll.rules $(INSTALL) -D -m 0755 $(PETITBOOT_PKGDIR)/sysctl.conf \ $(TARGET_DIR)/etc/sysctl.d/petitboot.conf mkdir -p $(TARGET_DIR)/usr/share/udhcpc/default.script.d/
package/petitboot/removable-event-poll.rules new file +3 -0
@@ -0,0 +1,3 @@ +# petitboot needs notification for media change events on removable devices, +# which we only get if we've set the poll_msecs sysfs attribute. +ACTION!="remove", ATTR{removable}=="1", ATTR{events_poll_msecs}="2000"
Signature · 6 lines
2.39.3 _______________________________________________ buildroot mailing list [email protected] https://lists.buildroot.org/mailman/listinfo/buildroot
Re: [Buildroot] [PATCH 3/5] package/petitboot: poll removable devices
Le 06/09/2023 à 21:46, Reza Arbab a écrit :
Quoted 29 lines
Add a udev rule to enable notification of media change events on removable devices, so petitboot can dynamically adapt to them.
Signed-off-by Reza Arbab <[email protected]>--- package/petitboot/petitboot.mk | 2 ++ package/petitboot/removable-event-poll.rules | 3 +++ 2 files changed, 5 insertions(+)create mode 100644 package/petitboot/removable-event-poll.rules
package/petitboot/petitboot.mk +2
-0@@ -57,6 +57,8 @@ define PETITBOOT_POST_INSTALL $(TARGET_DIR)/etc/init.d/S15pb-discover $(INSTALL) -D -m 0755 $(PETITBOOT_PKGDIR)/petitboot-console-ui.rules \ $(TARGET_DIR)/etc/udev/rules.d/petitboot-console-ui.rules + $(INSTALL) -D -m 0755 $(PETITBOOT_PKGDIR)/removable-event-poll.rules \ + $(TARGET_DIR)/etc/udev/rules.d/removable-event-poll.rules $(INSTALL) -D -m 0755 $(PETITBOOT_PKGDIR)/sysctl.conf \ $(TARGET_DIR)/etc/sysctl.d/petitboot.conf mkdir -p $(TARGET_DIR)/usr/share/udhcpc/default.script.d/package/petitboot/removable-event-poll.rules new file +0
-0
package/petitboot/removable-event-poll.rules line 3
Quoted 3 lines
package/petitboot/removable-event-poll.rules new file +3
-0@@ -0,0 +1,3 @@ +# petitboot needs notification for media change events on removable devices, +# which we only get if we've set the poll_msecs sysfs attribute. +ACTION!="remove", ATTR{removable}=="1", ATTR{events_poll_msecs}="2000"
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot
PATCH 4/5 package/petitboot: enable discovery of software RAID devices
In reply to Reza ArbabPetitboot can support filesystems on software RAID arrays. If mdadm is selected, install the associated udev rules to assemble the device.
--- package/petitboot/63-md-raid-arrays.rules | 41 ++++++++++++++ package/petitboot/65-md-incremental.rules | 69 +++++++++++++++++++++++ package/petitboot/petitboot.mk | 10 ++++ 3 files changed, 120 insertions(+) create mode 100644 package/petitboot/63-md-raid-arrays.rules create mode 100644 package/petitboot/65-md-incremental.rules
package/petitboot/63-md-raid-arrays.rules new file +41 -0
@@ -0,0 +1,41 @@ +# do not edit this file, it will be overwritten on update + +SUBSYSTEM!="block", GOTO="md_end" + +# handle md arrays +ACTION!="add|change", GOTO="md_end" +KERNEL!="md*", GOTO="md_end" + +# partitions have no md/{array_state,metadata_version}, but should not +# for that reason be ignored. +ENV{DEVTYPE}=="partition", GOTO="md_ignore_state" + +# container devices have a metadata version of e.g. 'external:ddf' and +# never leave state 'inactive' +ATTR{md/metadata_version}=="external:[A-Za-z]*", ATTR{md/array_state}=="inactive", GOTO="md_ignore_state" +TEST!="md/array_state", ENV{SYSTEMD_READY}="0", GOTO="md_end" +ATTR{md/array_state}=="|clear|inactive", ENV{SYSTEMD_READY}="0", GOTO="md_end" +LABEL="md_ignore_state" + +IMPORT{program}="/sbin/mdadm --detail --export $devnode" +ENV{DEVTYPE}=="disk", ENV{MD_NAME}=="?*", SYMLINK+="disk/by-id/md-name-$env{MD_NAME}", OPTIONS+="string_escape=replace" +ENV{DEVTYPE}=="disk", ENV{MD_UUID}=="?*", SYMLINK+="disk/by-id/md-uuid-$env{MD_UUID}" +ENV{DEVTYPE}=="disk", ENV{MD_DEVNAME}=="?*", SYMLINK+="md/$env{MD_DEVNAME}" +ENV{DEVTYPE}=="partition", ENV{MD_NAME}=="?*", SYMLINK+="disk/by-id/md-name-$env{MD_NAME}-part%n", OPTIONS+="string_escape=replace" +ENV{DEVTYPE}=="partition", ENV{MD_UUID}=="?*", SYMLINK+="disk/by-id/md-uuid-$env{MD_UUID}-part%n" +ENV{DEVTYPE}=="partition", ENV{MD_DEVNAME}=="*[^0-9]", SYMLINK+="md/$env{MD_DEVNAME}%n" +ENV{DEVTYPE}=="partition", ENV{MD_DEVNAME}=="*[0-9]", SYMLINK+="md/$env{MD_DEVNAME}p%n" + +IMPORT{builtin}="blkid" +OPTIONS+="link_priority=100" +OPTIONS+="watch" +ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}" +ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}" + +ENV{MD_LEVEL}=="raid[1-9]*", ENV{SYSTEMD_WANTS}+="mdmonitor.service" + +# Tell systemd to run mdmon for our container, if we need it. +ENV{MD_LEVEL}=="raid[1-9]*", ENV{MD_CONTAINER}=="?*", PROGRAM="/usr/bin/readlink $env{MD_CONTAINER}", ENV{MD_MON_THIS}="%c" +ENV{MD_MON_THIS}=="?*", PROGRAM="/usr/bin/basename $env{MD_MON_THIS}", ENV{SYSTEMD_WANTS}+="mdmon@%c.service" + +LABEL="md_end"
package/petitboot/65-md-incremental.rules new file +69 -0
69 lines not on this page · raw message
package/petitboot/petitboot.mk +10 -0
@@ -46,6 +46,16 @@ else PETITBOOT_CONF_OPTS += --without-fdt endif +ifeq ($(BR2_PACKAGE_MDADM),y) +define PETITBOOT_POST_INSTALL_MDADM + $(INSTALL) -D -m 0755 $(PETITBOOT_PKGDIR)/63-md-raid-arrays.rules \ + $(TARGET_DIR)/etc/udev/rules.d/63-md-raid-arrays.rules + $(INSTALL) -D -m 0755 $(PETITBOOT_PKGDIR)/65-md-incremental.rules \ + $(TARGET_DIR)/etc/udev/rules.d/65-md-incremental.rules +endef +PETITBOOT_POST_INSTALL_TARGET_HOOKS += PETITBOOT_POST_INSTALL_MDADM +endif + define PETITBOOT_POST_INSTALL $(INSTALL) -D -m 0755 $(@D)/utils/bb-kexec-reboot \ $(TARGET_DIR)/usr/libexec/petitboot/bb-kexec-reboot
Signature · 6 lines
2.39.3 _______________________________________________ buildroot mailing list [email protected] https://lists.buildroot.org/mailman/listinfo/buildroot
Re: [Buildroot] [PATCH 4/5] package/petitboot: enable discovery of software RAID devices
Le 06/09/2023 à 21:46, Reza Arbab a écrit :
Quoted 145 lines
Petitboot can support filesystems on software RAID arrays. If mdadm is selected, install the associated udev rules to assemble the device.
Signed-off-by Reza Arbab <[email protected]>--- package/petitboot/63-md-raid-arrays.rules | 41 ++++++++++++++ package/petitboot/65-md-incremental.rules | 69 +++++++++++++++++++++++ package/petitboot/petitboot.mk | 10 ++++ 3 files changed, 120 insertions(+)create mode 100644 package/petitboot/63-md-raid-arrays.rules create mode 100644 package/petitboot/65-md-incremental.rules
package/petitboot/63-md-raid-arrays.rules new file +41
-0@@ -0,0 +1,41 @@ +# do not edit this file, it will be overwritten on update + +SUBSYSTEM!="block", GOTO="md_end" + +# handle md arrays +ACTION!="add|change", GOTO="md_end" +KERNEL!="md*", GOTO="md_end" + +# partitions have no md/{array_state,metadata_version}, but should not +# for that reason be ignored. +ENV{DEVTYPE}=="partition", GOTO="md_ignore_state" + +# container devices have a metadata version of e.g. 'external:ddf' and +# never leave state 'inactive' +ATTR{md/metadata_version}=="external:[A-Za-z]*", ATTR{md/array_state}=="inactive", GOTO="md_ignore_state" +TEST!="md/array_state", ENV{SYSTEMD_READY}="0", GOTO="md_end" +ATTR{md/array_state}=="|clear|inactive", ENV{SYSTEMD_READY}="0", GOTO="md_end" +LABEL="md_ignore_state" + +IMPORT{program}="/sbin/mdadm --detail --export $devnode" +ENV{DEVTYPE}=="disk", ENV{MD_NAME}=="?*", SYMLINK+="disk/by-id/md-name-$env{MD_NAME}", OPTIONS+="string_escape=replace" +ENV{DEVTYPE}=="disk", ENV{MD_UUID}=="?*", SYMLINK+="disk/by-id/md-uuid-$env{MD_UUID}" +ENV{DEVTYPE}=="disk", ENV{MD_DEVNAME}=="?*", SYMLINK+="md/$env{MD_DEVNAME}" +ENV{DEVTYPE}=="partition", ENV{MD_NAME}=="?*", SYMLINK+="disk/by-id/md-name-$env{MD_NAME}-part%n", OPTIONS+="string_escape=replace" +ENV{DEVTYPE}=="partition", ENV{MD_UUID}=="?*", SYMLINK+="disk/by-id/md-uuid-$env{MD_UUID}-part%n" +ENV{DEVTYPE}=="partition", ENV{MD_DEVNAME}=="*[^0-9]", SYMLINK+="md/$env{MD_DEVNAME}%n" +ENV{DEVTYPE}=="partition", ENV{MD_DEVNAME}=="*[0-9]", SYMLINK+="md/$env{MD_DEVNAME}p%n" + +IMPORT{builtin}="blkid" +OPTIONS+="link_priority=100" +OPTIONS+="watch" +ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}" +ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}" + +ENV{MD_LEVEL}=="raid[1-9]*", ENV{SYSTEMD_WANTS}+="mdmonitor.service" + +# Tell systemd to run mdmon for our container, if we need it. +ENV{MD_LEVEL}=="raid[1-9]*", ENV{MD_CONTAINER}=="?*", PROGRAM="/usr/bin/readlink $env{MD_CONTAINER}", ENV{MD_MON_THIS}="%c" +ENV{MD_MON_THIS}=="?*", PROGRAM="/usr/bin/basename $env{MD_MON_THIS}", ENV{SYSTEMD_WANTS}+="mdmon@%c.service" + +LABEL="md_end"package/petitboot/65-md-incremental.rules new file +69
-0@@ -0,0 +1,69 @@ +# This file causes block devices with Linux RAID (mdadm) signatures to +# automatically cause mdadm to be run. +# See udev(8) for syntax + +# Don't process any events if anaconda is running as anaconda brings up +# raid devices manually +ENV{ANACONDA}=="?*", GOTO="md_end" + +# Also don't process disks that are slated to be a multipath device +ENV{DM_MULTIPATH_DEVICE_PATH}=="?*", GOTO="md_end" + +# We process add events on block devices (since they are ready as soon as +# they are added to the system), but we must process change events as well +# on any dm devices (like LUKS partitions or LVM logical volumes) and on +# md devices because both of these first get added, then get brought live +# and trigger a change event. The reason we don't process change events +# on bare hard disks is because if you stop all arrays on a disk, then +# run fdisk on the disk to change the partitions, when fdisk exits it +# triggers a change event, and we want to wait until all the fdisks on +# all member disks are done before we do anything. Unfortunately, we have +# no way of knowing that, so we just have to let those arrays be brought +# up manually after fdisk has been run on all of the disks. + +# First, process all add events (md and dm devices will not really do +# anything here, just regular disks, and this also won't get any imsm +# array members either) +SUBSYSTEM=="block", ACTION=="add|change", ENV{ID_FS_TYPE}=="linux_raid_member", \ + RUN+="/sbin/mdadm -I --export $env{DEVNAME}" + +# Next, check to make sure the BIOS raid stuff wasn't turned off via cmdline +IMPORT{cmdline}="noiswmd" +IMPORT{cmdline}="nodmraid" +ENV{noiswmd}=="?*", GOTO="md_imsm_inc_end" +ENV{nodmraid}=="?*", GOTO="md_imsm_inc_end" +SUBSYSTEM=="block", ACTION=="add", ENV{ID_FS_TYPE}=="isw_raid_member", \ + RUN+="/sbin/mdadm -I $env{DEVNAME}" +LABEL="md_imsm_inc_end" + +SUBSYSTEM=="block", ACTION=="remove", ENV{ID_PATH}=="?*", \ + RUN+="/sbin/mdadm -If $name --path $env{ID_PATH}" +SUBSYSTEM=="block", ACTION=="remove", ENV{ID_PATH}!="?*", \ + RUN+="/sbin/mdadm -If $name" + +# Next make sure that this isn't a dm device we should skip for some reason +ENV{DM_UDEV_RULES_VSN}!="?*", GOTO="dm_change_end" +ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", GOTO="dm_change_end" +ENV{DM_SUSPENDED}=="1", GOTO="dm_change_end" +KERNEL=="dm-*", SUBSYSTEM=="block", ENV{ID_FS_TYPE}=="linux_raid_member", \ + ACTION=="change", RUN+="/sbin/mdadm -I $env{DEVNAME}" +LABEL="dm_change_end" + +# Finally catch any nested md raid arrays. If we brought up an md raid +# array that's part of another md raid array, it won't be ready to be used +# until the change event that occurs when it becomes live +KERNEL=="md*", SUBSYSTEM=="block", ENV{ID_FS_TYPE}=="linux_raid_member", \ + ACTION=="change", RUN+="/sbin/mdadm -I $env{DEVNAME}" + +# In case the initramfs only started some of the arrays in our container, +# run incremental assembly on the container itself. Note: we ran mdadm +# on the container in 64-md-raid.rules, and that's how the MD_LEVEL +# environment variable is already set. If that disappears from the other +# file, we will need to add this line into the middle of the next rule: +# IMPORT{program}="/sbin/mdadm -D --export $tempnode", \ + +SUBSYSTEM=="block", ACTION=="add|change", KERNEL=="md*", \ + ENV{MD_LEVEL}=="container", RUN+="/sbin/mdadm -I $env{DEVNAME}" + + +LABEL="md_end"package/petitboot/petitboot.mk +3
-0@@ -46,6 +46,16 @@ else PETITBOOT_CONF_OPTS += --without-fdt endif +ifeq ($(BR2_PACKAGE_MDADM),y) +define PETITBOOT_POST_INSTALL_MDADM + $(INSTALL) -D -m 0755 $(PETITBOOT_PKGDIR)/63-md-raid-arrays.rules \
package/petitboot/petitboot.mk else · line 61
Quoted 10 lines
package/petitboot/petitboot.mk +7
-0+ $(TARGET_DIR)/etc/udev/rules.d/63-md-raid-arrays.rules + $(INSTALL) -D -m 0755 $(PETITBOOT_PKGDIR)/65-md-incremental.rules \ + $(TARGET_DIR)/etc/udev/rules.d/65-md-incremental.rules +endef +PETITBOOT_POST_INSTALL_TARGET_HOOKS += PETITBOOT_POST_INSTALL_MDADM +endif + define PETITBOOT_POST_INSTALL $(INSTALL) -D -m 0755 $(@D)/utils/bb-kexec-reboot \ $(TARGET_DIR)/usr/libexec/petitboot/bb-kexec-reboot
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot
PATCH 5/5 package/petitboot: enable discovery of SCSI devices
In reply to Reza ArbabIt's likely that the "sg" kernel driver needed to scan SCSI devices is a module. Install a udev rule to load it automatically when devices are present.
--- package/petitboot/66-add-sg-module.rules | 2 ++ package/petitboot/petitboot.mk | 2 ++ 2 files changed, 4 insertions(+) create mode 100644 package/petitboot/66-add-sg-module.rules
package/petitboot/66-add-sg-module.rules new file +2 -0
@@ -0,0 +1,2 @@ +# load modules to scsi disks, if they aren't in kernel +SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST!="[module/sg]", RUN+="/sbin/modprobe sg"
package/petitboot/petitboot.mk +2 -0
@@ -63,6 +63,8 @@ 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) -D -m 0755 $(PETITBOOT_PKGDIR)/66-add-sg-module.rules \ + $(TARGET_DIR)/etc/udev/rules.d/66-add-sg-module.rules $(INSTALL) -m 0755 -D $(PETITBOOT_PKGDIR)/S15pb-discover \ $(TARGET_DIR)/etc/init.d/S15pb-discover $(INSTALL) -D -m 0755 $(PETITBOOT_PKGDIR)/petitboot-console-ui.rules \
Signature · 6 lines
2.39.3 _______________________________________________ buildroot mailing list [email protected] https://lists.buildroot.org/mailman/listinfo/buildroot
Re: [Buildroot] [PATCH 5/5] package/petitboot: enable discovery of SCSI devices
Le 06/09/2023 à 21:46, Reza Arbab a écrit :
Quoted 24 lines
It's likely that the "sg" kernel driver needed to scan SCSI devices is a module. Install a udev rule to load it automatically when devices are present.
Signed-off-by Reza Arbab <[email protected]>--- package/petitboot/66-add-sg-module.rules | 2 ++ package/petitboot/petitboot.mk | 2 ++ 2 files changed, 4 insertions(+)create mode 100644 package/petitboot/66-add-sg-module.rules
package/petitboot/66-add-sg-module.rules new file +2
-0@@ -0,0 +1,2 @@ +# load modules to scsi disks, if they aren't in kernel +SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST!="[module/sg]", RUN+="/sbin/modprobe sg"package/petitboot/petitboot.mk +0
-0
package/petitboot/petitboot.mk define PETITBOOT_POST_INSTALL · line 70
Quoted 8 lines
package/petitboot/petitboot.mk +2
-0@@ -63,6 +63,8 @@ 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) -D -m 0755 $(PETITBOOT_PKGDIR)/66-add-sg-module.rules \ + $(TARGET_DIR)/etc/udev/rules.d/66-add-sg-module.rules $(INSTALL) -m 0755 -D $(PETITBOOT_PKGDIR)/S15pb-discover \ $(TARGET_DIR)/etc/init.d/S15pb-discover $(INSTALL) -D -m 0755 $(PETITBOOT_PKGDIR)/petitboot-console-ui.rules \
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot