summaryrefslogtreecommitdiff
path: root/debian/update-grub-legacy-ec2
diff options
context:
space:
mode:
Diffstat (limited to 'debian/update-grub-legacy-ec2')
-rwxr-xr-xdebian/update-grub-legacy-ec21620
1 files changed, 0 insertions, 1620 deletions
diff --git a/debian/update-grub-legacy-ec2 b/debian/update-grub-legacy-ec2
deleted file mode 100755
index c1c9dc79..00000000
--- a/debian/update-grub-legacy-ec2
+++ /dev/null
@@ -1,1620 +0,0 @@
-#!/bin/bash
-#
-# Insert a list of installed kernels in a grub config file
-# Copyright 2001 Wichert Akkerman <wichert@linux.com>
-# Copyright 2007, 2008 Canonical Ltd.
-#
-# 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>
-# Steve Langasek <steve.langasek@canonical.com>
-
-# Abort on errors
-set -e
-
-# load debconf first, since this re-execs the script
-. /usr/share/debconf/confmodule
-
-host_os=`uname -s | tr '[A-Z]' '[a-z]'`
-
-abort() {
- message=$@
-
- echo >&2
- printf '%s\n' "$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.
- To create a template run 'mkdir /boot/grub' first.
- To install grub, install it manually or try the 'grub-install' command.
- ### 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
- device=$(awk '$1!~/^#/{
- if ($2 ~ "^/+$") { $2 = "/"; } else { sub("/*$", "", $2); }
- if ($2 == "'"$mount_point"'"){
- print $1;
- }
- }' /etc/fstab | tail -n 1)
- 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 wrong
-convert_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 "${grub_root_device_fallback}"
- fi
-}
-
-is_removable () {
- removabledevice="$(echo "$1" | sed -e 's%\([sh]d[a-z]\)[0-9]*$%\1%' -e 's%\(fd[0-9]*\)$%\1%' -e 's%/part[0-9]*$%/disc%' -e 's%\(c[0-7]d[0-9]*\).*$%\1%' -e 's%^/dev/%%g')"
- if [ -e "/sys/block/$removabledevice/removable" ]; then
- if [ "$(cat /sys/block/$removabledevice/removable)" != "0" ]; then
- echo "/dev/$removabledevice"
- return
- fi
- fi
- echo ""
-}
-
-convert_to_uuid()
-{
- local dev; dev=$1
-
- convert=false
- case "$dev" in
- /dev/disk/*)
- ;;
- /dev/mapper/*)
- ;;
- /dev/evms/[hs]d[a-z][0-9]*)
- convert=:
- ;;
- /dev/evms/*)
- ;;
- /dev/md[0-9]*)
- ;;
- /dev/*)
- convert=:
- ;;
- esac
- if $convert; then
- if [ -b "$dev" ]; then
- uuid=$(blkid -o value -s UUID "$dev" || true)
- fi
- fi
-
- echo "$uuid"
-}
-
-convert_kopt_to_uuid()
-{
- local kopt; kopt=$1
-
- convert=false
- root=$(echo "$kopt" | sed 's/.*root=//;s/ .*//')
- case "$root" in
- UUID=*|LABEL=*)
- ;;
- /dev/disk/*)
- ;;
- /dev/mapper/*)
- ;;
- /dev/evms/[hs]d[a-z][0-9]*)
- convert=:
- ;;
- /dev/evms/*)
- ;;
- /dev/md[0-9]*)
- ;;
- /dev/*)
- convert=:
- ;;
- esac
- if $convert; then
- if [ -L "$DEV" ] && readlink "$DEV" | grep -q "^/dev/mapper/"
- then
- :
- elif [ -b "$root" ]; then
- uuid=$(blkid -o value -s UUID "$root" || true)
- if [ -n "$uuid" ]; then
- kopt=$(echo "$kopt" | sed "s/\(.*root=\)[^ ]*/\1UUID=$uuid/")
- fi
- fi
- fi
-
- echo "$kopt"
-}
-
-
-## Configuration Options
-# directory's to look for the grub installation and the menu file
-grub_dirs="/boot/grub /boot/boot/grub"
-
-# The grub installation directory
-grub_dir=$(find_grub_dir)
-
-# Full path to the menu.lst
-menu_file_basename=menu.lst
-menu_file=$grub_dir/$menu_file_basename
-
-# Full path to the menu.lst fragment used for ucf management
-ucf_menu_file=/var/run/grub/$menu_file_basename
-
-# Full path to the default file
-default_file_basename=default
-default_file=$grub_dir/$default_file_basename
-
-# the device for the / filesystem
-root_device=$(find_root_device)
-
-# the device for the /boot filesystem
-boot_device=$(find_device "/boot")
-
-# Full path to the device.map
-device_map=$grub_dir/device.map
-
-# Default kernel options, overidden by the kopt statement in the menufile.
-loop_file=""
-if [ -f /etc/fstab ]; then
- loop_file=$(awk '$2=="/" && $4~"loop" {print $1}' /etc/fstab)
-fi
-if [ -n "$loop_file" ]; then
- dev_mountpoint=$(awk '"'${loop_file}'"~"^"$2 && $2!="/" {print $1";"$2}' /proc/mounts|tail -n 1)
- host_device="${dev_mountpoint%;*}"
- host_mountpoint="${dev_mountpoint#*;}"
-fi
-if [ -n "$host_device" ]; then
- boot_device=
- root_device="$host_device"
- default_kopt="root=$host_device loop=${loop_file#$host_mountpoint} ro"
-else
- default_kopt="root=$root_device ro"
-fi
-default_kopt="$(convert_kopt_to_uuid "$default_kopt")"
-kopt="$default_kopt"
-
-# Title
-title=$(lsb_release --short --description 2>/dev/null) || title="Ubuntu"
-
-# should update-grub remember the default entry
-updatedefaultentry="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.
-
-# Try to use a UUID instead of the GRUB device name.
-if test -z "$boot_device" ; then
- uuid=$(convert_to_uuid "$root_device")
-else
- uuid=$(convert_to_uuid "$boot_device")
-fi
-
-#if [ -n "$uuid" ]; then
-# grub_root_device="$uuid"
-#fi
-## The ec2 provide pv-grub do not support 'uuid' so we have to use a grub name
-## when presented to grub, the root filesystem is on what grub sees
-## as a bare disk (hd0), rather than what we see it as in user space (sda1).
-grub_root_device_fallback="(hd0)"
-grub_root_device="${grub_root_device_fallback}"
-
-check_removable=""
-if true; then
- if test -f "$device_map"; then
- if test -z "$boot_device" ; then
- grub_root_device=$(convert_default "$root_device")
- check_removable="$(is_removable "$root_device")"
- else
- grub_root_device=$(convert_default "$boot_device")
- check_removable="$(is_removable "$boot_device")"
- fi
- else
- grub_root_device="${grub_root_device_fallback}"
- fi
-fi
-
-# If the root/boot device is on a removable target, we need to override
-# the grub_root_device to (hd0,X). This is a requirement since the BIOS
-# will change device mapping dynamically if we switch boot device.
-
-if test -n "$check_removable" ; then
- grub_root_device="$(echo "$grub_root_device" | sed -e 's/d.*,/d0,/g')"
-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="console=hvc0"
-
-# 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="(recovery 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"
-
-# should grub add "savedefault" to default boot options
- savedefault="false"
-
-# is grub running in a domU?
- indomU="true"
-
-# stores the command line arguments
- command_line_arguments=$1
-
-# does this version of grub support the quiet option?
-if [ -f ${grub_dir}/installed-version ] && dpkg --compare-versions `cat ${grub_dir}/installed-version` ge 0.97-11ubuntu4; then
- supports_quiet=true
-else
- supports_quiet=false
-fi
-
-# read user configuration
-if test -f "/etc/default/grub" ; then
- . /etc/default/grub
-fi
-
-# 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-legacy-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 use 'savedefault' 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).
-# on ec2, with no console access, there is no reason for a timeout. set to 0.
-timeout 0
-
-## hiddenmenu
-# Hides the menu by default (press ESC to see the menu)
-hiddenmenu
-
-# Pretty colours
-#color 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 LIST
-
-EOF
-## End Configuration Options
-
-echo -n "Searching for default file ... " >&2
-if [ -f "$default_file" ] ; then
- echo "found: $default_file" >&2
-else
- echo "Generating $default_file file and setting the default boot entry to 0" >&2
- grub-set-default 0
-fi
-
-# Make sure we use the standard sorting order
-LC_COLLATE=C
-# Magic markers we use
-start="### BEGIN AUTOMAGIC KERNELS LIST"
-end="### END DEBIAN AUTOMAGIC KERNELS LIST"
-
-startopt="## ## Start Default Options ##"
-endopt="## ## End Default Options ##"
-
-# path to grub2
-grub2name="/boot/grub/core.img"
-
-# Extract options from config file
-ExtractMenuOpt()
-{
- 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-ac99
-CompareVersions()
-{
- #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 specified
-FindInitrdName()
-{
- # 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
-
- oldversion="$version"
- version=$(echo $version | sed 's/_\?[^_]*$//')
- if [ "$version" = "$oldversion" ] ; then
- # Break infinite loop, if the version isn't what we expect
- break
- fi
- 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 dapper_upgrade; dapper_upgrade=$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 ", " >> $buffer
- # memtest86 is not strictly a kernel
- if ! echo "$kernel_version" | grep -q ^memtest86; then
- echo -n "kernel " >> $buffer
- fi
- echo -n "$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
-
- case "$grub_root_device" in
- [^A-Za-z0-9]*)
- echo "root $grub_root_device" >> $buffer
- ;;
- *)
- echo "uuid $grub_root_device" >> $buffer
- ;;
- esac
-
- 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
- if [ -n "$dapper_upgrade" -a -z "$kernel_options$recovery_desc" ]; then
- echo -n " " >> $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 [ ! -n "$recovery_desc" -a x"$supports_quiet" = x"true" -a -z "$dapper_upgrade" ]; then
- echo "quiet" >> $buffer
- fi
-
- if test x"$savedefault" = x"true" ; then
- echo "savedefault" >> $buffer
- fi
- if test x"$dapper_upgrade" != x ; then
- echo "boot" >> $buffer
- fi
- echo >> $buffer
-}
-
-## write out the kernel entries
-output_kernel_list() {
- counter=0
-
- # 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" "$savedefault" '' "$dapper_upgrade" \
- 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" "$savedefault" '' "$dapper_upgrade" \
- Xen "$kernel_dir/$hypervisor" "$hypVersion" "$xenhopt"
- counter=$(($counter + 1))
- done
- fi
- done
-
- for 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)
- initrdName=""
- initrd=""
- extra_opts=""
-
- if [ "$kern" = "/boot/last-good-boot/vmlinuz" ]; then
- kernelVersion="Last successful boot"
- if [ -e "/boot/last-good-boot/initrd.img" ]; then
- initrdName="last-good-boot/initrd.img"
- fi
- kernelName="last-good-boot/vmlinuz"
- extra_opts="$extra_opts last-good-boot"
- else
- kernelVersion=$(echo $kernelName | sed -e 's/vmlinuz//')
- initrdName=$(FindInitrdName "/boot" "$kernelVersion")
- if [ -x "/usr/bin/makedumpfile" ] && [ -x "/sbin/kexec" ]; then
- extra_opts="$extra_opts crashkernel=384M-2G:64M,2G-:128M"
- fi
- fi
-
- 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
-
- if [ "$kernelName" = "last-good-boot/vmlinuz" ]; then
- if [ -e /boot/last-good-boot/cmdline ]; then
- cmdline="$(cat /boot/last-good-boot/cmdline) last-good-boot"
- else
- cmdline="$currentOpt $defoptions $extra_opts"
- fi
- write_kernel_entry "$kernelVersion" "" "" "$grub_root_device" "$kernel" \
- "$cmdline" "" "$initrd" "$savedefault" "$do_lockold" \
- "$dapper_upgrade"
- else
- write_kernel_entry "$kernelVersion" "" "" "$grub_root_device" "$kernel" \
- "$currentOpt $defoptions $extra_opts" "" "$initrd" "$savedefault" \
- "$do_lockold" "$dapper_upgrade"
- fi
-
- # insert the alternative boot options
- if test ! x"$alternative" = x"false" && \
- test ! x"$kernelName" = x"last-good-boot/vmlinuz"; 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 $extra_opts" \
- "$suffix" "$initrd" "false" "$do_lockold" \
- "$dapper_upgrade"
- done
- fi
- done
-
-## Adding the chainload stanza is simply confusing, and for
-## legacy ec2 grub, it will never be used. LP: #627451
-##
-# if test -f $grub2name ; then
-# echo "Found GRUB 2: $grub2name" >&2
-# cat >> $buffer << EOF
-#title Chainload into GRUB 2
-#root $grub_root_device
-#kernel $grub2name
-#EOF
-# if test x"$savedefault" = x"true" ; then
-# echo "savedefault" >> $buffer
-# fi
-# echo >> $buffer
-# fi
-
- memtest86names="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" "" "$dapper_upgrade"
- fi
- done
- fi
-
- echo $end >> $buffer
-}
-
-ucf_update_kernels() {
- local target; target="$1"
- local buffer; buffer="$2"
-
- sed -ni -e"/$endopt/,/$end/p" "$buffer"
-
- if [ "x$initialconfig" = "x" ]; then
- sed -n -e"/$endopt/,/$end/p" < $menu > $ucf_menu_file
- else
- cat $buffer > $ucf_menu_file
- fi
-
- db_x_loadtemplatefile "$(dpkg-query --control-path grub-legacy-ec2 templates)" grub
-
- ucf --debconf-ok \
- --debconf-template grub/update_grub_changeprompt_threeway \
- --three-way "$buffer" $ucf_menu_file
- rm "$buffer"
-
- # now re-merge the ucf results with the target file
- sed -i -e "/^$endopt/,/^$end/ {
- /^$endopt/r $ucf_menu_file
- d
- }
- " $target
-
- rm -f $ucf_menu_file ${ucf_menu_file}.ucf-old
-}
-
-
-echo -n "Testing for an existing GRUB $menu_file_basename file ... " >&2
-
-# Test if our menu file exists
-if [ -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
- initialconfig=1
- 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 <&2
- fi
-
- case "$answer" in
- y* | Y*)
- cat "$newtemplate" > $menu_file
- rm -f $newtemplate
- unset newtemplate
- ;;
- *)
- abort "Not creating $menu_file as you wish"
- ;;
- esac
-fi
-
-# Extract the kernel options to use
-kopt=$(GetMenuOpt "kopt" "$kopt")
-
-# Extract options for specific kernels
-opts="$(ExtractMenuOpts "\(kopt_[[:alnum:]_]\+\)")"
-test -z "$opts" || eval "$opts"
-CustomKopts=$(GetMenuOpts "\(kopt_[[:alnum:]_]\+\)" | \
- grep -v "^# kopt_2_6=" || true)
-
-# Set the kernel 2.6 option only for fresh install (but convert it to
-# mount-by-UUID on upgrade)
-test -z "$kopt_2_6" && test -z "$(GetMenuOpt "kopt" "")" && \
- kopt_2_6="$default_kopt"
-
-# Extract the grub root
-grub_root_device=$(GetMenuOpt "groot" "$grub_root_device")
-groot_cfg=$(GetMenuOpt groot "${grub_root_device_fallback}")
-case "${groot_cfg}" in
- [^A-Za-z0-9]*) :;;
- *)
- echo "uuid not supported. update 'groot' in ${menu_file}" >&2;
- abort "groot must be grub root device (ie '(hd0)'). not '${groot_cfg}'" >&2;
-esac
-
-# Extract the old recovery value
-alternative=$(GetMenuOpt "recovery" "$alternative")
-
-# Extract the alternative value
-alternative=$(GetMenuOpt "alternative" "$alternative")
-
-# Extract the lockalternative value
-lockalternative=$(GetMenuOpt "lockalternative" "$lockalternative")
-
-# Extract the additional default options
-# Check nonaltoptions too for compatibility with Ubuntu <= 5.10
-defoptions=$(GetMenuOpt "nonaltoptions" "$defoptions")
-defoptions=$(GetMenuOpt "defoptions" "$defoptions")
-
-# Extract the lockold value
-lockold=$(GetMenuOpt "lockold" "$lockold")
-
-# Extract Xen hypervisor options
-xenhopt=$(GetMenuOpt "xenhopt" "$xenhopt")
-
-# Extract Xen Linux kernel options
-xenkopt=$(GetMenuOpt "xenkopt" "$xenkopt")
-
-# Extract the howmany value
-howmany=$(GetMenuOpt "howmany" "$howmany")
-
-# Extract the memtest86 value
-memtest86=$(GetMenuOpt "memtest86" "$memtest86")
-
-# Extract the indomU value
-indomU=$(GetMenuOpt "indomU" "$indomU")
-
-# Extract the updatedefaultentry option
-updatedefaultentry=$(GetMenuOpt "updatedefaultentry" "$updatedefaultentry")
-
-# If "default saved" is in use, set the default to true
-grep -q "^default.*saved" $menu && savedefault=true
-# Extract the savedefault option
-savedefault=$(GetMenuOpt "savedefault" "$savedefault")
-
-# Generate the menu options we want to insert
-buffer=$(tempfile)
-echo $start >> $buffer
-echo "## lines between the AUTOMAGIC KERNELS LIST markers will be modified" >> $buffer
-echo "## by the debian update-grub script except for the default options below" >> $buffer
-echo >> $buffer
-echo "## DO NOT UNCOMMENT THEM, Just edit them to your needs" >> $buffer
-echo >> $buffer
-echo "## ## Start Default Options ##" >> $buffer
-
-echo "## default kernel options" >> $buffer
-echo "## default kernel options for automagic boot options" >> $buffer
-echo "## If you want special options for specific kernels use kopt_x_y_z" >> $buffer
-echo "## where x.y.z is kernel version. Minor versions can be omitted." >> $buffer
-echo "## e.g. kopt=root=/dev/hda1 ro" >> $buffer
-echo "## kopt_2_6_8=root=/dev/hdc1 ro" >> $buffer
-echo "## kopt_2_6_8_2_686=root=/dev/hdc2 ro" >> $buffer
-echo "# kopt=$kopt" >> $buffer
-if [ -n "$kopt_2_6" ] && [ "$kopt" != "$kopt_2_6" ]; then
- echo "# kopt_2_6=$kopt_2_6" >> $buffer
-fi
-if [ -n "$CustomKopts" ] ; then
- echo "$CustomKopts" >> $buffer
-fi
-echo >> $buffer
-
-echo "## default grub root device" >> $buffer
-echo "## e.g. groot=${grub_root_device_fallback}" >> $buffer
-echo "# groot=$grub_root_device" >> $buffer
-echo >> $buffer
-
-echo "## should update-grub create alternative automagic boot options" >> $buffer
-echo "## e.g. alternative=true" >> $buffer
-echo "## alternative=false" >> $buffer
-echo "# alternative=$alternative" >> $buffer
-echo >> $buffer
-
-echo "## should update-grub lock alternative automagic boot options" >> $buffer
-echo "## e.g. lockalternative=true" >> $buffer
-echo "## lockalternative=false" >> $buffer
-echo "# lockalternative=$lockalternative" >> $buffer
-echo >> $buffer
-
-echo "## additional options to use with the default boot option, but not with the" >> $buffer
-echo "## alternatives" >> $buffer
-echo "## e.g. defoptions=vga=791 resume=/dev/hda5" >> $buffer
-echo "# defoptions=$defoptions" >> $buffer
-echo >> $buffer
-
-echo "## should update-grub lock old automagic boot options" >> $buffer
-echo "## e.g. lockold=false" >> $buffer
-echo "## lockold=true" >> $buffer
-echo "# lockold=$lockold" >> $buffer
-echo >> $buffer
-
-echo "## Xen hypervisor options to use with the default Xen boot option" >> $buffer
-echo "# xenhopt=$xenhopt" >> $buffer
-echo >> $buffer
-
-echo "## Xen Linux kernel options to use with the default Xen boot option" >> $buffer
-echo "# xenkopt=$xenkopt" >> $buffer
-echo >> $buffer
-
-echo "## altoption boot targets option" >> $buffer
-echo "## multiple altoptions lines are allowed" >> $buffer
-echo "## e.g. altoptions=(extra menu suffix) extra boot options" >> $buffer
-echo "## altoptions=(recovery) single" >> $buffer
-
-if ! grep -q "^# altoptions" $menu ; then
- echo "# altoptions=$altoptions" >> $buffer
-else
- grep "^# altoptions" $menu >> $buffer
-fi
-echo >> $buffer
-
-echo "## controls how many kernels should be put into the $menu_file_basename" >> $buffer
-echo "## only counts the first occurence of a kernel, not the" >> $buffer
-echo "## alternative kernel options" >> $buffer
-echo "## e.g. howmany=all" >> $buffer
-echo "## howmany=7" >> $buffer
-echo "# howmany=$howmany" >> $buffer
-echo >> $buffer
-
-echo "## specify if running in Xen domU or have grub detect automatically" >> $buffer
-echo "## update-grub will ignore non-xen kernels when running in domU and vice versa" >> $buffer
-echo "## e.g. indomU=detect" >> $buffer
-echo "## indomU=true" >> $buffer
-echo "## indomU=false" >> $buffer
-echo "# indomU=$indomU" >> $buffer
-echo >> $buffer
-
-echo "## should update-grub create memtest86 boot option" >> $buffer
-echo "## e.g. memtest86=true" >> $buffer
-echo "## memtest86=false" >> $buffer
-echo "# memtest86=$memtest86" >> $buffer
-echo >> $buffer
-
-echo "## should update-grub adjust the value of the default booted system" >> $buffer
-echo "## can be true or false" >> $buffer
-echo "# updatedefaultentry=$updatedefaultentry" >> $buffer
-echo >> $buffer
-
-echo "## should update-grub add savedefault to the default options" >> $buffer
-echo "## can be true or false" >> $buffer
-echo "# savedefault=$savedefault" >> $buffer
-echo >> $buffer
-
-echo "## ## End Default Options ##" >> $buffer
-echo >> $buffer
-
-echo -n "Searching for splash image ... " >&2
-current_splash=`grep '^splashimage=' ${menu_file} || true`
-splash_root_device=""
-splash_uuid=""
-case "$grub_root_device" in
- [^A-Za-z0-9]*)
- splash_root_device=${grub_root_device}
- ;;
- *)
- splash_uuid="uuid $grub_root_device"
- ;;
-esac
-splashimage_path="splashimage=${splash_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 "$splash_uuid" >> $buffer
- echo "$splashimage_path" >> $buffer
- echo >> $buffer
-elif [ -f "${grub_dir}/splash.xpm.gz" ] && [ "$current_splash" = "$splashimage_path" ]; then
- echo "found: /boot/grub/splash.xpm.gz" >&2
- echo "$splash_uuid" >> $buffer
- echo "$splashimage_path" >> $buffer
- echo >> $buffer
-elif [ "$current_splash" != "" ] && [ "$current_splash" != "$splashimage_path" ]; then
- echo "found but preserving previous setting: $(grep '^splashimage=' ${menu_file})" >&2
- echo "$splash_uuid" >> $buffer
- echo "$current_splash" >> $buffer
- echo >> $buffer
-else
- echo "none found, skipping ..." >&2
-fi
-
-
-hypervisors=""
-for hyp in /boot/xen-*.gz; do
- if [ ! -h "$hyp" ] && [ -f "$hyp" ]; then
- hypervisors="$hypervisors `basename "$hyp"`"
- fi
-done
-
-# figure out where grub looks for the kernels at boot time
-kernel_dir=/boot
-if [ -n "$boot_device" ] ; then
- kernel_dir=
-fi
-
-
-# We need a static path to use for the ucf registration; since we're not
-# using the full menu.lst file (maybe we should, just copying it around?
-# C.f. discussion with Manoj), create a directory in a fixed location
-# even though we're not treating the file in that location as
-# persistent.
-mkdir -p /var/run/grub
-
-# The first time ucf sees the file, we can only assume any difference
-# between the magic comments and the kernel options is a result of local
-# mods, so this will result in a ucf prompt for anyone whose first
-# invocation of update-grub is as a result of updating the magic comments.
-if ! ucfq grub | grep -q $ucf_menu_file; then
- otherbuffer=$(tempfile)
- cat $buffer > $otherbuffer
-
- sortedKernels=`sed -n -e "
- /$endopt/,/$end/ {
- s/^kernel[[:space:]]\+\([^[:space:]]\+\).*/\1/p
- }" < $menu | grep -vE "memtest86|$grub2name|xen" | uniq`
- xenKernels=`sed -n -e "
- /$endopt/,/$end/ {
- s/^module[[:space:]]\+\([^[:space:]]*vmlinuz[^[:space:]]\+\).*/\1/p
- }" < $menu | uniq`
-
- savebuffer="$buffer"
- buffer="$otherbuffer"
- savetitle="$title"
- title="$(sed -n -e "/$endopt/,/$end/ {
- s/^title[[:space:]]\+\(.*\),.*/\1/p
- }" < $menu | head -n 1)"
- if [ -z "$title" ]; then
- title="$savetitle"
- fi
-
- # Hack: the kernel list output in Ubuntu 6.06 was different than
- # in the current version, so to support smooth upgrades we need to
- # properly detect a config generated by this old version of
- # update-grub and mimic it for the initial ucf registration
- dapper_upgrade=`sed -n -e "
- /$endopt/,/$end/ {
- /^boot/p
- }" < $menu`
- save_savedefault="$savedefault"
- if [ -n "$dapper_upgrade" ]; then
- savedefault=true
- fi
-
- output_kernel_list
-
- savedefault="$save_savedefault"
- dapper_upgrade=""
- buffer="$savebuffer"
- title="$savetitle"
-
- ucf_update_kernels "$menu" "$otherbuffer"
-
- # all done, now register it
- ucfr grub $ucf_menu_file
-fi
-
-
-if ! type is_xen_kernel >/dev/null 2>&1; then
- check_xen_config_for_kernel() {
- # input is like /boot/vmlinuz-2.6.35-13-virtual
- # expected config path is /boot/config-2.6.35-13-virtual
- local kernel="$1" config="" dir="" bname=""
- dir=${kernel%/*}
- [ "$dir" = "$kernel" ] && dir="."
- bname=${kernel##*/}
- config="$dir/config-${bname#*-}"
- [ -f "$config" ] || return 1
- grep -q CONFIG_XEN=y "$config"
- }
-
- is_xen_kernel() {
- # input is like /boot/vmlinuz-2.6.35-13-virtual
- # return whether or not this kernel is xen bootable.
- check_xen_config_for_kernel "$1" && return 0
-
- # get the version string out of it.
- local ver_flavor="";
- ver_flavor="${1##*vmlinuz-}"
-
- case "${ver_flavor}" in
- *-aws) return 0;;
- *-ec2) return 0;;
- *-virtual)
- # 10.04 LTS through 12.04 LTS -virtual is the EC2/Xen kernel
- dpkg --compare-versions ${ver_flavor%-virtual} gt 2.6.35-13 && return 0;;
- *-generic)
- # Starting with 12.10, -virtual was merged into -generic
- dpkg --compare-versions ${ver_flavor%-generic} ge 3.4.0-3 && return 0;;
- esac
- return 1;
- }
-fi
-
-for kern in /boot/vmlinuz-*; do
- case "$kern" in
- *.signed) continue;;
- esac
- is_xen_kernel "${kern}" &&
- xen_verlist="${xen_verlist} ${kern#/boot/vmlinuz-}"
-done
-xen_verlist=${xen_verlist# }
-
-xenKernels=""
-for ver in ${xen_verlist}; 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"
- fi
-done
-xenKernels=" ${xenKernels} "
-
-if [ "$indomU" = "detect" ]; then
- if [ -e /proc/xen/capabilities ] && ! grep -q "control_d" /proc/xen/capabilities; then
- indomU="true"
- else
- indomU="false"
- fi
-fi
-
-sortedKernels=""
-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 [ "$indomU" = "false" ] && [ "$is_xen" ]; then
- # We aren't running in a Xen domU, skip xen kernels
- echo "Ignoring Xen kernel on non-Xen host: $kern"
- continue
- elif [ "$indomU" = "true" ] && ! [ "$is_xen" ]; then
- # We are running in a Xen domU, skip non-xen kernels
- echo "Ignoring non-Xen Kernel on Xen domU host: $kern"
- 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"
-done
-
-if test -f "/boot/vmlinuz.old" ; then
- sortedKernels="/boot/vmlinuz.old $sortedKernels"
-fi
-if test -f "/boot/vmlinuz" ; then
- sortedKernels="/boot/vmlinuz $sortedKernels"
-fi
-
-# Add our last-good-boot kernel, second in list. We always add it, because
-# it can appear out of nowhere.
-newerKernels=""
-last_good="/boot/last-good-boot/vmlinuz"
-if [ -e "$last_good" ]; then
- for i in $sortedKernels ; do
- if [ "$last_good" != "" ]; then
- newerKernels="$i $last_good"
- last_good=""
- else
- newerKernels="$newerKernels $i"
- fi
- done
- # Shouldn't happen, unless someone removed all the kernels
- if [ "$last_good" != "" ]; then
- newerKernels="$newerKernels $last_good"
- fi
- sortedKernels="$newerKernels"
-fi
-
-#Finding the value the default line
-use_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"
- fi
-else
- notChangeDefault="yes"
-fi
-
-output_kernel_list
-
-otherbuffer=$(tempfile)
-cat $buffer > $otherbuffer
-
-ucf_update_kernels "$buffer" "$otherbuffer"
-
-echo -n "Updating $menu ... " >&2
-# Insert the new options into the menu
-if ! grep -q "^$start" $menu ; then
- cat $buffer >> $menu
- rm -f $buffer
-else
- umask 077
- sed -e "/^$start/,/^$end/{
- /^$start/r $buffer
- d
- }
- " $menu > $menu.new
- cat $menu.new > $menu
- rm -f $buffer $menu.new
-fi
-
-# Function to update the default value
-set_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 number
-if 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"
- fi
-fi
-
-echo "done" >&2
-echo >&2