]> code.delx.au - refind/blobdiff - mkrlconf
Fixed bug that caused mvrefind to fail to move bootmgfw.efi in some
[refind] / mkrlconf
index f6369c7a70bdf71dcfbe221aed471668b45b7cd2..bbc40374aaa3a9dc0bce361226c0ce90c9363dac 100755 (executable)
--- a/mkrlconf
+++ b/mkrlconf
@@ -6,7 +6,9 @@
 # copyright (c) 2012-2015 by Roderick W. Smith
 #
 # This program is licensed under the terms of the GNU GPL, version 3,
-# a copy of which should be distributed with this program.
+# or (at your option) any later version.
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
 
 # Usage:
 #
 
 # Revision history:
 #
-#  0.9.3 -- Renamed from mkrlconf.sh to mkrlconf
-#  0.9.0 -- Added check for OS type, to keep from running pointlessly on OS X
-#  0.7.7 -- Fixed bug that caused stray PARTUUID= and line breaks in generated file
-#  0.5.1 -- Initial release
+# 0.10.1  -- Improve extraction of kernel options from /proc/cmdline
+# 0.10.0  -- Renamed from mkrlconf.sh to mkrlconf; changed to get $DefaultOptions
+#            from /proc/cmdline rather than from GRUB
+# 0.9.0   -- Added check for OS type, to keep from running pointlessly on OS X
+# 0.7.7   -- Fixed bug that caused stray PARTUUID= and line breaks in generated file
+# 0.5.1   -- Initial release
 #
 # Note: mkrlconf version numbers match those of the rEFInd package
 # with which they first appeared.
 RLConfFile="/boot/refind_linux.conf"
 
 if [[ `uname -s` != "Linux" ]] ; then
-   echo "This script is intended to be run from Linux. Aborting!"
-   echo ""
-   exit 1
+    echo "This script is intended to be run from Linux. Aborting!"
+    echo ""
+    exit 1
 fi
 
 if [[ ! -f $RLConfFile || $1 == "--force" ]] ; then
-   if [[ -f /etc/default/grub ]] ; then
-      # We want the default options used by the distribution, stored here....
-      source /etc/default/grub
-   fi
-   RootFS=`df / | 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
-      Uuid=`blkid -o export -s UUID $RootFS 2> /dev/null | grep UUID=`
-      if [[ -n $Uuid ]] ; then
-         RootFS=$Uuid
-      fi
-   fi
-   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
+    RootFS=`df / | 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
+        Uuid=`blkid -o export -s UUID $RootFS 2> /dev/null | grep UUID=`
+        if [[ -n $Uuid ]] ; then
+            RootFS=$Uuid
+        fi
+    fi
+    FirstCmdlineOption=`cat /proc/cmdline | cut -d ' ' -f 1`
+    if [[ "$FirstCmdlineOption" =~ (vmlinuz|bzImage|kernel) ]] ; then
+        DefaultOptions=`cat /proc/cmdline | cut -d ' ' -f 2- | sed 's/\S*initrd=\S*//g' | sed 's/ *$//' | sed 's/^ *//'`
+    else
+        DefaultOptions=`cat /proc/cmdline | sed 's/\S*initrd=\S*//g' | sed 's/ *$//' | sed 's/^ *//'`
+    fi
+    echo "\"Boot with standard options\"  \"$DefaultOptions\"" > $RLConfFile
+    echo "\"Boot to single-user mode\"    \"$DefaultOptions single\"" >> $RLConfFile
+    echo "\"Boot with minimal options\"   \"ro root=$RootFS\"" >> $RLConfFile
 else
-   echo "Existing $RLConfFile found! Not overwriting!"
-   echo "To force overwriting, pass the --force option."
-   echo ""
+    echo "Existing $RLConfFile found! Not overwriting!"
+    echo "To force overwriting, pass the --force option."
+    echo ""
 fi