aports/main/syslinux/update-extlinux
Natanael Copa b074064773 main/syslinux: misc update-extlinux fixes
- rename /etc/extlinux-conf to /etc/update-extlinux.conf

- Do not exit with fail if update-extlinux.conf is missing
- Always warn if root= is not defined in update-extlinux.conf
- Try harder to detect the root device by parsing /proc/mounts
- Exit with error if we cannot detect the Root device
- Rename fancy_menu to vesa_menu
- Unifiy the code generating vesa/standard menus
- Keep a backup of old extlinux.conf
- add "overwrite" config option so it is possible to skip overwriting
  the extlinux.conf.

- Added a post-upgrade that imports current extlinux.conf to
  update-extlinux.conf
2011-08-03 19:28:23 +00:00

136 lines
2.9 KiB
Bash
Executable File

#!/bin/sh
default=0
timeout=5
verbose=0
conf=/boot/extlinux.conf
myconf=/etc/update-extlinux.conf
# read in extlinux settings
if [ -f "$myconf" ]; then
. $myconf
fi
everbose() {
if [ "$verbose" = "0" ]; then
return
fi
echo $*
}
ewarn() {
echo "WARNING:" $@ >&2
}
eerror() {
echo "ERROR:" $@ >&2
return 1
}
everbose "Updating extlinux configuration."
if [ "x$root" = "x" ]; then
ewarn "Root device is not specified in $myconf."
blkid_export=$(blkid -o export /dev/root)
if [ -n "$blkid_export" ]; then
export $blkid_export
fi
if [ -z "$UUID" ]; then
# try parse /proc/mount for mounted /
dev=$(awk '$2 == "/" {dev=$1} END {print dev}' /proc/mounts)
if [ -n "$dev" ]; then
blkid_export=$(blkid -o export $dev)
if [ -n "$blkid_export" ]; then
export "$blkid_export"
fi
fi
fi
if [ -z "$UUID" ]; then
if [ -z "$dev" ]; then
eerror "Failed to detect root device"
exit 1
else
root=$dev
fi
else
root=UUID=$UUID
fi
everbose "Root device is: $root"
fi
everbose "Installing mboot.c32 to /boot."
cp /usr/share/syslinux/mboot.c32 /boot
everbose "Installing menu.c32 to /boot."
cp /usr/share/syslinux/menu.c32 /boot
rtimeout=$((${timeout}\*10))
syslinux_menu=menu.c32
menu_hidden=
# vesa menu has been requested?
if [ "$vesa_menu" = "1" ]; then
syslinux_menu=vesamenu.c32
fi
everbose "Installing $syslinux_menu to /boot."
cp /usr/share/syslinux/vesamenu.c32 /boot
echo "# Generated by update-extlinux" > $conf.new
echo "DEFAULT $syslinux_menu" >> $conf.new
echo "PROMPT 0" >> $conf.new
echo "MENU TITLE Alpine/$(uname -s) Boot Menu" >> $conf.new
if [ "$hidden" = "1" ]; then
echo "MENU HIDDEN" >> $conf.new
fi
echo "MENU AUTOBOOT Alpine will be booted automatically in # seconds." >> $conf.new
echo "TIMEOUT $rtimeout" >> $conf.new
lst=0
for kernel in $(find /boot -name vmlinuz-* -type f); do
tag=$(basename $kernel | cut -b9-)
everbose "Found kernel: $kernel"
if [ -f "/boot/initramfs-$tag" ]; then
everbose "Found initramfs: /boot/initramfs-$tag"
initramfs="initrd=initramfs-$tag"
fi
echo "LABEL $lst" >> $conf.new
if [ "$lst" = "$default" ]; then
echo " MENU DEFAULT" >> $conf.new
fi
echo " MENU LABEL Linux $tag" >> $conf.new
echo " KERNEL $(basename $kernel)" >> $conf.new
echo " APPEND $initramfs root=$root modules=${modules}${TYPE:+,$TYPE} $default_kernel_opts" >> $conf.new
echo "" >> $conf.new
lst=$(($lst + 1))
done
if [ -f "/boot/memtest" ]; then
everbose "Found memtest86+: /boot/memtest"
echo "LABEL $lst" >> $conf.new
echo " MENU LABEL Memtest86+" >> $conf.new
echo " KERNEL memtest" >> $conf.new
echo "" >> $conf.new
lst=$(($lst + 1))
fi
everbose "$lst entries found."
for entry in /etc/update-extlinux.d/*; do
[ -f "$entry" ] && cat $entry >> $conf.new
done
if [ "$overwrite" = "1" ]; then
# keep a backup just in case
if [ -f "$conf" ]; then
mv $conf $conf.old
fi
mv $conf.new $conf
fi