From c570db304af0107dd66fec0a41a3b7c1786ef923 Mon Sep 17 00:00:00 2001 From: Ben Cressey Date: Fri, 8 Jul 2022 06:10:55 +0000 Subject: [PATCH] release: defer squashfs mounts Mounting `/usr/share/licenses` and `/usr/src/kernels` can add up to one second of delay before reaching `local-fs.target`. It's not necessary to read software licenses or build out-of-tree kernel modules at this stage in the boot process. Moving the mounts after `local-fs.target` doesn't eliminate the delay, but does allow the system to do other useful work in parallel, like acquiring DHCP leases and applying settings. Signed-off-by: Ben Cressey --- ...ules.service => link-kernel-modules.service.in} | 1 + ...ules.service => load-kernel-modules.service.in} | 1 + packages/os/os.spec | 14 ++++++++++---- packages/release/usr-share-licenses.mount.in | 4 ++-- packages/release/usr-src-kernels.mount.in | 3 ++- .../release/var-lib-kernel-devel-lower.mount.in | 4 ++-- 6 files changed, 18 insertions(+), 9 deletions(-) rename packages/os/{link-kernel-modules.service => link-kernel-modules.service.in} (90%) rename packages/os/{load-kernel-modules.service => load-kernel-modules.service.in} (88%) diff --git a/packages/os/link-kernel-modules.service b/packages/os/link-kernel-modules.service.in similarity index 90% rename from packages/os/link-kernel-modules.service rename to packages/os/link-kernel-modules.service.in index 9e6f4467c32..79e5956b4ab 100644 --- a/packages/os/link-kernel-modules.service +++ b/packages/os/link-kernel-modules.service.in @@ -1,5 +1,6 @@ [Unit] Description=Link additional kernel modules +RequiresMountsFor=PREFIX/lib/modules PREFIX/src/kernels # Rerunning this service after the system is fully loaded will override # the already linked kernel modules. This doesn't affect the running system, # since kernel modules are linked early in the boot sequence, but we still diff --git a/packages/os/load-kernel-modules.service b/packages/os/load-kernel-modules.service.in similarity index 88% rename from packages/os/load-kernel-modules.service rename to packages/os/load-kernel-modules.service.in index 63eed314d88..ce8416bfe14 100644 --- a/packages/os/load-kernel-modules.service +++ b/packages/os/load-kernel-modules.service.in @@ -1,5 +1,6 @@ [Unit] Description=Load additional kernel modules +RequiresMountsFor=PREFIX/lib/modules PREFIX/src/kernels After=link-kernel-modules.service Requires=link-kernel-modules.service # Disable manual restarts to prevent loading kernel modules diff --git a/packages/os/os.spec b/packages/os/os.spec index 1170a9f9307..acb55c93ea3 100644 --- a/packages/os/os.spec +++ b/packages/os/os.spec @@ -43,8 +43,8 @@ Source111: metricdog.service Source112: metricdog.timer Source113: send-boot-success.service Source114: bootstrap-containers@.service -Source115: link-kernel-modules.service -Source116: load-kernel-modules.service +Source115: link-kernel-modules.service.in +Source116: load-kernel-modules.service.in Source117: cfsignal.service Source118: generate-network-config.service Source119: prepare-primary-interface.service @@ -430,10 +430,16 @@ install -p -m 0644 \ %{S:100} %{S:101} %{S:102} %{S:103} %{S:105} \ %{S:106} %{S:107} %{S:110} %{S:111} %{S:112} \ %{S:113} %{S:114} %{S:118} %{S:119} \ + %{buildroot}%{_cross_unitdir} + %if %{_is_vendor_variant} - %{S:115} %{S:116} \ -%endif +sed -e 's|PREFIX|%{_cross_prefix}|g' %{S:115} > link-kernel-modules.service +sed -e 's|PREFIX|%{_cross_prefix}|g' %{S:116} > load-kernel-modules.service +install -p -m 0644 \ + link-kernel-modules.service \ + load-kernel-modules.service \ %{buildroot}%{_cross_unitdir} +%endif %if %{_is_aws_variant} install -p -m 0644 %{S:9} %{buildroot}%{_cross_templatedir} diff --git a/packages/release/usr-share-licenses.mount.in b/packages/release/usr-share-licenses.mount.in index fd294cc443f..11d77dd6163 100644 --- a/packages/release/usr-share-licenses.mount.in +++ b/packages/release/usr-share-licenses.mount.in @@ -2,8 +2,8 @@ Description=License files DefaultDependencies=no Conflicts=umount.target -Before=local-fs.target umount.target -After=local-fs-pre.target +Before=umount.target +After=local-fs.target [Mount] What=PREFIX/share/bottlerocket/licenses.squashfs diff --git a/packages/release/usr-src-kernels.mount.in b/packages/release/usr-src-kernels.mount.in index 39e2a0dcb81..25b97441a51 100644 --- a/packages/release/usr-src-kernels.mount.in +++ b/packages/release/usr-src-kernels.mount.in @@ -3,7 +3,8 @@ Description=Kernel Development Sources (Read-Write) DefaultDependencies=no Conflicts=umount.target RequiresMountsFor=/var/lib/kernel-devel/.overlay/lower -Before=local-fs.target umount.target +Before=umount.target +After=local-fs.target [Mount] What=overlay diff --git a/packages/release/var-lib-kernel-devel-lower.mount.in b/packages/release/var-lib-kernel-devel-lower.mount.in index 9f9af69be77..0a6220584f9 100644 --- a/packages/release/var-lib-kernel-devel-lower.mount.in +++ b/packages/release/var-lib-kernel-devel-lower.mount.in @@ -2,9 +2,9 @@ Description=Kernel Development Sources (Read-Only) DefaultDependencies=no Conflicts=umount.target -Before=local-fs.target umount.target +Before=umount.target Wants=prepare-var.service -After=prepare-var.service +After=prepare-var.service local-fs.target RequiresMountsFor=/var [Mount]