local defs imgs output
local loop volume
- defs="$(runas testuser mktemp --directory "/tmp/test-repart.XXXXXXXXXX")"
- imgs="$(runas testuser mktemp --directory "/var/tmp/test-repart.XXXXXXXXXX")"
+ defs="$(mktemp --directory "/tmp/test-repart.defs.XXXXXXXXXX")"
+ imgs="$(runas testuser mktemp --directory "/var/tmp/test-repart.imgs.XXXXXXXXXX")"
# shellcheck disable=SC2064
trap "rm -rf '$defs' '$imgs'" RETURN
+ chmod a+rx "$defs"
# 1. create an empty image
# 2. Testing with root, root2, home, and swap
- runas testuser tee "$defs/root.conf" <<EOF
+ tee "$defs/root.conf" <<EOF
[Partition]
Type=root
EOF
ln -s root.conf "$defs/root2.conf"
- runas testuser tee "$defs/home.conf" <<EOF
+ tee "$defs/home.conf" <<EOF
[Partition]
Type=home
Label=home-first
Label=home-always-too-long-xxxxxxxxxxxxxx-%v
EOF
- runas testuser tee "$defs/swap.conf" <<EOF
+ tee "$defs/swap.conf" <<EOF
[Partition]
Type=swap
SizeMaxBytes=64M
# 3. Testing with root, root2, home, swap, and another partition
- runas testuser tee "$defs/swap.conf" <<EOF
+ tee "$defs/swap.conf" <<EOF
[Partition]
Type=swap
SizeMaxBytes=64M
EOF
- runas testuser tee "$defs/extra.conf" <<EOF
+ tee "$defs/extra.conf" <<EOF
[Partition]
Type=linux-generic
Label=custom_label
dd if=/dev/urandom of="$imgs/block-copy" bs=4096 count=10240
- runas testuser tee "$defs/extra2.conf" <<EOF
+ tee "$defs/extra2.conf" <<EOF
[Partition]
Type=linux-generic
Label=block-copy
# 6. Testing Format=/Encrypt=/CopyFiles=
- runas testuser tee "$defs/extra3.conf" <<EOF
+ tee "$defs/extra3.conf" <<EOF
[Partition]
Type=linux-generic
Label=luks-format-copy
SizeMinBytes=48M
EOF
+ # CopyFiles will fail if we try to chown the target file to root.
+ # Make the files owned by the user so that the invocation below works.
+ chown testuser -R "$defs"
+
runas testuser systemd-repart --definitions="$defs" \
--size=auto \
--dry-run=no \
testcase_dropin() {
local defs imgs output
- defs="$(runas testuser mktemp --directory "/tmp/test-repart.XXXXXXXXXX")"
- imgs="$(runas testuser mktemp --directory "/var/tmp/test-repart.XXXXXXXXXX")"
+ defs="$(mktemp --directory "/tmp/test-repart.defs.XXXXXXXXXX")"
+ imgs="$(runas testuser mktemp --directory "/var/tmp/test-repart.imgs.XXXXXXXXXX")"
# shellcheck disable=SC2064
trap "rm -rf '$defs' '$imgs'" RETURN
+ chmod a+rx "$defs"
- runas testuser tee "$defs/root.conf" <<EOF
+ tee "$defs/root.conf" <<EOF
[Partition]
Type=swap
SizeMaxBytes=64M
UUID=837c3d67-21b3-478e-be82-7e7f83bf96d3
EOF
- runas testuser mkdir -p "$defs/root.conf.d"
- runas testuser tee "$defs/root.conf.d/override1.conf" <<EOF
+ mkdir -p "$defs/root.conf.d"
+ tee "$defs/root.conf.d/override1.conf" <<EOF
[Partition]
Label=label1
SizeMaxBytes=32M
EOF
- runas testuser tee "$defs/root.conf.d/override2.conf" <<EOF
+ tee "$defs/root.conf.d/override2.conf" <<EOF
[Partition]
Label=label2
EOF
testcase_multiple_definitions() {
local defs imgs output
- defs="$(runas testuser mktemp --directory "/tmp/test-repart.XXXXXXXXXX")"
- imgs="$(runas testuser mktemp --directory "/var/tmp/test-repart.XXXXXXXXXX")"
+ defs="$(mktemp --directory "/tmp/test-repart.defs.XXXXXXXXXX")"
+ imgs="$(runas testuser mktemp --directory "/var/tmp/test-repart.imgs.XXXXXXXXXX")"
# shellcheck disable=SC2064
trap "rm -rf '$defs' '$imgs'" RETURN
+ chmod a+rx "$defs"
- runas testuser mkdir -p "$defs/1"
-
- runas testuser tee "$defs/1/root1.conf" <<EOF
+ mkdir -p "$defs/1"
+ tee "$defs/1/root1.conf" <<EOF
[Partition]
Type=swap
SizeMaxBytes=32M
Label=label1
EOF
- runas testuser mkdir -p "$defs/2"
-
- runas testuser tee "$defs/2/root2.conf" <<EOF
+ mkdir -p "$defs/2"
+ tee "$defs/2/root2.conf" <<EOF
[Partition]
Type=swap
SizeMaxBytes=32M
testcase_copy_blocks() {
local defs imgs output
- defs="$(runas testuser mktemp --directory "/tmp/test-repart.XXXXXXXXXX")"
- imgs="$(runas testuser mktemp --directory "/var/tmp/test-repart.XXXXXXXXXX")"
+ defs="$(mktemp --directory "/tmp/test-repart.defs.XXXXXXXXXX")"
+ imgs="$(runas testuser mktemp --directory "/var/tmp/test-repart.imgs.XXXXXXXXXX")"
# shellcheck disable=SC2064
trap "rm -rf '$defs' '$imgs'" RETURN
+ chmod a+rx "$defs"
# First, create a disk image and verify its in order
- runas testuser tee "$defs/esp.conf" <<EOF
+ tee "$defs/esp.conf" <<EOF
[Partition]
Type=esp
SizeMinBytes=10M
Format=vfat
EOF
- runas testuser tee "$defs/usr.conf" <<EOF
+ tee "$defs/usr.conf" <<EOF
[Partition]
Type=usr-${architecture}
SizeMinBytes=10M
ReadOnly=yes
EOF
- runas testuser tee "$defs/root.conf" <<EOF
+ tee "$defs/root.conf" <<EOF
[Partition]
Type=root-${architecture}
SizeMinBytes=10M
# Then, create another image with CopyBlocks=auto
- runas testuser tee "$defs/esp.conf" <<EOF
+ tee "$defs/esp.conf" <<EOF
[Partition]
Type=esp
CopyBlocks=auto
EOF
- runas testuser tee "$defs/usr.conf" <<EOF
+ tee "$defs/usr.conf" <<EOF
[Partition]
Type=usr-${architecture}
ReadOnly=yes
CopyBlocks=auto
EOF
- runas testuser tee "$defs/root.conf" <<EOF
+ tee "$defs/root.conf" <<EOF
[Partition]
Type=root-${architecture}
CopyBlocks=auto
testcase_unaligned_partition() {
local defs imgs output
- defs="$(runas testuser mktemp --directory "/tmp/test-repart.XXXXXXXXXX")"
- imgs="$(runas testuser mktemp --directory "/var/tmp/test-repart.XXXXXXXXXX")"
+ defs="$(mktemp --directory "/tmp/test-repart.defs.XXXXXXXXXX")"
+ imgs="$(runas testuser mktemp --directory "/var/tmp/test-repart.imgs.XXXXXXXXXX")"
# shellcheck disable=SC2064
trap "rm -rf '$defs' '$imgs'" RETURN
+ chmod a+rx "$defs"
# Operate on an image with unaligned partition.
- runas testuser tee "$defs/root.conf" <<EOF
+ tee "$defs/root.conf" <<EOF
[Partition]
Type=root-${architecture}
EOF
# testcase for #21817
- defs="$(runas testuser mktemp --directory "/tmp/test-repart.XXXXXXXXXX")"
- imgs="$(runas testuser mktemp --directory "/var/tmp/test-repart.XXXXXXXXXX")"
+ defs="$(mktemp --directory "/tmp/test-repart.defs.XXXXXXXXXX")"
+ imgs="$(runas testuser mktemp --directory "/var/tmp/test-repart.imgs.XXXXXXXXXX")"
# shellcheck disable=SC2064
trap "rm -rf '$defs' '$imgs'" RETURN
+ chmod a+rx "$defs"
- runas testuser tee "$defs/test.conf" <<EOF
+ tee "$defs/test.conf" <<EOF
[Partition]
Type=root
EOF
# testcase for #24553
- defs="$(runas testuser mktemp --directory "/tmp/test-repart.XXXXXXXXXX")"
- imgs="$(runas testuser mktemp --directory "/var/tmp/test-repart.XXXXXXXXXX")"
+ defs="$(mktemp --directory "/tmp/test-repart.defs.XXXXXXXXXX")"
+ imgs="$(runas testuser mktemp --directory "/var/tmp/test-repart.imgs.XXXXXXXXXX")"
# shellcheck disable=SC2064
trap "rm -rf '$defs' '$imgs'" RETURN
+ chmod a+rx "$defs"
- runas testuser tee "$defs/root.conf" <<EOF
+ tee "$defs/root.conf" <<EOF
[Partition]
Type=root
SizeMinBytes=10G
SizeMaxBytes=120G
EOF
- runas testuser tee "$imgs/partscript" <<EOF
+ tee "$imgs/partscript" <<EOF
label: gpt
label-id: C9FFE979-A415-C449-B729-78C7AA664B10
unit: sectors
assert_in "$imgs/zzz2 : start= 524328, size= 24641456, type=${root_guid}, uuid=${root_uuid}, name=\"root-${architecture}\"" "$output"
# 3. Multiple partitions with Priority= (small disk)
- runas testuser tee "$defs/root.conf" <<EOF
+ tee "$defs/root.conf" <<EOF
[Partition]
Type=root
SizeMinBytes=10G
Priority=100
EOF
- runas testuser tee "$defs/usr.conf" <<EOF
+ tee "$defs/usr.conf" <<EOF
[Partition]
Type=usr
SizeMinBytes=10M
testcase_zero_uuid() {
local defs imgs output
- defs="$(runas testuser mktemp --directory "/tmp/test-repart.XXXXXXXXXX")"
- imgs="$(runas testuser mktemp --directory "/var/tmp/test-repart.XXXXXXXXXX")"
+ defs="$(mktemp --directory "/tmp/test-repart.defs.XXXXXXXXXX")"
+ imgs="$(runas testuser mktemp --directory "/var/tmp/test-repart.imgs.XXXXXXXXXX")"
# shellcheck disable=SC2064
trap "rm -rf '$defs' '$imgs'" RETURN
+ chmod a+rx "$defs"
# Test image with zero UUID.
- runas testuser tee "$defs/root.conf" <<EOF
+ tee "$defs/root.conf" <<EOF
[Partition]
Type=root-${architecture}
UUID=null
testcase_verity() {
local defs imgs output
- defs="$(runas testuser mktemp --directory "/tmp/test-repart.XXXXXXXXXX")"
- imgs="$(runas testuser mktemp --directory "/var/tmp/test-repart.XXXXXXXXXX")"
+ defs="$(mktemp --directory "/tmp/test-repart.defs.XXXXXXXXXX")"
+ imgs="$(runas testuser mktemp --directory "/var/tmp/test-repart.imgs.XXXXXXXXXX")"
# shellcheck disable=SC2064
trap "rm -rf '$defs' '$imgs'" RETURN
+ chmod a+rx "$defs"
- runas testuser tee "$defs/verity-data.conf" <<EOF
+ tee "$defs/verity-data.conf" <<EOF
[Partition]
Type=root-${architecture}
CopyFiles=${defs}
Minimize=guess
EOF
- runas testuser tee "$defs/verity-hash.conf" <<EOF
+ tee "$defs/verity-hash.conf" <<EOF
[Partition]
Type=root-${architecture}-verity
Verity=hash
Minimize=yes
EOF
- runas testuser tee "$defs/verity-sig.conf" <<EOF
+ tee "$defs/verity-sig.conf" <<EOF
[Partition]
Type=root-${architecture}-verity-sig
Verity=signature
EOF
# Unfortunately OpenSSL insists on reading some config file, hence provide one with mostly placeholder contents
- runas testuser tee >"$defs/verity.openssl.cnf" <<EOF
+ tee >"$defs/verity.openssl.cnf" <<EOF
[ req ]
prompt = no
distinguished_name = req_distinguished_name
emailAddress = test@email.com
EOF
- runas testuser openssl req -config "$defs/verity.openssl.cnf" \
- -new -x509 \
- -newkey rsa:1024 \
- -keyout "$defs/verity.key" \
- -out "$defs/verity.crt" \
- -days 365 \
- -nodes
+ openssl req \
+ -config "$defs/verity.openssl.cnf" \
+ -new -x509 \
+ -newkey rsa:1024 \
+ -keyout "$defs/verity.key" \
+ -out "$defs/verity.crt" \
+ -days 365 \
+ -nodes
mkdir -p /run/verity.d
ln -s "$defs/verity.crt" /run/verity.d/ok.crt
+ # CopyFiles will fail if we try to chown the target file to root.
+ # Make the files owned by the user so that the invocation below works.
+ chown testuser -R "$defs"
+
output=$(runas testuser systemd-repart --definitions="$defs" \
--seed="$seed" \
--dry-run=no \
testcase_exclude_files() {
local defs imgs root output
- defs="$(runas testuser mktemp --directory "/tmp/test-repart.XXXXXXXXXX")"
- imgs="$(runas testuser mktemp --directory "/var/tmp/test-repart.XXXXXXXXXX")"
- root="$(runas testuser mktemp --directory "/var/tmp/test-repart.XXXXXXXXXX")"
+ defs="$(mktemp --directory "/tmp/test-repart.defs.XXXXXXXXXX")"
+ imgs="$(runas testuser mktemp --directory "/var/tmp/test-repart.imgs.XXXXXXXXXX")"
+ root="$(runas testuser mktemp --directory "/var/tmp/test-repart.root.XXXXXXXXXX")"
# shellcheck disable=SC2064
trap "rm -rf '$defs' '$imgs' '$root'" RETURN
-
- runas testuser touch "$root/abc"
- runas testuser mkdir "$root/usr"
- runas testuser touch "$root/usr/def"
- runas testuser touch "$root/usr/qed"
- runas testuser mkdir "$root/tmp"
- runas testuser touch "$root/tmp/prs"
- runas testuser mkdir "$root/proc"
- runas testuser touch "$root/proc/prs"
- runas testuser mkdir "$root/zzz"
- runas testuser mkdir "$root/zzz/usr"
- runas testuser touch "$root/zzz/usr/prs"
- runas testuser mkdir "$root/zzz/proc"
- runas testuser touch "$root/zzz/proc/prs"
-
- runas testuser tee "$defs/00-root.conf" <<EOF
+ chmod a+rx "$defs"
+
+ touch "$root/abc"
+ mkdir "$root/usr"
+ touch "$root/usr/def"
+ touch "$root/usr/qed"
+ mkdir "$root/tmp"
+ touch "$root/tmp/prs"
+ mkdir "$root/proc"
+ touch "$root/proc/prs"
+ mkdir "$root/zzz"
+ mkdir "$root/zzz/usr"
+ touch "$root/zzz/usr/prs"
+ mkdir "$root/zzz/proc"
+ touch "$root/zzz/proc/prs"
+
+ tee "$defs/00-root.conf" <<EOF
[Partition]
Type=root-${architecture}
CopyFiles=/
CopyFiles=/zzz:/
EOF
- runas testuser tee "$defs/10-usr.conf" <<EOF
+ tee "$defs/10-usr.conf" <<EOF
[Partition]
Type=usr-${architecture}
CopyFiles=/usr:/
ExcludeFiles=/usr/qed
EOF
+ # CopyFiles will fail if we try to chown the target file to root.
+ # Make the files owned by the user so that the invocation below works.
+ chown testuser -R "$root"
+
output=$(runas testuser systemd-repart --definitions="$defs" \
--seed="$seed" \
--dry-run=no \
return
fi
- defs="$(mktemp --directory "/tmp/test-repart.XXXXXXXXXX")"
- imgs="$(mktemp --directory "/var/tmp/test-repart.XXXXXXXXXX")"
+ defs="$(mktemp --directory "/tmp/test-repart.defs.XXXXXXXXXX")"
+ imgs="$(mktemp --directory "/var/tmp/test-repart.imgs.XXXXXXXXXX")"
# shellcheck disable=SC2064
trap "rm -rf '$defs' '$imgs'" RETURN
return
fi
- defs="$(mktemp --directory "/tmp/test-repart.XXXXXXXXXX")"
- imgs="$(mktemp --directory "/var/tmp/test-repart.XXXXXXXXXX")"
+ defs="$(mktemp --directory "/tmp/test-repart.defs.XXXXXXXXXX")"
+ imgs="$(mktemp --directory "/var/tmp/test-repart.imgs.XXXXXXXXXX")"
# shellcheck disable=SC2064
trap "rm -rf '$defs' '$imgs'" RETURN