X-Git-Url: https://code.delx.au/refind/blobdiff_plain/bfe73b5fa6321273b7cf86b02a3c2d114a167bc9..480ba418c97ece5557ac0efc5dc189ff19fb8b8f:/mkrlconf diff --git a/mkrlconf b/mkrlconf index f6369c7..bbc4037 100755 --- 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 . # Usage: # @@ -18,10 +20,12 @@ # 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. @@ -29,31 +33,32 @@ 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