Skip to content

Commit

Permalink
fix(dmsquash-live): run checkisomd5 on correct device
Browse files Browse the repository at this point in the history
When the new grub2 iso is written to a usb drive the disk label points
to a partition that does not include the full iso image. This causes
checkisomd5 to run with the wrong data and it fails.

This patch adds a check that will test to see if there is a parent
device that is a disk, and to run checkisomd5 on it instead of on the
partition pointed to by the label.

When running from an iso this will return the original
/dev/disk/by-label/ path, and when running from a usb drive it will
return the parent device (eg. /dev/sda).

Resolves: rhbz#2107858
  • Loading branch information
bcl authored and johannbg committed Aug 12, 2022
1 parent 72b700e commit c8f819e
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 4 deletions.
33 changes: 30 additions & 3 deletions modules.d/90dmsquash-live/dmsquash-live-root.sh
Original file line number Diff line number Diff line change
Expand Up @@ -33,19 +33,46 @@ overlay_size=$(getarg rd.live.overlay.size=)
getargbool 0 rd.live.overlay.thin && thin_snapshot="yes"
getargbool 0 rd.live.overlay.overlayfs && overlayfs="yes"

# Take a path to a disk label and return the parent disk if it is a partition
# Otherwise returns the original path
function get_check_dev() {
local _udevinfo
dev_path="$(udevadm info -q path --name "$1")"
_udevinfo="$(udevadm info -q property --path "${dev_path}")"
strstr "$_udevinfo" "DEVTYPE=partition" || {
echo "$1"
return
}
parent="${dev_path%/*}"
_udevinfo="$(udevadm info -q property --path "${parent}")"
strstr "$_udevinfo" "DEVTYPE=disk" || {
echo "$1"
return
}
strstr "$_udevinfo" "ID_FS_TYPE=iso9660" || {
echo "$1"
return
}

# Return the name of the parent disk device
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 "$livedev" ] && fs=$(blkid -s TYPE -o value "$livedev")
[ -b "$check_dev" ] && fs=$(blkid -s TYPE -o value "$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 "$livedev")
p=$(dev_unit_name "$check_dev")
systemctl start checkisomd5@"${p}".service
else
checkisomd5 --verbose "$livedev"
checkisomd5 --verbose "$check_dev"
fi
if [ $? -eq 1 ]; then
die "CD check failed!"
Expand Down
2 changes: 1 addition & 1 deletion modules.d/90dmsquash-live/module-setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ installkernel() {

# called by dracut
install() {
inst_multiple umount dmsetup blkid dd losetup blockdev find rmdir
inst_multiple umount dmsetup blkid dd losetup blockdev find rmdir grep
inst_multiple -o checkisomd5
inst_hook cmdline 30 "$moddir/parse-dmsquash-live.sh"
inst_hook cmdline 31 "$moddir/parse-iso-scan.sh"
Expand Down

0 comments on commit c8f819e

Please sign in to comment.