diff --git a/meson.build b/meson.build index c64dcb78c1..9e4a29d612 100644 --- a/meson.build +++ b/meson.build @@ -237,14 +237,27 @@ foreach file : dracut_conf_files ) endforeach +systemd_files = [ + 'nvmefc-boot-connections.service', + 'nvmf-autoconnect.service', + 'nvmf-connect-nbft.service', + 'nvmf-connect.target', + 'nvmf-connect@.service', +] + want_dracut_module = get_option('dracut-module') if want_dracut_module - dracut_nbft_files = [ - 'module-setup.sh', + systemd_files += [ 'nbft-boot-pre.service', 'nbft-boot-connect.service' ] + dracut_nbft_files = [ + 'module-setup.sh', + 'nbft-boot-pre-dracut.conf', + 'nbft-boot-connect-dracut.conf' + ] + foreach file : dracut_nbft_files configure_file( input: 'nvmf-autoconnect/dracut-95nbft/' + file + '.in', @@ -278,14 +291,6 @@ if want_dracut_module endforeach endif -systemd_files = [ - 'nvmefc-boot-connections.service', - 'nvmf-autoconnect.service', - 'nvmf-connect-nbft.service', - 'nvmf-connect.target', - 'nvmf-connect@.service', -] - foreach file : systemd_files configure_file( input: 'nvmf-autoconnect/systemd/' + file + '.in', diff --git a/nvmf-autoconnect/dracut-95nbft/README.md b/nvmf-autoconnect/dracut-95nbft/README.md index c5505cafc7..ab55a8b4f0 100644 --- a/nvmf-autoconnect/dracut-95nbft/README.md +++ b/nvmf-autoconnect/dracut-95nbft/README.md @@ -9,6 +9,9 @@ While this module is currently built around dracut, the amount of dracut involvement in this module is kept to a required minimum with the intention of supporting more initramfs frameworks (like `mkosi`) in the future. +This is achieved by splitting the framework-specific directives into systemd +unit dropins while keeping the main unit files generic. + Related nvme-cli meson configure options: * `-Ddracut-module` (default=false) - enables the 95nbft dracut module * `-Ddracutmodulesdir` (default=`$prefix/lib/dracut/modules.d/`) diff --git a/nvmf-autoconnect/dracut-95nbft/module-setup.sh.in b/nvmf-autoconnect/dracut-95nbft/module-setup.sh.in index b7fb932368..a91ea6aa1e 100755 --- a/nvmf-autoconnect/dracut-95nbft/module-setup.sh.in +++ b/nvmf-autoconnect/dracut-95nbft/module-setup.sh.in @@ -41,10 +41,16 @@ install() { # TODO: /etc/nvme/hostnqn inst_multiple "$systemdsystemunitdir"/modprobe@.service + + inst_simple "$moddir/nbft-boot-pre-dracut.conf" \ + "$systemdsystemunitdir/nbft-boot-pre.service.d/nbft-boot-pre-dracut.conf" + inst_simple "$moddir/nbft-boot-connect-dracut.conf" \ + "$systemdsystemunitdir/nbft-boot-connect.service.d/nbft-boot-connect-dracut.conf" + for i in \ nbft-boot-pre.service \ nbft-boot-connect.service; do - inst_simple "${moddir}/$i" "${systemdsystemunitdir}/$i" + inst_multiple "${systemdsystemunitdir}/$i" $SYSTEMCTL -q --root "$initdir" enable $i done } diff --git a/nvmf-autoconnect/dracut-95nbft/nbft-boot-connect-dracut.conf.in b/nvmf-autoconnect/dracut-95nbft/nbft-boot-connect-dracut.conf.in new file mode 100644 index 0000000000..0a00659335 --- /dev/null +++ b/nvmf-autoconnect/dracut-95nbft/nbft-boot-connect-dracut.conf.in @@ -0,0 +1,2 @@ +[Unit] +Before=dracut-initqueue.service diff --git a/nvmf-autoconnect/dracut-95nbft/nbft-boot-pre-dracut.conf.in b/nvmf-autoconnect/dracut-95nbft/nbft-boot-pre-dracut.conf.in new file mode 100644 index 0000000000..212a337f49 --- /dev/null +++ b/nvmf-autoconnect/dracut-95nbft/nbft-boot-pre-dracut.conf.in @@ -0,0 +1,6 @@ +[Unit] +Before=dracut-cmdline.service + +[Service] +# Tell dracut to start networking +ExecStart=bash -c 'echo rd.neednet=1 > /etc/cmdline.d/95nbft-args.conf' diff --git a/nvmf-autoconnect/dracut-95nbft/nbft-boot-connect.service.in b/nvmf-autoconnect/systemd/nbft-boot-connect.service.in similarity index 85% rename from nvmf-autoconnect/dracut-95nbft/nbft-boot-connect.service.in rename to nvmf-autoconnect/systemd/nbft-boot-connect.service.in index 1e4b88431e..dd16ed0bc0 100644 --- a/nvmf-autoconnect/dracut-95nbft/nbft-boot-connect.service.in +++ b/nvmf-autoconnect/systemd/nbft-boot-connect.service.in @@ -1,4 +1,5 @@ -# This unit parses the ACPI NBFT table and performs actual NVMe/TCP connections +# Establish NVMe/TCP connections as defined in the ACPI NBFT table + [Unit] # Prevent deadlock by avoiding systemd adding dependencies # on unreachable targets. @@ -11,7 +12,6 @@ After=modprobe@nvme_fabrics.service Wants=network-online.target After=network-online.target Before=remote-fs-pre.target -Before=dracut-initqueue.service [Service] RestrictAddressFamilies=AF_INET AF_INET6 diff --git a/nvmf-autoconnect/dracut-95nbft/nbft-boot-pre.service.in b/nvmf-autoconnect/systemd/nbft-boot-pre.service.in similarity index 60% rename from nvmf-autoconnect/dracut-95nbft/nbft-boot-pre.service.in rename to nvmf-autoconnect/systemd/nbft-boot-pre.service.in index e2d334f4f6..9995c90292 100644 --- a/nvmf-autoconnect/dracut-95nbft/nbft-boot-pre.service.in +++ b/nvmf-autoconnect/systemd/nbft-boot-pre.service.in @@ -1,20 +1,17 @@ -# This unit checks for the ACPI NBFT table presence and tells -# dracut to activate networking. +# This unit checks for the ACPI NBFT table presence and sets up +# defined network interfaces + [Unit] DefaultDependencies=no # Specify 'rd.nvmf.nonbft' to disable NBFT boot ConditionKernelCommandLine=!rd.nvmf.nonbft ConditionPathExistsGlob=/sys/firmware/acpi/tables/NBFT* -Before=dracut-cmdline.service [Service] Type=oneshot -RemainAfterExit=yes ExecStartPre=-/usr/bin/mkdir -p /etc/systemd/network # generate udev link files ExecStart=/usr/sbin/nvme nbft gen-udev-link-files /etc/systemd/network/ -# tell dracut to start the network -ExecStart=bash -c 'echo rd.neednet=1 > /etc/cmdline.d/95nbft-args.conf' [Install] WantedBy=sysinit.target