Package: grub Version: 0.97-7.1+kbsd Severity: normal Tags: patch Hi,
Here are a few GNU/kFreeBSD fixes. The Debian-specific ones are in debian.diff, the ones in kfreebsd.diff have been sent to upstream already (not committed ATTOW). -- System Information: Debian Release: testing/unstable Architecture: kfreebsd-i386 (i686) Shell: /bin/sh linked to /bin/bash Kernel: GNU/kFreeBSD 5.4-1-486 Locale: LANG=en_US, LC_CTYPE=en_US (charmap=ANSI_X3.4-1968) (ignored: LC_ALL set to C) Versions of packages grub depends on: ii debconf 1.4.72 Debian configuration management sy ii libc0.1 2.3.6-7 GNU C Library: Shared libraries ii libncurses5 5.5-1+kbsd Shared libraries for terminal hand grub recommends no packages. -- debconf information excluded
diff -ur grub-0.97.old/debian/README.Debian grub-0.97/debian/README.Debian --- grub-0.97.old/debian/README.Debian 2006-04-20 12:28:18.000000000 +0200 +++ grub-0.97/debian/README.Debian 2006-04-20 12:30:36.000000000 +0200 @@ -28,11 +28,11 @@ after installing the package: -1) grub-install /dev/hda +1) grub-install "(hd0)" or if /boot is a separate partition - grub-install --root-directory=/boot /dev/hda + grub-install --root-directory=/boot "(hd0)" - using in place of /dev/hda the device that you boot from + using in place of "(hd0)" the device that you boot from 2) update-grub which will create a menu.lst for you if one does not exist or manually create one, and skip to step 4 diff -ur grub-0.97.old/debian/update-grub grub-0.97/debian/update-grub --- grub-0.97.old/debian/update-grub 2006-04-20 12:28:18.000000000 +0200 +++ grub-0.97/debian/update-grub 2006-04-20 14:03:43.000000000 +0200 @@ -26,6 +26,8 @@ # Abort on errors set -e +host_os=`uname -s | tr '[A-Z]' '[a-z]'` + abort() { message=$@ @@ -173,8 +175,8 @@ tmp_disk=`echo "$1" | sed 's%\([sh]d[0-9]*\).*%\1%'` tmp_part=`echo "$1" | sed "s%$tmp_disk%%"` ;; freebsd|*/kfreebsd) - 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_disk=`echo "$1" | sed 's%r\{0,1\}\([saw]d[0-9]*\).*$%\1%' \ + | sed 's%r\{0,1\}\(da[0-9]*\).*$%\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%"` @@ -292,7 +294,7 @@ kopt="root=$root_device ro" # Title -title="Debian GNU/Linux" +title="Debian GNU/`uname -s | sed -e s,GNU/,,g`" # should update-grub remember the default entry updatedefaultentry="false" @@ -586,7 +588,10 @@ initrd=$8 savedefault=$9 - echo -n "title $title, kernel $kernel_version" >> $buffer + echo -n "title $title" >> $buffer + if [ -n "$kernel_version" ]; then + echo -n ", kernel $kernel_version" >> $buffer + fi if [ -n "$recovery_desc" ]; then echo -n " $recovery_desc" >> $buffer fi @@ -598,7 +603,10 @@ fi echo "root $grub_root_device" >> $buffer - echo -n "kernel $kernel $kernel_options" >> $buffer + echo -n "kernel $kernel" >> $buffer + if [ -n "$kernel_options" ]; then + echo -n " $kernel_options" >> $buffer + fi if [ -n "$recovery_desc" ]; then echo -n " $recovery_suffix" >> $buffer fi @@ -851,6 +859,17 @@ notChangeDefault="yes" fi +case "$host_os" in + freebsd|*/kfreebsd) + if test -e /boot/loader.gz ; then + kernel=/boot/loader.gz + else + kernel=/boot/loader + fi + write_kernel_entry "" "" "" "$grub_root_device" "$kernel" "" "" "" "true" + ;; +esac + ## heres where we start writing out the kernel entries counter=0 for kern in $sortedKernels ; do
2006-04-20 Robert Millan <[EMAIL PROTECTED]> Fixes for kernel of FreeBSD: * grub/asmstub.c (get_diskinfo): Toggle "kern.geom.debugflags" sysctl before opening a device for writing. * util/grub-install.in: Devices don't have this "r" prefix anymore. Index: grub/asmstub.c =================================================================== RCS file: /sources/grub/grub/grub/asmstub.c,v retrieving revision 1.84 diff -u -r1.84 asmstub.c --- grub/asmstub.c 16 Feb 2005 20:45:48 -0000 1.84 +++ grub/asmstub.c 20 Apr 2006 12:10:51 -0000 @@ -777,7 +777,34 @@ /* Open read/write, or read-only if that failed. */ if (! read_only) - disks[drive].flags = open (devname, O_RDWR); + { +/* By default, kernel of FreeBSD does not allow overwriting MBR */ +#ifdef __FreeBSD_kernel__ +#define GEOM_SYSCTL "kern.geom.debugflags" + int old_flags, flags; + size_t sizeof_int = sizeof (int); + + if (sysctlbyname (GEOM_SYSCTL, &old_flags, &sizeof_int, NULL, 0) != 0) + grub_printf ("failed to get " GEOM_SYSCTL "sysctl: %s\n", strerror (errno)); + + if ((old_flags & 0x10) == 0) + { + /* "allow foot shooting", see geom(4) */ + flags = old_flags | 0x10; + + if (sysctlbyname (GEOM_SYSCTL, NULL, NULL, &flags, sizeof (int)) != 0) + grub_printf ("failed to set " GEOM_SYSCTL "sysctl: %s\n", strerror (errno)); + } +#endif + disks[drive].flags = open (devname, O_RDWR); +#ifdef __FreeBSD_kernel__ + if (flags != old_flags) + { + if (sysctlbyname (GEOM_SYSCTL, NULL, NULL, &old_flags, sizeof (int)) != 0) + grub_printf ("failed to set " GEOM_SYSCTL "sysctl: %s\n", strerror (errno)); + } +#endif + } if (disks[drive].flags == -1) { Index: util/grub-install.in =================================================================== RCS file: /sources/grub/grub/util/grub-install.in,v retrieving revision 1.48 diff -u -r1.48 grub-install.in --- util/grub-install.in 20 Jul 2004 19:30:24 -0000 1.48 +++ util/grub-install.in 20 Apr 2006 12:10:51 -0000 @@ -112,8 +112,8 @@ tmp_disk=`echo "$1" | sed 's%\([sh]d[0-9]*\).*%\1%'` tmp_part=`echo "$1" | sed "s%$tmp_disk%%"` ;; freebsd* | kfreebsd*-gnu) - 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_disk=`echo "$1" | sed 's%r\{0,1\}\([saw]d[0-9]*\).*$%\1%' \ + | sed 's%r\{0,1\}\(da[0-9]*\).*$%\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%"`