#
# Revision history:
#
+# 0.6.9 -- Install gptsync on Macs if evidence of Windows found
+# 0.6.8 -- Bug fix: ESP scan now uses "uniq".
+# 0.6.6 -- Bug fix: Upgrade drivers when installed to EFI/BOOT. Also enable
+# copying shim.efi and MokManager.efi over themselves.
+# 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
# Helper for CopyRefindFiles; copies shim files (including MokManager, if it's
# available) to target.
CopyShimFiles() {
- cp $ShimSource $InstallDir/$TargetDir/$TargetShim
+ cp -fb $ShimSource $InstallDir/$TargetDir/$TargetShim
if [[ $? != 0 ]] ; then
Problems=1
fi
if [[ -f $MokManagerSource ]] ; then
- cp $MokManagerSource $InstallDir/$TargetDir/
+ cp -fb $MokManagerSource $InstallDir/$TargetDir/
fi
if [[ $? != 0 ]] ; then
Problems=1
BootFS=`blkid -o export $BootPart 2> /dev/null | grep TYPE= | cut -f 2 -d =`
DriverType=""
case $BootFS in
- ext2 | ext3 | ext4) DriverType="ext4"
+ 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"
;;
fi
}
+# Copy tools (currently only gptsync, and that only on Macs) to the EFI/tools
+# directory on the ESP. Must be passed a suitable architecture code (ia32
+# or x64).
+CopyTools() {
+ mkdir -p $InstallDir/EFI/tools
+ if [[ $OSName == 'Darwin' ]] ; then
+ cp -f $RefindDir/tools_$1/gptsync_$1.efi $InstallDir/EFI/tools/
+ if [[ -f $InstallDir/EFI/tools/gptsync.efi ]] ; then
+ mv $InstallDir/EFI/tools/gptsync.efi $InstallDir/EFI/tools/gptsync.efi-disabled
+ echo "Found old gptsync.efi; disabling it by renaming it to gptsync.efi-disabled"
+ fi
+ fi
+} # CopyTools()
+
# Copy the rEFInd files to the ESP or OS X root partition.
# Sets Problems=1 if any critical commands fail.
CopyRefindFiles() {
if [[ $InstallDrivers == "all" ]] ; then
cp -r $RefindDir/drivers_* $InstallDir/$TargetDir/ 2> /dev/null
cp -r $ThisDir/drivers_* $InstallDir/$TargetDir/ 2> /dev/null
+ elif [[ $Upgrade == 1 ]] ; then
+ if [[ $Platform == 'EFI64' ]] ; then
+ CopyDrivers x64
+ CopyTools x64
+ else
+ CopyDrivers ia32
+ CopyTools ia32
+ fi
fi
Refind=""
CopyKeys
Problems=1
fi
CopyDrivers x64
+ CopyTools x64
Refind="refind_x64.efi"
CopyKeys
if [[ $ShimSource != "none" ]] ; then
Problems=1
fi
CopyDrivers ia32
+ CopyTools ia32
Refind="refind_ia32.efi"
else
echo "Unknown platform! Aborting!"
fi
InstallDir=`echo $EspLine | cut -d " " -f 6`
if [[ -n $InstallDir ]] ; then
- EspFilesystem=`grep $InstallDir /etc/mtab | cut -d " " -f 3`
+ EspFilesystem=`grep $InstallDir /etc/mtab | uniq | cut -d " " -f 3`
fi
if [[ $EspFilesystem != 'vfat' ]] ; then
echo "$RootDir/boot/efi doesn't seem to be on a VFAT filesystem. The ESP must be"