X-Git-Url: https://git.madduck.net/code/vinst.git/blobdiff_plain/6a3968790b2b2704e57aa4d0e272fb4abbc3d369..44c183155e8e208d4b381c63b92fcb910abc4c85:/vinst diff --git a/vinst b/vinst index dc0b82b..2de250e 100755 --- a/vinst +++ b/vinst @@ -15,6 +15,9 @@ RESTART=0 while [ -n "$1" ]; do case "$1" in + (--debug) + DEBUG=1 + ;; (-n|--name) shift if [ -z "$1" ]; then @@ -73,11 +76,19 @@ while [ -n "$1" ]; do (-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" + ;; (--debug) DEBUG=1 set -vx @@ -85,7 +96,7 @@ while [ -n "$1" ]; do (--wipe) WIPE=1 ;; - (--console) + (--restart) RESTART=1 ;; esac @@ -102,10 +113,15 @@ BASEDIR=$(cd ${0%/*}; pwd) tmpdir=$(mktemp -d) tar -C $BASEDIR/preseed/$SUITE -cf $tmpdir/commands.tar commands -extra_args="auto $CONSOLE \ +extra_kargs="auto $CONSOLE \ hostname=${HOSTNAME%%.*} \ domain=${HOSTNAME#*.}" +extra_opts= +if [ -n "$DEBUG" ]; then + extra_opts='--debug' +fi + if [ -n "$IPADDRESS" ]; then if [ -z "$GATEWAY" ] && [ -x $(command -v ipcalc) ]; then # default to the first IP in the network @@ -115,7 +131,7 @@ if [ -n "$IPADDRESS" ]; 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 \ @@ -124,7 +140,7 @@ if [ -n "$IPADDRESS" ]; then BRIDGE=wan else - extra_args="$extra_args netcfg/disable_dhcp=false" + extra_kargs="$extra_kargs netcfg/disable_dhcp=false" BRIDGE=virt-br fi @@ -132,6 +148,11 @@ if [ -z "$ARCH" ]; then ARCH=$(dpkg --print-architecture) fi +if [ -z "$MAC" ]; then + bytes=$(dd status=none 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 @@ -141,6 +162,7 @@ cat >&2 <<_eof console: $CONSOLE restart: $RESTART net bridge: $BRIDGE +macaddress: $MAC _eof if [ -n "$IPADDRESS" ]; then cat >&2 <<_eof @@ -159,6 +181,7 @@ echo >&2 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 @@ -172,7 +195,7 @@ virt-install --connect=$QEMU_URI \ -n $HOSTNAME \ -r $RAM \ --disk vol=$STORAGE_POOL/virt-$HOSTNAME \ - -w bridge=$BRIDGE \ + --network bridge=$BRIDGE,mac=$MAC \ --graphics=vnc \ --serial=pty \ --watchdog i6300esb,action=reset \ @@ -180,12 +203,12 @@ virt-install --connect=$QEMU_URI \ -l $BASEDIR/installer-amd64 \ --initrd-inject=$BASEDIR/preseed/$SUITE/preseed.cfg \ --initrd-inject=$tmpdir/commands.tar \ - --noautoconsole --autostart \ - --extra-args="$extra_args" \ + --prompt --noautoconsole --autostart \ + --extra-args="$extra_kargs" \ "$@" virsh --connect=$QEMU_URI console $HOSTNAME -if [ $RESTART = 1]; then +if [ $RESTART = 1 ]; then virsh --connect=$QEMU_URI "start $HOSTNAME; console $HOSTNAME" fi