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 authored and bluca committed Jul 22, 2023
1 parent 378a6b8 commit a148b2f
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 0 deletions.
27 changes: 27 additions & 0 deletions test/TEST-01-BASIC/test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,31 @@ test_append_files() {
cp -v "$TEST_UNITS_DIR"/{testsuite-01,end}.service "$TEST_UNITS_DIR/testsuite.target" "$dst"
}

# Setup a one shot service in initrd that creates a dummy bind mount under /run
# to check if the mount persists though the initrd transition. The "check" part
# is in the respective testsuite-01.sh script.
#
# See: https://github.com/systemd/systemd/issues/28452
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 a148b2f

Please sign in to comment.