Skip to content

Commit

Permalink
test: check if we correctly propagate /run mounts during switch root
Browse files Browse the repository at this point in the history
Since 7c764d4 we bind mount certain directories during switch root
instead of moving the mount directly, and for /run we do this without
MS_REC. This, unfortunately, leaves all mounts under /run behind
in the old root, which breaks certain use cases.

See: systemd#28452
  • Loading branch information
mrc0mmand committed Jul 19, 2023
1 parent 95f3bd0 commit 3be5271
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 0 deletions.
22 changes: 22 additions & 0 deletions test/TEST-01-BASIC/test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,26 @@ test_append_files() {
cp -v "$TEST_UNITS_DIR"/{testsuite-01,end}.service "$TEST_UNITS_DIR/testsuite.target" "$dst"
}

run_qemu_hook() {
local extra="$WORKDIR/initrd.extra"

mkdir -m 755 "$extra"
mkdir -m 755 "$extra/etc" "$extra/etc/systemd" "$extra/etc/systemd/system" "$extra/etc/systemd/system/initrd.target.wants"

cat >"$extra/etc/systemd/system/initrd-run-mount.service" <<EOF
[Unit]
Description=Create a mount in /run that should survive the transition from initrd
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=sh -xec "mkdir /run/initrd-mount-source /run/initrd-mount-target; mount -v --bind /run/initrd-mount-source /run/initrd-mount-target"
EOF
ln -svrf "$extra/etc/systemd/system/initrd-run-mount.service" "$extra/etc/systemd/system/initrd.target.wants/initrd-run-mount.service"

(cd "$extra" && find . | cpio -o -H newc -R root:root > "$extra.cpio")

INITRD_EXTRA="$extra.cpio"
}

do_test "$@"
5 changes: 5 additions & 0 deletions test/units/testsuite-01.sh
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,11 @@ if systemd-detect-virt -q --container; then
test ! -e /run/systemd/container
cp -afv /tmp/container /run/systemd/container
else
# We should've created a mount under /run in initrd (see the other half of the test)
# that should've survived the transition from initrd to the real system
test -d /run/initrd-mount-target
mountpoint /run/initrd-mount-target

# We bring the loopback netdev up only during a full setup, so it should
# not get brought back up during reexec if we disable it beforehand
[[ "$(ip -o link show lo)" =~ LOOPBACK,UP ]]
Expand Down

0 comments on commit 3be5271

Please sign in to comment.