All pastes #960854 Raw Edit

clueless

public text v1 · immutable
#960854 ·published 2008-03-28 14:42 UTC
rendered paste body
Command: cat /usr/sbin/update-grub#!/bin/bash## Insert a list of installed kernels in a grub config file#   Copyright 2001 Wichert Akkerman <wichert@linux.com>## This file is free software; you can redistribute it and/or modify it# under the terms of the GNU General Public License as published by# the Free Software Foundation; either version 2 of the License, or# (at your option) any later version.## This program is distributed in the hope that it will be useful, but# WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU# General Public License for more details.## You should have received a copy of the GNU General Public License# along with this program; if not, write to the Free Software# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.## Contributors:#	Jason Thomas <jason@debian.org>#	David B.Harris <dbarclay10@yahoo.ca>#	Marc Haber <mh@zugschlus.de>#	Crispin Flowerday <crispin@zeus.com># Abort on errorsset -ehost_os=`uname -s | tr '[A-Z]' '[a-z]'`abort() {	message=$@	echo >&2	echo -e "$message" >&2	echo >&2	exit 1}find_grub_dir (){	echo  -n "Searching for GRUB installation directory ... " >&2	for d in $grub_dirs ; do		if [ -d "$d" ] ; then			grub_dir="$d"			break		fi	done		if [ -z "$grub_dir" ] ; then		abort "No GRUB directory found.\n To create a template run 'mkdir /boot/grub' first.\n To install grub, install it manually or try the 'grub-install' command.\n ### Warning, grub-install is used to change your MBR. ###"	else		echo "found: $grub_dir" >&2	fi	echo $grub_dir}find_device (){	mount_point=$1	# Autodetect current root device	device=	if [ -f /etc/fstab ] ; then		while read DEV MNT FOO; do			if `echo "$DEV" | grep -q "^#"`; then				continue			fi			if [ "$MNT" = "$mount_point" ]; then				device="$DEV";			fi		done < /etc/fstab	fi	if [ -n "$device" ] ; then		case "$device" in			LABEL=* | UUID=*)				device=`readlink -f "$(findfs $device)"`			;;			*)				device=`readlink -f "$device"`			;;		esac	fi	echo $device}find_root_device (){	device=$(find_device "/")	if [ -z "$device" ]; then		echo "Cannot determine root device.  Assuming /dev/hda1" >&2		echo "This error is probably caused by an invalid /etc/fstab" >&2		device=/dev/hda1	fi	echo $device}# Usage: convert_raid1 os_device# Checks if os_device is a software raid1.# If so, converts to first physical device in array.convert_raid1 (){    case $1 in        /dev/md[0-9])            : ;; # Continue        *)            return 1 ;;    esac    [ -x /sbin/mdadm ] || return 1    # Check that the raid device is raid1    raidlevel=$(mdadm -D -b $1 | grep "^ARRAY" | \            sed "s/^.*level=//" | cut -d" " -f1)    [ "$raidlevel" = "raid1" ] || return 1        # Take only the first device that makes up the raid    raiddev=$(mdadm -D $1 | grep -A1 "Number" | grep "dev" \                          | sed "s/^.*\(\/dev\/.*\)$/\1/")    [ -n "$raiddev" ] || return 1    echo $raiddev    return 0}# Usage: convert os_device# Convert an OS device to the corresponding GRUB drive.# This part is OS-specific.convert () {    # First, check if the device file exists.    if test -e "$1"; then		:    else		echo "$1: Not found or not a block device." 1>&2		exit 1    fi	host_os=`uname -s | tr '[[:upper:]]' '[[:lower:]]'`    # Break the device name into the disk part and the partition part.    case "$host_os" in    linux)		tmp_disk=`echo "$1" | sed -e 's%\([sh]d[[:lower:]]\)[0-9]*$%\1%' \				  -e 's%\(fd[0-9]*\)$%\1%' \				  -e 's%/part[0-9]*$%/disc%' \				  -e 's%\(c[0-7]d[0-9]*\).*$%\1%'`		tmp_part=`echo "$1" | sed -e 's%.*/[sh]d[[:lower:]]\([0-9]*\)$%\1%' \				  -e 's%.*/fd[0-9]*$%%' \				  -e 's%.*/floppy/[0-9]*$%%' \				  -e 's%.*/\(disc\|part\([0-9]*\)\)$%\2%' \				  -e 's%.*c[0-7]d[0-9]*p*%%'`	;;    gnu)		tmp_disk=`echo "$1" | sed 's%\([sh]d[0-9]*\).*%\1%'`		tmp_part=`echo "$1" | sed "s%$tmp_disk%%"` ;;    freebsd|*/kfreebsd)		tmp_disk=`echo "$1" | sed 's%r\{0,1\}\([saw]d[0-9]*\).*$%\1%' \			    | sed 's%r\{0,1\}\(da[0-9]*\).*$%\1%'`		tmp_part=`echo "$1" \	    		| sed "s%.*/r\{0,1\}[saw]d[0-9]\(s[0-9]*[a-h]\)%\1%" \       	    	| sed "s%.*/r\{0,1\}da[0-9]\(s[0-9]*[a-h]\)%\1%"`	;;    netbsd|*/knetbsd)		tmp_disk=`echo "$1" | sed 's%r\{0,1\}\([sw]d[0-9]*\).*$%r\1d%' \	    		| sed 's%r\{0,1\}\(fd[0-9]*\).*$%r\1a%'`		tmp_part=`echo "$1" \	    		| sed "s%.*/r\{0,1\}[sw]d[0-9]\([abe-p]\)%\1%"`	;;    *)		echo "update-grub does not support your OS yet." 1>&2		exit 1 ;;    esac    # Get the drive name.    tmp_drive=`grep -v '^#' $device_map | grep "$tmp_disk *$" \			| sed 's%.*\(([hf]d[0-9][a-z0-9,]*)\).*%\1%'`    # If not found, print an error message and exit.    if test "x$tmp_drive" = x; then		echo "$1 does not have any corresponding BIOS drive." 1>&2		exit 1    fi    if test "x$tmp_part" != x; then		# If a partition is specified, we need to translate it into the		# GRUB's syntax.		case "$host_os" in		linux)	    	  echo "$tmp_drive" | sed "s%)$%,`expr $tmp_part - 1`)%" ;;		gnu)	    	  if echo $tmp_part | grep "^s" >/dev/null; then				tmp_pc_slice=`echo $tmp_part \		    		| sed "s%s\([0-9]*\)[a-z]*$%\1%"`				tmp_drive=`echo "$tmp_drive" \		    		| sed "s%)%,\`expr "$tmp_pc_slice" - 1\`)%"`	    	  fi	    	  if echo $tmp_part | grep "[a-z]$" >/dev/null; then				tmp_bsd_partition=`echo "$tmp_part" \		    		| sed "s%[^a-z]*\([a-z]\)$%\1%"`				tmp_drive=`echo "$tmp_drive" \		    		| sed "s%)%,$tmp_bsd_partition)%"`	    	  fi	    	  echo "$tmp_drive" ;;		freebsd|*/kfreebsd)	    	  if echo $tmp_part | grep "^s" >/dev/null; then				tmp_pc_slice=`echo $tmp_part \		    		| sed "s%s\([0-9]*\)[a-h]*$%\1%"`				tmp_drive=`echo "$tmp_drive" \		    		| sed "s%)%,\`expr "$tmp_pc_slice" - 1\`)%"`	    	  fi	    	  if echo $tmp_part | grep "[a-h]$" >/dev/null; then				tmp_bsd_partition=`echo "$tmp_part" \		    		| sed "s%s\{0,1\}[0-9]*\([a-h]\)$%\1%"`				tmp_drive=`echo "$tmp_drive" \		    		| sed "s%)%,$tmp_bsd_partition)%"`	    	  fi	    	  echo "$tmp_drive" ;;		netbsd|*/knetbsd)	    	  if echo $tmp_part | grep "^[abe-p]$" >/dev/null; then				tmp_bsd_partition=`echo "$tmp_part" \		    		| sed "s%\([a-p]\)$%\1%"`				tmp_drive=`echo "$tmp_drive" \		    		| sed "s%)%,$tmp_bsd_partition)%"`	    	  fi	    	  echo "$tmp_drive" ;;		esac    else		# If no partition is specified, just print the drive name.		echo "$tmp_drive"    fi}# Usage: convert_default os_device# Convert an OS device to the corresponding GRUB drive.# Calls OS-specific convert, and returns a default of# (hd0,0) if anything goes wrongconvert_default () {	# Check if device is software raid1 array	if tmp_dev=$(convert_raid1 $1 2>/dev/null) ; then		: # Use device returned by convert_raid1	else		tmp_dev=$1	fi	if tmp=$(convert $tmp_dev 2>/dev/null) ; then		echo $tmp	else		echo "(hd0,0)"	fi}## Configuration Options# directory's to look for the grub installation and the menu filegrub_dirs="/boot/grub /boot/boot/grub"# The grub installation directorygrub_dir=$(find_grub_dir)# Full path to the menu.lstmenu_file_basename=menu.lstmenu_file=$grub_dir/$menu_file_basename# Full path to the default filedefault_file_basename=defaultdefault_file=$grub_dir/$default_file_basename# the device for the / filesystemroot_device=$(find_root_device)# the device for the /boot filesystemboot_device=$(find_device "/boot")# Full path to the device.mapdevice_map=$grub_dir/device.map# Default kernel options, overidden by the kopt statement in the menufile.kopt="root=$root_device ro"# Titletitle="Debian GNU/`uname -s | sed -e s,GNU/,,g`"# should update-grub remember the default entryupdatedefaultentry="false"# Drive(in GRUB terms) where the kernel is located. Overridden by the# kopt statement in menufile.# if we don't have a device.map then we can't use the convert function.if test -f "$device_map" ; then	if test -z "$boot_device" ; then		grub_root_device=$(convert_default "$root_device")	else		grub_root_device=$(convert_default "$boot_device")	fielse	grub_root_device="(hd0,0)"fi# should grub create the alternative boot options in the menu	alternative="true"# should grub lock the alternative boot options in the menu	lockalternative="false"# additional options to use with the default boot option, but not with the# alternatives	defoptions=""# should grub lock the old kernels	lockold="false"# Xen hypervisor options to use with the default Xen boot option	xenhopt=""# Xen Linux kernel options to use with the default Xen boot option	xenkopt="console=tty0"# options to use with the alternative boot options	altoptions="(single-user mode) single"# controls howmany kernels are listed in the config file,# this does not include the alternative kernels	howmany="all"# should grub create a memtest86 entry	memtest86="true"# stores the command line arguments	command_line_arguments=$1# read user configurationif test -f "/etc/default/grub" ; then    . /etc/default/grubfi# Default options to use in a new config file. This will only be used if $menu_file# doesn't already exist. Only edit the lines between the two "EOF"s. The others are# part of the script.newtemplate=$(tempfile)cat > "$newtemplate" <<EOF# $menu_file_basename - See: grub(8), info grub, update-grub(8)#            grub-install(8), grub-floppy(8),#            grub-md5-crypt, /usr/share/doc/grub#            and /usr/share/doc/grub-doc/.## default num# Set the default entry to the entry number NUM. Numbering starts from 0, and# the entry number 0 is the default if the command is not used.## You can specify 'saved' instead of a number. In this case, the default entry# is the entry saved with the command 'savedefault'.# WARNING: If you are using dmraid do not change this entry to 'saved' or your# array will desync and will not let you boot your system.default		0## timeout sec# Set a timeout, in SEC seconds, before automatically booting the default entry# (normally the first entry defined).timeout		5# Pretty colourscolor cyan/blue white/blue## password ['--md5'] passwd# If used in the first section of a menu file, disable all interactive editing# control (menu entry editor and command-line)  and entries protected by the# command 'lock'# e.g. password topsecret#      password --md5 \$1\$gLhU0/\$aW78kHK1QfV3P2b2znUoe/# password topsecret## examples## title		Windows 95/98/NT/2000# root		(hd0,0)# makeactive# chainloader	+1## title		Linux# root		(hd0,1)# kernel	/vmlinuz root=/dev/hda2 ro### Put static boot stanzas before and/or after AUTOMAGIC KERNEL LISTEOF## End Configuration Optionsecho -n "Searching for default file ... " >&2if [ -f "$default_file" ] ; then  echo "found: $default_file" >&2else  echo "Generating $default_file file and setting the default boot entry to 0" >&2  grub-set-default 0fi# Make sure we use the standard sorting orderLC_COLLATE=C# Magic markers we usestart="### BEGIN AUTOMAGIC KERNELS LIST"end="### END DEBIAN AUTOMAGIC KERNELS LIST"startopt="## ## Start Default Options ##"endopt="## ## End Default Options ##"# Extract options from config fileExtractMenuOpt(){	opt=$1	sed -ne "/^$start\$/,/^$end\$/ {		/^$startopt\$/,/^$endopt\$/ {			/^# $opt=/ {				s/^# $opt=\(.*\)\$/\1/				p			}		}	}" $menu}GetMenuOpts(){	opt=$1	sed -ne "/^$start\$/,/^$end\$/ {		/^$startopt\$/,/^$endopt\$/ {			/^# $opt=/ {				p			}		}	}" $menu}ExtractMenuOpts(){	opt=$1	GetMenuOpts $opt | sed "s/^# $opt=\(.*\)\$/\1=\"\2\"/"}GetMenuOpt(){	opt=$1	value=$2	[ -z "$(GetMenuOpts "$opt")" ] || value=$(ExtractMenuOpt "$opt")	echo $value}# Compares two version strings A and B# Returns -1 if A<B#          0 if A==B#          1 if A>B# This compares version numbers of the form# 2.4.14.2 > 2.4.14# 2.4.14random = 2.4.14-random > 2.4.14-ac10 > 2.4.14 > 2.4.14-pre2 > # 2.4.14-pre1 > 2.4.13-ac99CompareVersions(){      	#Changes the line something-x.y.z into somthing-x.y.z.q	#This is to ensure that kernels with a .q is treated as higher than the ones without                       #First a space is put after the version number        v1=$(echo $1 | sed -e 's!^\(.*-\([0-9]\+\.\)\{2,3\}[0-9]\+\)\(.*\)!\1 \3!g')	v2=$(echo $2 | sed -e 's!^\(.*-\([0-9]\+\.\)\{2,3\}[0-9]\+\)\(.*\)!\1 \3!g')	#If the version number only has 3 digits then put in another .0        v1=$(echo $v1 | sed -e 's!^\(.*-\([0-9]\+\.\)\{2\}[0-9]\+\)\( .*\|$\)!\1.0 \3!g')        v2=$(echo $v2 | sed -e 's!^\(.*-\([0-9]\+\.\)\{2\}[0-9]\+\)\( .*\|$\)!\1.0 \3!g')          	# Then split the version number and remove any '.' 's or dashes	v1=$(echo $v1 | sed -e 's![-\.]\+! !g' -e 's!\([0-9]\)\([[:alpha:]]\)!\1 \2!')	v2=$(echo $v2 | sed -e 's![-\.]\+! !g' -e 's!\([0-9]\)\([[:alpha:]]\)!\1 \2!')	# we weight different kernel suffixes here	# ac   = 50	# pre  = -50	# rc   = -40	# test = -60	# others are given 99	v1=$(echo $v1 | sed -e 's! k7! 786 !g' -e 's! ac! 50 !g' -e 's! rc! -40 !g' -e 's! pre! -50 !g' -e 's! test! -60 !g' -e 's![^-0-9 ]\+!99!g')	v2=$(echo $v2 | sed -e 's! k7! 786 !g' -e 's! ac! 50 !g' -e 's! rc! -40 !g' -e 's! pre! -50 !g' -e 's! test! -60 !g' -e 's![^-0-9 ]\+!99!g')	result=0; v1finished=0; v2finished=0;	while [ $result -eq 0 ] && [ $v1finished -eq 0 ] && [ $v2finished -eq 0 ];	do		if [ "$v1" = "" ]; then			v1comp=0; v1finished=1		else			set -- $v1; v1comp=$1; shift; v1=$*		fi		if [ "$v2" = "" ]; then			v2comp=0; v2finished=1		else			set -- $v2; v2comp=$1; shift; v2=$*		fi				set +e		result=`expr $v1comp - $v2comp` 		result=`expr substr $result 1 2`		set -e		if   [ $result -gt 0 ]; then result=1		elif [ $result -lt 0 ]; then result=-1			fi		done	# finally return the result	echo $result}# looks in the directory specified for an initrd image with the version specifiedFindInitrdName(){	# strip trailing slashes	directory=$(echo $1 | sed -e 's#/*$##')	version=$2	# initrd	# initrd.img	# initrd-lvm	# .*.gz	initrdName=""	names="initrd initrd.img initrd-lvm"	compressed="gz"	for n in $names ; do		# make sure we haven't already found it		if [ -z "$initrdName" ] ; then			if [ -f "$directory/$n$version" ] ; then				initrdName="$n$version"				break			else				for c in $compressed ; do					if [ -f "$directory/$n$version.$c" ] ; then						initrdName="$n$version.$c"						break					fi				done			fi		else			break		fi	done	# return the result	echo $initrdName}FindXenHypervisorVersions (){	version=$1	if [ -f "/var/lib/linux-image-$version/xen-versions" ]; then		ret="$(cat /var/lib/linux-image-$version/xen-versions)"	fi	echo $ret}get_kernel_opt(){	kernel_version=$1	version=$(echo $kernel_version | sed 's/^[^0-9]*//')	version=$(echo $version | sed 's/[-\+\.]/_/g')	if [ -n "$version" ] ; then		while [ -n "$version" ] ; do			currentOpt="$(eval "echo \${kopt_$version}")"			if [ -n "$currentOpt" ] ; then				break			fi			version=$(echo $version | sed 's/_\?[^_]*$//')		done	fi	if [ -z "$currentOpt" ] ; then			currentOpt=$kopt	fi	echo $currentOpt}write_kernel_entry(){	local kernel_version; kernel_version=$1; shift	local recovery_desc; recovery_desc=$1; shift	local lock_alternative; lock_alternative=$1; shift	local grub_root_device; grub_root_device=$1; shift	local kernel; kernel=$1; shift	local kernel_options; kernel_options=$1; shift	local recovery_suffix; recovery_suffix=$1; shift	local initrd; initrd=$1; shift	local savedefault; savedefault=$1; shift	local lockold; lockold=$1; shift	local hypervisor	if [ -n "$1" ]; then		# Hypervisor.		hypervisor=$1; shift		local hypervisor_image; hypervisor_image=$1; shift		local hypervisor_version; hypervisor_version=$1; shift		local hypervisor_options; hypervisor_options=$1; shift	fi	echo -n "title		" >> $buffer	if [ -n "$hypervisor" ]; then		echo -n "$hypervisor $hypervisor_version / " >> $buffer	fi	echo -n "$title" >> $buffer	if [ -n "$kernel_version" ]; then		echo -n ", kernel $kernel_version" >> $buffer	fi	if [ -n "$recovery_desc" ]; then		echo -n " $recovery_desc" >> $buffer	fi	echo >> $buffer	# lock the alternative options	if test x"$lock_alternative" = x"true" ; then		echo "lock" >> $buffer	fi	# lock the old entries	if test x"$lockold" = x"true" ; then	echo "lock" >> $buffer	fi	echo "root		$grub_root_device" >> $buffer	echo -n "kernel		"  >> $buffer	if [ -n "$hypervisor" ]; then		echo -n "$hypervisor_image" >> $buffer		if [ -n "$hypervisor_options" ]; then			echo -n " $hypervisor_options"  >> $buffer		fi		echo >> $buffer		echo -n "module		"  >> $buffer	fi	echo -n "$kernel"  >> $buffer	if [ -n "$kernel_options" ]; then		echo -n " $kernel_options"  >> $buffer	fi	if [ -n "$recovery_desc" ]; then		echo -n " $recovery_suffix"  >> $buffer	fi	echo >> $buffer	if [ -n "$initrd" ]; then		if [ -n "$hypervisor" ]; then			echo -n "module		" >> $buffer		else			echo -n "initrd		" >> $buffer		fi		echo "$initrd" >> $buffer	fi	if test x"$savedefault" = x"true" ; then		echo "savedefault" >> $buffer	fi	echo >> $buffer}echo -n "Testing for an existing GRUB $menu_file_basename file ... " >&2# Test if our menu file existsif [ -f "$menu_file" ] ; then	menu="$menu_file"	rm -f $newtemplate	unset newtemplate	echo "found: $menu_file" >&2	cp -f "$menu_file" "$menu_file~"else	# if not ask user if they want us to create one	menu="$menu_file"	echo >&2	echo >&2	echo -n "Could not find $menu_file file. " >&2	if [ "-y" = "$command_line_arguments" ] ; then		echo >&2		echo "Generating $menu_file" >&2		answer=y	else		echo -n "Would you like $menu_file generated for you? " >&2		echo -n "(y/N) " >&2		read answer	fi	case "$answer" in		y* | Y*)		cat "$newtemplate" > $menu_file		rm -f $newtemplate		unset newtemplate		;;		*)		abort "Not creating $menu_file as you wish"		;;	esacfi# Extract the kernel options to usekopt=$(GetMenuOpt "kopt" "$kopt")# Set the kernel 2.6 option only for fresh installtest -z "$(GetMenuOpt "kopt" "")" && kopt_2_6="root=$root_device ro"# Extract options for specific kernelsopts="$(ExtractMenuOpts "\(kopt_[[:alnum:]_]\+\)")"test -z "$opts" || eval "$opts"CustomKopts=$(GetMenuOpts "\(kopt_[[:alnum:]_]\+\)")# Extract the grub rootgrub_root_device=$(GetMenuOpt "groot" "$grub_root_device")# Extract the old recovery valuealternative=$(GetMenuOpt "recovery" "$alternative")# Extract the alternative valuealternative=$(GetMenuOpt "alternative" "$alternative")# Extract the lockalternative valuelockalternative=$(GetMenuOpt "lockalternative" "$lockalternative")# Extract the additional default optionsdefoptions=$(GetMenuOpt "defoptions" "$defoptions")# Extract the lockold valuelockold=$(GetMenuOpt "lockold" "$lockold")# Extract Xen hypervisor optionsxenhopt=$(GetMenuOpt "xenhopt" "$xenhopt")# Extract Xen Linux kernel optionsxenkopt=$(GetMenuOpt "xenkopt" "$xenkopt")# Extract the howmany valuehowmany=$(GetMenuOpt "howmany" "$howmany")# Extract the memtest86 valuememtest86=$(GetMenuOpt "memtest86" "$memtest86") # Extract the updatedefaultentry optionupdatedefaultentry=$(GetMenuOpt "updatedefaultentry" "$updatedefaultentry")# Generate the menu options we want to insertbuffer=$(tempfile)echo $start >> $bufferecho "## lines between the AUTOMAGIC KERNELS LIST markers will be modified" >> $bufferecho "## by the debian update-grub script except for the default options below" >> $bufferecho >> $bufferecho "## DO NOT UNCOMMENT THEM, Just edit them to your needs" >> $bufferecho >> $bufferecho "## ## Start Default Options ##" >> $bufferecho "## default kernel options" >> $bufferecho "## default kernel options for automagic boot options" >> $bufferecho "## If you want special options for specific kernels use kopt_x_y_z" >> $bufferecho "## where x.y.z is kernel version. Minor versions can be omitted." >> $bufferecho "## e.g. kopt=root=/dev/hda1 ro" >> $bufferecho "##      kopt_2_6_8=root=/dev/hdc1 ro" >> $bufferecho "##      kopt_2_6_8_2_686=root=/dev/hdc2 ro" >> $bufferecho "# kopt=$kopt" >> $bufferif [ -n "$CustomKopts" ] ; then    echo "$CustomKopts" >> $bufferelif [ -n "$kopt_2_6" ] && [ "$kopt" != "$kopt_2_6" ]; then    echo "# kopt_2_6=$kopt_2_6" >> $bufferfiecho >> $bufferecho "## default grub root device" >> $bufferecho "## e.g. groot=(hd0,0)" >> $bufferecho "# groot=$grub_root_device" >> $bufferecho >> $bufferecho "## should update-grub create alternative automagic boot options" >> $bufferecho "## e.g. alternative=true" >> $bufferecho "##      alternative=false" >> $bufferecho "# alternative=$alternative" >> $bufferecho >> $bufferecho "## should update-grub lock alternative automagic boot options" >> $bufferecho "## e.g. lockalternative=true" >> $bufferecho "##      lockalternative=false" >> $bufferecho "# lockalternative=$lockalternative" >> $bufferecho >> $bufferecho "## additional options to use with the default boot option, but not with the" >> $bufferecho "## alternatives" >> $bufferecho "## e.g. defoptions=vga=791 resume=/dev/hda5" >> $bufferecho "# defoptions=$defoptions" >> $bufferecho >> $bufferecho "## should update-grub lock old automagic boot options" >> $bufferecho "## e.g. lockold=false" >> $bufferecho "##      lockold=true" >> $bufferecho "# lockold=$lockold" >> $bufferecho >> $bufferecho "## Xen hypervisor options to use with the default Xen boot option" >> $bufferecho "# xenhopt=$xenhopt" >> $bufferecho >> $bufferecho "## Xen Linux kernel options to use with the default Xen boot option" >> $bufferecho "# xenkopt=$xenkopt" >> $bufferecho >> $bufferecho "## altoption boot targets option" >> $bufferecho "## multiple altoptions lines are allowed" >> $bufferecho "## e.g. altoptions=(extra menu suffix) extra boot options" >> $bufferecho "##      altoptions=(single-user) single" >> $bufferif ! grep -q "^# altoptions" $menu ; then	echo "# altoptions=$altoptions" >> $bufferelse	grep "^# altoptions" $menu >> $bufferfiecho >> $bufferecho "## controls how many kernels should be put into the $menu_file_basename" >> $bufferecho "## only counts the first occurence of a kernel, not the" >> $bufferecho "## alternative kernel options" >> $bufferecho "## e.g. howmany=all" >> $bufferecho "##      howmany=7" >> $bufferecho "# howmany=$howmany" >> $bufferecho >> $bufferecho "## should update-grub create memtest86 boot option" >> $bufferecho "## e.g. memtest86=true" >> $bufferecho "##      memtest86=false" >> $bufferecho "# memtest86=$memtest86" >> $bufferecho >> $bufferecho "## should update-grub adjust the value of the default booted system" >> $bufferecho "## can be true or false" >> $bufferecho "# updatedefaultentry=$updatedefaultentry" >> $bufferecho >> $bufferecho "## ## End Default Options ##" >> $bufferecho >> $bufferecho -n "Searching for splash image ... " >&2current_splash=`grep '^splashimage=' ${menu_file} || true`splashimage_path="splashimage=${grub_root_device}${grub_dir##${boot_device:+/boot}}/splash.xpm.gz"if [ `sed -e "/^$start/,/^$end/d" $menu_file | grep -c '^splashimage='` != "0" ] ; then       #checks for splashscreen defined outside the autoupdated part       splashimage=$(grep '^splashimage=' ${menu_file})       echo "found: ${splashimage##*=}" >&2       echo >&2  elif [ -f "${grub_dir}/splash.xpm.gz" ]  && [ "$current_splash" = "" ]; then       echo "found: /boot/grub/splash.xpm.gz" >&2       echo "$splashimage_path" >> $buffer       echo >> $bufferelif [ -f "${grub_dir}/splash.xpm.gz" ]  && [ "$current_splash" = "$splashimage_path" ]; then       echo "found: /boot/grub/splash.xpm.gz" >&2       echo "$splashimage_path" >> $buffer       echo >> $bufferelif [ "$current_splash" != "" ] && [ "$current_splash" != "$splashimage_path" ]; then       echo "found but preserving previous setting: $(grep '^splashimage=' ${menu_file})" >&2       echo "$current_splash" >> $buffer       echo >> $bufferelse       echo "none found, skipping ..." >&2fixenKernels=""for ver in `grep -l CONFIG_XEN_PRIVILEGED_GUEST=y /boot/config* | sed -e s%/boot/config-%%`; do  # ver is a kernel version  kern="/boot/vmlinuz-$ver"  if [ -r $kern ] ; then       newerKernels=""       for i in $xenKernels ; do                res=$(CompareVersions "$kern" "$i")                if [ "$kern" != "" ] && [ "$res" -gt 0 ] ; then                        newerKernels="$newerKernels $kern $i"                        kern=""                else                        newerKernels="$newerKernels $i"                fi        done        if [ "$kern" != "" ] ; then                newerKernels="$newerKernels $kern"        fi        xenKernels="$newerKernels"    fidonein_domU=if [ -e /proc/xen/capabilities ] && ! grep -q "control_d" /proc/xen/capabilities; then	in_domU=1fisortedKernels=""for kern in $(/bin/ls -1vr /boot | grep -v "dpkg-*" | grep "^vmlinuz-") ; do	if `echo "$xenKernels" | grep -q "$kern "` || `echo "$kern" | grep -q "xen"`; then		is_xen=1	else		is_xen=	fi	if [ ! "$in_domU" ] && [ "$is_xen" ]; then	  # skip xen kernels          continue        elif [ "$in_domU" ] && ! [ "$is_xen" ]; then	  # skip non-xen kernels	  continue        fi        kern="/boot/$kern"	newerKernels=""	for i in $sortedKernels ; do	    res=$(CompareVersions "$kern" "$i")	    if [ "$kern" != "" ] && [ "$res" -gt 0 ] ; then		newerKernels="$newerKernels $kern $i"	 	kern=""	    else		newerKernels="$newerKernels $i"	    fi	done	if [ "$kern" != "" ] ; then	    newerKernels="$newerKernels $kern"	fi	sortedKernels="$newerKernels"doneif test -f "/boot/vmlinuz.old" ; then	sortedKernels="/boot/vmlinuz.old $sortedKernels"fiif test -f "/boot/vmlinuz" ; then	sortedKernels="/boot/vmlinuz $sortedKernels"fihypervisors=""for hyp in /boot/xen-*.gz; do    if [ ! -h "$hyp" ] && [ -f "$hyp" ]; then	hypervisors="$hypervisors `basename "$hyp"`"    fidone# figure out where grub looks for the kernels at boot timekernel_dir=/bootif [ -n "$boot_device" ] ; then	kernel_dir=fi#Finding the value the default lineuse_grub_set_default="false"if test "$updatedefaultentry" = "true" ; then	defaultEntryNumber=$(sed -ne 's/^[[:blank:]]*default[[:blank:]]*\(.*\).*/\1/p' $menu)	if [ "$defaultEntryNumber" = "saved" ] ; then	    defaultEntryNumber=$(sed 'q' "$grub_dir/default")	    use_grub_set_default="true"	   	fi		if test -n "$defaultEntryNumber"; then			defaultEntryNumberPlusOne=$(expr $defaultEntryNumber \+ 1);		defaultEntry=$(grep "^[[:blank:]]*title" $menu | sed -ne "${defaultEntryNumberPlusOne}p" | sed -ne ";s/^[[:blank:]]*title[[:blank:]]*//p")		defaultEntry=$(echo $defaultEntry | sed -e "s/[[:blank:]]*$//") # don't trust trailing blanks		else		notChangeDefault="yes"	fielse		notChangeDefault="yes"ficase "$host_os" in  freebsd|*/kfreebsd)    if test -e /boot/loader.gz ; then      kernel=/boot/loader.gz    else      kernel=/boot/loader    fi    write_kernel_entry "" "" "" "$grub_root_device" "$kernel" "" "" "" "true" ""  ;;esac## heres where we start writing out the kernel entriescounter=0grub2name="/boot/grub/core.img"if test -f $grub2name ; then	echo "Found GRUB 2: $grub2name" >&2	cat >> $buffer << EOFtitle		Chainload into GRUB 2root		$grub_root_devicekernel		$grub2namesavedefaultEOFfi    # Xen entries first.for kern in $xenKernels ; do	if test ! x"$howmany" = x"all" ; then		if [ $counter -gt $howmany ] ; then			break		fi	fi	kernelName=$(basename $kern)	kernelVersion=$(echo $kernelName | sed -e 's/vmlinuz//')	initrdName=$(FindInitrdName "/boot" "$kernelVersion")	initrd=""	kernel=$kernel_dir/$kernelName	if [ -n "$initrdName" ] ; then		initrd=$kernel_dir/$initrdName	fi	kernelVersion=$(echo $kernelVersion | sed -e 's/^-//')	currentOpt=$(get_kernel_opt $kernelVersion)	hypervisorVersions=$(FindXenHypervisorVersions "$kernelVersion")	found=	for hypervisorVersion in $hypervisorVersions; do		hypervisor="$kernel_dir/xen-$hypervisorVersion.gz"		if [ -e "$hypervisor" ]; then			found=1			echo "Found Xen hypervisor $hypervisorVersion,  kernel: $kernel" >&2			write_kernel_entry "$kernelVersion" '' '' "$grub_root_device" \			  "$kernel" "$currentOpt $xenkopt" '' "$initrd" true '' \			  Xen "$hypervisor" "$hypervisorVersion" "$xenhopt"	        counter=$(($counter + 1))		fi	done	if [ -z $found ]; then		for hypervisor in $hypervisors; do			hypVersion=`basename "$hypervisor" .gz | sed s%xen-%%`					echo "Found Xen hypervisor $hypVersion,  kernel: $kernel" >&2			write_kernel_entry "$kernelVersion" '' '' "$grub_root_device" \			  "$kernel" "$currentOpt $xenkopt" '' "$initrd" true '' \			  Xen "$kernel_dir/$hypervisor" "$hypVersion" "$xenhopt"	        counter=$(($counter + 1))		done	fidonefor kern in $sortedKernels ; do	counter=$(($counter + 1))	if test ! x"$howmany" = x"all" ; then		if [ $counter -gt $howmany ] ; then 			break		fi	fi	kernelName=$(basename $kern)	kernelVersion=$(echo $kernelName | sed -e 's/vmlinuz//')	initrdName=$(FindInitrdName "/boot" "$kernelVersion")	initrd=""	kernel=$kernel_dir/$kernelName	if [ -n "$initrdName" ] ; then		initrd=$kernel_dir/$initrdName	fi	echo "Found kernel: $kernel" >&2	if [ "$kernelName" = "vmlinuz" ]; then		if [ -L "/boot/$kernelName" ]; then			kernelVersion=`readlink -f "/boot/$kernelName"`			kernelVersion=$(echo $kernelVersion | sed -e 's/.*vmlinuz-//')			kernelVersion="$kernelVersion Default"		else			kernelVersion="Default"		fi	fi	if [ "$kernelName" = "vmlinuz.old" ]; then		if [ -L "/boot/$kernelName" ]; then			kernelVersion=`readlink -f "/boot/$kernelName"`			kernelVersion=$(echo $kernelVersion | sed -e 's/.*vmlinuz-//')			kernelVersion="$kernelVersion Previous"		else			kernelVersion="Previous"		fi	fi	kernelVersion=$(echo $kernelVersion | sed -e 's/^-//')		currentOpt=$(get_kernel_opt $kernelVersion)	do_lockold=$lockold	# do not lockold for the first entry	[ $counter -eq 1 ] && do_lockold=false	write_kernel_entry "$kernelVersion" "" "" "$grub_root_device" "$kernel" \		"$currentOpt $defoptions" "" "$initrd" "true" "$do_lockold"	# insert the alternative boot options	if test ! x"$alternative" = x"false" ; then		# for each altoptions line do this stuff		sed -ne 's/# altoptions=\(.*\)/\1/p' $buffer | while read line; do			descr=$(echo $line | sed -ne 's/\(([^)]*)\)[[:space:]]\(.*\)/\1/p')			suffix=$(echo $line | sed -ne 's/\(([^)]*)\)[[:space:]]\(.*\)/\2/p')			test x"$lockalternative" = x"true" && do_lockold=false			write_kernel_entry "$kernelVersion" "$descr" "$lockalternative" \				"$grub_root_device" "$kernel" "$currentOpt" "$suffix" "$initrd" \				"true" "$do_lockold"		done	fidonememtest86names="memtest86 memtest86+"if test ! x"$memtest86" = x"false" ; then	for name in $memtest86names ; do		if test -f "/boot/$name.bin" ; then			kernelVersion="$name"			kernel="$kernel_dir/$name.bin"			currentOpt=			initrd=			echo "Found kernel: $kernel" >&2			write_kernel_entry "$kernelVersion" "" "" "$grub_root_device" \			"$kernel" "$currentOpt" "" "$initrd" "false" ""		fi	donefiecho $end >> $bufferecho -n "Updating $menu ... " >&2# Insert the new options into the menuif ! grep -q "^$start" $menu ; then    cat $buffer >> $menu    rm -f $bufferelse    umask 077    sed -e "/^$start/,/^$end/{	/^$start/r $buffer	d	}	" $menu > $menu.new    cat $menu.new > $menu    rm -f $buffer $menu.newfi# Function to update the default valueset_default_value() {    if [ "$use_grub_set_default" = "true" ] ; then	grub-set-default $1    else	value="$1"	newmenu=$(tempfile)	sed -e "s/^[[:blank:]]*default[[:blank:]]*[[:digit:]]*\(.*\)/default         ${value}\1/;b" $menu > $newmenu	cat $newmenu > $menu	rm -f $newmenu	unset newmenu    fi}#Updating the default numberif test -z "$notChangeDefault"; then	newDefaultNumberPlusOne=$(grep "^[[:blank:]]*title[[:blank:]]*" $menu | grep -n "${defaultEntry}" | cut -f1 -d ":" | sed -ne "1p")	if test -z "$newDefaultNumberPlusOne"; then		echo "Previous default entry removed, resetting to 0">&2		set_default_value "0"	elif test -z "$defaultEntry"; then		echo "Value of default value matches no entry, resetting to 0" >&2		set_default_value "0"	else		if test "$newDefaultNumberPlusOne" = "1"; then			newDefaultNumber="0"		else			newDefaultNumber=$(expr $newDefaultNumberPlusOne - 1)		fi		echo "Updating the default booting kernel">&2		set_default_value "$newDefaultNumber"	fifiecho "done" >&2echo >&2