2024-04-15 17:44:23 +00:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
# SPDX-License-Identifier: LGPL-2.1-or-later
|
|
|
|
set -eux
|
|
|
|
set -o pipefail
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
FAKE_ROOTS_DIR="$(mktemp -d --tmpdir="" fake-roots-XXX)"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
# shellcheck disable=SC2317
|
2024-04-15 17:44:23 +00:00
|
|
|
at_exit() {
|
2024-04-15 21:28:43 +00:00
|
|
|
set +ex
|
|
|
|
|
|
|
|
local target
|
|
|
|
|
|
|
|
# Note: `cat` here is used intentionally, so we iterate over our own copy of /proc/mounts. Otherwise
|
2024-04-17 04:29:35 +00:00
|
|
|
# things get very confusing once we start unmounting things, due to changing file offsets.
|
2024-04-15 21:28:43 +00:00
|
|
|
# shellcheck disable=SC2002
|
|
|
|
cat /proc/mounts | while read -r _ target _ _ _ _; do
|
|
|
|
if [[ "$target" =~ ^"$FAKE_ROOTS_DIR" ]]; then
|
|
|
|
umount -Rv "$target"
|
2024-04-15 17:44:23 +00:00
|
|
|
fi
|
|
|
|
done
|
2024-04-15 21:28:43 +00:00
|
|
|
|
|
|
|
rm -rf "${FAKE_ROOTS_DIR}"
|
2024-04-15 17:44:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
trap at_exit EXIT
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_root() {
|
|
|
|
local root=${1:?}
|
|
|
|
local hierarchy=${2:?}
|
|
|
|
local dir
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
if [[ -d $root ]]; then
|
|
|
|
echo >&2 "Directory $root already exists, possible copy-paste error?"
|
|
|
|
exit 1
|
2024-04-15 17:44:23 +00:00
|
|
|
fi
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
for dir in "$hierarchy" "/usr/lib" "/var/lib/extensions/" "/var/lib/extensions.mutable"; do
|
|
|
|
mkdir -p "$root$dir"
|
|
|
|
done
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
{
|
|
|
|
echo "ID=testtest"
|
|
|
|
echo "VERSION=1.2.3"
|
2024-04-15 21:28:43 +00:00
|
|
|
} >"$root/usr/lib/os-release"
|
2024-04-15 17:44:23 +00:00
|
|
|
}
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_extension_image() {
|
|
|
|
local root="${1:?}"
|
|
|
|
local hierarchy="${2:?}"
|
|
|
|
local ext_dir ext_release name
|
|
|
|
|
|
|
|
name="test-extension"
|
|
|
|
ext_dir="$root/var/lib/extensions/$name"
|
|
|
|
ext_release="$ext_dir/usr/lib/extension-release.d/extension-release.$name"
|
|
|
|
mkdir -p "${ext_release%/*}"
|
|
|
|
echo "ID=_any" >"$ext_release"
|
|
|
|
mkdir -p "$ext_dir/$hierarchy"
|
|
|
|
touch "$ext_dir$hierarchy/preexisting-file-in-extension-image"
|
2024-04-15 17:44:23 +00:00
|
|
|
}
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_extension_mutable_dir() {
|
|
|
|
local dir=${1:?}
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
mkdir -p "$dir"
|
|
|
|
touch "$dir/preexisting-file-in-extensions-mutable"
|
2024-04-15 17:44:23 +00:00
|
|
|
}
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
make_read_only() {
|
|
|
|
local root="${1:?}"
|
|
|
|
local hierarchy="${2:?}"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
mount -o bind,ro "$root$hierarchy" "$root$hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
}
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_hierarchy() {
|
|
|
|
local root="${1:?}"
|
|
|
|
local hierarchy="${2:?}"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
touch "$root$hierarchy/preexisting-file-in-hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
}
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_read_only_hierarchy() {
|
|
|
|
local root="${1:?}"
|
|
|
|
local hierarchy="${2:?}"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_hierarchy "$root" "$hierarchy"
|
|
|
|
make_read_only "$root" "$hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
}
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
# Extra arguments:
|
|
|
|
# -e: check for a preexisting file in extension
|
|
|
|
# -h: check for a preexisting file in hierarchy
|
|
|
|
# -u: check for a preexisting file in upperdir
|
|
|
|
extension_verify() {
|
|
|
|
local root="${1:?}"
|
|
|
|
local hierarchy="${2:?}"
|
|
|
|
local message="${3:?}"
|
|
|
|
shift 3
|
|
|
|
# Map each option to a pre-defined file name
|
|
|
|
local -A option_files_map=(
|
|
|
|
[e]="preexisting-file-in-extension-image"
|
|
|
|
[h]="preexisting-file-in-hierarchy"
|
|
|
|
[u]="preexisting-file-in-extensions-mutable"
|
|
|
|
)
|
|
|
|
local -A args=(
|
|
|
|
[e]=0
|
|
|
|
[h]=0
|
|
|
|
[u]=0
|
|
|
|
)
|
|
|
|
local file full_path option
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
while getopts "ehu" opt; do
|
|
|
|
case "$opt" in
|
2024-04-15 17:44:23 +00:00
|
|
|
e|h|u)
|
2024-04-15 21:28:43 +00:00
|
|
|
args[$opt]=1
|
2024-04-15 17:44:23 +00:00
|
|
|
;;
|
|
|
|
*)
|
2024-04-15 21:28:43 +00:00
|
|
|
echo >&2 "Unxexpected option: $opt"
|
|
|
|
exit 1
|
2024-04-15 17:44:23 +00:00
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
echo "${args[@]}"
|
|
|
|
|
|
|
|
for option in "${!option_files_map[@]}"; do
|
|
|
|
file="${option_files_map[$option]}"
|
|
|
|
full_path="$root$hierarchy/$file"
|
|
|
|
|
|
|
|
if [[ ${args[$option]} -ne 0 ]]; then
|
|
|
|
if [[ ! -f "$full_path" ]]; then
|
|
|
|
ls -la "$root$hierarchy"
|
|
|
|
echo >&2 "Expected file '$file' to exist under $root$hierarchy $message"
|
|
|
|
exit 1
|
|
|
|
fi
|
2024-04-15 17:44:23 +00:00
|
|
|
else
|
2024-04-15 21:28:43 +00:00
|
|
|
if [[ -f "$full_path" ]]; then
|
|
|
|
ls -la "$root$hierarchy"
|
|
|
|
echo >&2 "Expected file '$file' to not exist under $root$hierarchy $message"
|
|
|
|
exit 1
|
|
|
|
fi
|
2024-04-15 17:44:23 +00:00
|
|
|
fi
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
extension_verify_after_merge() (
|
|
|
|
set +x
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
local root="${1:?}"
|
|
|
|
local hierarchy="${2:?}"
|
|
|
|
shift 2
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
extension_verify "$root" "$hierarchy" "after merge" "$@"
|
|
|
|
)
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
extension_verify_after_unmerge() (
|
|
|
|
set +x
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
local root="${1:?}"
|
|
|
|
local hierarchy="${2:?}"
|
|
|
|
shift 2
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
extension_verify "$root" "$hierarchy" "after unmerge" "$@"
|
|
|
|
)
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
# General systemd-sysext tests
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
: "No extension data in /var/lib/extensions.mutable/…, R/O hierarchy, mutability disabled by default, read-only merged"
|
|
|
|
fake_root="$FAKE_ROOTS_DIR/simple-read-only-with-read-only-hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
hierarchy=/usr
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_root "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_image "$fake_root" "$hierarchy"
|
|
|
|
prepare_read_only_hierarchy "$fake_root" "$hierarchy"
|
|
|
|
(! touch "$fake_root$hierarchy/should-fail-on-read-only-fs")
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" merge
|
|
|
|
(! touch "$fake_root$hierarchy/should-still-fail-on-read-only-fs")
|
|
|
|
extension_verify_after_merge "$fake_root" "$hierarchy" -e -h
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" unmerge
|
|
|
|
extension_verify_after_unmerge "$fake_root" "$hierarchy" -h
|
|
|
|
(! touch "$fake_root$hierarchy/should-still-fail-on-read-only-fs")
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
: "No extension data in /var/lib/extensions.mutable/…, mutable hierarchy, mutability disabled by default, read-only merged"
|
|
|
|
fake_root="$FAKE_ROOTS_DIR/simple-read-only-with-mutable-hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
hierarchy=/usr
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_root "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_image "$fake_root" "$hierarchy"
|
|
|
|
prepare_hierarchy "$fake_root" "$hierarchy"
|
|
|
|
touch "$fake_root$hierarchy/should-succeed-on-mutable-fs"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIEe="$hierarchy" systemd-sysext --root="$fake_root" merge
|
|
|
|
(! touch "$fake_root$hierarchy/should-fail-on-read-only-fs")
|
|
|
|
extension_verify_after_merge "$fake_root" "$hierarchy" -e -h
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" unmerge
|
|
|
|
extension_verify_after_unmerge "$fake_root" "$hierarchy" -h
|
|
|
|
touch "$fake_root$hierarchy/should-succeed-on-mutable-fs-again"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
: "No extension data in /var/lib/extensions.mutable/…, no hierarchy either, mutability disabled by default, read-only merged"
|
|
|
|
fake_root="$FAKE_ROOTS_DIR/simple-read-only-with-missing-hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
hierarchy=/opt
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_root "$fake_root" "$hierarchy"
|
|
|
|
rmdir "$fake_root/$hierarchy"
|
|
|
|
prepare_extension_image "$fake_root" "$hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" merge
|
|
|
|
(! touch "$fake_root$hierarchy/should-still-fail-on-read-only-fs")
|
|
|
|
extension_verify_after_merge "$fake_root" "$hierarchy" -e
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" unmerge
|
|
|
|
extension_verify_after_unmerge "$fake_root" "$hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
: "No extension data in /var/lib/extensions.mutable/…, empty hierarchy, mutability disabled by default, read-only merged"
|
|
|
|
fake_root="$FAKE_ROOTS_DIR/simple-read-only-with-empty-hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
hierarchy=/opt
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_root "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_image "$fake_root" "$hierarchy"
|
|
|
|
make_read_only "$fake_root" "$hierarchy"
|
|
|
|
(! touch "$fake_root$hierarchy/should-fail-on-read-only-fs")
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" merge
|
|
|
|
(! touch "$fake_root$hierarchy/should-still-fail-on-read-only-fs")
|
|
|
|
extension_verify_after_merge "$fake_root" "$hierarchy" -e
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" unmerge
|
|
|
|
extension_verify_after_unmerge "$fake_root" "$hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
: "Extension data in /var/lib/extensions.mutable/…, R/O hierarchy, mutability disabled by default, read-only merged"
|
|
|
|
fake_root="$FAKE_ROOTS_DIR/simple-mutable-with-read-only-hierarchy-disabled"
|
2024-04-15 17:44:23 +00:00
|
|
|
hierarchy=/usr
|
2024-04-15 21:28:43 +00:00
|
|
|
extension_data_dir="$fake_root/var/lib/extensions.mutable$hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_root "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_image "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_mutable_dir "$extension_data_dir"
|
|
|
|
prepare_read_only_hierarchy "$fake_root" "$hierarchy"
|
|
|
|
(! touch "$fake_root$hierarchy/should-fail-on-read-only-fs")
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" merge
|
|
|
|
(! touch "$fake_root$hierarchy/should-be-read-only")
|
|
|
|
extension_verify_after_merge "$fake_root" "$hierarchy" -e -h
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" unmerge
|
|
|
|
extension_verify_after_unmerge "$fake_root" "$hierarchy" -h
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
: "Extension data in /var/lib/extensions.mutable/…, R/O hierarchy, auto-mutability, mutable merged"
|
|
|
|
fake_root="$FAKE_ROOTS_DIR/simple-mutable-with-read-only-hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
hierarchy=/usr
|
2024-04-15 21:28:43 +00:00
|
|
|
extension_data_dir="$fake_root/var/lib/extensions.mutable$hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_root "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_image "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_mutable_dir "$extension_data_dir"
|
|
|
|
prepare_read_only_hierarchy "$fake_root" "$hierarchy"
|
|
|
|
(! touch "$fake_root$hierarchy/should-fail-on-read-only-fs")
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" --mutable=auto merge
|
|
|
|
touch "$fake_root$hierarchy/now-is-mutable"
|
|
|
|
extension_verify_after_merge "$fake_root" "$hierarchy" -e -h -u
|
|
|
|
test -f "$extension_data_dir/now-is-mutable"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" unmerge
|
|
|
|
extension_verify_after_unmerge "$fake_root" "$hierarchy" -h
|
|
|
|
test -f "$extension_data_dir/now-is-mutable"
|
|
|
|
test ! -f "$fake_root$hierarchy/now-is-mutable"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
: "Extension data in /var/lib/extensions.mutable/…, missing hierarchy, auto-mutability, mutable merged"
|
|
|
|
fake_root="$FAKE_ROOTS_DIR/simple-mutable-with-missing-hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
hierarchy=/opt
|
2024-04-15 21:28:43 +00:00
|
|
|
extension_data_dir="$fake_root/var/lib/extensions.mutable$hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_root "$fake_root" "$hierarchy"
|
|
|
|
rmdir "$fake_root/$hierarchy"
|
|
|
|
prepare_extension_image "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_mutable_dir "$extension_data_dir"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" --mutable=auto merge
|
|
|
|
touch "$fake_root$hierarchy/now-is-mutable"
|
|
|
|
extension_verify_after_merge "$fake_root" "$hierarchy" -e -u
|
|
|
|
test -f "$extension_data_dir/now-is-mutable"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" unmerge
|
|
|
|
extension_verify_after_unmerge "$fake_root" "$hierarchy"
|
|
|
|
test -f "$extension_data_dir/now-is-mutable"
|
|
|
|
test ! -f "$fake_root$hierarchy/now-is-mutable"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
: "Extension data in /var/lib/extensions.mutable/…, empty hierarchy, auto-mutability, mutable merged"
|
|
|
|
fake_root="$FAKE_ROOTS_DIR/simple-mutable-with-empty-hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
hierarchy=/opt
|
2024-04-15 21:28:43 +00:00
|
|
|
extension_data_dir="$fake_root/var/lib/extensions.mutable$hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_root "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_image "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_mutable_dir "$extension_data_dir"
|
|
|
|
make_read_only "$fake_root" "$hierarchy"
|
|
|
|
(! touch "$fake_root$hierarchy/should-fail-on-read-only-fs")
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" --mutable=auto merge
|
|
|
|
touch "$fake_root$hierarchy/now-is-mutable"
|
|
|
|
extension_verify_after_merge "$fake_root" "$hierarchy" -e -u
|
|
|
|
test -f "$extension_data_dir/now-is-mutable"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" unmerge
|
|
|
|
extension_verify_after_unmerge "$fake_root" "$hierarchy"
|
|
|
|
test -f "$extension_data_dir/now-is-mutable"
|
|
|
|
test ! -f "$fake_root$hierarchy/now-is-mutable"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
: "/var/lib/extensions.mutable/… is a symlink to other dir, R/O hierarchy, auto-mutability, mutable merged"
|
|
|
|
fake_root="$FAKE_ROOTS_DIR/mutable-symlink-with-read-only-hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
hierarchy=/usr
|
2024-04-15 21:28:43 +00:00
|
|
|
extension_data_dir="$fake_root/var/lib/extensions.mutable$hierarchy"
|
|
|
|
extension_real_dir="$fake_root/upperdir"
|
|
|
|
|
|
|
|
prepare_root "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_image "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_mutable_dir "$extension_real_dir"
|
|
|
|
ln -sfTr "$extension_real_dir" "$extension_data_dir"
|
|
|
|
prepare_read_only_hierarchy "$fake_root" "$hierarchy"
|
|
|
|
(! touch "$fake_root$hierarchy/should-fail-on-read-only-fs")
|
|
|
|
|
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" --mutable=auto merge
|
|
|
|
touch "$fake_root$hierarchy/now-is-mutable"
|
|
|
|
extension_verify_after_merge "$fake_root" "$hierarchy" -e -h -u
|
|
|
|
test -f "$extension_data_dir/now-is-mutable"
|
|
|
|
test -f "$extension_real_dir/now-is-mutable"
|
|
|
|
|
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" unmerge
|
|
|
|
extension_verify_after_unmerge "$fake_root" "$hierarchy" -h
|
|
|
|
test -f "$extension_data_dir/now-is-mutable"
|
|
|
|
test -f "$extension_real_dir/now-is-mutable"
|
|
|
|
test ! -f "$fake_root$hierarchy/now-is-mutable"
|
|
|
|
|
|
|
|
|
|
|
|
: "/var/lib/extensions.mutable/… is a symlink to the hierarchy itself, mutable hierarchy, auto-mutability, mutable merged"
|
|
|
|
fake_root="$FAKE_ROOTS_DIR/mutable-self-upper"
|
2024-04-15 17:44:23 +00:00
|
|
|
hierarchy=/usr
|
2024-04-15 21:28:43 +00:00
|
|
|
extension_data_dir="$fake_root/var/lib/extensions.mutable$hierarchy"
|
|
|
|
extension_real_dir="$fake_root$hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_root "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_image "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_mutable_dir "$extension_real_dir"
|
|
|
|
ln -sfTr "$extension_real_dir" "$extension_data_dir"
|
|
|
|
touch "$fake_root$hierarchy/preexisting-file-in-hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" --mutable=auto merge
|
|
|
|
touch "$fake_root$hierarchy/now-is-mutable"
|
|
|
|
extension_verify_after_merge "$fake_root" "$hierarchy" -e -h -u
|
|
|
|
test -f "$extension_data_dir/now-is-mutable"
|
|
|
|
test -f "$extension_real_dir/now-is-mutable"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" unmerge
|
|
|
|
extension_verify_after_unmerge "$fake_root" "$hierarchy" -h -u
|
|
|
|
test -f "$extension_data_dir/now-is-mutable"
|
|
|
|
test -f "$extension_real_dir/now-is-mutable"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
: "/var/lib/extensions.mutable/… is a symlink to the hierarchy itself, R/O hierarchy, auto-mutability, expected fail"
|
|
|
|
fake_root="$FAKE_ROOTS_DIR/failure-self-upper-ro"
|
2024-04-15 17:44:23 +00:00
|
|
|
hierarchy=/usr
|
2024-04-15 21:28:43 +00:00
|
|
|
extension_data_dir="$fake_root/var/lib/extensions.mutable$hierarchy"
|
|
|
|
extension_real_dir="$fake_root$hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_root "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_image "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_mutable_dir "$extension_real_dir"
|
|
|
|
ln -sfTr "$extension_real_dir" "$extension_data_dir"
|
|
|
|
prepare_read_only_hierarchy "$fake_root" "$hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
(! SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" --mutable=auto merge)
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
: "/var/lib/extensions.mutable/… is a dangling symlink, auto-mutability, read-only merged"
|
|
|
|
fake_root="$FAKE_ROOTS_DIR/read-only-mutable-dangling-symlink"
|
2024-04-15 17:44:23 +00:00
|
|
|
hierarchy=/usr
|
2024-04-15 21:28:43 +00:00
|
|
|
extension_data_dir="$fake_root/var/lib/extensions.mutable$hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_root "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_image "$fake_root" "$hierarchy"
|
|
|
|
ln -sfTr "/should/not/exist/" "$extension_data_dir"
|
|
|
|
prepare_read_only_hierarchy "$fake_root" "$hierarchy"
|
|
|
|
(! touch "$fake_root$hierarchy/should-fail-on-read-only-fs")
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
# run systemd-sysext
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" --mutable=auto merge
|
|
|
|
(! touch "$fake_root$hierarchy/should-still-fail-on-read-only-fs")
|
|
|
|
extension_verify_after_merge "$fake_root" "$hierarchy" -e -h
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" unmerge
|
|
|
|
extension_verify_after_unmerge "$fake_root" "$hierarchy" -h
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
: "/var/lib/extensions.mutable/… exists but ignored, mutability disabled explicitly, read-only merged"
|
|
|
|
fake_root="$FAKE_ROOTS_DIR/disabled"
|
2024-04-15 17:44:23 +00:00
|
|
|
hierarchy=/usr
|
2024-04-15 21:28:43 +00:00
|
|
|
extension_data_dir="$fake_root/var/lib/extensions.mutable$hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_root "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_image "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_mutable_dir "$extension_data_dir"
|
|
|
|
prepare_read_only_hierarchy "$fake_root" "$hierarchy"
|
|
|
|
(! touch "$fake_root$hierarchy/should-fail-on-read-only-fs")
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
# run systemd-sysext
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" --mutable=no merge
|
|
|
|
(! touch "$fake_root$hierarchy/should-still-fail-on-read-only-fs")
|
|
|
|
extension_verify_after_merge "$fake_root" "$hierarchy" -e -h
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" unmerge
|
|
|
|
extension_verify_after_unmerge "$fake_root" "$hierarchy" -h
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
: "/var/lib/extensions.mutable/… exists but is imported instead, read-only merged"
|
|
|
|
fake_root="$FAKE_ROOTS_DIR/imported"
|
2024-04-15 17:44:23 +00:00
|
|
|
hierarchy=/usr
|
2024-04-15 21:28:43 +00:00
|
|
|
extension_data_dir="$fake_root/var/lib/extensions.mutable$hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_root "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_image "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_mutable_dir "$extension_data_dir"
|
|
|
|
prepare_read_only_hierarchy "$fake_root" "$hierarchy"
|
|
|
|
(! touch "$fake_root$hierarchy/should-fail-on-read-only-fs")
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
# run systemd-sysext
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" --mutable=import merge
|
|
|
|
(! touch "$fake_root$hierarchy/should-still-fail-on-read-only-fs")
|
|
|
|
extension_verify_after_merge "$fake_root" "$hierarchy" -e -h -u
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" unmerge
|
|
|
|
extension_verify_after_unmerge "$fake_root" "$hierarchy" -h
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
: "/var/lib/extensions.mutable/… doesn't exists, mutability enabled, mutable merged"
|
|
|
|
fake_root="$FAKE_ROOTS_DIR/enabled"
|
2024-04-15 17:44:23 +00:00
|
|
|
hierarchy=/usr
|
2024-04-15 21:28:43 +00:00
|
|
|
extension_data_dir="$fake_root/var/lib/extensions.mutable$hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_root "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_image "$fake_root" "$hierarchy"
|
|
|
|
prepare_read_only_hierarchy "$fake_root" "$hierarchy"
|
|
|
|
(! touch "$fake_root$hierarchy/should-fail-on-read-only-fs")
|
|
|
|
test ! -d "$extension_data_dir"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" --mutable=yes merge
|
|
|
|
test -d "$extension_data_dir"
|
|
|
|
touch "$fake_root$hierarchy/now-is-mutable"
|
|
|
|
extension_verify_after_merge "$fake_root" "$hierarchy" -e -h
|
|
|
|
test -f "$extension_data_dir/now-is-mutable"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" unmerge
|
|
|
|
extension_verify_after_unmerge "$fake_root" "$hierarchy" -h
|
|
|
|
test -f "$extension_data_dir/now-is-mutable"
|
|
|
|
test ! -f "$fake_root$hierarchy/now-is-mutable"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
: "/var/lib/extensions.mutable/… doesn't exists, auto-mutability, read-only merged"
|
|
|
|
fake_root="$FAKE_ROOTS_DIR/simple-read-only-explicit"
|
2024-04-15 17:44:23 +00:00
|
|
|
hierarchy=/usr
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_root "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_image "$fake_root" "$hierarchy"
|
|
|
|
prepare_read_only_hierarchy "$fake_root" "$hierarchy"
|
|
|
|
(! touch "$fake_root$hierarchy/should-fail-on-read-only-fs")
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" --mutable=auto merge
|
|
|
|
(! touch "$fake_root$hierarchy/should-still-fail-on-read-only-fs")
|
|
|
|
extension_verify_after_merge "$fake_root" "$hierarchy" -e -h
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" unmerge
|
|
|
|
extension_verify_after_unmerge "$fake_root" "$hierarchy" -h
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
: "/var/lib/extensions.mutable/… doesn't exists, mutability enabled through env var, mutable merged"
|
|
|
|
fake_root="$FAKE_ROOTS_DIR/enabled-env-var"
|
2024-04-15 17:44:23 +00:00
|
|
|
hierarchy=/usr
|
2024-04-15 21:28:43 +00:00
|
|
|
extension_data_dir="$fake_root/var/lib/extensions.mutable$hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_root "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_image "$fake_root" "$hierarchy"
|
|
|
|
prepare_read_only_hierarchy "$fake_root" "$hierarchy"
|
|
|
|
(! touch "$fake_root$hierarchy/should-fail-on-read-only-fs")
|
|
|
|
test ! -d "$extension_data_dir"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" SYSTEMD_SYSEXT_MUTABLE_MODE=yes systemd-sysext --root="$fake_root" merge
|
|
|
|
test -d "$extension_data_dir"
|
|
|
|
touch "$fake_root$hierarchy/now-is-mutable"
|
|
|
|
extension_verify_after_merge "$fake_root" "$hierarchy" -e -h
|
|
|
|
test -f "$extension_data_dir/now-is-mutable"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" SYSTEMD_SYSEXT_MUTABLE_MODE=yes systemd-sysext --root="$fake_root" unmerge
|
|
|
|
extension_verify_after_unmerge "$fake_root" "$hierarchy" -h
|
|
|
|
test -f "$extension_data_dir/now-is-mutable"
|
|
|
|
test ! -f "$fake_root$hierarchy/now-is-mutable"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
: "/var/lib/extensions.mutable/… doesn't exists, auto-mutability enabled through env var, read-only merged"
|
|
|
|
fake_root="$FAKE_ROOTS_DIR/read-only-auto-env-var"
|
2024-04-15 17:44:23 +00:00
|
|
|
hierarchy=/usr
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_root "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_image "$fake_root" "$hierarchy"
|
|
|
|
prepare_read_only_hierarchy "$fake_root" "$hierarchy"
|
|
|
|
(! touch "$fake_root$hierarchy/should-fail-on-read-only-fs")
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" SYSTEMD_SYSEXT_MUTABLE_MODE=auto systemd-sysext --root="$fake_root" --mutable=auto merge
|
|
|
|
(! touch "$fake_root$hierarchy/should-still-fail-on-read-only-fs")
|
|
|
|
extension_verify_after_merge "$fake_root" "$hierarchy" -e -h
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" SYSTEMD_SYSEXT_MUTABLE_MODE=auto systemd-sysext --root="$fake_root" unmerge
|
|
|
|
extension_verify_after_unmerge "$fake_root" "$hierarchy" -h
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
: "Extension data in /var/lib/extensions.mutable/…, R/O hierarchy, auto-mutability enabled through env var, mutable merged"
|
|
|
|
fake_root="$FAKE_ROOTS_DIR/auto-mutable-env-var"
|
2024-04-15 17:44:23 +00:00
|
|
|
hierarchy=/usr
|
2024-04-15 21:28:43 +00:00
|
|
|
extension_data_dir="$fake_root/var/lib/extensions.mutable$hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_root "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_image "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_mutable_dir "$extension_data_dir"
|
|
|
|
prepare_read_only_hierarchy "$fake_root" "$hierarchy"
|
|
|
|
(! touch "$fake_root$hierarchy/should-fail-on-read-only-fs")
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" SYSTEMD_SYSEXT_MUTABLE_MODE=auto systemd-sysext --root="$fake_root" merge
|
|
|
|
touch "$fake_root$hierarchy/now-is-mutable"
|
|
|
|
extension_verify_after_merge "$fake_root" "$hierarchy" -e -h -u
|
|
|
|
test -f "$extension_data_dir/now-is-mutable"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" SYSTEMD_SYSEXT_MUTABLE_MODE=auto systemd-sysext --root="$fake_root" unmerge
|
|
|
|
extension_verify_after_unmerge "$fake_root" "$hierarchy" -h
|
|
|
|
test -f "$extension_data_dir/now-is-mutable"
|
|
|
|
test ! -f "$fake_root$hierarchy/now-is-mutable"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
: "Extension data in /var/lib/extensions.mutable/…, R/O hierarchy, mutability disabled through env var, read-only merged"
|
|
|
|
fake_root="$FAKE_ROOTS_DIR/env-var-disabled"
|
2024-04-15 17:44:23 +00:00
|
|
|
hierarchy=/usr
|
2024-04-15 21:28:43 +00:00
|
|
|
extension_data_dir="$fake_root/var/lib/extensions.mutable$hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_root "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_image "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_mutable_dir "$extension_data_dir"
|
|
|
|
prepare_read_only_hierarchy "$fake_root" "$hierarchy"
|
|
|
|
(! touch "$fake_root$hierarchy/should-fail-on-read-only-fs")
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" SYSTEMD_SYSEXT_MUTABLE_MODE=no systemd-sysext --root="$fake_root" merge
|
|
|
|
(! touch "$fake_root$hierarchy/should-be-read-only")
|
|
|
|
extension_verify_after_merge "$fake_root" "$hierarchy" -e -h
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" SYSTEMD_SYSEXT_MUTABLE_MODE=no systemd-sysext --root="$fake_root" unmerge
|
|
|
|
extension_verify_after_unmerge "$fake_root" "$hierarchy" -h
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
: "/var/lib/extensions.mutable/… exists but is imported through env var, read-only merged"
|
|
|
|
fake_root="$FAKE_ROOTS_DIR/imported-env-var"
|
2024-04-15 17:44:23 +00:00
|
|
|
hierarchy=/usr
|
2024-04-15 21:28:43 +00:00
|
|
|
extension_data_dir="$fake_root/var/lib/extensions.mutable$hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_root "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_image "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_mutable_dir "$extension_data_dir"
|
|
|
|
prepare_read_only_hierarchy "$fake_root" "$hierarchy"
|
|
|
|
(! touch "$fake_root$hierarchy/should-fail-on-read-only-fs")
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" SYSTEMD_SYSEXT_MUTABLE_MODE=import systemd-sysext --root="$fake_root" merge
|
|
|
|
(! touch "$fake_root$hierarchy/should-still-fail-on-read-only-fs")
|
|
|
|
extension_verify_after_merge "$fake_root" "$hierarchy" -e -h -u
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" SYSTEMD_SYSEXT_MUTABLE_MODE=import systemd-sysext --root="$fake_root" unmerge
|
|
|
|
extension_verify_after_unmerge "$fake_root" "$hierarchy" -h
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
|
2024-04-17 04:29:35 +00:00
|
|
|
: "Extension data in /var/lib/extensions.mutable/…, R/O hierarchy, mutability enabled through env var but overridden via CLI option, read-only merged"
|
2024-04-15 21:28:43 +00:00
|
|
|
fake_root="$FAKE_ROOTS_DIR/env-var-overridden"
|
2024-04-15 17:44:23 +00:00
|
|
|
hierarchy=/usr
|
2024-04-15 21:28:43 +00:00
|
|
|
extension_data_dir="$fake_root/var/lib/extensions.mutable$hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_root "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_image "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_mutable_dir "$extension_data_dir"
|
|
|
|
prepare_read_only_hierarchy "$fake_root" "$hierarchy"
|
|
|
|
(! touch "$fake_root$hierarchy/should-fail-on-read-only-fs")
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" SYSTEMD_SYSEXT_MUTABLE_MODE=yes systemd-sysext --root="$fake_root" --mutable=no merge
|
|
|
|
(! touch "$fake_root$hierarchy/should-be-read-only")
|
|
|
|
extension_verify_after_merge "$fake_root" "$hierarchy" -e -h
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" SYSTEMD_SYSEXT_MUTABLE_MODE=yes systemd-sysext --root="$fake_root" unmerge
|
|
|
|
extension_verify_after_unmerge "$fake_root" "$hierarchy" -h
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
: "Extension data in /var/lib/extensions.mutable/…, R/O hierarchy, ephemeral mutability, mutable merged"
|
|
|
|
fake_root="$FAKE_ROOTS_DIR/ephemeral"
|
2024-04-15 17:44:23 +00:00
|
|
|
hierarchy=/usr
|
2024-04-15 21:28:43 +00:00
|
|
|
extension_data_dir="$fake_root/var/lib/extensions.mutable$hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_root "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_image "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_mutable_dir "$extension_data_dir"
|
|
|
|
prepare_read_only_hierarchy "$fake_root" "$hierarchy"
|
|
|
|
(! touch "$fake_root$hierarchy/should-fail-on-read-only-fs")
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" --mutable=ephemeral merge
|
|
|
|
touch "$fake_root$hierarchy/now-is-mutable"
|
|
|
|
extension_verify_after_merge "$fake_root" "$hierarchy" -e -h
|
|
|
|
test ! -f "$extension_data_dir/now-is-mutable"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" unmerge
|
|
|
|
extension_verify_after_unmerge "$fake_root" "$hierarchy" -h
|
|
|
|
test ! -f "$extension_data_dir/now-is-mutable"
|
|
|
|
test ! -f "$fake_root$hierarchy/now-is-mutable"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
: "Extension data in /var/lib/extensions.mutable/…, R/O hierarchy, ephemeral mutability through env var, mutable merged"
|
|
|
|
fake_root="$FAKE_ROOTS_DIR/ephemeral-env-var"
|
2024-04-15 17:44:23 +00:00
|
|
|
hierarchy=/usr
|
2024-04-15 21:28:43 +00:00
|
|
|
extension_data_dir="$fake_root/var/lib/extensions.mutable$hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_root "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_image "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_mutable_dir "$extension_data_dir"
|
|
|
|
prepare_read_only_hierarchy "$fake_root" "$hierarchy"
|
|
|
|
(! touch "$fake_root$hierarchy/should-fail-on-read-only-fs")
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" SYSTEMD_SYSEXT_MUTABLE_MODE=ephemeral systemd-sysext --root="$fake_root" merge
|
|
|
|
touch "$fake_root$hierarchy/now-is-mutable"
|
|
|
|
extension_verify_after_merge "$fake_root" "$hierarchy" -e -h
|
|
|
|
test ! -f "$extension_data_dir/now-is-mutable"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" SYSTEMD_SYSEXT_MUTABLE_MODE=ephemeral systemd-sysext --root="$fake_root" unmerge
|
|
|
|
extension_verify_after_unmerge "$fake_root" "$hierarchy" -h
|
|
|
|
test ! -f "$extension_data_dir/now-is-mutable"
|
|
|
|
test ! -f "$fake_root$hierarchy/now-is-mutable"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
: "Extension data in /var/lib/extensions.mutable/…, R/O hierarchy, ephemeral import mutability, mutable merged"
|
|
|
|
fake_root="$FAKE_ROOTS_DIR/ephemeral-import"
|
2024-04-15 17:44:23 +00:00
|
|
|
hierarchy=/usr
|
2024-04-15 21:28:43 +00:00
|
|
|
extension_data_dir="$fake_root/var/lib/extensions.mutable$hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_root "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_image "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_mutable_dir "$extension_data_dir"
|
|
|
|
prepare_read_only_hierarchy "$fake_root" "$hierarchy"
|
|
|
|
(! touch "$fake_root$hierarchy/should-fail-on-read-only-fs")
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
# run systemd-sysext
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" --mutable=ephemeral-import merge
|
|
|
|
touch "$fake_root$hierarchy/now-is-mutable"
|
|
|
|
extension_verify_after_merge "$fake_root" "$hierarchy" -e -h -u
|
|
|
|
test ! -f "$extension_data_dir/now-is-mutable"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" unmerge
|
|
|
|
extension_verify_after_unmerge "$fake_root" "$hierarchy" -h
|
|
|
|
test ! -f "$extension_data_dir/now-is-mutable"
|
|
|
|
test ! -f "$fake_root$hierarchy/now-is-mutable"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
: "Extension data in /var/lib/extensions.mutable/…, R/O hierarchy, ephemeral import mutability through env var, mutable merged"
|
|
|
|
fake_root="$FAKE_ROOTS_DIR/ephemeral-import-env-var"
|
2024-04-15 17:44:23 +00:00
|
|
|
hierarchy=/usr
|
2024-04-15 21:28:43 +00:00
|
|
|
extension_data_dir="$fake_root/var/lib/extensions.mutable$hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_root "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_image "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_mutable_dir "$extension_data_dir"
|
|
|
|
prepare_read_only_hierarchy "$fake_root" "$hierarchy"
|
|
|
|
(! touch "$fake_root$hierarchy/should-fail-on-read-only-fs")
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" SYSTEMD_SYSEXT_MUTABLE_MODE=ephemeral-import systemd-sysext --root="$fake_root" merge
|
|
|
|
touch "$fake_root$hierarchy/now-is-mutable"
|
|
|
|
extension_verify_after_merge "$fake_root" "$hierarchy" -e -h -u
|
|
|
|
test ! -f "$extension_data_dir/now-is-mutable"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" SYSTEMD_SYSEXT_MUTABLE_MODE=ephemeral-import systemd-sysext --root="$fake_root" unmerge
|
|
|
|
extension_verify_after_unmerge "$fake_root" "$hierarchy" -h
|
|
|
|
test ! -f "$extension_data_dir/now-is-mutable"
|
|
|
|
test ! -f "$fake_root$hierarchy/now-is-mutable"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
: "Extension data pointing to mutable hierarchy, ephemeral import mutability, expected fail"
|
|
|
|
fake_root="$FAKE_ROOTS_DIR/ephemeral-import-self"
|
2024-04-15 17:44:23 +00:00
|
|
|
hierarchy=/usr
|
2024-04-15 21:28:43 +00:00
|
|
|
extension_data_dir="$fake_root/var/lib/extensions.mutable$hierarchy"
|
|
|
|
extension_real_dir="$fake_root$hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_root "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_image "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_mutable_dir "$extension_real_dir"
|
|
|
|
ln -sfTr "$extension_real_dir" "$extension_data_dir"
|
|
|
|
prepare_hierarchy "$fake_root" "$hierarchy"
|
|
|
|
touch "$fake_root$hierarchy/should-succeed-on-read-only-fs"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
(! SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" --mutable=ephemeral-import merge)
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
: "Extension data pointing to mutable hierarchy, import mutability, expected fail"
|
|
|
|
fake_root="$FAKE_ROOTS_DIR/import-self"
|
2024-04-15 17:44:23 +00:00
|
|
|
hierarchy=/usr
|
2024-04-15 21:28:43 +00:00
|
|
|
extension_data_dir="$fake_root/var/lib/extensions.mutable$hierarchy"
|
|
|
|
extension_real_dir="$fake_root$hierarchy"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
prepare_root "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_image "$fake_root" "$hierarchy"
|
|
|
|
prepare_extension_mutable_dir "$extension_real_dir"
|
|
|
|
ln -sfTr "$extension_real_dir" "$extension_data_dir"
|
|
|
|
prepare_hierarchy "$fake_root" "$hierarchy"
|
|
|
|
touch "$fake_root$hierarchy/should-succeed-on-read-only-fs"
|
2024-04-15 17:44:23 +00:00
|
|
|
|
2024-04-15 21:28:43 +00:00
|
|
|
(! SYSTEMD_SYSEXT_HIERARCHIES="$hierarchy" systemd-sysext --root="$fake_root" --mutable=import merge)
|
2024-04-15 17:44:23 +00:00
|
|
|
|
|
|
|
exit 0
|