Linux ip-172-26-7-228 5.4.0-1103-aws #111~18.04.1-Ubuntu SMP Tue May 23 20:04:10 UTC 2023 x86_64
Apache
: 172.26.7.228 | : 3.137.189.236
Cant Read [ /etc/named.conf ]
5.6.40-24+ubuntu18.04.1+deb.sury.org+1
www-data
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
HASH IDENTIFIER
README
+ Create Folder
+ Create File
/
usr /
sbin /
[ HOME SHELL ]
Name
Size
Permission
Action
a2disconf
15.89
KB
-rwxr-xr-x
a2dismod
15.89
KB
-rwxr-xr-x
a2dissite
15.89
KB
-rwxr-xr-x
a2enconf
15.89
KB
-rwxr-xr-x
a2enmod
15.89
KB
-rwxr-xr-x
a2ensite
15.89
KB
-rwxr-xr-x
a2query
9.64
KB
-rwxr-xr-x
aa-remove-unknown
2.85
KB
-rwxr-xr-x
aa-status
8.41
KB
-rwxr-xr-x
accessdb
10.23
KB
-rwxr-xr-x
acpid
50.84
KB
-rwxr-xr-x
add-shell
860
B
-rwxr-xr-x
addgnupghome
3.01
KB
-rwxr-xr-x
addgroup
36.45
KB
-rwxr-xr-x
adduser
36.45
KB
-rwxr-xr-x
apache2
659.69
KB
-rwxr-xr-x
apache2ctl
7.06
KB
-rwxr-xr-x
apachectl
7.06
KB
-rwxr-xr-x
apachetop
46.25
KB
-rwxr-xr-x
apparmor_status
8.41
KB
-rwxr-xr-x
applygnupgdefaults
2.17
KB
-rwxr-xr-x
arp
61.3
KB
-rwxr-xr-x
arpd
54.03
KB
-rwxr-xr-x
atd
26.01
KB
-rwxr-xr-x
bcache-super-show
13.99
KB
-rwxr-xr-x
biosdecode
18.94
KB
-rwxr-xr-x
check_forensic
952
B
-rwxr-xr-x
chgpasswd
57.83
KB
-rwxr-xr-x
chmem
42.08
KB
-rwxr-xr-x
chpasswd
53.86
KB
-rwxr-xr-x
chroot
38.18
KB
-rwxr-xr-x
cpgr
55.96
KB
-rwxr-xr-x
cppw
55.96
KB
-rwxr-xr-x
cron
46.3
KB
-rwxr-xr-x
cryptdisks_start
1.11
KB
-rwxr-xr-x
cryptdisks_stop
1.16
KB
-rwxr-xr-x
delgroup
16.11
KB
-rwxr-xr-x
deluser
16.11
KB
-rwxr-xr-x
dmidecode
106.61
KB
-rwxr-xr-x
dnsmasq
379.6
KB
-rwxr-xr-x
dpkg-preconfigure
3.58
KB
-rwxr-xr-x
dpkg-reconfigure
4.34
KB
-rwxr-xr-x
e2freefrag
14.07
KB
-rwxr-xr-x
e4crypt
22.07
KB
-rwxr-xr-x
e4defrag
25.99
KB
-rwxr-xr-x
escapesrc
18.16
KB
-rwxr-xr-x
faillock
13.99
KB
-rwxr-xr-x
fdformat
30.08
KB
-rwxr-xr-x
filefrag
14.02
KB
-rwxr-xr-x
genccode
10.4
KB
-rwxr-xr-x
gencmn
10.44
KB
-rwxr-xr-x
genl
58.05
KB
-rwxr-xr-x
gennorm2
58.59
KB
-rwxr-xr-x
gensprep
18.5
KB
-rwxr-xr-x
groupadd
61.92
KB
-rwxr-xr-x
groupdel
70.37
KB
-rwxr-xr-x
groupmems
57.87
KB
-rwxr-xr-x
groupmod
68.18
KB
-rwxr-xr-x
grpck
53.8
KB
-rwxr-xr-x
grpconv
49.68
KB
-rwxr-xr-x
grpunconv
49.68
KB
-rwxr-xr-x
grub-bios-setup
793.15
KB
-rwxr-xr-x
grub-install
1003.51
KB
-rwxr-xr-x
grub-macbless
780.84
KB
-rwxr-xr-x
grub-mkconfig
8.03
KB
-rwxr-xr-x
grub-mkdevicemap
207.62
KB
-rwxr-xr-x
grub-probe
793.09
KB
-rwxr-xr-x
grub-reboot
4.73
KB
-rwxr-xr-x
grub-set-default
832
B
-rwxr-xr-x
grub-set-default-legacy-ec2
3.13
KB
-rwxr-xr-x
grub-set-default.real
3.47
KB
-rwxr-xr-x
httxt2dbm
9.99
KB
-rwxr-xr-x
iconvconfig
30.25
KB
-rwxr-xr-x
icupkg
18.77
KB
-rwxr-xr-x
init.lxc
18.41
KB
-rwxr-xr-x
init.lxc.static
973.72
KB
-rwxr-xr-x
install-sgmlcatalog
4.44
KB
-rwxr-xr-x
invoke-rc.d
15.66
KB
-rwxr-xr-x
ip6tables-apply
6.85
KB
-rwxr-xr-x
iptables-apply
6.85
KB
-rwxr-xr-x
irqbalance
62.68
KB
-rwxr-xr-x
irqbalance-ui
34.06
KB
-rwxr-xr-x
iscsi-iname
9.99
KB
-rwxr-xr-x
iscsi_discovery
5.16
KB
-rwxr-xr-x
iscsid
398.15
KB
-rwxr-xr-x
iscsistart
354.13
KB
-rwxr-xr-x
ldattach
30.08
KB
-rwxr-xr-x
libgvc6-config-update
9.99
KB
-rwxr-xr-x
locale-gen
4.3
KB
-rwxr-xr-x
logrotate
74.09
KB
-rwxr-xr-x
luksformat
3.32
KB
-rwxr-xr-x
make-bcache
18.07
KB
-rwxr-xr-x
make-ssl-cert
3.78
KB
-rwxr-xr-x
mkinitramfs
10.79
KB
-rwxr-xr-x
mklost+found
9.99
KB
-rwxr-xr-x
netplan
798
B
-rwxr-xr-x
newusers
82.39
KB
-rwxr-xr-x
nfnl_osf
13.99
KB
-rwxr-xr-x
nologin
5.99
KB
-rwxr-xr-x
overlayroot-chroot
2.45
KB
-rwxr-xr-x
ownership
10.2
KB
-rwxr-xr-x
pam-auth-update
19.38
KB
-rwxr-xr-x
pam_getenv
2.82
KB
-rwxr-xr-x
pam_timestamp_check
9.99
KB
-rwxr-xr-x
paperconfig
4.07
KB
-rwxr-xr-x
phpdismod
7.11
KB
-rwxr-xr-x
phpenmod
7.11
KB
-rwxr-xr-x
phpquery
6.24
KB
-rwxr-xr-x
popcon-largest-unused
543
B
-rwxr-xr-x
popularity-contest
4.92
KB
-rwxr-xr-x
pwck
49.8
KB
-rwxr-xr-x
pwconv
45.7
KB
-rwxr-xr-x
pwunconv
45.68
KB
-rwxr-xr-x
readprofile
18.11
KB
-rwxr-xr-x
remove-shell
904
B
-rwxr-xr-x
rmt
58.39
KB
-rwxr-xr-x
rmt-tar
58.39
KB
-rwxr-xr-x
rsyslogd
668.54
KB
-rwxr-xr-x
rtcwake
42.08
KB
-rwxr-xr-x
service
9.04
KB
-rwxr-xr-x
setvesablank
14.07
KB
-rwxr-xr-x
split-logfile
2.36
KB
-rwxr-xr-x
sshd
772.41
KB
-rwxr-xr-x
tarcat
936
B
-rwxr-xr-x
tcpdump
999.6
KB
-rwxr-xr-x
tzconfig
106
B
-rwxr-xr-x
ufw
4.4
KB
-rwxr-xr-x
update-ca-certificates
5.27
KB
-rwxr-xr-x
update-catalog
9.15
KB
-rwxr-xr-x
update-fmtutil
9.58
KB
-rwxr-xr-x
update-grub
64
B
-rwxr-xr-x
update-grub-gfxpayload
301
B
-rwxr-xr-x
update-grub-legacy-ec2
43.96
KB
-rwxr-xr-x
update-grub2
64
B
-rwxr-xr-x
update-gsfontmap
450
B
-rwxr-xr-x
update-icon-caches
596
B
-rwxr-xr-x
update-info-dir
1.66
KB
-rwxr-xr-x
update-initramfs
8.04
KB
-rwxr-xr-x
update-language
9.37
KB
-rwxr-xr-x
update-language-dat
9.37
KB
-rwxr-xr-x
update-language-def
9.37
KB
-rwxr-xr-x
update-language-lua
9.37
KB
-rwxr-xr-x
update-locale
2.99
KB
-rwxr-xr-x
update-mime
8.84
KB
-rwxr-xr-x
update-passwd
30.41
KB
-rwxr-xr-x
update-pciids
2.84
KB
-rwxr-xr-x
update-rc.d
16.12
KB
-rwxr-xr-x
update-texmf
2.6
KB
-rwxr-xr-x
update-texmf-config
1.5
KB
-rwxr-xr-x
update-tl-stacked-conffile
9.58
KB
-rwxr-xr-x
update-updmap
9.58
KB
-rwxr-xr-x
update-usbids
1.05
KB
-rwxr-xr-x
update-xmlcatalog
16.88
KB
-rwxr-xr-x
upgrade-from-grub-legacy
1.49
KB
-rwxr-xr-x
useradd
123.28
KB
-rwxr-xr-x
userdel
82.48
KB
-rwxr-xr-x
usermod
123.06
KB
-rwxr-xr-x
uuidd
34.16
KB
-rwxr-xr-x
validlocale
1.73
KB
-rwxr-xr-x
vcstime
9.99
KB
-rwxr-xr-x
vigr
60.18
KB
-rwxr-xr-x
vipw
60.18
KB
-rwxr-xr-x
visudo
208.8
KB
-rwxr-xr-x
vpddecode
14.34
KB
-rwxr-xr-x
xfs_admin
1.35
KB
-rwxr-xr-x
xfs_bmap
638
B
-rwxr-xr-x
xfs_copy
394.31
KB
-rwxr-xr-x
xfs_db
667.63
KB
-rwxr-xr-x
xfs_estimate
10.01
KB
-rwxr-xr-x
xfs_freeze
767
B
-rwxr-xr-x
xfs_fsr
30.02
KB
-rwxr-xr-x
xfs_growfs
382.27
KB
-rwxr-xr-x
xfs_info
472
B
-rwxr-xr-x
xfs_io
130.93
KB
-rwxr-xr-x
xfs_logprint
414.27
KB
-rwxr-xr-x
xfs_mdrestore
370.28
KB
-rwxr-xr-x
xfs_metadump
747
B
-rwxr-xr-x
xfs_mkfile
1007
B
-rwxr-xr-x
xfs_ncheck
650
B
-rwxr-xr-x
xfs_quota
86.01
KB
-rwxr-xr-x
xfs_rtcp
13.99
KB
-rwxr-xr-x
zerofree
9.99
KB
-rwxr-xr-x
zic
54.14
KB
-rwxr-xr-x
Delete
Unzip
Zip
${this.title}
Close
Code Editor : update-grub-legacy-ec2
#!/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
Close