aboutsummaryrefslogtreecommitdiffstats
path: root/tdfvm-install
diff options
context:
space:
mode:
authorGuilhem Moulin <guilhem@libreoffice.org>2016-10-21 13:52:24 +0200
committerGuilhem Moulin <guilhem@libreoffice.org>2016-10-21 13:52:24 +0200
commite324d0869ac128eae33ab34cb360570290d851c0 (patch)
treec653537c1ae82f9d49685ddb8e6abf8f1e0e41d6 /tdfvm-install
parent7258b7506f51f6863e5fbe5de178636fb246c831 (diff)
Export libvirt's XML definition before auto-generation.
The file contains an autogenerated UUID for the domain and a MAC address for each NIC, but no autogenerated socket name or PCI address. Expanded information, such as CPU features exposed to the guest, are not exported either.
Diffstat (limited to 'tdfvm-install')
-rwxr-xr-xtdfvm-install47
1 files changed, 22 insertions, 25 deletions
diff --git a/tdfvm-install b/tdfvm-install
index 54a0e63..0497e98 100755
--- a/tdfvm-install
+++ b/tdfvm-install
@@ -29,7 +29,7 @@ GRAPHICS="none"
NETWORK="none"
unset MEMORY
unset DISK
-TRANSIENT=
+TRANSIENT=n
HELP_MESSAGE="$(cat <<-EOF
Install a new VM in an unattended fashion
@@ -80,7 +80,7 @@ while [ $# -gt 0 ]; do
--memory=*) MEMORY="${1#--memory=}";;
--disk) DISK="$2"; shift;;
--disk=*) DISK="${1#--disk=}";;
- --transient) TRANSIENT='--transient';;
+ --transient) TRANSIENT=y;;
--help|-\?) printf '%s\n' "$HELP_MESSAGE"; exit;;
-*) usage "$1";;
@@ -240,29 +240,25 @@ virt-install -q --connect "$LIBVIRT_URI" \
--filesystem "source=$VMTMPDIR/virtfs,target=virtfs" \
--network "$NETWORK" \
--graphics "$GRAPHICS" \
- --noautoconsole $TRANSIENT
-
-(
- vmdef="$(mktemp --tmpdir)"
- trap 'rm -f "$vmdef"' EXIT TERM INT
- virsh -c "$LIBVIRT_URI" dumpxml "$VM_NAME" >"$vmdef"
-
- for xpath in \
- "/domain/devices/filesystem[source/@dir=\"$VMTMPDIR/virtfs\"][target/@dir='virtfs']" \
- "/domain/devices/disk[@type='file'][@device='cdrom']"; do
- if [ -z "$TRANSIENT" ]; then
- virsh -c "$LIBVIRT_URI" --quiet detach-device --config "$VM_NAME" \
- <(xmlstarlet select --template --copy-of "$xpath" <"$vmdef")
- elif [ ${OUTPUT+x} ]; then
- xmlstarlet edit --inplace --delete "$xpath" "$vmdef"
- fi
- done
-
- # remove libvirt-generated UNIX socket
- xpath="/domain/devices/graphics/listen[@type='socket'][starts-with(@socket,'/var/lib/libvirt/qemu/domain-')]/@socket"
- xmlstarlet edit --inplace --delete "$xpath" "$vmdef"
- [ ! ${OUTPUT+x} ] || cp --no-preserve=mode "$vmdef" "$OUTPUT/$VM_NAME.xml"
-)
+ --controller "virtio-serial" \
+ --noautoconsole \
+ --print-xml 1 >"$VMTMPDIR/domain.xml"
+
+virsh -c "$LIBVIRT_URI" create "$VMTMPDIR/domain.xml"
+
+# never boot again on CDROM, detach unnecessary devices and remove
+# unnecessary controllers
+xmlstarlet edit --inplace \
+ --delete "/domain/os/boot[@dev='cdrom']" \
+ --delete "/domain/devices/filesystem[source/@dir='$VMTMPDIR/virtfs'][target/@dir='virtfs']" \
+ --delete "/domain/devices/disk[@type='file'][@device='cdrom']" \
+ --delete "/domain/devices/sound" \
+ --delete "/domain/devices/controller[@type='usb']" \
+ --delete "/domain/devices/input[@type='tablet'][@bus='usb']" \
+ --delete "/domain/devices/redirdev[@type='spicevmc'][@bus='usb']" \
+ "$VMTMPDIR/domain.xml"
+
+[ "$TRANSIENT" = y ] || virsh -c "$LIBVIRT_URI" define "$VMTMPDIR/domain.xml"
# wait until the VM terminates (there is actually a race condition here,
# but the XML massaging above should be faster than any install)
@@ -287,6 +283,7 @@ virsh -c "$LIBVIRT_URI" console "$VM_NAME" --safe >/dev/null
) >&2
if [ ${OUTPUT+x} ]; then
+ cp --no-preserve=mode "$VMTMPDIR/domain.xml" "$OUTPUT/$VM_NAME.xml"
find "$VMTMPDIR/virtfs" -name '*.pub' -print0 \
| xargs -r0 cp --no-preserve=mode -t "$OUTPUT"
printf "\nExported files:\n" >&2