svn commit: r378163 - in head/sysutils/grub2-pcbsd: . files
Kris Moore
kmoore at FreeBSD.org
Fri Jan 30 16:42:15 UTC 2015
Author: kmoore
Date: Fri Jan 30 16:42:14 2015
New Revision: 378163
URL: https://svnweb.freebsd.org/changeset/ports/378163
QAT: https://qat.redports.org/buildarchive/r378163/
Log:
- Add support to probe for and add chainloaded disks to the grub menus
- Bump PORTREV
Modified:
head/sysutils/grub2-pcbsd/Makefile
head/sysutils/grub2-pcbsd/files/10_ktrueos.in
head/sysutils/grub2-pcbsd/files/30_os-prober.in
Modified: head/sysutils/grub2-pcbsd/Makefile
==============================================================================
--- head/sysutils/grub2-pcbsd/Makefile Fri Jan 30 16:35:51 2015 (r378162)
+++ head/sysutils/grub2-pcbsd/Makefile Fri Jan 30 16:42:14 2015 (r378163)
@@ -3,7 +3,7 @@
PORTNAME= grub2-pcbsd
PORTVERSION= 2.02p
-PORTREVISION= 21
+PORTREVISION= 22
CATEGORIES= sysutils
MASTER_SITES= http://www.pcbsd.org/~kris/software/ \
ftp://ftp.pcbsd.org/pub/software/
Modified: head/sysutils/grub2-pcbsd/files/10_ktrueos.in
==============================================================================
--- head/sysutils/grub2-pcbsd/files/10_ktrueos.in Fri Jan 30 16:35:51 2015 (r378162)
+++ head/sysutils/grub2-pcbsd/files/10_ktrueos.in Fri Jan 30 16:42:14 2015 (r378163)
@@ -176,9 +176,6 @@ display_loaderopts()
if [ "$haveGELI" = "true" ] ; then
echo " set kFreeBSD.kern.geom.eli.passphrase=\"\$pass\""
fi
-
- # GRUB does NOT support gptid labels yet
- echo " set kFreeBSD.kern.geom.label.gptid.enable=\"0\""
}
detect_beadm()
Modified: head/sysutils/grub2-pcbsd/files/30_os-prober.in
==============================================================================
--- head/sysutils/grub2-pcbsd/files/30_os-prober.in Fri Jan 30 16:35:51 2015 (r378162)
+++ head/sysutils/grub2-pcbsd/files/30_os-prober.in Fri Jan 30 16:42:14 2015 (r378163)
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# Copyright 2013 iXsystems (Kris Moore)
+# Copyright 2015 iXsystems (Kris Moore)
# All rights reserved
#
# Redistribution and use in source and binary forms, with or without
@@ -48,14 +48,87 @@ menuentry "Microsoft Windows ($disk)" {
EOF
}
-# Start by looking for disks
-for disk in `cd /dev/ && ls ada[0-9]s[0-9] da[0-9]s[0-9] ada[0-9]p[0-9] da[0-9]p[0-9] 2>/dev/null`
+print_uefichain() {
+ cat << EOF
+menuentry "Chainload Disk (hd${hdnum} - $1)" {
+ set root=('hd${hdnum},${rootpre}1')
+ chainloader $1
+}
+
+EOF
+}
+
+# Look for file-systems on the zpool disk
+for disk in `zpool status | grep ONLINE | grep -v "state:" | awk '{print $1}'`
+do
+ disk="`echo $disk | sed 's|.eli||g'`"
+ if [ ! -e "/dev/$disk" ] ; then continue ; fi
+
+ # Get the parent disk name
+ parentdisk=`grub-probe --target=disk --device /dev/$disk`
+ parentdisk="`echo $parentdisk | sed 's|/dev/||g'`"
+ if [ ! -e "/dev/$parentdisk" ] ; then continue ; fi
+
+ for ldisk in `cd /dev/ && ls ${parentdisk}s[0-9] ${parentdisk}p[0-99] 2>/dev/null`
+ do
+ fs_type=`grub-probe --device /dev/${ldisk} --target=fs 2>/dev/null`
+ case $fs_type in
+ ntfs) check_ntfs_part "$ldisk" ;; # Start checking for NTFS
+ *) ;; # Unknown for now, add more!
+ esac
+ done
+done
+
+# Look for other disks to chainload
+hdnum=0
+for disk in `cd /dev/ && ls ada[0-9] da[0-9] 2>/dev/null`
do
-
- # Start checking for NTFS
- fs_type=`grub-probe --device /dev/${disk} --target=fs 2>/dev/null`
- case $fs_type in
- ntfs) check_ntfs_part "$disk" ;;
- *) ;; # Unknown for now, add more!
- esac
+ # Skip disks apart of zpool
+ zpool status | grep ONLINE | grep -v "state:" | grep -q "$disk"
+ if [ $? -eq 0 ] ; then
+ hdnum=`expr $hdnum + 1`
+ continue
+ fi
+
+ # Check if the first partition on this disk is EFI
+ if [ -e "/dev/${disk}s1" ] ; then
+ fp="/dev/${disk}s1"
+ rootpre=""
+ else
+ fp="/dev/${disk}p1"
+ rootpre="gpt"
+ fi
+
+ # Add UEFI chainloader
+ if [ "`grub-probe --device -t fs $fp`" = "fat" ] ; then
+
+ # Lets mount the FAT partition and look for UEFI boots
+ uefimnt="/tmp/.grub-uefi.$$"
+ if [ ! -d "$uefimnt" ] ; then mkdir $uefimnt; fi
+ mount_msdosfs $fp $uefimnt
+ if [ $? -eq 0 ] ; then
+ if [ -e "${uefimnt}/EFI/Boot/bootx64.efi" ] ; then
+ print_uefichain "/EFI/Boot/bootx64.efi"
+ fi
+ cd $uefimnt
+ for i in `find . | grep \.efi$ | grep -v "./EFI/Boot/bootx64.efi"`
+ do
+ i="`echo $i | sed 's|\./|/|g'`"
+ print_uefichain "$i"
+ done
+ cd /dev
+ umount $uefimnt
+ rmdir $uefimnt
+ fi
+
+ else
+ # Add BIOS chainloader
+ cat << EOF
+menuentry "Chainload Disk (hd${hdnum})" {
+ set root=(hd${hdnum})
+ chainloader +1
+}
+EOF
+ fi
+ hdnum=`expr $hdnum + 1`
done
More information about the svn-ports-all
mailing list