Skip to contentSkip to conversation

package/petitboot: misc enhancement

PATCH Applied Reza Arbab 4 participants 16 messages Sep 15, 2023 – Sep 19, 2023

v2 of 5 Applied Latest is v5 →

lore
Share & tools
lore

Reza Arbab

author
#0 lore raw

v2 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
---
v2:
* Use Laurent's suggested additions to "run pb-console at boot" patch.

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 |  5 ++
 package/petitboot/petitboot.mk               | 20 +++++-
 package/petitboot/removable-event-poll.rules |  3 +
 package/petitboot/sysctl.conf                |  1 +
 system/Config.in                             |  2 +-
 8 files changed, 141 insertions(+), 2 deletions(-)
 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 v2 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
#2 lore raw

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

Quoted 6 lines · Reza Arbab

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.

Applied to master, thanks.

Regards,
Arnout

Quoted 9 lines
---
  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

author
#3 lore raw

PATCH v2 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 instead of getty. 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.

---
v2:
* Add ttyGF* to list of commonly-known consoles.
* Don't select BR2_TARGET_GENERIC_GETTY by default.

 package/petitboot/petitboot-console-ui.rules | 5 +++++
 package/petitboot/petitboot.mk               | 4 ++++
 package/petitboot/sysctl.conf                | 1 +
 system/Config.in                             | 2 +-
 4 files changed, 11 insertions(+), 1 deletion(-)
 create mode 100644 package/petitboot/petitboot-console-ui.rules
 create mode 100644 package/petitboot/sysctl.conf
package/petitboot/petitboot-console-ui.rules new file +5 -0
new file mode 100644
index 000000000000..e5c188387bc5
@@ -0,0 +1,5 @@
+# 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=="ttyGF*", 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
system/Config.in +1 -1
index 24798dc06803..9587dd9ce4db 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
Signature · 6 lines
2.39.3

_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot
#4 lore raw

Re: [Buildroot] [PATCH v2 2/5] package/petitboot: run pb-console at boot

Quoted 25 lines · Reza Arbab

Install a udev rule to run the petitboot UI on commonly-known consoles instead of getty. 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.

---
v2:
* Add ttyGF* to list of commonly-known consoles.
* Don't select BR2_TARGET_GENERIC_GETTY by default.

  package/petitboot/petitboot-console-ui.rules | 5 +++++
  package/petitboot/petitboot.mk               | 4 ++++
  package/petitboot/sysctl.conf                | 1 +
  system/Config.in                             | 2 +-
  4 files changed, 11 insertions(+), 1 deletion(-)

create mode 100644 package/petitboot/petitboot-console-ui.rules create mode 100644 package/petitboot/sysctl.conf

package/petitboot/petitboot-console-ui.rules new file +0 -0
new file mode 100644
index 000000000000..e5c188387bc5

package/petitboot/petitboot-console-ui.rules line 5

Quoted 5 lines
package/petitboot/petitboot-console-ui.rules new file +5 -0
@@ -0,0 +1,5 @@
+# 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=="ttyGF*", 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"

In general, it's quite likely that there are some serial ports where some
device is connected rather that a console (e.g. GPS, Bluetooth, cell modem, ...). So starting pb-console on "anything that looks ike a serial port" is a bad idea.

In Buildroot, we by default assume that the console is on /dev/console - which
is why that is the default for BR2_TARGET_GENERIC_GETTY_PORT. If it's needed to run pb-console on a different port or ports than the default /dev/console, then that's a system-specific configuration.

I see no way we can have this generic assumption of "all ttys need pb-console"
in Buildroot.

It _does_ make sense, however, to put pb-console on /dev/console. However,
wouldn't it make more sense to do that in inittab instead of with a udev rule - like the getty line?

BTW, I don't understand why you even have a KERNEL filter. Anything that is a
tty could be the console, no?

Quoted 21 lines
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 +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'm not sure how useful this is... There is still output from the init scripts
coming on the console, so why block the kernel output but not those? In addition, by the time we get to S10udev (or definitely by the time we get to the inittab stuff), most kernel output has already passed.

