]> code.delx.au - refind/commitdiff
Bug fix & new driver-installation behavior in install.sh.
authorsrs5694 <srs5694@users.sourceforge.net>
Thu, 13 Dec 2012 06:41:31 +0000 (01:41 -0500)
committersrs5694 <srs5694@users.sourceforge.net>
Thu, 13 Dec 2012 06:41:31 +0000 (01:41 -0500)
docs/refind/installing.html
install.sh

index 31b5d70fcb9ef101872c7e083d966495dadebb89..7f2f945b07aeff7948f3ecf7a78dffdcebf5dfb9 100644 (file)
@@ -15,7 +15,7 @@
 href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
 
 <p>Originally written: 3/14/2012; last Web page update:
-12/12/2012, referencing rEFInd 0.5.1.1</p>
+12/13/2012, referencing rEFInd 0.5.1.2</p>
 
 
 <p>I'm a technical writer and consultant specializing in Linux technologies. This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!</p>
@@ -200,20 +200,20 @@ Installation has completed successfully.</pre>
     <tt>install.sh</tt> creates this file and populates it with a couple of
     sample entries. If <tt>/boot</tt> is on a FAT partition (or HFS+ on a
     Mac), or if it's on an ext2fs, ext3fs, ReiserFS, or HFS+ partition and
-    you install an appropriate driver (for instance by passing
-    <tt>--drivers</tt> to the script), the result is that rEFInd will
-    detect your kernel and will probably boot it correctly. Some systems
-    will require manual tweaking to <tt>refind_linux.conf</tt>,
-    though&mdash;for instance, to add <tt>dolvm</tt> to the boot options on
-    Gentoo systems that use LVM.</li>
+    you install an appropriate driver (as <tt>install.sh</tt> does
+    automatically when run from your working Linux installation), the
+    result is that rEFInd will detect your kernel and will probably boot it
+    correctly. Some systems will require manual tweaking to
+    <tt>refind_linux.conf</tt>, though&mdash;for instance, to add
+    <tt>dolvm</tt> to the boot options on Gentoo systems that use LVM.</li>
 
 </ul>
 
 <p>In addition to these quirks, you should be aware of some options that <tt>install.sh</tt> supports to enable you to customize your installation in various ways. The syntax for <tt>install.sh</tt> is as follows:</p>
 
 <pre class="listing">
-install.sh [--esp | --usedefault <tt class="variable">device-file</tt>] [--drivers] [--shim <tt class="variable">shim-filename</tt>] \
-           [--localkeys]
+install.sh [--esp | --usedefault <tt class="variable">device-file</tt>] [--nodrivers | --alldrivers] \
+           [--shim <tt class="variable">shim-filename</tt>] [--localkeys]
 </pre>
 
 <p>The details of the options are summarized in <a href="#table1">Table 1.</a> Using some of these options in unusual conditions can generate warnings and prompts to confirm your actions. In particular, using <tt>--shim</tt> or <tt>--localkeys</tt> when you're <i>not</i> booted in Secure Boot mode, or failing to use <tt>--shim</tt> when you <i>are</i> booted in Secure Boot mode, will generate a query and a request to confirm your installation. Consult the <a href="secureboot.html">Managing Secure Boot</a> page for more on this topic.</p>
