X-Git-Url: https://code.delx.au/refind/blobdiff_plain/32ddcb84670b3b15693749b9197c93390ea667b9..cc569e417727dfb70b3f1271d1fa4454f8753716:/refind-install diff --git a/refind-install b/refind-install index 37fa811..5936dc3 100755 --- a/refind-install +++ b/refind-install @@ -39,6 +39,11 @@ # Revision history: # +# 0.10.5 -- More improvement to handling of disks (other than /dev/[sh]d? disks). +# 0.10.4 -- Improved handling of disks (other than /dev/[sh]d? disks). +# 0.10.2 -- Improved Secure Boot detection in Linux, fixed --usedefault in OS X, +# and fixed bug that could cause mountesp to be installed as a FILE +# called /usr/local/bin in OS X. # 0.10.1 -- Improve extraction of default kernel options from /proc/cmdline. # Add support for AMD64 (aka AARCH64, aa64) platform. Added # warning when --alldrivers used without --usedefault. @@ -791,7 +796,7 @@ SetupMacHfs() { ProductName rEFInd ProductVersion - 0.10.1 + 0.10.5 ENDOFHERE @@ -862,7 +867,8 @@ InstallOnOSX() { DetermineTargetDir CheckForSIP CopyRefindFiles - cp "$ThisDir/mountesp" /usr/local/bin &> /dev/null + mkdir -p /usr/local/bin &> /dev/null + cp "$ThisDir/mountesp" /usr/local/bin/ &> /dev/null if [[ $InstallToEspOnMac == "1" && -z "$TargetPart" ]] ; then bless --mount "$InstallDir" --setBoot --file "$InstallDir/$TargetDir/$Refind" --shortform elif [[ "$TargetDir" != "/EFI/BOOT" ]] ; then @@ -1048,13 +1054,15 @@ ReSignBinaries() { # and EspFilesystem the filesystem (always "vfat") FindLinuxESP() { echo "The ESP doesn't seem to be mounted! Trying to find it...." + local Name local Drive local PartNum local TableType local DmStatus local SkipIt local Dmraid - for Drive in `ls /dev/[sh]d?` ; do + for Name in `lsblk -r | grep disk | cut -f 1 -d " "` ; do + Drive="/dev/$Name" SkipIt=0 Dmraid=`which dmraid 2> /dev/null` if [ -x "$Dmraid" ] ; then @@ -1105,7 +1113,13 @@ FindMountedESP() { if [[ $EspFilesystem != 'vfat' ]] ; then echo "$RootDir/$InstallDir doesn't seem to be on a VFAT filesystem. The ESP must be" echo "mounted at $RootDir/boot or $RootDir/boot/efi and it must be VFAT! Aborting!" - exit 1 + if [[ -d /sys/firmware/efi ]] ; then + exit 1 + else + echo "The computer appears to be running in BIOS mode and has no ESP. You should" + echo "create an ESP, and ideally boot in EFI mode, before installing rEFInd." + exit 0 + fi fi echo "ESP was found at $InstallDir using $EspFilesystem" } # FindMountedESP @@ -1114,10 +1128,25 @@ FindMountedESP() { # If this fails, sets Problems=1 AddBootEntry() { local PartNum + local InstallDisk + local InstallPart + local Name Efibootmgr=`which efibootmgr 2> /dev/null` if [[ "$Efibootmgr" ]] ; then - InstallDisk=`grep "$InstallDir" /etc/mtab | cut -d " " -f 1 | cut -c 1-8` - PartNum=`grep "$InstallDir" /etc/mtab | cut -d " " -f 1 | cut -c 9-10` + InstallPart=`grep "$InstallDir" /etc/mtab | cut -d " " -f 1` + for Name in `lsblk -r | grep disk | cut -f 1 -d " "` ; do + if [[ $InstallPart == *"$Name"* ]] ; then + InstallDisk="/dev/"$Name + PartNum=${InstallPart#$InstallDisk} + PartNum=`echo "${PartNum//[!0-9]/}"` + break + fi + done + if [[ -z $InstallDisk || -z $PartNum ]] ; then + echo "Could not identify ESP in AddBootEntry()!" + Problems=1 + return 1 + fi EntryFilename="$TargetDir/$Refind" EfiEntryFilename=`echo ${EntryFilename//\//\\\}` EfiEntryFilename2=`echo ${EfiEntryFilename} | sed s/\\\\\\\\/\\\\\\\\\\\\\\\\/g`