From dbaf3d37cf1ef5db98ad5c60a8a33ac1ab9e76d7 Mon Sep 17 00:00:00 2001 From: Federico Vaga Date: Wed, 20 Dec 2023 12:02:15 +0100 Subject: [PATCH] fix(dmsquash-live): do not check ISO md5 if image filesystem The ISO checksum code was executed independently of the provided `$livedev`. Often, this is a loop device pointing to an ISO image, but in other cases `dmsquash-live-root` receives the path to a filesystem image. In this case, we can't use `udevadm` to extract information because it is not a device, and trying to do that leads to `udevadm` error messages (but not blocking). Therefore, the ISO checksum check must be performed only if the provided `$livedev` is **not** a regular file. Signed-off-by: Federico Vaga --- .../90dmsquash-live/dmsquash-live-root.sh | 43 +++++++++++-------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/modules.d/90dmsquash-live/dmsquash-live-root.sh b/modules.d/90dmsquash-live/dmsquash-live-root.sh index 1fad81d03d..435851350b 100755 --- a/modules.d/90dmsquash-live/dmsquash-live-root.sh +++ b/modules.d/90dmsquash-live/dmsquash-live-root.sh @@ -59,27 +59,32 @@ get_check_dev() { echo "$_udevinfo" | grep "DEVNAME=" | sed 's/DEVNAME=//' } -# Find the right device to run check on -check_dev=$(get_check_dev "$livedev") -# CD/DVD media check -[ -b "$check_dev" ] && fs=$(det_fs "$check_dev") -if [ "$fs" = "iso9660" -o "$fs" = "udf" ]; then - check="yes" -fi -getarg rd.live.check -d check || check="" -if [ -n "$check" ]; then - type plymouth > /dev/null 2>&1 && plymouth --hide-splash - if [ -n "$DRACUT_SYSTEMD" ]; then - p=$(dev_unit_name "$check_dev") - systemctl start checkisomd5@"${p}".service - else - checkisomd5 --verbose "$check_dev" +# Check ISO checksum only If we have a path to a block device (or just its name +# without '/dev'). In other words, in this context, we perform the check only +# if the give $livedev is not a filesystem file image. +if [ ! -f "$livedev" ]; then + # Find the right device to run check on + check_dev=$(get_check_dev "$livedev") + # CD/DVD media check + [ -b "$check_dev" ] && fs=$(det_fs "$check_dev") + if [ "$fs" = "iso9660" -o "$fs" = "udf" ]; then + check="yes" fi - if [ $? -eq 1 ]; then - die "CD check failed!" - exit 1 + getarg rd.live.check -d check || check="" + if [ -n "$check" ]; then + type plymouth > /dev/null 2>&1 && plymouth --hide-splash + if [ -n "$DRACUT_SYSTEMD" ]; then + p=$(dev_unit_name "$check_dev") + systemctl start checkisomd5@"${p}".service + else + checkisomd5 --verbose "$check_dev" + fi + if [ $? -eq 1 ]; then + die "CD check failed!" + exit 1 + fi + type plymouth > /dev/null 2>&1 && plymouth --show-splash fi - type plymouth > /dev/null 2>&1 && plymouth --show-splash fi ln -s "$livedev" /run/initramfs/livedev