@@ -232,8 +232,12 @@ install.sh [--esp | --usedefault <tt class="variable">device-file</tt>] [--drive
    <td>You can install rEFInd to a disk using the default/fallback filename of <tt>EFI/BOOT/bootx64.efi</tt> (and <tt>EFI/BOOT/bootia32.efi</tt>, if the 32-bit build is available) using this option. The <tt class="variable">device-file</tt> should be an <i>unmounted</i> ESP, or at least a FAT partition, as in <tt>--usedefault /dev/sdc1</tt>. Your computer's NVRAM entries will <i>not</i> be modified when installing in this way. The intent is that you can create a bootable USB flash drive or install rEFInd on a computer that tends to "forget" its NVRAM settings with this option. This option is mutually exclusive with <tt>--esp</tt>.</td>
 </tr>
 <tr>
-   <td><tt>--drivers</tt></td>
-   <td>Ordinarily <tt>install.sh</tt> does not install drivers; but when you specify this option, it does; it copies all the driver files for your architecture. You may want to remove unused driver files after you use this option, especially if your computer uses Secure Boot.</td>
+   <td><tt>--nodrivers</tt></td>
+   <td>Ordinarily <tt>install.sh</tt> attempts to install the driver required to read <tt>/boot</tt> on Linux. This attempt works only if you're using ext2fs, ext3fs, or ReiserFS on the relevant partition. If you want to forego this driver installation, pass the <tt>--nodrivers</tt> option. This option is the default on OS X or when you use <tt>--usedefault</tt>.</td>
+</tr>
+<tr>
+   <td><tt>--alldrivers</tt></td>
+   <td>When you specify this option, <tt>install.sh</tt> copies <i>all</i> the driver files for your architecture. You may want to remove unused driver files after you use this option, especially if your computer uses Secure Boot.</td>
 </tr>
 <tr>
    <td><tt>--shim <tt class="variable">shim-filename</tt></tt></td>
index 6040c23734877ff4c69e1762eceff31d004507e7..425da293b47df4787533a1ad85a188c9b226753c 100755 (executable)
@@ -12,7 +12,9 @@
 #    "--usedefault {devicefile}" to install as default
 #           (/EFI/BOOT/BOOTX64.EFI and similar) to the specified device
 #           (/dev/sdd1 or whatever) without registering with the NVRAM.
-#    "--drivers" to install drivers along with regular files
+#    "--alldrivers" to install all drivers along with regular files
+#    "--nodrivers" to suppress driver installation (default in Linux is
+#           driver used on /boot; --nodrivers is OS X default)
 #    "--shim {shimfile}" to install a shim.efi file for Secure Boot
 #    "--localkeys" to re-sign x86-64 binaries with a locally-generated key
 #
 #
 # Revision history:
 #
+# 0.5.2   -- Changed --drivers to --alldrivers and added --nodrivers option;
+#            changed default driver installation behavior in Linux to install
+#            the driver needed to read /boot
+# 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
 #            in /boot
@@ -44,6 +50,7 @@
 TargetDir=/EFI/refind
 EtcKeysDir=/etc/refind.d/keys
 LocalKeysBase="refind_local"
+RLConfFile="/boot/refind_linux.conf"
 ShimSource="none"
 TargetX64="refind_x64.efi"
 TargetIA32="refind_ia32.efi"
@@ -56,7 +63,12 @@ DeleteRefindDir=0
 
 GetParams() {
    InstallToEspOnMac=0
-   InstallDrivers=0
+   if [[ $OSName == "Linux" ]] ; then
+      # Install the driver required to read /boot, if it's available
+      InstallDrivers="boot"
+   else
+      InstallDrivers="none"
+   fi
    while [[ $# -gt 0 ]]; do
       case $1 in
          --esp | --ESP) InstallToEspOnMac=1
@@ -72,9 +84,11 @@ GetParams() {
          --shim) ShimSource=$2
               shift
               ;;
-         --drivers) InstallDrivers=1
+         --drivers | --alldrivers) InstallDrivers="all"
               ;;
-         * ) echo "Usage: $0 [--esp | --usedefault {device-file}] [--drivers] "
+         --nodrivers) InstallDrivers="none"
+              ;;
+         * ) echo "Usage: $0 [--esp | --usedefault {device-file}] [--nodrivers | --alldrivers] "
              echo "                [--shim {shim-filename}] [--localkeys]"
              exit 1
       esac
@@ -157,6 +171,35 @@ CopyKeys() {
    fi
 } # CopyKeys()
 
