unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
blob e64a7dd6be6bbaa4163a25fadc5ddb37fefba575 4384 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
125
126
127
128
129
130
131
132
133
 
This patch is taken from OpenWrt, see:

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

nckx changed `char *root' to lazily pacify -Werror=discarded-qualifiers.

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

--- a/include/grub/util/install.h
+++ b/include/grub/util/install.h
@@ -198,13 +198,13 @@ grub_install_get_image_target (const char *arg);
 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, int warn_short_mbr_gap);
 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, int warn_short_mbr_gap);
 
diff --git a/util/grub-install.c b/util/grub-install.c
index 0fbe7f78c..7f06aa1e3 100644
--- a/util/grub-install.c
+++ b/util/grub-install.c
@@ -1721,7 +1721,7 @@ main (int argc, char *argv[])
 	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,
 				  !grub_install_is_short_mbrgap_supported ());
 
@@ -1752,7 +1752,7 @@ main (int argc, char *argv[])
 	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 */, 0 /* unused */ );
 
diff --git a/util/grub-setup.c b/util/grub-setup.c
index 1783224dd..48cde4950 100644
--- 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 argp_state *state)
         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, 0);
 
diff --git a/util/setup.c b/util/setup.c
index da5f2c07f..193745a9c 100644
--- a/util/setup.c
+++ b/util/setup.c
@@ -252,14 +252,13 @@ identify_partmap (grub_disk_t disk __attribute__ ((unused)),
 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 */
        int warn_small)
 {
   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;
@@ -311,7 +310,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;
@@ -324,6 +326,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;

debug log:

solving e64a7dd6be ...
found e64a7dd6be 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).