unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
blob 1abe9c383aa8c6dcd1aa7dde55b436dc24f2804e 3946 bytes (raw)
name: gnu/packages/patches/grub-setup-root.patch 	 # note: path name is non-authoritative(*)

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
 
This patch is taken from OpenWrt, see:

https://github.com/openwrt/openwrt/blob/master/package/boot/grub2/patches/100-grub_setup_root.patch.

It allows to use grub-bios-setup on a raw disk-images, without root permissions.

--- a/util/grub-setup.c
+++ b/util/grub-setup.c
@@ -87,6 +87,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
@@ -130,6 +132,7 @@ struct arguments
   char *core_file;
   char *dir;
   char *dev_map;
+  char *root_dev;
   int  force;
   int  fs_probe;
   int allow_floppy;
@@ -178,6 +181,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;
@@ -313,7 +323,7 @@ main (int argc, char *argv[])
   GRUB_SETUP_FUNC (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,
 		   arguments.add_rs_codes);
 
--- a/util/setup.c
+++ b/util/setup.c
@@ -252,13 +252,12 @@ identify_partmap (grub_disk_t disk __att
 void
 SETUP (const char *dir,
        const char *boot_file, const char *core_file,
-       const char *dest, int force,
+       char *root, const char *dest, int force,
        int fs_probe, int allow_floppy,
        int add_rs_codes __attribute__ ((unused))) /* unused on sparc64 */
 {
   char *core_path;
   char *boot_img, *core_img, *boot_path;
-  char *root = 0;
   size_t boot_size, core_size;
   grub_uint16_t core_sectors;
   grub_device_t root_dev = 0, dest_dev, core_dev;
@@ -307,7 +306,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;
@@ -320,6 +322,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;
--- a/include/grub/util/install.h
+++ b/include/grub/util/install.h
@@ -191,13 +191,13 @@ grub_install_get_image_target (const cha
 void
 grub_util_bios_setup (const char *dir,
 		      const char *boot_file, const char *core_file,
-		      const char *dest, int force,
+		      char *root, const char *dest, int force,
 		      int fs_probe, int allow_floppy,
 		      int add_rs_codes);
 void
 grub_util_sparc_setup (const char *dir,
 		       const char *boot_file, const char *core_file,
-		       const char *dest, int force,
+		       char *root, const char *dest, int force,
 		       int fs_probe, int allow_floppy,
 		       int add_rs_codes);
 
--- a/util/grub-install.c
+++ b/util/grub-install.c
@@ -1712,7 +1712,7 @@ main (int argc, char *argv[])
 	/*  Now perform the installation.  */
 	if (install_bootsector)
 	  grub_util_bios_setup (platdir, "boot.img", "core.img",
-				install_drive, force,
+				NULL, install_drive, force,
 				fs_probe, allow_floppy, add_rs_codes);
 	break;
       }
@@ -1738,7 +1738,7 @@ main (int argc, char *argv[])
 	/*  Now perform the installation.  */
 	if (install_bootsector)
 	  grub_util_sparc_setup (platdir, "boot.img", "core.img",
-				 install_drive, force,
+				 NULL, install_drive, force,
 				 fs_probe, allow_floppy,
 				 0 /* unused */ );
 	break;

debug log:

solving 1abe9c383a ...
found 1abe9c383a in https://git.savannah.gnu.org/cgit/guix.git

(*) Git path names are given by the tree(s) the blob belongs to.
    Blobs themselves have no identifier aside from the hash of its contents.^

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).