system/Config.in config BR2_SYSTEM_BIN_SH · line 378

Quoted 10 lines
system/Config.in +1 -1
index 24798dc06803..9587dd9ce4db 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

Ugh, this is super ugly to have to do something petitboot-specific in the
system menu. But I don't readily know a better way to do this.

Regards,
Arnout

system/Config.in config BR2_SYSTEM_BIN_SH · line 381

Quoted 3 lines
system/Config.in +0 -0
  if BR2_TARGET_GENERIC_GETTY
  config BR2_TARGET_GENERIC_GETTY_PORT

_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot

author
#5 lore raw

Re: [Buildroot] [PATCH v2 2/5] package/petitboot: run pb-console at boot

Quoted 11 lines · Arnout Vandecappelle

package/petitboot/petitboot-console-ui.rules line 5

Quoted 8 lines
package/petitboot/petitboot-console-ui.rules new file +5 -0
@@ -0,0 +1,5 @@
+# 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=="ttyGF*", 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"

In general, it's quite likely that there are some serial ports where some device is connected rather that a console (e.g. GPS, Bluetooth, cell modem, ...). So starting pb-console on "anything that looks ike a serial port" is a bad idea.

Quoted 5 lines

In Buildroot, we by default assume that the console is on /dev/console - which is why that is the default for BR2_TARGET_GENERIC_GETTY_PORT. If it's needed to run pb-console on a different port or ports than the default /dev/console, then that's a system-specific configuration.

I see no way we can have this generic assumption of "all ttys need pb-console" in Buildroot.

It _does_ make sense, however, to put pb-console on /dev/console.

Fair point. The intention is just to replace the login prompt with a petitboot menu, so if buildroot only assumes /dev/console for getty by default, then this should too. As you say, anything more can be system-specific.

Quoted 1 line

However, wouldn't it make more sense to do that in inittab instead of with a udev rule - like the getty line?

This part I'm not sure about. In the petitboot docs it does say "it is useful to have this called by udev", but not why that way specifically.

http://open-power.github.io/petitboot/dev/linux-image.html

Quoted 1 line

BTW, I don't understand why you even have a KERNEL filter. Anything that is a tty could be the console, no?

The filters are very broad, but I guess still an attempt to limit things to the enumerated "common user-visible interface devices" instead of being totally open-ended.

Quoted 6 lines

package/petitboot/sysctl.conf line 1

Quoted 4 lines
package/petitboot/sysctl.conf new file +1 -0
@@ -0,0 +1 @@
+kernel.printk = 1 1 1 1

I'm not sure how useful this is... There is still output from the init scripts coming on the console, so why block the kernel output but not those? In addition, by the time we get to S10udev (or definitely by the time we get to the inittab stuff), most kernel output has already passed.

Boot output has passed, but pb-discover is in the background populating the boot menu with bootable images via disk and network, and I think there can be enough kernel noise at runtime to motivate minimizing it.

Thanks for the review. I'll reevaluate what changes are appropriate to carry in buildroot vs elsewhere.

Signature · 5 lines
Reza Arbab
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot
Reviewed-by on v2 2/5
#6 lore raw

Re: [Buildroot] [PATCH v2 2/5] package/petitboot: run pb-console at boot

In reply to Reza Arbab
Quoted 7 lines · Reza Arbab

Install a udev rule to run the petitboot UI on commonly-known consoles instead of getty. 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.

Quoted 60 lines

---
v2:
* Add ttyGF* to list of commonly-known consoles.
* Don't select BR2_TARGET_GENERIC_GETTY by default.

 package/petitboot/petitboot-console-ui.rules | 5 +++++
 package/petitboot/petitboot.mk               | 4 ++++
 package/petitboot/sysctl.conf                | 1 +
 system/Config.in                             | 2 +-
 4 files changed, 11 insertions(+), 1 deletion(-)
 create mode 100644 package/petitboot/petitboot-console-ui.rules
 create mode 100644 package/petitboot/sysctl.conf
