CloverBootloader/CloverPackage/CloverV2/rcScripts/etc/rc.boot.d/20.mount_ESP.local
vectorsigma a99ef24606 Fix for the package
TODO: fix clover-genconfig
2019-09-05 15:11:48 +02:00

160 lines
5.0 KiB
Bash
Executable File

#!/bin/bash
#
# Mount ESP script for Clover
#
# © JrCs 2013
#
# Mount ESP (EFI System Partition)
#
# NVRam keys used:
# Clover.MountEFI: Yes|diskX|GUID|VolName [default No]
# Check that all variable are bound
set -u
#
# Source clover rc library if needed
#
if [[ ! "$(type -t GetNVRamKey)" == "function" ]]; then
selfDir=$(cd $(dirname "$0") && pwd -P)
source "${selfDir}"/../rc.clover.lib
fi
# Variables
ESPMountPoint=/Volumes/ESP
declare -r plistbuddy='/usr/libexec/PlistBuddy'
# Debug mode ?
[[ "$DEBUG" -ne 0 ]] && set -x
# Turn on a case-insensitive matching
shopt -s nocasematch
function mountESP {
local arg="$1"
local exitcode=1
local guidRegExp='[[:xdigit:]]+-[[:xdigit:]]+-[[:xdigit:]]+-[[:xdigit:]]+'
local ESPDevice=
if [[ "$arg" == Yes ]]; then
ESPDevice=$(LC_ALL=C diskutil info / 2>/dev/null | \
sed -n 's/.*PV UUID (disk): .*(//p' | \
sed -n 's/s[0-9])//p')
if [[ "$ESPDevice" == "" ]]; then
ESPDevice=$(LC_ALL=C diskutil info / 2>/dev/null | \
sed -n 's/.*Part [Oo]f Whole: *//p')
fi
# When ${ESPDevice} is an "Apple_APFS Container" on expected "Boot Volume" (ie. "Volume de démarrage")
# at "Force mount selected ESP at startup:"(ie. "Forcer le montage de l'ESP sélectionné au démarrage")
if [[ $(diskutil info / | sed -n 's/.*File System Personality: *//p' | tr "[:upper:]" "[:lower:]") = "apfs" ]] ; then
ESPDevice=$(diskutil list | grep "Apple_APFS Container ${ESPDevice}" | \
awk '{ print $NF}' | sed -E 's@^.*/?(disk[0-9]*).*@\1@')
fi
elif [[ "$arg" =~ $guidRegExp ]]; then
ESPDevice=$(LC_ALL=C diskutil info "$arg" 2>/dev/null | \
sed -n 's/.*Part [Oo]f Whole: *//p')
if [[ -z "$ESPDevice" ]]; then
echo "Can't find partition with UUID $arg"
return 1
fi
elif [[ ! "$arg" =~ ^(/dev/)?disk[0-9]+ ]]; then
ESPDevice=$(LC_ALL=C diskutil info "$arg" 2>/dev/null | \
sed -n 's/.*Part [Oo]f Whole: *//p')
if [[ -z "$ESPDevice" ]]; then
echo "Can't find volume with the name $arg"
return 1
fi
else
ESPDevice="$arg"
fi
# keep only the device name (remove /dev/ and partition (aka s1))
ESPDevice=$(echo "$ESPDevice" | sed -E 's@^.*/?(disk[0-9]*).*@\1@')
if [[ "$ESPDevice" =~ ^disk[0-9]+$ ]]; then
local ESP="${ESPDevice}s1"
# Umount previously mount partition
/usr/sbin/diskutil umount "${ESPMountPoint}" &>/dev/null
umount /dev/${ESP} &>/dev/null
exitcode=1
local tmpfile=$(mktemp -t fstyp)
LC_ALL=C diskutil info -plist /dev/$ESP > "$tmpfile"
local fstype=$($plistbuddy -c "Print FilesystemType" \
"$tmpfile" 2>/dev/null)
rm -f "$tmpfile"
[[ -z "$fstype" ]] && fstype=$(/sbin/fstyp /dev/$ESP)
if [[ -n "$fstype" ]]; then
[[ ! -d "${ESPMountPoint}" ]] && mkdir -p "${ESPMountPoint}"
mount -t "$fstype" /dev/$ESP "${ESPMountPoint}" &>/dev/null
exitcode=$?
fi
if [[ $exitcode -ne 0 ]]; then
echo "Failed to mount $ESP at $ESPMountPoint"
else
echo "EFI partition ($ESP) mount at $ESPMountPoint"
fi
else
echo "Invalid device '$ESPDevice'"
fi
return $exitcode
}
# Clover.MountEFI=Yes|diskX|GUID|VolName [default No]
mountEFIValue=$(GetNVRamKey 'Clover.MountEFI' || echo 'No')
if [[ "$mountEFIValue" == "No" ]]; then
echo "Not auto mounting EFI partition"
else
mountESP "$mountEFIValue"
[[ $? -ne 0 ]] && rmdir "$ESPMountPoint" &>/dev/null
fi
#
# 2017 (c) syscl/lighting/Yating Zhou, tluck, Sherlocks
#
gScriptVersion=1.16.2
gEmuVariableName=emuvariable
gLogoutHookf="/Library/Application Support/Clover/CloverDaemon-stopservice"
gNVRAMbuf=$(nvram -x -p)
gEfiEmuVariableIsPresent="false"
gLegacyEmuVariableIsPresent="false"
if [[ `printf "${gNVRAMbuf}" |tr '[:upper:]' '[:lower:]'` == *"${gEmuVariableName}"* ]];
then
gEfiEmuVariableIsPresent="true"
else
gEFIFirmwareVendor=$(LC_ALL=C ioreg -l -pIODeviceTree | sed -nE 's@.*firmware-vendor.*<([0-9a-fA-F]*)>.*@\1@p' | xxd -r -p | tr '[:upper:]' '[:lower:]')
case "${gEFIFirmwareVendor}" in
*"clover"* | *"edk ii"* ) gLegacyEmuVariableIsPresent="true"
;;
* )
;;
esac
fi
# set LogoutHook
if [[ "${gLegacyEmuVariableIsPresent}" == "true" || "${gEfiEmuVariableIsPresent}" == "true" ]];
then
if [ -f "${gLogoutHookf}" ];
then
#
# file exist, need to logoutHook
#
echo "v${gScriptVersion} (c) 2017 syscl/lighting/Yating Zhou, tluck, Sherlocks"
echo "Registering LogoutHook as ${gLogoutHookf}"
defaults write com.apple.loginwindow LogoutHook "${gLogoutHookf}"
fi
fi
# Local Variables: #
# mode: ksh #
# tab-width: 4 #
# indent-tabs-mode: nil #
# End: #
#
# vi: set expandtab ts=4 sw=4 sts=4: #