summaryrefslogtreecommitdiffstats
path: root/main/compat-pvgrub/update-pvgrub
diff options
context:
space:
mode:
authorWilliam Pitcock <nenolod@dereferenced.org>2013-11-18 18:44:05 +0000
committerWilliam Pitcock <nenolod@dereferenced.org>2013-11-18 18:46:33 +0000
commit81bf2a318304a903261a644cb4df24023c9d27f4 (patch)
tree3545b0ebd8f617c3b96ffd211a7b2fef44d16290 /main/compat-pvgrub/update-pvgrub
parent1d74a452d83a0ebe676a82dbcaae91a9141c4de3 (diff)
downloadaports-81bf2a318304a903261a644cb4df24023c9d27f4.tar.bz2
aports-81bf2a318304a903261a644cb4df24023c9d27f4.tar.xz
main/compat-pvgrub: new aport
This builds a grub configuration automatically, similar to update-extlinux (derived from that code). It assumes a typical Xen deployment, with the filesystem being flat, and on (hd0). fix #2356
Diffstat (limited to 'main/compat-pvgrub/update-pvgrub')
-rwxr-xr-xmain/compat-pvgrub/update-pvgrub117
1 files changed, 117 insertions, 0 deletions
diff --git a/main/compat-pvgrub/update-pvgrub b/main/compat-pvgrub/update-pvgrub
new file mode 100755
index 000000000..56594a337
--- /dev/null
+++ b/main/compat-pvgrub/update-pvgrub
@@ -0,0 +1,117 @@
+#!/bin/sh
+
+version=
+default=0
+timeout=5
+verbose=0
+
+conf=/boot/grub/menu.lst
+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
+
+menu_hidden=
+
+umask 0022
+rm -f $conf.new
+echo "# Generated by update-pvgrub $version" > $conf.new
+echo "default 0" >> $conf.new
+if [ "$hidden" = "1" ]; then
+ echo "hiddenmenu" >> $conf.new
+fi
+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"
+ label=$(grep -w -l $tag /usr/share/kernel/*/kernel.release | cut -d/ -f5)
+ if [ -z "$label" ]; then
+ label=$lst
+ fi
+ echo "title Linux $tag" >> $conf.new
+ echo "root (hd0)" >> $conf.new
+ echo "kernel /boot/$(basename $kernel) root=$root modules=${modules}${TYPE:+,$TYPE} $default_kernel_opts" >> $conf.new
+ if [ -f "/boot/initramfs-$tag" ]; then
+ everbose "Found initramfs: /boot/initramfs-$tag"
+ echo "initrd /boot/initramfs-$tag" >> $conf.new
+ fi
+ echo "" >> $conf.new
+ lst=$(($lst + 1))
+done
+
+if [ -n "$password" ]; then
+ echo "password --md5 $password" >> $conf.new
+ echo "" >> $conf.new
+ chmod o-r $conf.new
+fi
+
+everbose "$lst entries found."
+
+if cmp -s $conf.new $conf; then
+ everbose "Configuration unchanged."
+ rm $conf.new
+fi
+
+if [ "$overwrite" != "1" ]; then
+ exit 0
+elif [ -f "$conf.new" ]; then
+ # keep a backup just in case
+ if [ -f "$conf" ]; then
+ mv $conf $conf.old
+ fi
+
+ mv $conf.new $conf
+fi