Colin Watson, le Mon 08 Mar 2010 17:45:33 +0000, a écrit :
> I'd like to commit the following patch to make grub-installer use
> grub-probe, as noted in a TODO comment, rather than the huge
> hand-written pile of incomprehensible shell that's been there since time
> immemorial.  Does anyone object to this?

Should work for GNU/Hurd, maybe GNU/kFreeBSD people (Cc-ed) need to
confirm that grub-probe works fine for them.

Samuel

> Index: debian/changelog
> ===================================================================
> --- debian/changelog  (revision 62593)
> +++ debian/changelog  (working copy)
> @@ -1,3 +1,11 @@
> +grub-installer (1.51) UNRELEASED; urgency=low
> +
> +  * Merge from Ubuntu:
> +    - Use grub-probe to convert device names rather than relying on
> +      device.map.
> +
> + -- Colin Watson <cjwat...@debian.org>  Mon, 08 Mar 2010 17:40:05 +0000
> +
>  grub-installer (1.50) unstable; urgency=low
>  
>    [ Frans Pop ]
> Index: grub-installer
> ===================================================================
> --- grub-installer    (revision 62593)
> +++ grub-installer    (working copy)
> @@ -75,126 +75,17 @@
>  
>  serial="$(get_serial_console)"
>  
> -## This is copied from update-grub; we've requested that it be moved
> -## to a utility or shell library
> -## TODO: replace this with grub-probe
> -device_map=$ROOT/boot/grub/device.map
> -
>  # Usage: convert os_device
>  # Convert an OS device to the corresponding GRUB drive
> -# This part is OS-specific
>  convert () {
> -## First, check if the device file exists
> -#    if test -e "$1"; then
> -#            :
> -#    else
> -#            echo "$1: Not found or not a block device." 1>&2
> -#            exit 1
> -#    fi
> -
> -     host_os=$(uname -s | tr 'A-Z' 'a-z')
> -
> -     # Break the device name into the disk part and the partition part
> -     case "$host_os" in
> -         linux*)
> -             tmp_disk=$(echo "$1" | sed -e 
> 's%\(\(s\|h\|v\|xv\)d[a-z]\)[0-9]*$%\1%' \
> -                               -e 's%\(fd[0-9]*\)$%\1%' \
> -                               -e 's%/part[0-9]*$%/disc%' \
> -                               -e 's%\(c[0-7]d[0-9]*\).*$%\1%' \
> -                               -e 's%\(mmcblk[0-9]d[0-9]*\).*$%\1%' \
> -                               -e 
> 's%\(/mapper/mpath[0-9]\+\)-part[0-9]\+$%\1%')
> -             tmp_part=$(echo "$1" | sed -e 
> 's%.*/\(s\|h\|v\|xv\)d[a-z]\([0-9]*\)$%\2%' \
> -                               -e 's%.*/fd[0-9]*$%%' \
> -                               -e 's%.*/floppy/[0-9]*$%%' \
> -                               -e 's%.*/\(disc\|part\([0-9]*\)\)$%\2%' \
> -                               -e 's%.*c[0-7]d[0-9]*p*%%' \
> -                               -e 's%.*mmcblk[0-9]d[0-9]*p%%' \
> -                               -e 
> 's%.*/mapper/mpath[0-9]\+-part\([0-9]\+\)%\1%')
> -             ;;
> -         gnu*)
> -             tmp_disk=$(echo "$1" | sed 's%\([sh]d[0-9]*\).*%\1%')
> -             tmp_part=$(echo "$1" | sed "s%$tmp_disk%%")
> -             ;;
> -         freebsd*)
> -             tmp_disk=$(echo "$1" | sed 's%r\{0,1\}\([saw]d[0-9]*\).*$%r\1%' 
> | \
> -                     sed 's%r\{0,1\}\(da[0-9]*\).*$%r\1%')
> -             tmp_part=$(echo "$1" | \
> -                     sed "s%.*/r\{0,1\}[saw]d[0-9]\(s[0-9]*[a-h]\)%\1%" | \
> -                     sed "s%.*/r\{0,1\}da[0-9]\(s[0-9]*[a-h]\)%\1%")
> -             ;;
> -         netbsd*)
> -             tmp_disk=$(echo "$1" | sed 's%r\{0,1\}\([sw]d[0-9]*\).*$%r\1d%' 
> | \
> -                     sed 's%r\{0,1\}\(fd[0-9]*\).*$%r\1a%')
> -             tmp_part=$(echo "$1" | \
> -                     sed "s%.*/r\{0,1\}[sw]d[0-9]\([abe-p]\)%\1%")
> -             ;;
> -         *)
> -             echo "update-grub does not support your OS yet." 1>&2
> -             exit 1
> -             ;;
> -     esac
> -
> -     # Get the drive name
> -     tmp_drive=$(grep -v '^#' $device_map | grep "$tmp_disk *$" | \
> -             sed 's%.*\(([hf]d[0-9][a-g0-9,]*)\).*%\1%')
> -
> -     # If not found, print an error message and exit
> -     if [ -z "$tmp_drive" ]; then
> -             echo "$1 does not have any corresponding BIOS drive." 1>&2
> -             exit 1
> +     tmp_drive="$($chroot $ROOT grub-probe -d -t drive "$1")" || exit $?
> +     if [ "$partition_offset" != 0 ]; then
> +             tmp_part="$(echo "$tmp_drive" | sed 's%.*,\([0-9]*\)).*%\1%')"
> +             if [ "$tmp_part" ] && [ "$tmp_part" != "$tmp_drive" ]; then
> +                     tmp_drive="$(echo "$tmp_drive" | sed 
> "s%\(.*,\)[0-9]*\().*\)%\1`expr $tmp_part - $partition_offset`%")"
> +             fi
>       fi
> -
> -     if [ -n "$tmp_part" ]; then
> -             # If a partition is specified, we need to translate it into the
> -             # GRUB's syntax
> -             case "$host_os" in
> -                 linux*)
> -                     echo "$tmp_drive" | sed "s%)$%,`expr $tmp_part - 
> $partition_offset`)%"
> -                     ;;
> -                 gnu*)
> -                     if echo $tmp_part | grep "^s" >/dev/null; then
> -                             tmp_pc_slice=$(echo $tmp_part | \
> -                                     sed "s%s\([0-9]*\)[a-g]*$%\1%")
> -                             tmp_drive=$(echo "$tmp_drive" | \
> -                                     sed "s%)%,\`expr "$tmp_pc_slice" - 
> $partition_offset\`)%")
> -                             fi
> -                     if echo $tmp_part | grep "[a-g]$" >/dev/null; then
> -                             tmp_bsd_partition=$(echo "$tmp_part" | \
> -                                     sed "s%[^a-g]*\([a-g]\)$%\1%")
> -                             tmp_drive=$(echo "$tmp_drive" | \
> -                                     sed "s%)%,$tmp_bsd_partition)%")
> -                     fi
> -                     echo "$tmp_drive"
> -                     ;;
> -                 freebsd*)
> -                     if echo $tmp_part | grep "^s" >/dev/null; then
> -                             tmp_pc_slice=$(echo $tmp_part | \
> -                                     sed "s%s\([0-9]*\)[a-h]*$%\1%")
> -                             tmp_drive=$(echo "$tmp_drive" | \
> -                                     sed "s%)%,\`expr "$tmp_pc_slice" - 
> $partition_offset\`)%")
> -                     fi
> -                     if echo $tmp_part | grep "[a-h]$" >/dev/null; then
> -                             tmp_bsd_partition=$(echo "$tmp_part" | \
> -                                     sed "s%s\{0,1\}[0-9]*\([a-h]\)$%\1%")
> -                             tmp_drive=$(echo "$tmp_drive" | \
> -                                     sed "s%)%,$tmp_bsd_partition)%")
> -                     fi
> -                     echo "$tmp_drive"
> -                     ;;
> -                 netbsd*)
> -                     if echo $tmp_part | grep "^[abe-p]$" >/dev/null; then
> -                             tmp_bsd_partition=$(echo "$tmp_part" | \
> -                                     sed "s%\([a-p]\)$%\1%")
> -                             tmp_drive=$(echo "$tmp_drive" | \
> -                                     sed "s%)%,$tmp_bsd_partition)%")
> -                     fi
> -                     echo "$tmp_drive"
> -                     ;;
> -             esac
> -     else
> -             # If no partition is specified, just print the drive name
> -             echo "$tmp_drive"
> -     fi
> +     echo "$tmp_drive"
>  }
>  
>  # Convert a linux non-devfs disk device name into the hurd's syntax
> 
> Thanks,
> 
> -- 
> Colin Watson                                       [cjwat...@debian.org]
> 
> 
> -- 
> To UNSUBSCRIBE, email to debian-boot-requ...@lists.debian.org
> with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
> Archive: http://lists.debian.org/20100308174533.gc4...@riva.ucam.org
> 

-- 
Samuel
As usual, this being a 1.3.x release, I haven't even compiled this
kernel yet.  So if it works, you should be doubly impressed.
(Linus Torvalds, announcing kernel 1.3.3 on the linux-kernel mailing list.)


-- 
To UNSUBSCRIBE, email to debian-bsd-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20100308175434.gn5...@const.bordeaux.inria.fr

Reply via email to