TEST_DESCRIPTION="test systemd-dissect"
IMAGE_NAME="dissect"
TEST_NO_NSPAWN=1
+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
install_dmevent
generate_module_dependencies
inst_binary losetup
-
- BASICTOOLS=(
- bash
- cat
- mount
- )
- oldinitdir=$initdir
- export initdir=$TESTDIR/minimal
- mkdir -p $initdir/usr/lib $initdir/etc
- setup_basic_dirs
- install_basic_tools
- cp $os_release $initdir/usr/lib/os-release
- ln -s ../usr/lib/os-release $initdir/etc/os-release
- echo MARKER=1 >> $initdir/usr/lib/os-release
- mksquashfs $initdir $oldinitdir/usr/share/minimal.raw
- veritysetup format $oldinitdir/usr/share/minimal.raw $oldinitdir/usr/share/minimal.verity | grep '^Root hash:' | cut -f2 | tr -d '\n' > $oldinitdir/usr/share/minimal.roothash
- export initdir=$oldinitdir
+ install_verity_minimal
)
}
return 0
}
+# Build two very minimal root images, with two units, one is the same and one is different across them
+install_verity_minimal() {
+ if [ -e $initdir/usr/share/minimal.raw ]; then
+ return
+ fi
+ if ! command -v mksquashfs >/dev/null 2>&1; then
+ dfatal "mksquashfs not found"
+ exit 1
+ fi
+ if ! command -v veritysetup >/dev/null 2>&1; then
+ dfatal "veritysetup not found"
+ exit 1
+ fi
+ (
+ BASICTOOLS=(
+ bash
+ cat
+ mount
+ sleep
+ )
+ oldinitdir=$initdir
+ rm -rfv $TESTDIR/minimal
+ export initdir=$TESTDIR/minimal
+ mkdir -p $initdir/usr/lib/systemd/system $initdir/etc
+ 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
+ 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
+
+ mksquashfs $initdir $oldinitdir/usr/share/minimal_0.raw
+ veritysetup format $oldinitdir/usr/share/minimal_0.raw $oldinitdir/usr/share/minimal_0.verity | \
+ grep '^Root hash:' | cut -f2 | tr -d '\n' > $oldinitdir/usr/share/minimal_0.roothash
+
+ sed -i "s/MARKER=1/MARKER=2/g" $initdir/usr/lib/os-release
+ rm $initdir/usr/lib/systemd/system/app0-foo.service
+ cp $initdir/usr/lib/systemd/system/app0.service $initdir/usr/lib/systemd/system/app0-bar.service
+
+ 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
+ )
+}
+
setup_basic_environment() {
# create the basic filesystem layout
setup_basic_dirs
if [[ "$IS_BUILT_WITH_ASAN" = "yes" ]]; then
create_asan_wrapper
fi
+ if [ -n "$TEST_INSTALL_VERITY_MINIMAL" ]; then
+ install_verity_minimal
+ fi
}
setup_selinux() {
trap cleanup EXIT
-cp /usr/share/minimal.* "${image_dir}/"
-image="${image_dir}/minimal"
+cp /usr/share/minimal* "${image_dir}/"
+image="${image_dir}/minimal_0"
roothash="$(cat ${image}.roothash)"
os_release=$(test -e /etc/os-release && echo /etc/os-release || echo /usr/lib/os-release)