Merge pull request #18018 from bluca/mount_images_overlay
Add ExtensionImages directive to form overlays
This commit is contained in:
@@ -9,6 +9,8 @@ TEST_INSTALL_VERITY_MINIMAL=1
|
||||
|
||||
. $TEST_BASE_DIR/test-functions
|
||||
|
||||
command -v mksquashfs >/dev/null 2>&1 || exit 0
|
||||
command -v veritysetup >/dev/null 2>&1 || exit 0
|
||||
command -v sfdisk >/dev/null 2>&1 || exit 0
|
||||
|
||||
# Need loop devices for systemd-dissect
|
||||
@@ -17,6 +19,7 @@ test_append_files() {
|
||||
instmods loop =block
|
||||
instmods squashfs =squashfs
|
||||
instmods dm_verity =md
|
||||
instmods overlay =overlayfs
|
||||
install_dmevent
|
||||
generate_module_dependencies
|
||||
inst_binary losetup
|
||||
|
||||
@@ -206,6 +206,7 @@ RootImage=
|
||||
RootHash=
|
||||
RootHashSignature=
|
||||
RootVerity=
|
||||
ExtensionImages=
|
||||
RuntimeMaxSec=
|
||||
SELinuxContextFromNet=
|
||||
SecureBits=
|
||||
|
||||
+49
-1
@@ -480,18 +480,20 @@ install_verity_minimal() {
|
||||
BASICTOOLS=(
|
||||
bash
|
||||
cat
|
||||
grep
|
||||
mount
|
||||
sleep
|
||||
)
|
||||
oldinitdir=$initdir
|
||||
rm -rfv $TESTDIR/minimal
|
||||
export initdir=$TESTDIR/minimal
|
||||
mkdir -p $initdir/usr/lib/systemd/system $initdir/etc
|
||||
mkdir -p $initdir/usr/lib/systemd/system $initdir/usr/lib/extension-release.d $initdir/etc $initdir/var/tmp $initdir/opt
|
||||
setup_basic_dirs
|
||||
install_basic_tools
|
||||
cp $os_release $initdir/usr/lib/os-release
|
||||
ln -s ../usr/lib/os-release $initdir/etc/os-release
|
||||
touch $initdir/etc/machine-id $initdir/etc/resolv.conf
|
||||
touch $initdir/opt/some_file
|
||||
echo MARKER=1 >> $initdir/usr/lib/os-release
|
||||
echo -e "[Service]\nExecStartPre=cat /usr/lib/os-release\nExecStart=sleep 120" > $initdir/usr/lib/systemd/system/app0.service
|
||||
cp $initdir/usr/lib/systemd/system/app0.service $initdir/usr/lib/systemd/system/app0-foo.service
|
||||
@@ -507,6 +509,52 @@ install_verity_minimal() {
|
||||
mksquashfs $initdir $oldinitdir/usr/share/minimal_1.raw
|
||||
veritysetup format $oldinitdir/usr/share/minimal_1.raw $oldinitdir/usr/share/minimal_1.verity | \
|
||||
grep '^Root hash:' | cut -f2 | tr -d '\n' > $oldinitdir/usr/share/minimal_1.roothash
|
||||
|
||||
# Rolling distros like Arch do not set VERSION_ID
|
||||
local version_id=""
|
||||
if grep -q "^VERSION_ID=" $os_release; then
|
||||
version_id="$(grep "^VERSION_ID=" $os_release)"
|
||||
fi
|
||||
|
||||
export initdir=$TESTDIR/app0
|
||||
mkdir -p $initdir/usr/lib/extension-release.d $initdir/usr/lib/systemd/system $initdir/opt
|
||||
grep "^ID=" $os_release > $initdir/usr/lib/extension-release.d/extension-release.app0
|
||||
echo "${version_id}" >> $initdir/usr/lib/extension-release.d/extension-release.app0
|
||||
cat <<EOF > $initdir/usr/lib/systemd/system/app0.service
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
ExecStart=/opt/script0.sh
|
||||
EOF
|
||||
cat <<EOF > $initdir/opt/script0.sh
|
||||
#!/bin/bash
|
||||
set -e
|
||||
test -e /usr/lib/os-release
|
||||
cat /usr/lib/extension-release.d/extension-release.app0
|
||||
EOF
|
||||
chmod +x $initdir/opt/script0.sh
|
||||
echo MARKER=1 > $initdir/usr/lib/systemd/system/some_file
|
||||
mksquashfs $initdir $oldinitdir/usr/share/app0.raw
|
||||
|
||||
export initdir=$TESTDIR/app1
|
||||
mkdir -p $initdir/usr/lib/extension-release.d $initdir/usr/lib/systemd/system $initdir/opt
|
||||
grep "^ID=" $os_release > $initdir/usr/lib/extension-release.d/extension-release.app1
|
||||
echo "${version_id}" >> $initdir/usr/lib/extension-release.d/extension-release.app1
|
||||
cat <<EOF > $initdir/usr/lib/systemd/system/app1.service
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
ExecStart=/opt/script1.sh
|
||||
EOF
|
||||
cat <<EOF > $initdir/opt/script1.sh
|
||||
#!/bin/bash
|
||||
set -e
|
||||
test -e /usr/lib/os-release
|
||||
cat /usr/lib/extension-release.d/extension-release.app1
|
||||
EOF
|
||||
chmod +x $initdir/opt/script1.sh
|
||||
echo MARKER=1 > $initdir/usr/lib/systemd/system/other_file
|
||||
mksquashfs $initdir $oldinitdir/usr/share/app1.raw
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -227,6 +227,27 @@ done
|
||||
|
||||
systemctl is-active testservice-50d.service
|
||||
|
||||
# ExtensionImages will set up an overlay
|
||||
systemd-run -t --property ExtensionImages=/usr/share/app0.raw --property RootImage=${image}.raw cat /opt/script0.sh | grep -q -F "extension-release.app0"
|
||||
systemd-run -t --property ExtensionImages=/usr/share/app0.raw --property RootImage=${image}.raw cat /usr/lib/systemd/system/some_file | grep -q -F "MARKER=1"
|
||||
systemd-run -t --property ExtensionImages="/usr/share/app0.raw /usr/share/app1.raw" --property RootImage=${image}.raw cat /opt/script0.sh | grep -q -F "extension-release.app0"
|
||||
systemd-run -t --property ExtensionImages="/usr/share/app0.raw /usr/share/app1.raw" --property RootImage=${image}.raw cat /usr/lib/systemd/system/some_file | grep -q -F "MARKER=1"
|
||||
systemd-run -t --property ExtensionImages="/usr/share/app0.raw /usr/share/app1.raw" --property RootImage=${image}.raw cat /opt/script1.sh | grep -q -F "extension-release.app1"
|
||||
systemd-run -t --property ExtensionImages="/usr/share/app0.raw /usr/share/app1.raw" --property RootImage=${image}.raw cat /usr/lib/systemd/system/other_file | grep -q -F "MARKER=1"
|
||||
cat >/run/systemd/system/testservice-50e.service <<EOF
|
||||
[Service]
|
||||
MountAPIVFS=yes
|
||||
TemporaryFileSystem=/run
|
||||
RootImage=${image}.raw
|
||||
ExtensionImages=/usr/share/app0.raw /usr/share/app1.raw:nosuid
|
||||
ExecStart=/bin/bash -c '/opt/script0.sh | grep ID'
|
||||
ExecStart=/bin/bash -c '/opt/script1.sh | grep ID'
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
EOF
|
||||
systemctl start testservice-50e.service
|
||||
systemctl is-active testservice-50e.service
|
||||
|
||||
echo OK >/testok
|
||||
|
||||
exit 0
|
||||
|
||||
Reference in New Issue
Block a user