Fedora 33 and 34 Cloud Base Images have only partition with the
following directory structure,
.
├── bin -> usr/bin
├── boot
├── dev
├── etc
├── home
├── root
By comparison, Fedora 35 Cloud Base Image has multiple partitions. The root
partition which is the last partition has the following directory,
.
├── home
└── root
├── bin -> usr/bin
├── boot
├── dev
├── etc
├── home
├── root
and the first partition is the boot partition.
This patch address the above changes by mounting {LAST_PARTITION}/root as
to TEMP_ROOT and mount FIRST_PARTITION to TEMP_ROOT/boot. So the test
image can be built successfully.
Signed-off-by: Coiby Xu <coxu(a)redhat.com>
---
v2:
- check LAST_PARTITION/root/root instead of LAST_PARTITION/root [Kairui]
- improve commit message
---
tests/scripts/image-init-lib.sh | 27 +++++++++++++++++++++++++--
1 file changed, 25 insertions(+), 2 deletions(-)
diff --git a/tests/scripts/image-init-lib.sh b/tests/scripts/image-init-lib.sh
index 0a1524b..a30c09a 100644
--- a/tests/scripts/image-init-lib.sh
+++ b/tests/scripts/image-init-lib.sh
@@ -23,6 +23,7 @@ is_mounted()
clean_up()
{
for _mnt in ${MNTS[@]}; do
+ is_mounted $_mnt/root/boot && $SUDO umount -f $_mnt/root/boot
is_mounted $_mnt && $SUDO umount -f $_mnt
done
@@ -81,6 +82,21 @@ get_mountable_dev() {
fi
}
+# get the separate boot partition
+# return the first partition as boot partition
+get_mount_boot() {
+ local dev=$1 parts
+
+ $SUDO partprobe $dev && sync
+ parts="$(ls -1 ${dev}p*)"
+ if [ -n "$parts" ]; then
+ if [ $(echo "$parts" | wc -l) -gt 1 ]; then
+ echo "$parts" | head -1
+ fi
+ fi
+}
+
+
prepare_loop() {
[ -n "$(lsmod | grep "^loop")" ] && return
@@ -133,7 +149,7 @@ image_lock()
# Mount a device, will umount it automatially when shell exits
mount_image() {
local image=$1 fmt
- local dev mnt mnt_dev
+ local dev mnt mnt_dev boot root
# Lock the image just in case user run this script in parrel
image_lock $image
@@ -166,12 +182,19 @@ mount_image() {
$SUDO mount $mnt_dev $mnt
[ $? -ne 0 ] && perror_exit "failed to mount device '$mnt_dev'"
+ boot=$(get_mount_boot "$dev")
+ if [[ -n "$boot" ]]; then
+ root=$(get_image_mount_root $image)
+ $SUDO mount $boot $root/boot
+ [ $? -ne 0 ] && perror_exit "failed to mount the bootable partition for device '$mnt_dev'"
+ fi
}
get_image_mount_root() {
local image=$1
local root=${MNTS[$image]}
+ [ -d "$root/root/root" ] && root=$root/root
echo $root
if [ -z "$root" ]; then
@@ -213,7 +236,7 @@ run_in_image() {
inst_in_image() {
local image=$1 src=$2 dst=$3
- local root=${MNTS[$image]}
+ local root=$(get_image_mount_root $1)
$SUDO cp $src $root/$dst
}
--
2.31.1