Skip to content

Commit

Permalink
fix(dmsquash-live): do not check ISO md5 if image filesystem
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
Federico Vaga committed Mar 12, 2024
1 parent e8b7b6e commit c8f1708
Showing 1 changed file with 24 additions and 19 deletions.
43 changes: 24 additions & 19 deletions modules.d/90dmsquash-live/dmsquash-live-root.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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 given $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
Expand Down

0 comments on commit c8f1708

Please sign in to comment.