summaryrefslogtreecommitdiffstats
path: root/modules.d/systemd-networkd-ext/hooks/copy-networkd-files-to-newroot.sh
blob: ec61616cbc9ba4e7720d12974ec45603d11e6526 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/bash
#
# This hook copies the core systemd-networkd related service
# files to the NEWROOT and activate them in sysinit.target
# to prevent systemd from killing these while pivot_root
NEWROOT_SYSTEMD_DIR="${NEWROOT}/usr/lib/systemd/system"
NEWROOT_SYSINIT_TARGET_DIR="${NEWROOT_SYSTEMD_DIR}/sysinit.target.wants"
mkdir -p "${NEWROOT_SYSINIT_TARGET_DIR}"

for UNIT in \
	systemd-networkd.socket \
	systemd-networkd.service \
	systemd-resolved.service
do
	UNIT_PATH="$(systemctl show -p FragmentPath $UNIT | cut -c 14-)"
	[ -z "${UNIT_PATH}" ] && continue
	mkdir -p "${NEWROOT}/${UNIT_PATH%/*}"
	cp "${UNIT_PATH}" "${NEWROOT}/${UNIT_PATH}"
	ln -sf "${UNIT_PATH}" "${NEWROOT_SYSINIT_TARGET_DIR}/${UNIT}"
done

if [ -e "${NEWROOT_SYSTEMD_DIR}/systemd-resolved.service" ]; then
	# this drop-in is needed to prevent a pull-in loop sysinit.target <-> basic.target
	mkdir -p "${NEWROOT_SYSTEMD_DIR}/systemd-resolved.service.d/"
	cat <<-EOF > "${NEWROOT_SYSTEMD_DIR}/systemd-resolved.service.d/00-no-default-deps.conf"
		[Unit]
		DefaultDependencies=no
	EOF

	# finally make sure the NEWROOT resolv.conf links to the one managed by resolved.
	rm "${NEWROOT}"/etc/resolv.conf
	ln -s /run/systemd/resolve/resolv.conf "${NEWROOT}"/etc/resolv.conf
fi