grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] Add GRUB_COUNT_* options


From: Colin Watson
Subject: [PATCH] Add GRUB_COUNT_* options
Date: Tue, 13 Jul 2010 02:04:00 +0100
User-agent: Mutt/1.5.18 (2008-05-17)

I quite often see requests for an equivalent for the 'howmany' option
implemented in the update-grub script in Debian's GRUB Legacy packaging:
emit only so many native kernels, so that you could say howmany=2 to
avoid cluttering the menu with entries for more than two kernels even if
you haven't got round to removing the older ones yet.  I don't know if
I'd use this myself but it seems like a pretty reasonable request.
Here's a patch to implement it, in what seemed fairly close to GRUB 2
style.

2010-07-13  Colin Watson  <address@hidden>

        * util/grub-mkconfig.in: Export GRUB_COUNT_HURD,
        GRUB_COUNT_KFREEBSD, GRUB_COUNT_LINUX, GRUB_COUNT_NETBSD, and
        GRUB_COUNT_XEN.
        * util/grub.d/10_hurd.in: If GRUB_COUNT_HURD is set, only process
        that many kernels.
        * util/grub.d/10_kfreebsd.in: If GRUB_COUNT_KFREEBSD is set, only
        process that many kernels.
        * util/grub.d/10_linux.in: If GRUB_COUNT_LINUX is set, only process
        that many kernels.
        * util/grub.d/10_netbsd.in: If GRUB_COUNT_NETBSD is set, only
        process that many kernels.
        * util/grub.d/20_linux_xen.in: If GRUB_COUNT_XEN and/or
        GRUB_COUNT_LINUX are set, only process that many hypervisors and
        kernels respectively.
        * docs/grub.texi (Simple configuration): Document GRUB_COUNT_HURD,
        GRUB_COUNT_KFREEBSD, GRUB_COUNT_LINUX, GRUB_COUNT_NETBSD, and
        GRUB_COUNT_XEN.

=== modified file 'docs/grub.texi'
--- docs/grub.texi      2010-07-05 10:08:04 +0000
+++ docs/grub.texi      2010-07-13 00:51:11 +0000
@@ -1064,6 +1064,24 @@ only to the default menu entry, after th
 As @samp{GRUB_CMDLINE_LINUX} and @samp{GRUB_CMDLINE_LINUX_DEFAULT}, but for
 NetBSD.
 
address@hidden GRUB_COUNT_HURD
+The number of Hurd kernels for which @command{grub-mkconfig} should generate
+menu entries.  Unset by default, meaning to generate menu entries for all
+kernels.  (This excludes menu entries generated by @command{os-prober} for
+other operating systems installed on the same system.)
+
address@hidden GRUB_COUNT_KFREEBSD
+As @samp{GRUB_COUNT_HURD}, but for FreeBSD kernels.
+
address@hidden GRUB_COUNT_LINUX
+As @samp{GRUB_COUNT_LINUX}, but for Linux kernels.
+
address@hidden GRUB_COUNT_NETBSD
+As @samp{GRUB_COUNT_HURD}, but for NetBSD kernels.
+
address@hidden GRUB_COUNT_XEN
+As @samp{GRUB_COUNT_HURD}, but for Xen hypervisors.
+
 @item GRUB_DISABLE_LINUX_UUID
 Normally, @command{grub-mkconfig} will generate menu entries that use
 universally-unique identifiers (UUIDs) to identify the root filesystem to

=== modified file 'util/grub-mkconfig.in'
--- util/grub-mkconfig.in       2010-06-29 15:20:49 +0000
+++ util/grub-mkconfig.in       2010-07-13 00:39:38 +0000
@@ -262,6 +262,11 @@ export GRUB_DEFAULT \
   GRUB_CMDLINE_XEN_DEFAULT \
   GRUB_CMDLINE_NETBSD \
   GRUB_CMDLINE_NETBSD_DEFAULT \
+  GRUB_COUNT_HURD \
+  GRUB_COUNT_KFREEBSD \
+  GRUB_COUNT_LINUX \
+  GRUB_COUNT_NETBSD \
+  GRUB_COUNT_XEN \
   GRUB_TERMINAL_INPUT \
   GRUB_TERMINAL_OUTPUT \
   GRUB_SERIAL_COMMAND \

=== modified file 'util/grub.d/10_hurd.in'
--- util/grub.d/10_hurd.in      2010-06-29 15:20:49 +0000
+++ util/grub.d/10_hurd.in      2010-07-13 00:45:55 +0000
@@ -36,7 +36,14 @@ all_of_them=true
 
 # FIXME: add l4 here?
 kernel=
+count=0
 for i in /boot/gnumach* ; do
