add a package for grub2
authorFelix Fietkau <nbd@openwrt.org>
Sat, 22 Sep 2012 20:10:38 +0000 (20:10 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Sat, 22 Sep 2012 20:10:38 +0000 (20:10 +0000)
SVN-Revision: 33512

package/grub2/Makefile [new file with mode: 0644]
package/grub2/patches/100-grub_setup_root.patch [new file with mode: 0644]

diff --git a/package/grub2/Makefile b/package/grub2/Makefile
new file mode 100644 (file)
index 0000000..889f085
--- /dev/null
@@ -0,0 +1,49 @@
+#
+# Copyright (C) 2006-2010 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+include $(INCLUDE_DIR)/kernel.mk
+
+PKG_NAME:=grub
+PKG_VERSION:=2.00
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=@GNU/grub
+PKG_MD5SUM:=e927540b6eda8b024fb0391eeaa4091c
+
+PKG_HOST_ONLY:=1
+HOST_BUILD_PARALLEL:=1
+PKG_BUILD_DEPENDS:=grub2/host
+
+include $(INCLUDE_DIR)/host-build.mk
+include $(INCLUDE_DIR)/package.mk
+
+define Package/grub2
+  SUBMENU:=Boot Loaders
+  CATEGORY:=Utilities
+  SECTION:=utils
+  TITLE:=GRand Unified Bootloader
+  URL:=http://www.gnu.org/software/grub/
+  DEPENDS:=@TARGET_x86
+endef
+
+HOST_CONFIGURE_ARGS += \
+       --target=$(REAL_GNU_TARGET_NAME) \
+       --sbindir="$(STAGING_DIR_HOST)/bin" \
+       --disable-werror
+
+HOST_MAKE_FLAGS += \
+       TARGET_RANLIB=$(TARGET_RANLIB)
+
+define Host/Configure
+       $(SED) 's,(RANLIB),(TARGET_RANLIB),' $(HOST_BUILD_DIR)/grub-core/Makefile.in
+       $(Host/Configure/Default)
+endef
+
+$(eval $(call HostBuild))
+$(eval $(call BuildPackage,grub2))
diff --git a/package/grub2/patches/100-grub_setup_root.patch b/package/grub2/patches/100-grub_setup_root.patch
new file mode 100644 (file)
index 0000000..7775b2a
--- /dev/null
@@ -0,0 +1,77 @@
+--- a/util/grub-setup.c
++++ b/util/grub-setup.c
+@@ -141,12 +141,11 @@ write_rootdev (char *core_img, grub_devi
+ static void
+ setup (const char *dir,
+        const char *boot_file, const char *core_file,
+-       const char *dest, int force,
++       const char *root, const char *dest, int force,
+        int fs_probe, int allow_floppy)
+ {
+   char *boot_path, *core_path, *core_path_dev, *core_path_dev_full;
+   char *boot_img, *core_img;
+-  char *root = 0;
+   size_t boot_size, core_size;
+   grub_uint16_t core_sectors;
+   grub_device_t root_dev = 0, dest_dev, core_dev;
+@@ -253,7 +252,10 @@ setup (const char *dir,
+   core_dev = dest_dev;
+-  {
++  if (root)
++    root_dev = grub_device_open(root);
++
++  if (!root_dev) {
+     char **root_devices = grub_guess_root_devices (dir);
+     char **cur;
+     int found = 0;
+@@ -263,6 +265,8 @@ setup (const char *dir,
+       char *drive;
+       grub_device_t try_dev;
++      if (root_dev)
++        break;
+       drive = grub_util_get_grub_dev (*cur);
+       if (!drive)
+         continue;
+@@ -956,6 +960,8 @@ static struct argp_option options[] = {
+    N_("install even if problems are detected"), 0},
+   {"skip-fs-probe",'s',0,      0,
+    N_("do not probe for filesystems in DEVICE"), 0},
++  {"root-device", 'r', N_("DEVICE"), 0,
++   N_("use DEVICE as the root device"), 0},
+   {"verbose",     'v', 0,      0, N_("print verbose messages."), 0},
+   {"allow-floppy", 'a', 0,      0,
+    /* TRANSLATORS: The potential breakage isn't limited to floppies but it's
+@@ -993,6 +999,7 @@ struct arguments
+   char *core_file;
+   char *dir;
+   char *dev_map;
++  char *root_dev;
+   int  force;
+   int  fs_probe;
+   int allow_floppy;
+@@ -1040,6 +1047,13 @@ argp_parser (int key, char *arg, struct 
+         arguments->dev_map = xstrdup (arg);
+         break;
++      case 'r':
++        if (arguments->root_dev)
++          free (arguments->root_dev);
++
++        arguments->root_dev = xstrdup (arg);
++        break;
++
+       case 'f':
+         arguments->force = 1;
+         break;
+@@ -1172,7 +1186,7 @@ main (int argc, char *argv[])
+   setup (arguments.dir ? : DEFAULT_DIRECTORY,
+        arguments.boot_file ? : DEFAULT_BOOT_FILE,
+        arguments.core_file ? : DEFAULT_CORE_FILE,
+-       dest_dev, arguments.force,
++       arguments.root_dev, dest_dev, arguments.force,
+        arguments.fs_probe, arguments.allow_floppy);
+   /* Free resources.  */