# defaults
RAM=512
DISK=20
+CPUS=1
STORAGE_POOL=default
QEMU_URI=qemu:///system
SUITE=wheezy
CONSOLE='console=tty0 console=ttyS0,115200n8'
DEBUG=0
+WIPE=0
+RESTART=0
while [ -n "$1" ]; do
case "$1" in
+ (--debug)
+ DEBUG=1
+ ;;
+ (-S|--suite)
+ shift
+ if [ -z "$1" ]; then
+ echo >&2 'E: --suite/-S needs suite argument'
+ exit 1
+ fi
+ SUITE="$1"
+ ;;
(-n|--name)
shift
if [ -z "$1" ]; then
(-a|--arch)
shift
if [ -z "$1" ]; then
- echo >&2 'E: --arch/-a needs size argument'
+ echo >&2 'E: --arch/-a needs arch argument'
exit 1
fi
ARCH="$1"
;;
+ (-m|--mac)
+ shift
+ if [ -z "$1" ]; then
+ echo >&2 'E: --mac/-m needs mac address argument'
+ exit 1
+ fi
+ MAC="$1"
+ ;;
+ (-c|--cpus)
+ shift
+ if [ -z "$1" ]; then
+ echo >&2 'E: --cpus/-c needs integer argument'
+ exit 1
+ fi
+ CPUS="$1"
+ ;;
(--debug)
DEBUG=1
+ set -vx
+ ;;
+ (--wipe)
+ WIPE=1
+ ;;
+ (--restart)
+ RESTART=1
;;
esac
shift
tmpdir=$(mktemp -d)
tar -C $BASEDIR/preseed/$SUITE -cf $tmpdir/commands.tar commands
-extra_args="auto $CONSOLE \
-hostname=${HOSTNAME%%.*} \
-domain=${HOSTNAME#*.}"
+extra_kargs="auto $CONSOLE \
+netcfg/hostname=${HOSTNAME%%.*} \
+netcfg/domain=${HOSTNAME#*.}"
+
+extra_opts=
+if [ -n "$DEBUG" ]; then
+ extra_opts='--debug'
+fi
if [ -n "$IPADDRESS" ]; then
if [ -z "$GATEWAY" ] && [ -x $(command -v ipcalc) ]; then
IPADDRESS="${IPADDRESS%/*}"
: ${NAMESERVER:=$GATEWAY}
- extra_args="$extra_args netcfg/disable_dhcp=true \
+ extra_kargs="$extra_kargs netcfg/disable_dhcp=true \
netcfg/get_ipaddress=$IPADDRESS \
netcfg/get_netmask=$NETMASK \
netcfg/get_gateway=$GATEWAY \
BRIDGE=wan
else
- extra_args="$extra_args netcfg/disable_dhcp=false"
+ extra_kargs="$extra_kargs netcfg/disable_dhcp=false"
BRIDGE=virt-br
fi
ARCH=$(dpkg --print-architecture)
fi
+if [ -z "$MAC" ]; then
+ bytes=$(dd status=noxfer if=/dev/urandom bs=3 count=1 | hexdump -v -e '/1 ":%02X"')
+ MAC=52:54:00$bytes
+fi
+
cat >&2 <<_eof
hostname: $HOSTNAME
arch: $ARCH
+ suite: $SUITE
ram: $RAM MiB
disk: $DISK GiB
+ cpus: $CPUS
+ wipe: $WIPE
console: $CONSOLE
+ restart: $RESTART
net bridge: $BRIDGE
+macaddress: $MAC
_eof
if [ -n "$IPADDRESS" ]; then
cat >&2 <<_eof
echo >&2
-set -v
virsh --connect=$QEMU_URI vol-create-as $STORAGE_POOL virt-$HOSTNAME ${DISK}G
+if [ $WIPE = 1 ]; then
+ echo >&2 "Wiping disk…"
+ virsh --connect=$QEMU_URI vol-wipe --pool $STORAGE_POOL --algorithm zero virt-$HOSTNAME
+fi
-[ $DEBUG = 1 ] && DEBUGFLAG=--debug
+if [ $DEBUG = 1 ]; then
+ DEBUGFLAG=--debug
+ extra_args="$extra_args DEBCONF_DEBUG=5"
+fi
virt-install --connect=$QEMU_URI \
${DEBUGFLAG:-} \
-n $HOSTNAME \
+ --vcpus=$CPUS \
-r $RAM \
--disk vol=$STORAGE_POOL/virt-$HOSTNAME \
- -w bridge=$BRIDGE \
+ --network bridge=$BRIDGE,mac=$MAC \
--graphics=vnc \
--serial=pty \
--watchdog i6300esb,action=reset \
- --os-variant=debian$SUITE \
- -l $BASEDIR/installer-amd64 \
+ --os-variant=debianwheezy \
--initrd-inject=$BASEDIR/preseed/$SUITE/preseed.cfg \
--initrd-inject=$tmpdir/commands.tar \
- --noautoconsole --autostart \
- --extra-args="$extra_args" \
+ --extra-args="$extra_kargs" \
+ --prompt --noautoconsole --autostart $extra_opts \
+ -l $BASEDIR/installer-amd64/$SUITE \
"$@"
virsh --connect=$QEMU_URI console $HOSTNAME
-virsh --connect=$QEMU_URI "start $HOSTNAME; console $HOSTNAME"
+
+if [ $RESTART = 1 ]; then
+ sleep 5
+ virsh --connect=$QEMU_URI "start $HOSTNAME; console $HOSTNAME"
+fi