+# Copy drivers from $RefindDir/drivers_$1 to $InstallDir/$TargetDir/drivers_$1,
+# honoring the $InstallDrivers condition. Must be passed a suitable
+# architecture code (ia32 or x64).
+CopyDrivers() {
+   if [[ $InstallDrivers == "all" ]] ; then
+      mkdir -p $InstallDir/$TargetDir/drivers_$1
+      cp $RefindDir/drivers_$1/*_$1.efi $InstallDir/$TargetDir/drivers_$1/ 2> /dev/null
+      cp $ThisDir/drivers_$1/*_$1.efi $InstallDir/$TargetDir/drivers_$1/ 2> /dev/null
+   elif [[ $InstallDrivers == "boot" && -x `which blkid` ]] ; then
+      BootPart=`df /boot | grep dev | cut -f 1 -d " "`
+      BootFS=`blkid -o export $BootPart 2> /dev/null | grep TYPE= | cut -f 2 -d =`
+      DriverType=""
+      case $BootFS in
+         ext2 | ext3) DriverType="ext2"
+              ;;
+         reiserfs) DriverType="reiserfs"
+              ;;
+         hfsplus) DriverType="hfs"
+              ;;
+      esac
+      if [[ -n $BootFS ]] ; then
+         echo "Installing driver for $BootFS (${DriverType}_$1.efi)"
+         mkdir -p $InstallDir/$TargetDir/drivers_$1
+         cp $RefindDir/drivers_$1/${DriverType}_$1.efi $InstallDir/$TargetDir/drivers_$1/ 2> /dev/null
+         cp $ThisDir/drivers_$1/${DriverType}_$1.efi $InstallDir/$TargetDir/drivers_$1/ 2> /dev/null
+      fi
+   fi
+}
+
 # Copy the rEFInd files to the ESP or OS X root partition.
 # Sets Problems=1 if any critical commands fail.
 CopyRefindFiles() {
@@ -174,7 +217,7 @@ CopyRefindFiles() {
          TargetShim="bootx64.efi"
          CopyShimFiles
       fi
-      if [[ $InstallDrivers == 1 ]] ; then
+      if [[ $InstallDrivers == "all" ]] ; then
          cp -r $RefindDir/drivers_* $InstallDir/$TargetDir/ 2> /dev/null
          cp -r $ThisDir/drivers_* $InstallDir/$TargetDir/ 2> /dev/null
       fi
@@ -185,22 +228,14 @@ CopyRefindFiles() {
       if [[ $? != 0 ]] ; then
          Problems=1
       fi
-      if [[ $InstallDrivers == 1 ]] ; then
-         mkdir -p $InstallDir/$TargetDir/drivers_ia32
-         cp $RefindDir/drivers_ia32/*_ia32.efi $InstallDir/$TargetDir/drivers_ia32/ 2> /dev/null
-         cp $ThisDir/drivers_ia32/*_ia32.efi $InstallDir/$TargetDir/drivers_ia32/ 2> /dev/null
-      fi
+      CopyDrivers ia32
       Refind="refind_ia32.efi"
    elif [[ $Platform == 'EFI64' ]] ; then
       cp $RefindDir/refind_x64.efi $InstallDir/$TargetDir/$TargetX64
       if [[ $? != 0 ]] ; then
          Problems=1
       fi
-      if [[ $InstallDrivers == 1 ]] ; then
-         mkdir -p $InstallDir/$TargetDir/drivers_x64
-         cp $RefindDir/drivers_x64/*_x64.efi $InstallDir/$TargetDir/drivers_x64/ 2> /dev/null
-         cp $ThisDir/drivers_x64/*_x64.efi $InstallDir/$TargetDir/drivers_x64/ 2> /dev/null
-      fi
+      CopyDrivers x64
       Refind="refind_x64.efi"
       CopyKeys
       if [[ $ShimSource != "none" ]] ; then
@@ -556,7 +591,7 @@ AddBootEntry() {
 
 # Create a minimal/sample refind_linux.conf file in /boot.
 GenerateRefindLinuxConf() {
-   if [[ ! -f /boot/refind_linux.conf ]] ; then
+   if [[ ! -f $RLConfFile ]] ; then
       if [[ -f /etc/default/grub ]] ; then
          # We want the default options used by the distribution, stored here....
          source /etc/default/grub
@@ -633,8 +668,8 @@ InstallOnLinux() {
 # install under OS X or Linux, depending on the detected platform.
 #
 
-GetParams $@
 OSName=`uname -s`
+GetParams $@
 ThisDir="$( cd -P "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
 RefindDir="$ThisDir/refind"
 ThisScript="$ThisDir/`basename $0`"