+  if test "x${GRUB_COUNT_HURD}" != "x" && \
+     test "${count}" -ge "${GRUB_COUNT_HURD}"; then
+    break
+  fi
+  count="$((${count} + 1))"
+
   if test -e $i ; then
     basename=`basename $i`
     dirname=`dirname $i`

=== modified file 'util/grub.d/10_kfreebsd.in'
--- util/grub.d/10_kfreebsd.in  2010-06-29 15:20:49 +0000
+++ util/grub.d/10_kfreebsd.in  2010-07-13 00:43:14 +0000
@@ -80,8 +80,15 @@ list=`for i in /boot/kfreebsd-* /boot/ke
         if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi
       done`
 prepare_boot_cache=
+count=0
 
 while [ "x$list" != "x" ] ; do
+  if test "x${GRUB_COUNT_KFREEBSD}" != "x" && \
+     test "${count}" -ge "${GRUB_COUNT_KFREEBSD}"; then
+    break
+  fi
+  count="$((${count} + 1))"
+
   kfreebsd=`version_find_latest $list`
   echo "Found kernel of FreeBSD: $kfreebsd" >&2
   basename=`basename $kfreebsd`

=== modified file 'util/grub.d/10_linux.in'
--- util/grub.d/10_linux.in     2010-07-02 11:32:05 +0000
+++ util/grub.d/10_linux.in     2010-07-13 00:43:37 +0000
@@ -106,8 +106,15 @@ list=`for i in /boot/vmlinu[zx]-* /vmlin
         if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi
       done`
 prepare_boot_cache=
+count=0
 
 while [ "x$list" != "x" ] ; do
+  if test "x${GRUB_COUNT_LINUX}" != "x" && \
+     test "${count}" -ge "${GRUB_COUNT_LINUX}"; then
+    break
+  fi
+  count="$((${count} + 1))"
+
   linux=`version_find_latest $list`
   echo "Found linux image: $linux" >&2
   basename=`basename $linux`

=== modified file 'util/grub.d/10_netbsd.in'
--- util/grub.d/10_netbsd.in    2010-06-29 15:20:49 +0000
+++ util/grub.d/10_netbsd.in    2010-07-13 00:44:07 +0000
@@ -63,6 +63,7 @@ netbsd_entry ()
 }
 
 prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE} | sed -e 
's,^,      ,')"
+count=0
 
 # We look for NetBSD kernels in / but not in subdirectories.  We simply
 # pick all statically linked ELF executable files (or links) in / with a
@@ -77,6 +78,12 @@ for k in $(ls -t /netbsd*) ; do
     continue
   fi
 
+  if test "x${GRUB_COUNT_NETBSD}" != "x" && \
+     test "${count}" -ge "${GRUB_COUNT_NETBSD}"; then
+    break
+  fi
+  count="$((${count} + 1))"
+
   echo "Found NetBSD kernel: $k" >&2
   netbsd_entry "knetbsd"   "$k" false "${GRUB_CMDLINE_NETBSD_DEFAULT}"
   netbsd_entry "multiboot" "$k" false "${GRUB_CMDLINE_NETBSD_DEFAULT}"

=== modified file 'util/grub.d/20_linux_xen.in'
--- util/grub.d/20_linux_xen.in 2010-06-29 15:20:49 +0000
+++ util/grub.d/20_linux_xen.in 2010-07-13 00:45:55 +0000
@@ -95,15 +95,29 @@ xen_list=`for i in /boot/xen*; do
         if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi
       done`
 prepare_boot_cache=
+xen_count=0
 
 while [ "x${xen_list}" != "x" ] ; do
+    if test "x${GRUB_COUNT_XEN}" != "x" && \
+       test "${xen_count}" -ge "${GRUB_COUNT_XEN}"; then
+      break
+    fi
+    xen_count="$((${xen_count} + 1))"
+
     list="${linux_list}"
     current_xen=`version_find_latest $xen_list`
     xen_basename=`basename ${current_xen}`
     xen_dirname=`dirname ${current_xen}`
     rel_xen_dirname=`make_system_path_relative_to_its_root $xen_dirname`
     xen_version=`echo $xen_basename | sed -e "s,.gz$,,g;s,^xen-,,g"`
+    linux_count=0
     while [ "x$list" != "x" ] ; do
+       if test "x${GRUB_COUNT_LINUX}" != "x" && \
+          test "${linux_count}" -ge "${GRUB_COUNT_LINUX}"; then
+           break
+       fi
+       linux_count="$((${linux_count} + 1))"
+
        linux=`version_find_latest $list`
        echo "Found linux image: $linux" >&2
        basename=`basename $linux`

-- 
Colin Watson                                       address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]