X-Git-Url: https://code.delx.au/refind/blobdiff_plain/742d7d95d0713ac22ff636875a4f17c68484bbe1..119f040f3c096ef2ab59f5d02059e9d872047dcd:/install.sh diff --git a/install.sh b/install.sh index 425da29..8268e40 100755 --- a/install.sh +++ b/install.sh @@ -29,9 +29,14 @@ # # Revision history: # -# 0.5.2 -- Changed --drivers to --alldrivers and added --nodrivers option; +# 0.6.4 -- Copies ext2 driver rather than ext4 driver for ext2/3fs +# 0.6.3 -- Support for detecting rEFInd in EFI/BOOT and EFI/Microsoft/Boot +# directories & for installing to EFI/BOOT in BIOS mode +# 0.6.2-1 -- Added --yes option & tweaked key-copying for use with RPM install script +# 0.6.1 -- Added --root option; minor bug fixes +# 0.6.0 -- Changed --drivers to --alldrivers and added --nodrivers option; # changed default driver installation behavior in Linux to install -# the driver needed to read /boot +# the driver needed to read /boot (if available) # 0.5.1.2 -- Fixed bug that caused failure to generate refind_linux.conf file # 0.5.1.1 -- Fixed bug that caused script failure under OS X # 0.5.1 -- Added --shim & --localkeys options & create sample refind_linux.conf @@ -47,15 +52,16 @@ # Note: install.sh version numbers match those of the rEFInd package # with which they first appeared. +RootDir="/" TargetDir=/EFI/refind -EtcKeysDir=/etc/refind.d/keys LocalKeysBase="refind_local" -RLConfFile="/boot/refind_linux.conf" ShimSource="none" +TargetShim="default" TargetX64="refind_x64.efi" TargetIA32="refind_ia32.efi" LocalKeys=0 DeleteRefindDir=0 +AlwaysYes=0 # # Functions used by both OS X and Linux.... @@ -79,6 +85,9 @@ GetParams() { TargetIA32="bootia32.efi" shift ;; + --root) RootDir=$2 + shift + ;; --localkeys) LocalKeys=1 ;; --shim) ShimSource=$2 @@ -88,19 +97,45 @@ GetParams() { ;; --nodrivers) InstallDrivers="none" ;; - * ) echo "Usage: $0 [--esp | --usedefault {device-file}] [--nodrivers | --alldrivers] " - echo " [--shim {shim-filename}] [--localkeys]" + --yes) AlwaysYes=1 + ;; + * ) echo "Usage: $0 [--esp | --usedefault {device-file} | --root {directory} ]" + echo " [--nodrivers | --alldrivers] [--shim {shim-filename}]" + echo " [--localkeys] [--yes]" exit 1 esac shift done + if [[ $InstallToEspOnMac == 1 && $TargetDir == '/EFI/BOOT' ]] ; then echo "You may use --esp OR --usedefault, but not both! Aborting!" exit 1 fi -# exit 1 + if [[ $RootDir != '/' && $TargetDir == '/EFI/BOOT' ]] ; then + echo "You may use --usedefault OR --root, but not both! Aborting!" + exit 1 + fi + if [[ $RootDir != '/' && $InstallToEspOnMac == 1 ]] ; then + echo "You may use --root OR --esp, but not both! Aborting!" + exit 1 + fi + + RLConfFile="$RootDir/boot/refind_linux.conf" + EtcKeysDir="$RootDir/etc/refind.d/keys" } # GetParams() +# Get a yes/no response from the user and place it in the YesNo variable. +# If the AlwaysYes variable is set to 1, skip the user input and set "Y" +# in the YesNo variable. +ReadYesNo() { + if [[ $AlwaysYes == 1 ]] ; then + YesNo="Y" + echo "Y" + else + read YesNo + fi +} + # Abort if the rEFInd files can't be found. # Also sets $ConfFile to point to the configuration file, # $IconsDir to point to the icons directory, and @@ -163,11 +198,12 @@ CopyShimFiles() { # Copy the public keys to the installation medium CopyKeys() { if [[ $LocalKeys == 1 ]] ; then - cp $EtcKeysDir/$LocalKeysBase.cer $InstallDir/$TargetDir - cp $EtcKeysDir/$LocalKeysBase.crt $InstallDir/$TargetDir - else - cp $ThisDir/refind.cer $InstallDir/$TargetDir - cp $ThisDir/refind.crt $InstallDir/$TargetDir + mkdir -p $InstallDir/$TargetDir/keys/ + cp $EtcKeysDir/$LocalKeysBase.cer $InstallDir/$TargetDir/keys/ + cp $EtcKeysDir/$LocalKeysBase.crt $InstallDir/$TargetDir/keys/ +# else +# cp $ThisDir/refind.cer $InstallDir/$TargetDir/keys/ +# cp $ThisDir/refind.crt $InstallDir/$TargetDir/keys/ fi } # CopyKeys() @@ -185,11 +221,16 @@ CopyDrivers() { DriverType="" case $BootFS in ext2 | ext3) DriverType="ext2" + # Could use ext4, but that can create unwanted entries from symbolic + # links in / to /boot/vmlinuz if a separate /boot partition is used. + ;; + ext4) DriverType="ext4" ;; reiserfs) DriverType="reiserfs" ;; hfsplus) DriverType="hfs" ;; + *) BootFS="" esac if [[ -n $BootFS ]] ; then echo "Installing driver for $BootFS (${DriverType}_$1.efi)" @@ -203,7 +244,7 @@ CopyDrivers() { # Copy the rEFInd files to the ESP or OS X root partition. # Sets Problems=1 if any critical commands fail. CopyRefindFiles() { - mkdir -p $InstallDir/$TargetDir &> /dev/null + mkdir -p $InstallDir/$TargetDir if [[ $TargetDir == '/EFI/BOOT' ]] ; then cp $RefindDir/refind_ia32.efi $InstallDir/$TargetDir/$TargetIA32 2> /dev/null if [[ $? != 0 ]] ; then @@ -223,14 +264,7 @@ CopyRefindFiles() { fi Refind="" CopyKeys - elif [[ $Platform == 'EFI32' ]] ; then - cp $RefindDir/refind_ia32.efi $InstallDir/$TargetDir/$TargetIA32 - if [[ $? != 0 ]] ; then - Problems=1 - fi - CopyDrivers ia32 - Refind="refind_ia32.efi" - elif [[ $Platform == 'EFI64' ]] ; then + elif [[ $Platform == 'EFI64' || $TargetDir == "/EFI/Microsoft/Boot" ]] ; then cp $RefindDir/refind_x64.efi $InstallDir/$TargetDir/$TargetX64 if [[ $? != 0 ]] ; then Problems=1 @@ -239,16 +273,25 @@ CopyRefindFiles() { Refind="refind_x64.efi" CopyKeys if [[ $ShimSource != "none" ]] ; then - TargetShim=`basename $ShimSource` + if [[ $TargetShim == "default" ]] ; then + TargetShim=`basename $ShimSource` + fi CopyShimFiles Refind=$TargetShim if [[ $LocalKeys == 0 ]] ; then echo "Storing copies of rEFInd Secure Boot public keys in $EtcKeysDir" mkdir -p $EtcKeysDir - cp $ThisDir/refind.cer $EtcKeysDir - cp $ThisDir/refind.crt $EtcKeysDir + cp $ThisDir/keys/refind.cer $EtcKeysDir 2> /dev/null + cp $ThisDir/keys/refind.crt $EtcKeysDir 2> /dev/null fi fi + elif [[ $Platform == 'EFI32' ]] ; then + cp $RefindDir/refind_ia32.efi $InstallDir/$TargetDir/$TargetIA32 + if [[ $? != 0 ]] ; then + Problems=1 + fi + CopyDrivers ia32 + Refind="refind_ia32.efi" else echo "Unknown platform! Aborting!" exit 1 @@ -264,6 +307,9 @@ CopyRefindFiles() { if [[ $? != 0 ]] ; then Problems=1 fi + mkdir -p $InstallDir/$TargetDir/keys + cp -rf $ThisDir/keys/*.[cd]er $InstallDir/$TargetDir/keys/ 2> /dev/null + cp -rf $EtcKeysDir/*.[cd]er $InstallDir/$TargetDir/keys/ 2> /dev/null if [[ -f $InstallDir/$TargetDir/refind.conf ]] ; then echo "Existing refind.conf file found; copying sample file as refind.conf-sample" echo "to avoid overwriting your customizations." @@ -341,7 +387,7 @@ InstallOnOSX() { elif [[ $InstallToEspOnMac == "1" ]] ; then MountOSXESP else - InstallDir="/" + InstallDir="$RootDir/" fi echo "Installing rEFInd to the partition mounted at '$InstallDir'" Platform=`ioreg -l -p IODeviceTree | grep firmware-abi | cut -d "\"" -f 4` @@ -359,7 +405,7 @@ InstallOnOSX() { echo "/Library/StartupItems/rEFItBlesser found!" echo "This program is part of rEFIt, and will cause rEFInd to fail to work after" echo -n "its first boot. Do you want to remove rEFItBlesser (Y/N)? " - read YesNo + ReadYesNo if [[ $YesNo == "Y" || $YesNo == "y" ]] ; then echo "Deleting /Library/StartupItems/rEFItBlesser..." rm -r /Library/StartupItems/rEFItBlesser @@ -383,19 +429,25 @@ InstallOnOSX() { # appropriate options haven't been set, warn the user and offer to abort. # If we're NOT in Secure Boot mode but the user HAS specified the --shim # or --localkeys option, warn the user and offer to abort. +# +# FIXME: Although I checked the presence (and lack thereof) of the +# /sys/firmware/efi/vars/SecureBoot* files on my Secure Boot test system +# before releasing this script, I've since found that they are at least +# sometimes present when Secure Boot is absent. This means that the first +# test can produce false alarms. A better test is highly desirable. CheckSecureBoot() { VarFile=`ls -d /sys/firmware/efi/vars/SecureBoot* 2> /dev/null` if [[ -n $VarFile && $TargetDir != '/EFI/BOOT' && $ShimSource == "none" ]] ; then echo "" - echo "CAUTION: The computer seems to have been booted with Secure Boot active, but" - echo "you haven't specified a valid shim.efi file source. The resulting installation" - echo "will not boot unless you disable Secure Boot. You may continue, but you should" - echo "consider using --shim to specify a working shim.efi file. You can read more" - echo "about this topic at http://www.rodsbooks.com/refind/secureboot.html." + echo "CAUTION: Your computer appears to support Secure Boot, but you haven't" + echo "specified a valid shim.efi file source. If you've disabled Secure Boot and" + echo "intend to leave it disabled, this is fine; but if Secure Boot is active, the" + echo "resulting installation won't boot. You can read more about this topic at" + echo "http://www.rodsbooks.com/refind/secureboot.html." echo "" echo -n "Do you want to proceed with installation (Y/N)? " - read ContYN - if [[ $ContYN == "Y" || $ContYN == "y" ]] ; then + ReadYesNo + if [[ $YesNo == "Y" || $YesNo == "y" ]] ; then echo "OK; continuing with the installation..." else exit 0 @@ -412,8 +464,8 @@ CheckSecureBoot() { echo "http://www.rodsbooks.com/refind/secureboot.html." echo "" echo -n "Do you want to proceed with installation (Y/N)? " - read ContYN - if [[ $ContYN == "Y" || $ContYN == "y" ]] ; then + ReadYesNo + if [[ $YesNo == "Y" || $YesNo == "y" ]] ; then echo "OK; continuing with the installation..." else exit 0 @@ -429,8 +481,8 @@ CheckSecureBoot() { echo "more about it at http://www.rodsbooks.com/refind/secureboot.html." echo "" echo -n "Do you want to proceed with installation (Y/N)? " - read ContYN - if [[ $ContYN == "Y" || $ContYN == "y" ]] ; then + ReadYesNo + if [[ $YesNo == "Y" || $YesNo == "y" ]] ; then echo "OK; continuing with the installation..." else exit 0 @@ -511,10 +563,10 @@ ReSignBinaries() { mkdir -p $TempDir/drivers_x64 cp $RefindDir/refind.conf-sample $TempDir 2> /dev/null cp $ThisDir/refind.conf-sample $TempDir 2> /dev/null - cp $RefindDir/refind_ia32.efi $TempDir + cp $RefindDir/refind_ia32.efi $TempDir 2> /dev/null cp -a $RefindDir/drivers_ia32 $TempDir 2> /dev/null cp -a $ThisDir/drivers_ia32 $TempDir 2> /dev/null - SignOneBinary $RefindDir/refind_x64.efi $ThisDir/refind_x64.efi + SignOneBinary $RefindDir/refind_x64.efi $TempDir/refind_x64.efi for Driver in `ls $RefindDir/drivers_x64/*.efi $ThisDir/drivers_x64/*.efi 2> /dev/null` ; do TempName=`basename $Driver` SignOneBinary $Driver $TempDir/drivers_x64/$TempName @@ -523,20 +575,26 @@ ReSignBinaries() { DeleteRefindDir=1 } -# Identifies the ESP's location (/boot or /boot/efi); aborts if -# the ESP isn't mounted at either location. +# Identifies the ESP's location (/boot or /boot/efi, or these locations under +# the directory specified by --root); aborts if the ESP isn't mounted at +# either location. # Sets InstallDir to the ESP mount point. FindLinuxESP() { - EspLine=`df /boot/efi | grep boot` + EspLine=`df $RootDir/boot/efi 2> /dev/null | grep boot/efi` + if [[ ! -n $EspLine ]] ; then + EspLine=`df $RootDir/boot | grep boot` + fi InstallDir=`echo $EspLine | cut -d " " -f 6` - EspFilesystem=`grep $InstallDir /etc/mtab | cut -d " " -f 3` + if [[ -n $InstallDir ]] ; then + EspFilesystem=`grep $InstallDir /etc/mtab | cut -d " " -f 3` + fi if [[ $EspFilesystem != 'vfat' ]] ; then - echo "/boot/efi doesn't seem to be on a VFAT filesystem. The ESP must be mounted at" - echo "/boot or /boot/efi and it must be VFAT! Aborting!" + echo "$RootDir/boot/efi 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 fi echo "ESP was found at $InstallDir using $EspFilesystem" -} # MountLinuxESP +} # FindLinuxESP # Uses efibootmgr to add an entry for rEFInd to the EFI's NVRAM. # If this fails, sets Problems=1 @@ -544,17 +602,14 @@ AddBootEntry() { InstallIt="0" Efibootmgr=`which efibootmgr 2> /dev/null` if [[ $Efibootmgr ]] ; then - modprobe efivars &> /dev/null 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` EntryFilename=$TargetDir/$Refind EfiEntryFilename=`echo ${EntryFilename//\//\\\}` EfiEntryFilename2=`echo ${EfiEntryFilename} | sed s/\\\\\\\\/\\\\\\\\\\\\\\\\/g` - ExistingEntry=`$Efibootmgr -v | grep $EfiEntryFilename2` - # NOTE: Below protects against duplicate entries, but only for non-Secure Boot - # installations. - # TODO: Improve to detect & protect against duplicating a Secure Boot entry. - if [[ $ExistingEntry && $ShimSource == "none" ]] ; then + ExistingEntry=`$Efibootmgr -v | grep -i $EfiEntryFilename2` + + if [[ $ExistingEntry ]] ; then ExistingEntryBootNum=`echo $ExistingEntry | cut -c 5-8` FirstBoot=`$Efibootmgr | grep BootOrder | cut -c 12-15` if [[ $ExistingEntryBootNum != $FirstBoot ]] ; then @@ -568,18 +623,21 @@ AddBootEntry() { else InstallIt="1" fi + if [[ $InstallIt == "1" ]] ; then echo "Installing it!" - $Efibootmgr -c -l $EfiEntryFilename -L rEFInd -d $InstallDisk -p $PartNum &> /dev/null + $Efibootmgr -c -l $EfiEntryFilename -L "rEFInd Boot Manager" -d $InstallDisk -p $PartNum &> /dev/null if [[ $? != 0 ]] ; then EfibootmgrProblems=1 Problems=1 fi fi - else + + else # efibootmgr not found EfibootmgrProblems=1 Problems=1 fi + if [[ $EfibootmgrProblems ]] ; then echo echo "ALERT: There were problems running the efibootmgr program! You may need to" @@ -591,12 +649,14 @@ AddBootEntry() { # Create a minimal/sample refind_linux.conf file in /boot. GenerateRefindLinuxConf() { - if [[ ! -f $RLConfFile ]] ; then - if [[ -f /etc/default/grub ]] ; then + if [[ -f $RLConfFile ]] ; then + echo "Existing $RLConfFile found; not overwriting." + else + if [[ -f "$RootDir/etc/default/grub" ]] ; then # We want the default options used by the distribution, stored here.... - source /etc/default/grub + source "$RootDir/etc/default/grub" fi - RootFS=`df / | grep dev | cut -f 1 -d " "` + RootFS=`df $RootDir | grep dev | cut -f 1 -d " "` StartOfDevname=`echo $RootFS | cut -b 1-7` if [[ $StartOfDevname == "/dev/sd" || $StartOfDevName == "/dev/hd" ]] ; then # Identify root filesystem by UUID rather than by device node, if possible @@ -608,55 +668,152 @@ GenerateRefindLinuxConf() { DefaultOptions="$GRUB_CMDLINE_LINUX $GRUB_CMDLINE_LINUX_DEFAULT" echo "\"Boot with standard options\" \"ro root=$RootFS $DefaultOptions \"" > $RLConfFile echo "\"Boot to single-user mode\" \"ro root=$RootFS $DefaultOptions single\"" >> $RLConfFile + echo "\"Boot with minimal options\" \"ro root=$RootFS\"" >> $RLConfFile fi } +# Set varaibles for installation in EFI/BOOT directory +SetVarsForBoot() { + TargetDir="/EFI/BOOT" + if [[ $ShimSource == "none" ]] ; then + TargetX64="bootx64.efi" + TargetIA32="bootia32.efi" + else + TargetX64="grubx64.efi" + TargetIA32="bootia32.efi" + TargetShim="bootx64.efi" + fi +} # SetFilenamesForBoot() + +# Set variables for installation in EFI/Microsoft/Boot directory +SetVarsForMsBoot() { + TargetDir="/EFI/Microsoft/Boot" + if [[ $ShimSource == "none" ]] ; then + TargetX64="bootmgfw.efi" + else + TargetX64="grubx64.efi" + TargetShim="bootmgfw.efi" + fi +} + +# TargetDir defaults to /EFI/refind; however, this function adjusts it as follows: +# - If an existing refind.conf is available in /EFI/BOOT or /EFI/Microsoft/Boot, +# install to that directory under the suitable name; but DO NOT do this if +# refind.conf is also in /EFI/refind. +# - If booted in BIOS mode and the ESP lacks any other EFI files, install to +# /EFI/BOOT +# - If booted in BIOS mode and there's no refind.conf file and there is a +# /EFI/Microsoft/Boot/bootmgfw.efi file, move it down one level and +# install under that name, "hijacking" the Windows boot loader filename +DetermineTargetDir() { + Upgrade=0 + + if [[ -f $InstallDir/EFI/BOOT/refind.conf ]] ; then + SetVarsForBoot + Upgrade=1 + fi + if [[ -f $InstallDir/EFI/Microsoft/Boot/refind.conf ]] ; then + SetVarsForMsBoot + Upgrade=1 + fi + if [[ -f $InstallDir/EFI/refind/refind.conf ]] ; then + TargetDir="/EFI/refind" + Upgrade=1 + fi + if [[ $Upgrade == 1 ]] ; then + echo "Found rEFInd installation in $InstallDir$TargetDir; upgrading it." + fi + + if [[ ! -d /sys/firmware/efi && $Upgrade == 0 ]] ; then # BIOS-mode + FoundEfiFiles=`find $InstallDir/EFI/BOOT -name "*.efi" 2> /dev/null` + FoundConfFiles=`find $InstallDir -name "refind\.conf" 2> /dev/null` + if [[ ! -n $FoundConfFiles && -f $InstallDir/EFI/Microsoft/Boot/bootmgfw.efi ]] ; then + mv -n $InstallDir/EFI/Microsoft/Boot/bootmgfw.efi $InstallDir/EFI/Microsoft &> /dev/null + SetVarsForMsBoot + echo "Running in BIOS mode with a suspected Windows installation; moving boot loader" + echo "files so as to install to $InstallDir$TargetDir." + elif [[ ! -n $FoundEfiFiles ]] ; then # In BIOS mode and no default loader; install as default loader + SetVarsForBoot + echo "Running in BIOS mode with no existing default boot loader; installing to" + echo $InstallDir$TargetDir + else + echo "Running in BIOS mode with an existing default boot loader; backing it up and" + echo "installing rEFInd in its place." + if [[ -d $InstallDir/EFI/BOOT-rEFIndBackup ]] ; then + echo "" + echo "Caution: An existing backup of a default boot loader exists! If the current" + echo "default boot loader and the backup are different boot loaders, the current" + echo "one will become inaccessible." + echo "" + echo -n "Do you want to proceed with installation (Y/N)? " + ReadYesNo + if [[ $YesNo == "Y" || $YesNo == "y" ]] ; then + echo "OK; continuing with the installation..." + else + exit 0 + fi + fi + mv -n $InstallDir/EFI/BOOT $InstallDir/EFI/BOOT-rEFIndBackup + SetVarsForBoot + fi + fi # BIOS-mode +} # DetermineTargetDir() + # Controls rEFInd installation under Linux. # Sets Problems=1 if something goes wrong. InstallOnLinux() { echo "Installing rEFInd on Linux...." + modprobe efivars &> /dev/null if [[ $TargetDir == "/EFI/BOOT" ]] ; then MountDefaultTarget else FindLinuxESP + DetermineTargetDir fi CpuType=`uname -m` if [[ $CpuType == 'x86_64' ]] ; then Platform="EFI64" - if [[ $LocalKeys == 1 ]] ; then - ReSignBinaries - fi - elif [[ $CpuType == 'i386' || $CpuType == 'i486' || $CpuType == 'i586' || $CpuType == 'i686' ]] ; then - if [[ $ShimSource != "none" && $TargetDir != "/BOOT/EFI" ]] ; then - echo "" - echo "CAUTION: Neither rEFInd nor shim currently supports 32-bit systems, so you" - echo "should not use the --shim option to install on such systems. Aborting!" - echo "" - exit 1 - fi + elif [[ ($CpuType == 'i386' || $CpuType == 'i486' || $CpuType == 'i586' || $CpuType == 'i686') ]] ; then Platform="EFI32" - echo - echo "CAUTION: This Linux installation uses a 32-bit kernel. 32-bit EFI-based" - echo "computers are VERY RARE. If you've installed a 32-bit version of Linux" - echo "on a 64-bit computer, you should manually install the 64-bit version of" - echo "rEFInd. If you're installing on a Mac, you should do so from OS X. If" - echo "you're positive you want to continue with this installation, answer 'Y'" - echo "to the following question..." - echo - echo -n "Are you sure you want to continue (Y/N)? " - read ContYN - if [[ $ContYN == "Y" || $ContYN == "y" ]] ; then - echo "OK; continuing with the installation..." - else - exit 0 - fi + # If we're in EFI mode, do some sanity checks, and alert the user or even + # abort. Not in BIOS mode, though, since that could be used on an emergency + # disc to try to recover a troubled Linux installation. + if [[ -d /sys/firmware/efi ]] ; then + if [[ $ShimSource != "none" && $TargetDir != "/BOOT/EFI" ]] ; then + echo "" + echo "CAUTION: Neither rEFInd nor shim currently supports 32-bit systems, so you" + echo "should not use the --shim option to install on such systems. Aborting!" + echo "" + exit 1 + fi + echo + echo "CAUTION: This Linux installation uses a 32-bit kernel. 32-bit EFI-based" + echo "computers are VERY RARE. If you've installed a 32-bit version of Linux" + echo "on a 64-bit computer, you should manually install the 64-bit version of" + echo "rEFInd. If you're installing on a Mac, you should do so from OS X. If" + echo "you're positive you want to continue with this installation, answer 'Y'" + echo "to the following question..." + echo + echo -n "Are you sure you want to continue (Y/N)? " + ReadYesNo + if [[ $YesNo == "Y" || $YesNo == "y" ]] ; then + echo "OK; continuing with the installation..." + else + exit 0 + fi + fi # in EFI mode else echo "Unknown CPU type '$CpuType'; aborting!" exit 1 fi + + if [[ $LocalKeys == 1 ]] ; then + ReSignBinaries + fi + CheckSecureBoot CopyRefindFiles - if [[ $TargetDir != "/EFI/BOOT" ]] ; then + if [[ $TargetDir != "/EFI/BOOT" && $TargetDir != "/EFI/Microsoft/Boot" ]] ; then AddBootEntry GenerateRefindLinuxConf fi