summary refs log tree commit diff
path: root/data
diff options
context:
space:
mode:
Diffstat (limited to 'data')
-rw-r--r--data/NetworkManager-config-initrd.service.in27
-rw-r--r--data/NetworkManager-initrd.service.in32
-rw-r--r--data/NetworkManager-wait-online-initrd.service.in26
-rw-r--r--data/meson.build3
-rw-r--r--data/nm-priv-helper.service.in4
5 files changed, 90 insertions, 2 deletions
diff --git a/data/NetworkManager-config-initrd.service.in b/data/NetworkManager-config-initrd.service.in
new file mode 100644
index 00000000..4baf0f64
--- /dev/null
+++ b/data/NetworkManager-config-initrd.service.in
@@ -0,0 +1,27 @@
+[Unit]
+Description=NetworkManager Configuration (initrd)
+DefaultDependencies=no
+Wants=systemd-journald.socket
+After=systemd-journald.socket
+Before=systemd-udevd.service systemd-udev-trigger.service
+ConditionPathExists=/etc/initrd-release
+
+[Service]
+Type=oneshot
+ExecStartPre=/bin/sh -c "rm -f /run/NetworkManager/system-connections/*"
+ExecStart=/bin/sh -c "@libexecdir@/nm-initrd-generator -- $(cat /proc/cmdline)"
+ExecStartPost=/bin/sh -c ' \
+    for i in /{usr/lib,run,etc}/NetworkManager/system-connections/*; do \
+        [ -f "$i" ] || continue; \
+        mkdir -p /run/NetworkManager/initrd; \
+        : > /run/NetworkManager/initrd/neednet; \
+        break; \
+    done; \
+    if [ -s /run/NetworkManager/initrd/hostname ]; then \
+        cat /run/NetworkManager/initrd/hostname > /proc/sys/kernel/hostname; \
+    fi \
+'
+RemainAfterExit=yes
+
+[Install]
+WantedBy=initrd.target
diff --git a/data/NetworkManager-initrd.service.in b/data/NetworkManager-initrd.service.in
new file mode 100644
index 00000000..aef73a57
--- /dev/null
+++ b/data/NetworkManager-initrd.service.in
@@ -0,0 +1,32 @@
+[Unit]
+Description=NetworkManager (initrd)
+DefaultDependencies=no
+Wants=systemd-udev-trigger.service network.target
+After=systemd-udev-trigger.service network-pre.target dbus.service NetworkManager-config-initrd.service
+Before=network.target
+BindsTo=dbus.service
+ConditionPathExists=/etc/initrd-release
+ConditionPathExists=/run/NetworkManager/initrd/neednet
+ConditionPathExistsGlob=|/usr/lib/NetworkManager/system-connections/*
+ConditionPathExistsGlob=|/run/NetworkManager/system-connections/*
+ConditionPathExistsGlob=|/etc/NetworkManager/system-connections/*
+
+[Service]
+Type=dbus
+BusName=org.freedesktop.NetworkManager
+ExecReload=/usr/bin/busctl call org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.NetworkManager Reload u 0
+ExecStart=@sbindir@/NetworkManager
+# NM doesn't want systemd to kill its children for it
+KillMode=process
+Environment=NM_CONFIG_ENABLE_TAG=initrd
+Restart=on-failure
+ProtectSystem=true
+ProtectHome=read-only
+
+[Install]
+WantedBy=initrd.target
+# We want to enable NetworkManager-wait-online-initrd.service whenever this
+# service is enabled. NetworkManager-wait-online-initrd.service has
+# WantedBy=network-online.target, so enabling it only has an effect if
+# network-online.target itself is enabled or pulled in by some other unit.
+Also=NetworkManager-config-initrd.service NetworkManager-wait-online-initrd.service
diff --git a/data/NetworkManager-wait-online-initrd.service.in b/data/NetworkManager-wait-online-initrd.service.in
new file mode 100644
index 00000000..da4a2522
--- /dev/null
+++ b/data/NetworkManager-wait-online-initrd.service.in
@@ -0,0 +1,26 @@
+[Unit]
+Description=NetworkManager Wait Online (initrd)
+DefaultDependencies=no
+Requires=NetworkManager-initrd.service
+After=NetworkManager-initrd.service
+Before=network-online.target
+ConditionPathExists=/etc/initrd-release
+ConditionPathExists=/run/NetworkManager/initrd/neednet
+
+[Service]
+# `nm-online -s` waits until the point when NetworkManager logs
+# "startup complete". That is when startup actions are settled and
+# devices and profiles reached a conclusive activated or deactivated
+# state. It depends on which profiles are configured to autoconnect and
+# also depends on profile settings like ipv4.may-fail/ipv6.may-fail,
+# which affect when a profile is considered fully activated.
+# Check NetworkManager logs to find out why wait-online takes a certain
+# time.
+
+Type=oneshot
+ExecStart=@bindir@/nm-online -s -q
+RemainAfterExit=yes
+Environment=NM_ONLINE_TIMEOUT=3600
+
+[Install]
+WantedBy=initrd.target network-online.target
diff --git a/data/meson.build b/data/meson.build
index facdab8d..b77bf434 100644
--- a/data/meson.build
+++ b/data/meson.build
@@ -13,6 +13,9 @@ if install_systemdunitdir
     'NetworkManager.service',
     'nm-priv-helper.service',
     'NetworkManager-wait-online.service',
+    'NetworkManager-config-initrd.service',
+    'NetworkManager-initrd.service',
+    'NetworkManager-wait-online-initrd.service',
   ]
 
   foreach service: services
diff --git a/data/nm-priv-helper.service.in b/data/nm-priv-helper.service.in
index 7b083bbb..d4ff25d9 100644
--- a/data/nm-priv-helper.service.in
+++ b/data/nm-priv-helper.service.in
@@ -2,8 +2,8 @@
 Description=NetworkManager Privileged Helper
 
 #
-# nm-priv-helper exists for privilege separation. It allows to run
-# NetworkManager without certain capabilities, and ask nm-priv-helper
+# nm-priv-helper exists for privilege separation. It allows NetworkManager
+# to run without certain capabilities, and ask nm-priv-helper
 # for special operations where more privileges are required.
 #