#!/bin/bash # # This script sets up the ParaVM to use pygrub # prefix=$1 # # Source our common functions # if [ -e /usr/lib/xen-tools/common.sh ]; then . /usr/lib/xen-tools/common.sh else . ./hooks/common.sh fi echo SCRIPT = $0 dir=`dirname "$0"` logMessage Script $0 starting # # Install the xen kernel. linux-image-xen is in ubuntu, # linux-image-xen-{amd64,686} in debian. # 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 # # Make the /boot/grub directory # mkdir -p ${prefix}/boot/grub # # Create stock menu.lst # chroot ${prefix} /usr/sbin/update-grub -y # # Patches to add xen kernels, use serial console, etc. # for patch in $dir/patches/*; do patch -l -d ${prefix} -p1 < $patch done # # If this is a pv_ops kernel, then we need to make some more changes # to make the console work right # 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 -re "s%^([= ]root=)[^ ]*%\1UUID=$ROOT_UUID%" ${prefix}/boot/grub/menu.lst sed -i -e "s%${ROOT_GUEST}%UUID=${ROOT_UUID}%" ${prefix}/etc/fstab sed -i -e "s%${SWAP_GUEST}%UUID=${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 # logMessage Script $0 finished