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

[PATCH] Add support for GPT partitioned disks on sparc/sparc64



The following patch adds support for GPT partitioned disks on sparc(64)
to d-i/grub-installer. The installation method is chosen based on the
detected subarch currently. It auto-selects the partition for /boot
as target for grub-install on systems without GPT support and the
actual disk device on systems with GPT support. The grub-install
arguments are configured respectively.

The current implementation is very simple and based on the assumption
that we will always have a partition containing "/boot" and that we
either need to use this partition or the disk containing this partition
as target for `grub-install` (depending on used partitioning). For
partitioning it either expects GPT or assumes a Sun disklabel.

No user-interaction is provided during the GRUB installation step, so it
might fail in complex situations. I.e. it worked for me when using empty
disks without already installed other OSes. But although the
installation on a disk with Sun disklabel and Solaris 10 installed and
enough free space at the end of the disk worked as far as I can tell,
booting from the disk did not start GRUB but the Solaris 10 boot loader.
And booting from the actual "/boot" partition of the installed Debian
didn't work as expected:

```
{0} ok boot disk0:d
Boot device: /pci@0/pci@0/pci@2/scsi@0/disk@0:d  File and args: 
GRUB ERROR: Last Trap: Fast Instruction Access MMU Miss
```

In the absence of a T4 or other GPT capable system I cannot test booting
from a GPT partioned disk. But I can provide the modified parts of the
Debian installer as tarball for easy application during a Debian
installation if someone volunteers for testing.

Cheers,
Frank

---
 debian/changelog |  7 +++++++
 grub-installer   | 31 +++++++++++++++++++++++++++++--
 2 files changed, 36 insertions(+), 2 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index b5856a3..2c44fdf 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+grub-installer (1.154) UNRELEASED; urgency=medium
+
+  [ Frank Scheiner ]
+  * Add support for GPT partitioned disks on sparc/sparc64.
+
+ -- Frank Scheiner <frank.scheiner@web.de>  Mon, 05 Mar 2018 19:03:48 +0100
+
 grub-installer (1.153) unstable; urgency=medium
 
   [ Updated translations ]
diff --git a/grub-installer b/grub-installer
index f9f0761..c06639f 100755
--- a/grub-installer
+++ b/grub-installer
@@ -39,6 +39,7 @@ debug () {
 
 ARCH="$(archdetect)"
 info "architecture: $ARCH"
+SUBARCH=${ARCH#*/}
 
 # Ensure proc is mounted in all the $chroot calls;
 # needed for RAID+LVM for example
@@ -626,7 +627,7 @@ if db_get cdrom-detect/hybrid; then
 	hybrid="$RET"
 fi
 case $ARCH:$grub_package in
-    *:grub|*:grub-pc|sparc/*:grub-ieee1275|sparc64/*:grub-ieee1275)
+    *:grub|*:grub-pc)
 	if [ "$(device_to_disk "$cdsrc")" = "$default_bootdev" ] || \
 	   ([ -n "$hdsrc" ] && [ "$(device_to_disk "$hdsrc")" = "$default_bootdev" ]) || \
 	   ([ "$default_bootdev" = '(hd0)' ] && \
@@ -645,6 +646,23 @@ case $ARCH:$grub_package in
 		fi
 	fi
 	;;
+    sparc/*:grub-ieee1275|sparc64/*:grub-ieee1275)
+	bootfs=$(findfs /boot)
+	[ "$bootfs" ] || bootfs="$(findfs /)"
+	# see: https://github.com/esnowberg/grub2-sparc/wiki
+	case $SUBARCH in
+	    *_gpt)
+		# For GPT partitioning grub-install should use the device as target
+		disk=$(device_to_disk "$bootfs")
+		db_set grub-installer/bootdev "$disk"
+		;;
+	    *)
+		# For Sun disklabel grub-install should use the boot partition as target
+		db_set grub-installer/bootdev "$bootfs"
+		;;
+	esac
+	state=3
+	;;
     powerpc/chrp*:grub-ieee1275|ppc64/chrp*:grub-ieee1275|ppc64el/*:grub-ieee1275)
 	# Hack to pick the right boot device.  This should really be done in
 	# grub-install instead, and will need to be done there in order to
@@ -852,7 +870,16 @@ EOF
 			;;
 		    sparc/*|sparc64/*)
 			# see: https://github.com/esnowberg/grub2-sparc/wiki
-			grub_install_params="$grub_install_params --skip-fs-probe"
+			case $SUBARCH in
+			    *_gpt)
+				# no additional parameters for installations on GPT partitioned
+				# disks
+				:
+				;;
+			    *)
+				grub_install_params="$grub_install_params --skip-fs-probe"
+				;;
+			esac
 			;;
 		esac
 
-- 
1.9.1


Reply to: