image_rename() updated the Image object name and path before computing the source paths for auxiliary files. As a result, the auxiliary rename loop looked for files with the new image name, while existing sidecars such as .roothash, .verity, and .raw.tpmstate still used the old image name. Delay updating the Image object until after renaming its settings and auxiliary files. This lets image_auxiliary_path() resolve existing sidecars from the old image name while rename_auxiliary_file() assigns the new name. Extend the import test raw image rename coverage to check representative sidecars are renamed together with the image.
171 lines
5.4 KiB
Bash
Executable File
171 lines
5.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# SPDX-License-Identifier: LGPL-2.1-or-later
|
|
set -eux
|
|
set -o pipefail
|
|
|
|
export SYSTEMD_PAGER=cat
|
|
|
|
dd if=/dev/urandom of=/var/tmp/testimage.raw bs=$((1024*1024+7)) count=5
|
|
|
|
# Test import
|
|
machinectl import-raw /var/tmp/testimage.raw
|
|
machinectl image-status testimage
|
|
test -f /var/lib/machines/testimage.raw
|
|
cmp /var/tmp/testimage.raw /var/lib/machines/testimage.raw
|
|
|
|
# Test export
|
|
machinectl export-raw testimage /var/tmp/testimage2.raw
|
|
cmp /var/tmp/testimage.raw /var/tmp/testimage2.raw
|
|
rm /var/tmp/testimage2.raw
|
|
|
|
# Test compressed export (gzip)
|
|
machinectl export-raw testimage /var/tmp/testimage2.raw.gz
|
|
gunzip /var/tmp/testimage2.raw.gz
|
|
cmp /var/tmp/testimage.raw /var/tmp/testimage2.raw
|
|
rm /var/tmp/testimage2.raw
|
|
|
|
# Test clone
|
|
printf 'hash\n' >/var/lib/machines/testimage.roothash
|
|
printf 'verity\n' >/var/lib/machines/testimage.verity
|
|
printf 'tpmstate\n' >/var/lib/machines/testimage.raw.tpmstate
|
|
machinectl clone testimage testimage3
|
|
test -f /var/lib/machines/testimage3.raw
|
|
test -f /var/lib/machines/testimage3.roothash
|
|
test -f /var/lib/machines/testimage3.verity
|
|
test -f /var/lib/machines/testimage3.raw.tpmstate
|
|
machinectl image-status testimage3
|
|
test -f /var/lib/machines/testimage.raw
|
|
test -f /var/lib/machines/testimage.roothash
|
|
test -f /var/lib/machines/testimage.verity
|
|
test -f /var/lib/machines/testimage.raw.tpmstate
|
|
machinectl image-status testimage
|
|
cmp /var/tmp/testimage.raw /var/lib/machines/testimage.raw
|
|
cmp /var/tmp/testimage.raw /var/lib/machines/testimage3.raw
|
|
grep -Fx hash /var/lib/machines/testimage3.roothash
|
|
grep -Fx verity /var/lib/machines/testimage3.verity
|
|
grep -Fx tpmstate /var/lib/machines/testimage3.raw.tpmstate
|
|
|
|
# Test removal
|
|
machinectl remove testimage
|
|
test ! -f /var/lib/machines/testimage.raw
|
|
test ! -f /var/lib/machines/testimage.roothash
|
|
test ! -f /var/lib/machines/testimage.verity
|
|
test ! -f /var/lib/machines/testimage.raw.tpmstate
|
|
(! machinectl image-status testimage)
|
|
|
|
# Test export of clone
|
|
machinectl export-raw testimage3 /var/tmp/testimage3.raw
|
|
cmp /var/tmp/testimage.raw /var/tmp/testimage3.raw
|
|
rm /var/tmp/testimage3.raw
|
|
|
|
# Test rename
|
|
machinectl rename testimage3 testimage4
|
|
test -f /var/lib/machines/testimage4.raw
|
|
test -f /var/lib/machines/testimage4.roothash
|
|
test -f /var/lib/machines/testimage4.verity
|
|
test -f /var/lib/machines/testimage4.raw.tpmstate
|
|
machinectl image-status testimage4
|
|
test ! -f /var/lib/machines/testimage3.raw
|
|
test ! -f /var/lib/machines/testimage3.roothash
|
|
test ! -f /var/lib/machines/testimage3.verity
|
|
test ! -f /var/lib/machines/testimage3.raw.tpmstate
|
|
(! machinectl image-status testimage3)
|
|
cmp /var/tmp/testimage.raw /var/lib/machines/testimage4.raw
|
|
grep -Fx hash /var/lib/machines/testimage4.roothash
|
|
grep -Fx verity /var/lib/machines/testimage4.verity
|
|
grep -Fx tpmstate /var/lib/machines/testimage4.raw.tpmstate
|
|
|
|
# Test export of rename
|
|
machinectl export-raw testimage4 /var/tmp/testimage4.raw
|
|
cmp /var/tmp/testimage.raw /var/tmp/testimage4.raw
|
|
rm /var/tmp/testimage4.raw
|
|
|
|
# Test removal
|
|
machinectl remove testimage4
|
|
test ! -f /var/lib/machines/testimage4.raw
|
|
test ! -f /var/lib/machines/testimage4.roothash
|
|
test ! -f /var/lib/machines/testimage4.verity
|
|
test ! -f /var/lib/machines/testimage4.raw.tpmstate
|
|
(! machinectl image-status testimage4)
|
|
|
|
# → And now, let's test directory trees ← #
|
|
|
|
# Set up a directory we can import
|
|
mkdir -p /var/tmp/scratch
|
|
mv /var/tmp/testimage.raw /var/tmp/scratch/
|
|
touch /var/tmp/scratch/anotherfile
|
|
mkdir -p /var/tmp/scratch/adirectory
|
|
echo "piep" >/var/tmp/scratch/adirectory/athirdfile
|
|
|
|
# Test import-fs
|
|
machinectl import-fs /var/tmp/scratch/
|
|
test -d /var/lib/machines/scratch
|
|
machinectl image-status scratch
|
|
|
|
# Test export-tar
|
|
machinectl export-tar scratch /var/tmp/scratch.tar.gz
|
|
test -f /var/tmp/scratch.tar.gz
|
|
mkdir -p /var/tmp/extract
|
|
(cd /var/tmp/extract ; tar xzf /var/tmp/scratch.tar.gz)
|
|
diff -r /var/tmp/scratch/ /var/tmp/extract/
|
|
rm -rf /var/tmp/extract
|
|
|
|
# Test import-tar
|
|
machinectl import-tar /var/tmp/scratch.tar.gz scratch2
|
|
test -d /var/lib/machines/scratch2
|
|
machinectl image-status scratch2
|
|
diff -r /var/tmp/scratch/ /var/lib/machines/scratch2
|
|
|
|
# Test removal
|
|
machinectl remove scratch
|
|
test ! -f /var/lib/machines/scratch
|
|
(! machinectl image-status scratch)
|
|
|
|
# Test clone
|
|
machinectl clone scratch2 scratch3
|
|
test -d /var/lib/machines/scratch2
|
|
machinectl image-status scratch2
|
|
test -d /var/lib/machines/scratch3
|
|
machinectl image-status scratch3
|
|
diff -r /var/tmp/scratch/ /var/lib/machines/scratch3
|
|
|
|
# Test removal
|
|
machinectl remove scratch2
|
|
test ! -f /var/lib/machines/scratch2
|
|
(! machinectl image-status scratch2)
|
|
|
|
# Test rename
|
|
machinectl rename scratch3 scratch4
|
|
test -d /var/lib/machines/scratch4
|
|
machinectl image-status scratch4
|
|
test ! -f /var/lib/machines/scratch3
|
|
(! machinectl image-status scratch3)
|
|
diff -r /var/tmp/scratch/ /var/lib/machines/scratch4
|
|
|
|
# Test removal
|
|
machinectl remove scratch4
|
|
test ! -f /var/lib/machines/scratch4
|
|
(! machinectl image-status scratch4)
|
|
|
|
# Test import-tar hyphen/stdin pipe behavior
|
|
# shellcheck disable=SC2002
|
|
cat /var/tmp/scratch.tar.gz | machinectl import-tar - scratch5
|
|
test -d /var/lib/machines/scratch5
|
|
machinectl image-status scratch5
|
|
diff -r /var/tmp/scratch/ /var/lib/machines/scratch5
|
|
|
|
# Test export-tar hyphen/stdout pipe behavior
|
|
mkdir -p /var/tmp/extract
|
|
machinectl export-tar scratch5 - | tar xvf - -C /var/tmp/extract/
|
|
diff -r /var/tmp/scratch/ /var/tmp/extract/
|
|
rm -rf /var/tmp/extract
|
|
|
|
rm -rf /var/tmp/scratch
|
|
|
|
# Test removal
|
|
machinectl remove scratch5
|
|
test ! -f /var/lib/machines/scratch5
|
|
(! machinectl image-status scratch5)
|
|
|
|
touch /testok
|