package/petitboot/petitboot-console-ui.rules new file +5 -0
new file mode 100644
index 000000000000..e5c188387bc5
@@ -0,0 +1,5 @@
+# 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=="ttyGF*", 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
system/Config.in +1 -2
index 24798dc06803..9587dd9ce4db 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
--
Quoted 2 lines

2.39.3

_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot

Reviewed-by on v2 2/5
#7 lore raw

Re: [Buildroot] [PATCH v2 2/5] package/petitboot: run pb-console at boot

In reply to Reza Arbab

Le 15/09/2023 à 17:58, Reza Arbab a écrit :

Quoted 57 lines

Install a udev rule to run the petitboot UI on commonly-known consoles instead of getty. 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.

---
v2:
* Add ttyGF* to list of commonly-known consoles.
* Don't select BR2_TARGET_GENERIC_GETTY by default.

  package/petitboot/petitboot-console-ui.rules | 5 +++++
  package/petitboot/petitboot.mk               | 4 ++++
  package/petitboot/sysctl.conf                | 1 +
  system/Config.in                             | 2 +-
  4 files changed, 11 insertions(+), 1 deletion(-)

create mode 100644 package/petitboot/petitboot-console-ui.rules create mode 100644 package/petitboot/sysctl.conf

package/petitboot/petitboot-console-ui.rules new file +5 -0
new file mode 100644
index 000000000000..e5c188387bc5
@@ -0,0 +1,5 @@
+# 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=="ttyGF*", 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
system/Config.in +0 -0
index 24798dc06803..9587dd9ce4db 100644

system/Config.in config BR2_SYSTEM_BIN_SH · line 381

Quoted 8 lines
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

_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot

author
#8 lore raw

PATCH v2 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 v2 3/5
#9 lore raw

Re: [Buildroot] [PATCH v2 3/5] package/petitboot: poll removable devices

Quoted 6 lines · Reza Arbab

Add a udev rule to enable notification of media change events on removable devices, so petitboot can dynamically adapt to them.

Quoted 29 lines
---
 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 -1
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"
--
Quoted 2 lines

2.39.3

_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot

author
#10 lore raw

PATCH v2 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
#11 lore raw

Re: [Buildroot] [PATCH v2 4/5] package/petitboot: enable discovery of software RAID devices

Quoted 2 lines · Reza Arbab

Petitboot can support filesystems on software RAID arrays. If mdadm is selected, install the associated udev rules to assemble the device.

Wow, this looks again like something very specific and way outside what we
normally do in Buildroot. If it's appropriate to do this, I think it makes a lot more sense to have this as part of petitboot itself.

So I suggest to send these udev rules to petitboot upstream instead, and
install them as part of the package installation.

Regards,
Arnout

Quoted 144 lines
---
  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

Reviewed-by on v2 4/5
#12 lore raw

Re: [Buildroot] [PATCH v2 4/5] package/petitboot: enable discovery of software RAID devices

In reply to Reza Arbab
Quoted 6 lines · Reza Arbab

Petitboot can support filesystems on software RAID arrays. If mdadm is selected, install the associated udev rules to assemble the device.

Quoted 152 lines
---
 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 +10 -1
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
--
Quoted 2 lines

2.39.3

_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot

author
#13 lore raw

PATCH v2 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
#14 lore raw

Re: [Buildroot] [PATCH v2 5/5] package/petitboot: enable discovery of SCSI devices

Quoted 3 lines · 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.

This is completely independent of petitboot. If the system is likely to have
SCSI devices and scsi generic is built as a module, it's up to the user to make sure that module is loaded.

Regards,
Arnout

Quoted 22 lines
---
  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

Reviewed-by on v2 5/5
#15 lore raw

Re: [Buildroot] [PATCH v2 5/5] package/petitboot: enable discovery of SCSI devices

In reply to Reza Arbab
Quoted 7 lines · 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.

Quoted 28 lines
---
 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 -1
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 \
--
Quoted 2 lines

2.39.3

_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot