]>
code.delx.au - refind/blob - install.sh
3 # Linux/MacOS X script to install rEFInd
7 # ./install.sh [options]
10 # "--esp" to install to the ESP rather than to the system's root
11 # filesystem. This is the default on Linux
12 # "--usedefault {devicefile}" to install as default
13 # (/EFI/BOOT/BOOTX64.EFI and similar) to the specified device
14 # (/dev/sdd1 or whatever) without registering with the NVRAM.
15 # "--alldrivers" to install all drivers along with regular files
16 # "--nodrivers" to suppress driver installation (default in Linux is
17 # driver used on /boot; --nodrivers is OS X default)
18 # "--shim {shimfile}" to install a shim.efi file for Secure Boot
19 # "--localkeys" to re-sign x86-64 binaries with a locally-generated key
21 # The "esp" option is valid only on Mac OS X; it causes
22 # installation to the EFI System Partition (ESP) rather than
23 # to the current OS X boot partition. Under Linux, this script
24 # installs to the ESP by default.
26 # This program is copyright (c) 2012 by Roderick W. Smith
27 # It is released under the terms of the GNU GPL, version 3,
28 # a copy of which should be included in the file COPYING.txt.
32 # 0.6.1 -- Added --root option; minor bug fixes
33 # 0.6.0 -- Changed --drivers to --alldrivers and added --nodrivers option;
34 # changed default driver installation behavior in Linux to install
35 # the driver needed to read /boot (if available)
36 # 0.5.1.2 -- Fixed bug that caused failure to generate refind_linux.conf file
37 # 0.5.1.1 -- Fixed bug that caused script failure under OS X
38 # 0.5.1 -- Added --shim & --localkeys options & create sample refind_linux.conf
40 # 0.5.0 -- Added --usedefault & --drivers options & changed "esp" option to "--esp"
41 # 0.4.5 -- Fixed check for rEFItBlesser in OS X
42 # 0.4.2 -- Added notice about BIOS-based OSes & made NVRAM changes in Linux smarter
43 # 0.4.1 -- Added check for rEFItBlesser in OS X
44 # 0.3.3.1 -- Fixed OS X 10.7 bug; also works as make target
45 # 0.3.2.1 -- Check for presence of source files; aborts if not present
46 # 0.3.2 -- Initial version
48 # Note: install.sh version numbers match those of the rEFInd package
49 # with which they first appeared.
53 LocalKeysBase
="refind_local"
55 TargetX64
="refind_x64.efi"
56 TargetIA32
="refind_ia32.efi"
61 # Functions used by both OS X and Linux....
66 if [[ $OSName == "Linux" ]] ; then
67 # Install the driver required to read /boot, if it's available
72 while [[ $# -gt 0 ]]; do
74 --esp |
--ESP) InstallToEspOnMac
=1
76 --usedefault) TargetDir
=/EFI
/BOOT
78 TargetX64
="bootx64.efi"
79 TargetIA32
="bootia32.efi"
85 --localkeys) LocalKeys
=1
90 --drivers |
--alldrivers) InstallDrivers
="all"
92 --nodrivers) InstallDrivers
="none"
94 * ) echo "Usage: $0 [--esp | --usedefault {device-file} | --root {directory} ]"
95 echo " [--nodrivers | --alldrivers] [--shim {shim-filename}]"
102 if [[ $InstallToEspOnMac == 1 && $TargetDir == '/EFI/BOOT' ]] ; then
103 echo "You may use --esp OR --usedefault, but not both! Aborting!"
106 if [[ $RootDir != '/' && $TargetDir == '/EFI/BOOT' ]] ; then
107 echo "You may use --usedefault OR --root, but not both! Aborting!"
110 if [[ $RootDir != '/' && $InstallToEspOnMac == 1 ]] ; then
111 echo "You may use --root OR --esp, but not both! Aborting!"
115 RLConfFile
="$RootDir/boot/refind_linux.conf"
116 EtcKeysDir
="$RootDir/etc/refind.d/keys"
119 # Abort if the rEFInd files can't be found.
120 # Also sets $ConfFile to point to the configuration file,
121 # $IconsDir to point to the icons directory, and
122 # $ShimSource to the source of the shim.efi file (if necessary).
124 # Note: This check is satisfied if EITHER the 32- or the 64-bit version
125 # is found, even on the wrong platform. This is because the platform
126 # hasn't yet been determined. This could obviously be improved, but it
127 # would mean restructuring lots more code....
128 if [[ ! -f $RefindDir/refind_ia32.efi
&& ! -f $RefindDir/refind_x64.efi
]] ; then
129 echo "The rEFInd binary file is missing! Aborting installation!"
133 if [[ -f $RefindDir/refind.conf-sample
]] ; then
134 ConfFile
=$RefindDir/refind.conf-sample
135 elif [[ -f $ThisDir/refind.conf-sample
]] ; then
136 ConfFile
=$ThisDir/refind.conf-sample
138 echo "The sample configuration file is missing! Aborting installation!"
142 if [[ -d $RefindDir/icons
]] ; then
143 IconsDir
=$RefindDir/icons
144 elif [[ -d $ThisDir/icons
]] ; then
145 IconsDir
=$ThisDir/icons
147 echo "The icons directory is missing! Aborting installation!"
151 if [[ $ShimSource != "none" ]] ; then
152 if [[ -f $ShimSource ]] ; then
153 TargetX64
="grubx64.efi"
154 MokManagerSource
=`dirname $ShimSource`/MokManager.efi
156 echo "The specified shim file, $ShimSource, doesn't exist!"
157 echo "Aborting installation!"
163 # Helper for CopyRefindFiles; copies shim files (including MokManager, if it's
164 # available) to target.
166 cp $ShimSource $InstallDir/$TargetDir/$TargetShim
167 if [[ $?
!= 0 ]] ; then
170 if [[ -f $MokManagerSource ]] ; then
171 cp $MokManagerSource $InstallDir/$TargetDir/
173 if [[ $?
!= 0 ]] ; then
178 # Copy the public keys to the installation medium
180 if [[ $LocalKeys == 1 ]] ; then
181 mkdir
-p $InstallDir/$TargetDir/keys
/
182 cp $EtcKeysDir/$LocalKeysBase.cer
$InstallDir/$TargetDir/keys
/
183 cp $EtcKeysDir/$LocalKeysBase.crt
$InstallDir/$TargetDir/keys
/
185 # cp $ThisDir/refind.cer $InstallDir/$TargetDir/keys/
186 # cp $ThisDir/refind.crt $InstallDir/$TargetDir/keys/
190 # Copy drivers from $RefindDir/drivers_$1 to $InstallDir/$TargetDir/drivers_$1,
191 # honoring the $InstallDrivers condition. Must be passed a suitable
192 # architecture code (ia32 or x64).
194 if [[ $InstallDrivers == "all" ]] ; then
195 mkdir
-p $InstallDir/$TargetDir/drivers_
$1
196 cp $RefindDir/drivers_
$1/*_
$1.efi
$InstallDir/$TargetDir/drivers_
$1/ 2> /dev
/null
197 cp $ThisDir/drivers_
$1/*_
$1.efi
$InstallDir/$TargetDir/drivers_
$1/ 2> /dev
/null
198 elif [[ $InstallDrivers == "boot" && -x `which blkid` ]] ; then
199 BootPart
=`df /boot | grep dev | cut -f 1 -d " "`
200 BootFS
=`blkid -o export $BootPart 2> /dev/null | grep TYPE= | cut -f 2 -d =`
203 ext2 | ext3 | ext4
) DriverType
="ext4"
205 reiserfs
) DriverType
="reiserfs"
207 hfsplus
) DriverType
="hfs"
211 if [[ -n $BootFS ]] ; then
212 echo "Installing driver for $BootFS (${DriverType}_$1.efi)"
213 mkdir
-p $InstallDir/$TargetDir/drivers_
$1
214 cp $RefindDir/drivers_
$1/${DriverType}_
$1.efi
$InstallDir/$TargetDir/drivers_
$1/ 2> /dev
/null
215 cp $ThisDir/drivers_
$1/${DriverType}_
$1.efi
$InstallDir/$TargetDir/drivers_
$1/ 2> /dev
/null
220 # Copy the rEFInd files to the ESP or OS X root partition.
221 # Sets Problems=1 if any critical commands fail.
223 mkdir
-p $InstallDir/$TargetDir &> /dev
/null
224 if [[ $TargetDir == '/EFI/BOOT' ]] ; then
225 cp $RefindDir/refind_ia32.efi
$InstallDir/$TargetDir/$TargetIA32 2> /dev
/null
226 if [[ $?
!= 0 ]] ; then
227 echo "Note: IA32 (x86) binary not installed!"
229 cp $RefindDir/refind_x64.efi
$InstallDir/$TargetDir/$TargetX64 2> /dev
/null
230 if [[ $?
!= 0 ]] ; then
233 if [[ $ShimSource != "none" ]] ; then
234 TargetShim
="bootx64.efi"
237 if [[ $InstallDrivers == "all" ]] ; then
238 cp -r $RefindDir/drivers_
* $InstallDir/$TargetDir/ 2> /dev
/null
239 cp -r $ThisDir/drivers_
* $InstallDir/$TargetDir/ 2> /dev
/null
243 elif [[ $Platform == 'EFI32' ]] ; then
244 cp $RefindDir/refind_ia32.efi
$InstallDir/$TargetDir/$TargetIA32
245 if [[ $?
!= 0 ]] ; then
249 Refind
="refind_ia32.efi"
250 elif [[ $Platform == 'EFI64' ]] ; then
251 cp $RefindDir/refind_x64.efi
$InstallDir/$TargetDir/$TargetX64
252 if [[ $?
!= 0 ]] ; then
256 Refind
="refind_x64.efi"
258 if [[ $ShimSource != "none" ]] ; then
259 TargetShim
=`basename $ShimSource`
262 if [[ $LocalKeys == 0 ]] ; then
263 echo "Storing copies of rEFInd Secure Boot public keys in $EtcKeysDir"
265 cp $ThisDir/keys
/refind.cer
$EtcKeysDir
266 cp $ThisDir/keys
/refind.crt
$EtcKeysDir
270 echo "Unknown platform! Aborting!"
273 echo "Copied rEFInd binary files"
275 if [[ -d $InstallDir/$TargetDir/icons
]] ; then
276 rm -rf $InstallDir/$TargetDir/icons-backup
&> /dev
/null
277 mv -f $InstallDir/$TargetDir/icons
$InstallDir/$TargetDir/icons-backup
278 echo "Notice: Backed up existing icons directory as icons-backup."
280 cp -r $IconsDir $InstallDir/$TargetDir
281 if [[ $?
!= 0 ]] ; then
284 cp -rf $ThisDir/keys
$InstallDir/$TargetDir/
285 if [[ -f $InstallDir/$TargetDir/refind.conf
]] ; then
286 echo "Existing refind.conf file found; copying sample file as refind.conf-sample"
287 echo "to avoid overwriting your customizations."
289 cp -f $ConfFile $InstallDir/$TargetDir
290 if [[ $?
!= 0 ]] ; then
294 echo "Copying sample configuration file as refind.conf; edit this file to configure"
297 cp -f $ConfFile $InstallDir/$TargetDir/refind.conf
298 if [[ $?
!= 0 ]] ; then
302 if [[ $DeleteRefindDir == 1 ]] ; then
303 echo "Deleting the temporary directory $RefindDir"
306 } # CopyRefindFiles()
308 # Mount the partition the user specified with the --usedefault option
309 MountDefaultTarget
() {
310 InstallDir
=/tmp
/refind_install
312 if [[ $OSName == 'Darwin' ]] ; then
313 mount
-t msdos
$TargetPart $InstallDir
314 elif [[ $OSName == 'Linux' ]] ; then
315 mount
-t vfat
$TargetPart $InstallDir
317 if [[ $?
!= 0 ]] ; then
318 echo "Couldn't mount $TargetPart ! Aborting!"
323 } # MountDefaultTarget()
326 # A series of OS X support functions....
329 # Mount the ESP at /Volumes/ESP or determine its current mount
331 # Sets InstallDir to the ESP mount point
332 # Sets UnmountEsp if we mounted it
334 # Identify the ESP. Note: This returns the FIRST ESP found;
335 # if the system has multiple disks, this could be wrong!
336 Temp
=`diskutil list | grep " EFI "`
337 Esp
=/dev
/`echo $Temp | cut -f 5 -d ' '`
338 # If the ESP is mounted, use its current mount point....
339 Temp
=`df | grep $Esp`
340 InstallDir
=`echo $Temp | cut -f 6 -d ' '`
341 if [[ $InstallDir == '' ]] ; then
342 mkdir
/Volumes
/ESP
&> /dev
/null
343 mount
-t msdos
$Esp /Volumes
/ESP
344 if [[ $?
!= 0 ]] ; then
345 echo "Unable to mount ESP! Aborting!\n"
349 InstallDir
="/Volumes/ESP"
353 # Control the OS X installation.
354 # Sets Problems=1 if problems found during the installation.
356 echo "Installing rEFInd on OS X...."
357 if [[ $TargetDir == "/EFI/BOOT" ]] ; then
359 elif [[ $InstallToEspOnMac == "1" ]] ; then
362 InstallDir
="$RootDir/"
364 echo "Installing rEFInd to the partition mounted at '$InstallDir'"
365 Platform
=`ioreg -l -p IODeviceTree | grep firmware-abi | cut -d "\"" -f 4`
367 if [[ $InstallToEspOnMac == "1" ]] ; then
368 bless
--mount $InstallDir --setBoot --file $InstallDir/$TargetDir/$Refind
369 elif [[ $TargetDir != "/EFI/BOOT" ]] ; then
370 bless
--setBoot --folder $InstallDir/$TargetDir --file $InstallDir/$TargetDir/$Refind
372 if [[ $?
!= 0 ]] ; then
375 if [[ -f /Library
/StartupItems
/rEFItBlesser ||
-d /Library
/StartupItems
/rEFItBlesser
]] ; then
377 echo "/Library/StartupItems/rEFItBlesser found!"
378 echo "This program is part of rEFIt, and will cause rEFInd to fail to work after"
379 echo -n "its first boot. Do you want to remove rEFItBlesser (Y/N)? "
381 if [[ $YesNo == "Y" ||
$YesNo == "y" ]] ; then
382 echo "Deleting /Library/StartupItems/rEFItBlesser..."
383 rm -r /Library
/StartupItems
/rEFItBlesser
385 echo "Not deleting rEFItBlesser."
389 echo "WARNING: If you have an Advanced Format disk, *DO NOT* attempt to check the"
390 echo "bless status with 'bless --info', since this is known to cause disk corruption"
391 echo "on some systems!!"
397 # Now a series of Linux support functions....
400 # Check for evidence that we're running in Secure Boot mode. If so, and if
401 # appropriate options haven't been set, warn the user and offer to abort.
402 # If we're NOT in Secure Boot mode but the user HAS specified the --shim
403 # or --localkeys option, warn the user and offer to abort.
405 # FIXME: Although I checked the presence (and lack thereof) of the
406 # /sys/firmware/efi/vars/SecureBoot* files on my Secure Boot test system
407 # before releasing this script, I've since found that they are at least
408 # sometimes present when Secure Boot is absent. This means that the first
409 # test can produce false alarms. A better test is highly desirable.
411 VarFile
=`ls -d /sys/firmware/efi/vars/SecureBoot* 2> /dev/null`
412 if [[ -n $VarFile && $TargetDir != '/EFI/BOOT' && $ShimSource == "none" ]] ; then
414 echo "CAUTION: Your computer appears to support Secure Boot, but you haven't"
415 echo "specified a valid shim.efi file source. If you've disabled Secure Boot and"
416 echo "intend to leave it disabled, this is fine; but if Secure Boot is active, the"
417 echo "resulting installation won't boot. You can read more about this topic at"
418 echo "http://www.rodsbooks.com/refind/secureboot.html."
420 echo -n "Do you want to proceed with installation (Y/N)? "
422 if [[ $ContYN == "Y" ||
$ContYN == "y" ]] ; then
423 echo "OK; continuing with the installation..."
429 if [[ $ShimSource != "none" && ! -n $VarFile ]] ; then
431 echo "You've specified installing using a shim.efi file, but your computer does not"
432 echo "appear to be running in Secure Boot mode. Although installing in this way"
433 echo "should work, it's unnecessarily complex. You may continue, but unless you"
434 echo "plan to enable Secure Boot, you should consider stopping and omitting the"
435 echo "--shim option. You can read more about this topic at"
436 echo "http://www.rodsbooks.com/refind/secureboot.html."
438 echo -n "Do you want to proceed with installation (Y/N)? "
440 if [[ $ContYN == "Y" ||
$ContYN == "y" ]] ; then
441 echo "OK; continuing with the installation..."
447 if [[ $LocalKeys != 0 && ! -n $VarFile ]] ; then
449 echo "You've specified re-signing your rEFInd binaries with locally-generated keys,"
450 echo "but your computer does not appear to be running in Secure Boot mode. The"
451 echo "keys you generate will be useless unless you enable Secure Boot. You may"
452 echo "proceed with this installation, but before you do so, you may want to read"
453 echo "more about it at http://www.rodsbooks.com/refind/secureboot.html."
455 echo -n "Do you want to proceed with installation (Y/N)? "
457 if [[ $ContYN == "Y" ||
$ContYN == "y" ]] ; then
458 echo "OK; continuing with the installation..."
464 } # CheckSecureBoot()
466 # Check for the presence of locally-generated keys from a previous installation in
467 # $EtcKeysDir (/etc/refind.d/keys). If they're not present, generate them using
470 PrivateKey
=$EtcKeysDir/$LocalKeysBase.key
471 CertKey
=$EtcKeysDir/$LocalKeysBase.crt
472 DerKey
=$EtcKeysDir/$LocalKeysBase.cer
473 OpenSSL
=`which openssl 2> /dev/null`
475 # Do the work only if one or more of the necessary keys is missing
476 # TODO: Technically, we don't need the DerKey; but if it's missing and openssl
477 # is also missing, this will fail. This could be improved.
478 if [[ ! -f $PrivateKey ||
! -f $CertKey ||
! -f $DerKey ]] ; then
479 echo "Generating a fresh set of local keys...."
481 chmod 0700 $EtcKeysDir
482 if [[ ! -x $OpenSSL ]] ; then
483 echo "Can't find openssl, which is required to create your private signing keys!"
487 if [[ -f $PrivateKey ]] ; then
488 echo "Backing up existing $PrivateKey"
489 cp -f $PrivateKey $PrivateKey.backup
2> /dev
/null
491 if [[ -f $CertKey ]] ; then
492 echo "Backing up existing $CertKey"
493 cp -f $CertKey $CertKey.backup
2> /dev
/null
495 if [[ -f $DerKey ]] ; then
496 echo "Backing up existing $DerKey"
497 cp -f $DerKey $DerKey.backup
2> /dev
/null
499 $OpenSSL req
-new -x509 -newkey rsa
:2048 -keyout $PrivateKey -out $CertKey \
500 -nodes -days 3650 -subj "/CN=Locally-generated rEFInd key/"
501 $OpenSSL x509
-in $CertKey -out $DerKey -outform DER
502 chmod 0600 $PrivateKey
504 echo "Using existing local keys...."
508 # Sign a single binary. Requires parameters:
510 # $2 = destination file
511 # Also assumes that the SBSign, PESign, UseSBSign, UsePESign, and various key variables are set
513 # Aborts script on error
515 $SBSign --key $PrivateKey --cert $CertKey --output $2 $1
516 if [[ $?
!= 0 ]] ; then
517 echo "Problem signing the binary $1! Aborting!"
522 # Re-sign the x86-64 binaries with a locally-generated key, First look for appropriate
523 # key files in $EtcKeysDir. If they're present, use them to re-sign the binaries. If
524 # not, try to generate new keys and store them in $EtcKeysDir.
526 SBSign
=`which sbsign 2> /dev/null`
527 echo "Found sbsign at $SBSign"
528 TempDir
="/tmp/refind_local"
529 if [[ ! -x $SBSign ]] ; then
530 echo "Can't find sbsign, which is required to sign rEFInd with your own keys!"
535 mkdir
-p $TempDir/drivers_x64
536 cp $RefindDir/refind.conf-sample
$TempDir 2> /dev
/null
537 cp $ThisDir/refind.conf-sample
$TempDir 2> /dev
/null
538 cp $RefindDir/refind_ia32.efi
$TempDir
539 cp -a $RefindDir/drivers_ia32
$TempDir 2> /dev
/null
540 cp -a $ThisDir/drivers_ia32
$TempDir 2> /dev
/null
541 SignOneBinary
$RefindDir/refind_x64.efi
$TempDir/refind_x64.efi
542 for Driver
in `ls $RefindDir/drivers_x64/*.efi $ThisDir/drivers_x64/*.efi 2> /dev/null` ; do
543 TempName
=`basename $Driver`
544 SignOneBinary
$Driver $TempDir/drivers_x64
/$TempName
550 # Identifies the ESP's location (/boot or /boot/efi, or these locations under
551 # the directory specified by --root); aborts if the ESP isn't mounted at
553 # Sets InstallDir to the ESP mount point.
555 EspLine
=`df $RootDir/boot/efi 2> /dev/null | grep boot/efi`
556 if [[ ! -n $EspLine ]] ; then
557 EspLine
=`df $RootDir/boot | grep boot`
559 InstallDir
=`echo $EspLine | cut -d " " -f 6`
560 if [[ -n $InstallDir ]] ; then
561 EspFilesystem
=`grep $InstallDir /etc/mtab | cut -d " " -f 3`
563 if [[ $EspFilesystem != 'vfat' ]] ; then
564 echo "$RootDir/boot/efi doesn't seem to be on a VFAT filesystem. The ESP must be"
565 echo "mounted at $RootDir/boot or $RootDir/boot/efi and it must be VFAT! Aborting!"
568 echo "ESP was found at $InstallDir using $EspFilesystem"
571 # Uses efibootmgr to add an entry for rEFInd to the EFI's NVRAM.
572 # If this fails, sets Problems=1
575 Efibootmgr
=`which efibootmgr 2> /dev/null`
576 if [[ $Efibootmgr ]] ; then
577 modprobe efivars
&> /dev
/null
578 InstallDisk
=`grep $InstallDir /etc/mtab | cut -d " " -f 1 | cut -c 1-8`
579 PartNum
=`grep $InstallDir /etc/mtab | cut -d " " -f 1 | cut -c 9-10`
580 EntryFilename
=$TargetDir/$Refind
581 EfiEntryFilename
=`echo ${EntryFilename//\//\\\}`
582 EfiEntryFilename2
=`echo ${EfiEntryFilename} | sed s/\\\\\\\\/\\\\\\\\\\\\\\\\/g`
583 ExistingEntry
=`$Efibootmgr -v | grep $EfiEntryFilename2`
584 # NOTE: Below protects against duplicate entries, but only for non-Secure Boot
586 # TODO: Improve to detect & protect against duplicating a Secure Boot entry.
587 if [[ $ExistingEntry && $ShimSource == "none" ]] ; then
588 ExistingEntryBootNum
=`echo $ExistingEntry | cut -c 5-8`
589 FirstBoot
=`$Efibootmgr | grep BootOrder | cut -c 12-15`
590 if [[ $ExistingEntryBootNum != $FirstBoot ]] ; then
591 echo "An existing rEFInd boot entry exists, but isn't set as the default boot"
592 echo "manager. The boot order is being adjusted to make rEFInd the default boot"
593 echo "manager. If this is NOT what you want, you should use efibootmgr to"
594 echo "manually adjust your EFI's boot order."
595 $Efibootmgr -b $ExistingEntryBootNum -B &> /dev
/null
601 if [[ $InstallIt == "1" ]] ; then
602 echo "Installing it!"
603 $Efibootmgr -c -l $EfiEntryFilename -L rEFInd
-d $InstallDisk -p $PartNum &> /dev
/null
604 if [[ $?
!= 0 ]] ; then
613 if [[ $EfibootmgrProblems ]] ; then
615 echo "ALERT: There were problems running the efibootmgr program! You may need to"
616 echo "rename the $Refind binary to the default name (EFI/boot/bootx64.efi"
617 echo "on x86-64 systems or EFI/boot/bootia32.efi on x86 systems) to have it run!"
622 # Create a minimal/sample refind_linux.conf file in /boot.
623 GenerateRefindLinuxConf
() {
624 if [[ ! -f $RLConfFile ]] ; then
625 if [[ -f "$RootDir/etc/default/grub" ]] ; then
626 # We want the default options used by the distribution, stored here....
627 source "$RootDir/etc/default/grub"
629 RootFS
=`df $RootDir | grep dev | cut -f 1 -d " "`
630 StartOfDevname
=`echo $RootFS | cut -b 1-7`
631 if [[ $StartOfDevname == "/dev/sd" ||
$StartOfDevName == "/dev/hd" ]] ; then
632 # Identify root filesystem by UUID rather than by device node, if possible
633 Uuid
=`blkid -o export $RootFS 2> /dev/null | grep UUID=`
634 if [[ -n $Uuid ]] ; then
638 DefaultOptions
="$GRUB_CMDLINE_LINUX $GRUB_CMDLINE_LINUX_DEFAULT"
639 echo "\"Boot with standard options\" \"ro root=$RootFS $DefaultOptions \"" > $RLConfFile
640 echo "\"Boot to single-user mode\" \"ro root=$RootFS $DefaultOptions single\"" >> $RLConfFile
641 echo "\"Boot with minimal options\" \"ro root=$RootFS\"" >> $RLConfFile
645 # Controls rEFInd installation under Linux.
646 # Sets Problems=1 if something goes wrong.
648 echo "Installing rEFInd on Linux...."
649 if [[ $TargetDir == "/EFI/BOOT" ]] ; then
655 if [[ $CpuType == 'x86_64' ]] ; then
657 if [[ $LocalKeys == 1 ]] ; then
660 elif [[ $CpuType == 'i386' ||
$CpuType == 'i486' ||
$CpuType == 'i586' ||
$CpuType == 'i686' ]] ; then
661 if [[ $ShimSource != "none" && $TargetDir != "/BOOT/EFI" ]] ; then
663 echo "CAUTION: Neither rEFInd nor shim currently supports 32-bit systems, so you"
664 echo "should not use the --shim option to install on such systems. Aborting!"
670 echo "CAUTION: This Linux installation uses a 32-bit kernel. 32-bit EFI-based"
671 echo "computers are VERY RARE. If you've installed a 32-bit version of Linux"
672 echo "on a 64-bit computer, you should manually install the 64-bit version of"
673 echo "rEFInd. If you're installing on a Mac, you should do so from OS X. If"
674 echo "you're positive you want to continue with this installation, answer 'Y'"
675 echo "to the following question..."
677 echo -n "Are you sure you want to continue (Y/N)? "
679 if [[ $ContYN == "Y" ||
$ContYN == "y" ]] ; then
680 echo "OK; continuing with the installation..."
685 echo "Unknown CPU type '$CpuType'; aborting!"
690 if [[ $TargetDir != "/EFI/BOOT" ]] ; then
692 GenerateRefindLinuxConf
697 # The main part of the script. Sets a few environment variables,
698 # performs a few startup checks, and then calls functions to
699 # install under OS X or Linux, depending on the detected platform.
704 ThisDir
="$( cd -P "$
( dirname "${BASH_SOURCE[0]}" )" && pwd )"
705 RefindDir
="$ThisDir/refind"
706 ThisScript
="$ThisDir/`basename $0`"
707 if [[ `whoami` != "root" ]] ; then
708 echo "Not running as root; attempting to elevate privileges via sudo...."
709 sudo
$ThisScript "$@"
710 if [[ $?
!= 0 ]] ; then
711 echo "This script must be run as root (or using sudo). Exiting!"
718 if [[ $OSName == 'Darwin' ]] ; then
719 if [[ $ShimSource != "none" ]] ; then
720 echo "The --shim option is not supported on OS X! Exiting!"
723 if [[ $LocalKeys != 0 ]] ; then
724 echo "The --localkeys option is not supported on OS X! Exiting!"
728 elif [[ $OSName == 'Linux' ]] ; then
731 echo "Running on unknown OS; aborting!"
734 if [[ $Problems ]] ; then
737 echo "Installation has completed, but problems were detected. Review the output for"
738 echo "error messages and take corrective measures as necessary. You may need to"
739 echo "re-run this script or install manually before rEFInd will work."
743 echo "Installation has completed successfully."
747 if [[ $UnmountEsp ]] ; then
748 echo "Unmounting install dir"
752 if [[ $InstallDir == /tmp
/refind_install
]] ; then