mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-03-20 10:50:12 +03:00
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: https://github.com/systemd/systemd/issues/28452
54 lines
2.0 KiB
Bash
Executable File
54 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# SPDX-License-Identifier: LGPL-2.1-or-later
|
|
set -e
|
|
|
|
TEST_DESCRIPTION="Basic systemd setup"
|
|
IMAGE_NAME="basic"
|
|
RUN_IN_UNPRIVILEGED_CONTAINER=${RUN_IN_UNPRIVILEGED_CONTAINER:-yes}
|
|
TEST_REQUIRE_INSTALL_TESTS=0
|
|
TEST_SUPPORTING_SERVICES_SHOULD_BE_MASKED=0
|
|
|
|
# Check if we can correctly deserialize if the kernel cmdline contains "weird" stuff
|
|
# like an invalid argument, "end of arguments" separator, or a sysvinit argument (-z)
|
|
# See: https://github.com/systemd/systemd/issues/28184
|
|
KERNEL_APPEND="foo -- -z bar --- baz $KERNEL_APPEND"
|
|
|
|
# shellcheck source=test/test-functions
|
|
. "${TEST_BASE_DIR:?}/test-functions"
|
|
|
|
test_append_files() {
|
|
# install tests manually so the test is functional even when -Dinstall-tests=false
|
|
local dst="${1:?}/usr/lib/systemd/tests/testdata/units/"
|
|
mkdir -p "$dst"
|
|
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 "$@"
|