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%"`