Skip to contentSkip to conversation

package/petitboot: misc enhancement

PATCH Superseded Reza Arbab 3 participants 14 messages Sep 6, 2023 – Sep 25, 2023

v1 of 5 Superseded Latest is v5 →

lore
Share & tools
lore

Reza Arbab

author
#0 lore raw

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
author
#1 lore raw

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
index 8b4c14207ec4..8d220f88f45a 100644
@@ -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
Reviewed-by on v1 1/5
#2 lore raw

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_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 +0 -0
index 8b4c14207ec4..8d220f88f45a 100644

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

#3 lore raw

Re: [Buildroot] [PATCH 1/5] package/petitboot: fix HOST_PROG_SHUTDOWN value

In reply to Reza Arbab
Quoted 7 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

"Reza" == Reza Arbab <[email protected]> writes:

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.

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
author
#4 lore raw

PATCH 2/5 package/petitboot: run pb-console at boot

In reply to Reza Arbab

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.

---
 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
new file mode 100644
index 000000000000..de3b4b1c035f
@@ -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
index 8d220f88f45a..556d41230237 100644
@@ -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
new file mode 100644
index 000000000000..02ab8e3275b5
@@ -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
#5 lore raw

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.

---
  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
new file mode 100644
index 000000000000..de3b4b1c035f
@@ -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..556d41230237 100644

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 +0 -0
new file mode 100644
index 000000000000..02ab8e3275b5

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
index 1ca7690ea3ba..786ec9a1c6b3 100644
@@ -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

author
#6 lore raw

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 -0

Could 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
index 1ca7690ea3ba..786ec9a1c6b3 100644
@@ -375,7 +375,7 @@ config BR2_SYSTEM_BIN_SH
 

menuconfig 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
config BR2_TARGET_GENERIC_GETTY_PORT

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.

Signature · 5 lines
Reza Arbab
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot
author
#7 lore raw

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
index 1ca7690ea3ba..786ec9a1c6b3 100644
@@ -375,7 +375,7 @@ config BR2_SYSTEM_BIN_SH
 

menuconfig 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

if BR2_TARGET_GENERIC_GETTY
config BR2_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
author
#8 lore raw

PATCH 3/5 package/petitboot: poll removable devices

In reply to Reza Arbab

Add 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
index 556d41230237..9326738aa038 100644
@@ -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
new file mode 100644
index 000000000000..57bb74d3c00c
@@ -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
Reviewed-by on v1 3/5
#9 lore raw

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.

---
  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
index 556d41230237..9326738aa038 100644
@@ -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
new file mode 100644
index 000000000000..57bb74d3c00c

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

author
#10 lore raw

PATCH 4/5 package/petitboot: enable discovery of software RAID devices

In reply to Reza Arbab

Petitboot 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
new file mode 100644
index 000000000000..92aec36e69d4
@@ -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
index 9326738aa038..596e801b781c 100644
@@ -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
Reviewed-by on v1 4/5
#11 lore raw

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.

---
  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
new file mode 100644
index 000000000000..92aec36e69d4
@@ -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
new file mode 100644
index 000000000000..153d12fe6f7e
@@ -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
index 9326738aa038..596e801b781c 100644
@@ -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

author
#12 lore raw

PATCH 5/5 package/petitboot: enable discovery of SCSI devices

In reply to Reza Arbab

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.

---
 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
new file mode 100644
index 000000000000..ae18d28c570e
@@ -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
index 596e801b781c..590b58e9c71a 100644
@@ -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
Reviewed-by on v1 5/5
#13 lore raw

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.

---
  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
new file mode 100644
index 000000000000..ae18d28c570e
@@ -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
index 596e801b781c..590b58e9c71a 100644

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