Skip to content

Commit f293124

Browse files
committed
fix(systemd-networkd): make systemd-networkd a proper network provider
Make systemd-networkd a proper network service provider. Fixes #737
1 parent 4d03404 commit f293124

File tree

2 files changed

+56
-39
lines changed

2 files changed

+56
-39
lines changed
Lines changed: 53 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,79 @@
11
#!/bin/bash
2+
# This file is part of dracut.
3+
# SPDX-License-Identifier: GPL-2.0-or-later
24

3-
# called by dracut
5+
# Prerequisite check(s) for module.
46
check() {
57
[[ $mount_needs ]] && return 1
68

9+
# If the binary(s) requirements are not fulfilled the module can't be installed
10+
require_binaries ip networkctl \
11+
"$systemdutildir"/systemd-networkd \
12+
"$systemdutildir"/systemd-network-generator \
13+
"$systemdutildir"/systemd-networkd-wait-online \
14+
|| return 1
15+
16+
# Return 255 to only include the module, if another module requires it.
717
return 255
18+
819
}
920

10-
# called by dracut
21+
# Module dependency requirements.
1122
depends() {
12-
echo "systemd kernel-network-modules"
13-
}
1423

15-
installkernel() {
24+
# This module has external dependency on other module(s).
25+
echo dbus kernel-network-modules systemd-sysusers
26+
# Return 0 to include the dependent module(s) in the initramfs.
1627
return 0
28+
1729
}
1830

19-
# called by dracut
31+
# Install the required file(s) and directories for the module in the initramfs.
2032
install() {
33+
2134
inst_multiple -o \
35+
"$dbussystem"/org.freedesktop.network1.conf \
36+
"$dbussystemservices"/org.freedesktop.network1.service \
37+
"$systemdutildir"/networkd.conf \
38+
"$systemdutildir/networkd.conf.d/*.conf" \
2239
"$systemdutildir"/systemd-networkd \
40+
"$systemdutildir"/systemd-network-generator \
2341
"$systemdutildir"/systemd-networkd-wait-online \
24-
"$systemdsystemunitdir"/systemd-networkd-wait-online.service \
42+
"$systemdutildir"/network/80-container-host0.network \
43+
"$systemdutildir"/network/80-container-ve.network \
44+
"$systemdutildir"/network/80-container-vz.network \
45+
"$systemdutildir"/network/80-vm-vt.network \
46+
"$systemdutildir"/network/80-wifi-adhoc.network \
47+
"$systemdutildir"/network/99-default.link \
2548
"$systemdsystemunitdir"/systemd-networkd.service \
2649
"$systemdsystemunitdir"/systemd-networkd.socket \
27-
"$systemdutildir"/network/99-default.link \
50+
"$systemdsystemunitdir"/systemd-network-generator.service \
51+
"$systemdsystemunitdir"/systemd-networkd-wait-online.service \
52+
"$systemdsystemunitdir"/systemd-network-generator.service \
2853
networkctl ip
2954

30-
#hostnamectl timedatectl
31-
# $systemdutildir/systemd-timesyncd \
32-
# $systemdutildir/systemd-timedated \
33-
# $systemdutildir/systemd-hostnamed \
34-
# $systemdutildir/systemd-resolvd \
35-
# $systemdutildir/systemd-resolve-host \
36-
# $systemdsystemunitdir/systemd-resolved.service \
37-
# $systemdsystemunitdir/systemd-hostnamed.service \
38-
# $systemdsystemunitdir/systemd-timesyncd.service \
39-
# $systemdsystemunitdir/systemd-timedated.service \
40-
# $systemdsystemunitdir/time-sync.target \
41-
# /etc/systemd/resolved.conf \
42-
43-
# inst_dir /var/lib/systemd/clock
44-
45-
grep '^systemd-network:' "$dracutsysrootdir"/etc/passwd 2> /dev/null >> "$initdir/etc/passwd"
46-
grep '^systemd-network:' "$dracutsysrootdir"/etc/group >> "$initdir/etc/group"
47-
# grep '^systemd-timesync:' "$dracutsysrootdir"/etc/passwd 2>/dev/null >> "$initdir/etc/passwd"
48-
# grep '^systemd-timesync:' "$dracutsysrootdir"/etc/group >> "$initdir/etc/group"
49-
50-
_arch=${DRACUT_ARCH:-$(uname -m)}
51-
inst_libdir_file \
52-
{"tls/$_arch/",tls/,"$_arch/",}"libnss_dns.so.*" \
53-
{"tls/$_arch/",tls/,"$_arch/",}"libnss_mdns4_minimal.so.*" \
54-
{"tls/$_arch/",tls/,"$_arch/",}"libnss_myhostname.so.*" \
55-
{"tls/$_arch/",tls/,"$_arch/",}"libnss_resolve.so.*"
56-
57-
# systemd-timesyncd.service
55+
# Enable systemd type units
5856
for i in \
59-
systemd-networkd-wait-online.service \
6057
systemd-networkd.service \
61-
systemd-networkd.socket; do
58+
systemd-networkd.socket \
59+
systemd-network-generator.service \
60+
systemd-networkd-wait-online.service; do
6261
$SYSTEMCTL -q --root "$initdir" enable "$i"
6362
done
63+
64+
# Install the hosts local user configurations if enabled.
65+
if [[ $hostonly ]]; then
66+
inst_multiple -H -o \
67+
"$systemdutilconfdir"/networkd.conf \
68+
"$systemdutilconfdir/networkd.conf.d/*.conf" \
69+
"$systemdutilconfdir/network/*" \
70+
"$systemdsystemconfdir"/systemd-networkd.service \
71+
"$systemdsystemconfdir/systemd-networkd.service/*.conf" \
72+
"$systemdsystemunitdir"/systemd-networkd.socket \
73+
"$systemdsystemunitdir/systemd-networkd.socket/*.conf" \
74+
"$systemdsystemconfdir"/systemd-network-generator.service \
75+
"$systemdsystemconfdir/systemd-network-generator.service/*.conf" \
76+
"$systemdsystemconfdir"/systemd-networkd-wait-online.service \
77+
"$systemdsystemconfdir/systemd-networkd-wait-online.service/*.conf"
78+
fi
6479
}

modules.d/40network/module-setup.sh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ check() {
99
depends() {
1010
is_qemu_virtualized && echo -n "qemu-net "
1111

12-
for module in network-wicked network-manager network-legacy; do
12+
for module in network-wicked network-manager network-legacy systemd-networkd; do
1313
if dracut_module_included "$module"; then
1414
network_handler="$module"
1515
break
@@ -21,6 +21,8 @@ depends() {
2121
network_handler="network-wicked"
2222
elif [[ -x $dracutsysrootdir/usr/libexec/nm-initrd-generator ]]; then
2323
network_handler="network-manager"
24+
elif [[ -x $dracutsysrootdir/usr/lib/systemd/systemd-networkd ]]; then
25+
network_handler="systemd-networkd"
2426
else
2527
network_handler="network-legacy"
2628
fi

0 commit comments

Comments
 (0)