In invirt-autoinstaller:
[invirt/packages/invirt-autoinstaller.git] / common / usr / lib / xen-tools / debian.d / 93-setup-grub
index 2539e6b..7989591 100755 (executable)
@@ -24,9 +24,19 @@ logMessage Script $0 starting
 # Install the xen kernel.  linux-image-xen is in ubuntu,
 # linux-image-xen-{amd64,686} in debian.
 #
-installDebianPackage ${prefix} linux-image-xen-amd64
-installDebianPackage ${prefix} linux-image-xen-686
-installDebianPackage ${prefix} linux-image-xen
+
+installDebianPackage ${prefix} lsb-release
+
+if [ "$(chroot ${prefix} lsb_release -is)" = "Ubuntu" ]; then
+    if dpkg --compare-versions "$(chroot ${prefix} lsb_release -rs)" ge 8.10; then
+        installDebianPackage ${prefix} linux-image-virtual
+    else
+        installDebianPackage ${prefix} linux-image-xen
+    fi
+else
+    installDebianPackage ${prefix} linux-image-xen-amd64
+    installDebianPackage ${prefix} linux-image-xen-686
+fi
 
 installDebianPackage ${prefix} grub
 
@@ -48,9 +58,41 @@ for patch in $dir/patches/*; do
 done
 
 #
-# Regenerate automagic kernels list
+# If this is a pv_ops kernel, then we need to make some more changes
+# to make the console work right
 #
-chroot ${prefix} /usr/sbin/update-grub -y
+if [ "$(chroot ${prefix} lsb_release -is)" = "Ubuntu" ] && \
+    dpkg --compare-versions "$(chroot ${prefix} lsb_release -rs)" ge 8.10; then
+    sed -i -e 's/xvc0/hvc0/' ${prefix}/etc/event.d/tty1
+    sed -i -e 's/console=ttyS0[^ ]*/console=hvc0/' ${prefix}/boot/grub/menu.lst
+fi
+
+#
+# Since pv_ops kernels force block device names to xvda, xvdb, etc,
+# the default root value of root=/dev/hda won't actually help us.
+#
+# To work around that, find a UUID for the swap and root partitions
+# and use that in the grub config (and also in /etc/fstab)
+#
+ROOT_DEV="$(perl -e 'print $ENV{"image-dev"}')"
+SWAP_DEV="$(perl -e 'print $ENV{"swap-dev"}')"
+ROOT_UUID="$(vol_id --uuid "$ROOT_DEV")"
+SWAP_UUID="$(vol_id --uuid "$SWAP_DEV")"
+for i in $(seq 1 "$NUMPARTITIONS"); do
+    var="PARTITION${i}"
+    case "$(echo ${!var} | cut -f1 -d:)" in
+        disk) ROOT_GUEST="$(echo ${!var} | cut -f8 -d:)";;
+        swap) SWAP_GUEST="$(echo ${!var} | cut -f8 -d:)";;
+    esac
+done
+sed -i -e "s#root=[^ ]*#root=UUID=$ROOT_UUID#" ${prefix}/boot/grub/menu.lst
+sed -i -e "s#${ROOT_GUEST}#${ROOT_UUID}#" ${prefix}/etc/fstab
+sed -i -e "s#${SWAP_GUEST}#${SWAP_UUID}#" ${prefix}/etc/fstab
+
+#
+# Regenerate automagic kernels list, saving our changes
+#
+chroot ${prefix} env UCF_FORCE_CONFFOLD=1 /usr/sbin/update-grub -y
 
 #
 # Log our finish