Script to create a modified xen domU
Posted 02-04-2010 at 03:06 AM by zhjim
Just for me and all that can use it. Heres a script I wrote to create a domU filesystem from a directory. All values are taken from the xen config script for the domU and are later sed'ed.
Code:
#!/bin/bash
if [ $# -ne 1 ]; then
echo "Usage: $0 /path/to/domU_config " #/dev/name | /path/to/dir"
exit -1
fi
CONF=$1
TARGET=$2
IMG=./new_strap
#HOSTNAME=$(grep "name" $CONF)
#DEVICE=$(grep "disk" $CONF)
#IP=$(grep "vif" $CONF)
for i in name disk vif netmask gateway; do
DUMMY=$(grep "^[::space::]*$i" $CONF)
DUMMY=$(echo $DUMMY | cut -d = -f 2-)
# Get middle of "
DUMMY=$(echo $DUMMY | sed 's/^.*"\(.*\)".*$/\1/g') #DUMMY=${DUMMY#*\"}; #DUMMY=${DUMMY%*\"}
# Get middle of '
DUMMY=$(echo $DUMMY | sed "s/^.*'\(.*\)'.*$/\1/g") #DUMMY=${DUMMY#*\'}; #DUMMY=${DUMMY%*\'}
#echo $DUMMY
#echo "$i: $DUMMY"
eval $i=$DUMMY
#${!i}=\${$DUMMY}
done
# nicen disk
disk=$(echo $disk | cut -d ':' -f 2)
disk=$(echo $disk | cut -d ',' -f 1)
# nicen ip
#vif=$(echo $vif | cut -d '=' -f 2)
#vif=$(echo $vif | cut -d ',' -f 1)
vif=$(echo $vif | sed 's/.*ip=\(.*\)/\1/g')
DEST=$disk
#echo $DEST
if [ ! -e $DEST ]; then
echo 'Destination does not exists!'
exit -1
fi
# See if there already is a file system and if its inuse
tune2fs -l $DEST > /tmp/tune2fs-disk
START=$(grep 'First inode:' /tmp/tune2fs-disk | awk '{ print $3}')
FREE=$(grep 'Free inodes:' /tmp/tune2fs-disk | awk '{print $3}')
COUNT=$(grep 'Inode count:' /tmp/tune2fs-disk | awk '{print $3}')
if [ $COUNT -ne $((START + FREE)) ]; then
echo 'There allready is a filesystem on partition ' $DEST
echo 'and there are inodes in use.'
echo 'Not doing it!'
exit -1
fi
# got all data
# Do it
START=$(date +%s)
echo "Creating image with following options"
echo "---------------------------"
echo "Name: $name"
echo "partition: $disk"
echo "IP: $vif"
echo "Mask: $netmask"
echo "Gateway: $gateway"
echo "---------------------------"
echo "Are these correct (y/n)"
read further
if [ $further != "y" ]; then
echo "Bailing out"
exit 0
fi
echo "About to create filesystem."
echo "ALL DATA WILL BE LOST"
echo "Continue (y/n)"
read further
if [ $further != "y" ]; then
echo "Bailing out"
exit 0
fi
#exit 0
# Mount and copy
echo "Creating filesystem"
umount $disk 2> /dev/null
mke2fs -jq $disk
mkdir /media/$DEST -p
mount $disk /media$DEST
echo "Copying files"
cp -a ./$IMG/* /media/$DEST
# Sed em all
sed -ibak -e "s/%hostname%/$name/" /media/$DEST/etc/hostname
sed -ibak -e "s/%hostname%/$name/" -e "s/%ip%/$vif/" /media/$DEST/etc/hosts
sed -ibak -e "s/%ip%/$vif/" /media/$DEST/etc/network/interfaces
sed -ibak -e "s/%mask%/$netmask/" /media/$DEST/etc/network/interfaces
sed -ibak -e "s/%gw%/$gateway/" /media/$DEST/etc/network/interfaces
sed -ibak -e "s/%hostname%/$name/" /media/$DEST/etc/exim4/update-exim4.conf.conf
umount $disk
rm /media/$(dirname $DEST) -r
END=$(date +%s)
TAKEN=$((END - START))
echo "Took $TAKEN seconds to generate image"
Total Comments 0



