|
Packit Service |
509fd4 |
#!/bin/bash
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
#
|
|
Packit Service |
509fd4 |
# deploy-qemu IMAGE USERDATA
|
|
Packit Service |
509fd4 |
#
|
|
Packit Service |
509fd4 |
# Starts an ephemeral virtual machine in qemu, injecting configuration via
|
|
Packit Service |
509fd4 |
# cloud-init. Stopping this script stops the VM and discards all data.
|
|
Packit Service |
509fd4 |
#
|
|
Packit Service |
509fd4 |
# IMAGE -- An os image that can be booted by qemu and has cloud-init
|
|
Packit Service |
509fd4 |
# installed and enabled. No changes are made to this file.
|
|
Packit Service |
509fd4 |
#
|
|
Packit Service |
509fd4 |
# USERDATA -- A cloud-init user-data config file, or a directory of
|
|
Packit Service |
509fd4 |
# configuration as accepted by the `gen-user-data` tool.
|
|
Packit Service |
509fd4 |
#
|
|
Packit Service |
509fd4 |
# In addition, if the QEMU_EXTRA_ARGS environment variable is defined, it adds
|
|
Packit Service |
509fd4 |
# its content as additional arguments to qemu.
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
set -euo pipefail
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
3a6627 |
if [[ "$#" != 2 ]]; then
|
|
Packit Service |
509fd4 |
echo "usage: $0 IMAGE USERDATA"
|
|
Packit Service |
509fd4 |
exit 1
|
|
Packit Service |
509fd4 |
fi
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
scriptdir=$(dirname "$0")
|
|
Packit Service |
509fd4 |
image=$1
|
|
Packit Service |
509fd4 |
userdata=$2
|
|
Packit Service |
509fd4 |
read -ra qemu_extra_args <<< "${QEMU_EXTRA_ARGS:-}"
|
|
Packit Service |
509fd4 |
workdir=$(mktemp -d "$scriptdir/qemu-tmp-XXXXXX")
|
|
Packit Service |
509fd4 |
function cleanup() {
|
|
Packit Service |
509fd4 |
rm -rf "$workdir"
|
|
Packit Service |
509fd4 |
}
|
|
Packit Service |
509fd4 |
trap cleanup EXIT
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
mkdir "$workdir/cidata"
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
if [ -d "$userdata" ]; then
|
|
Packit Service |
509fd4 |
"$scriptdir/gen-user-data" "$userdata" > "$workdir/cidata/user-data"
|
|
Packit Service |
509fd4 |
else
|
|
Packit Service |
509fd4 |
cp "$userdata" "$workdir/cidata/user-data"
|
|
Packit Service |
509fd4 |
fi
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
echo -e "instance-id: nocloud\nlocal-hostname: vm\n" > "$workdir/cidata/meta-data"
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
case $(uname -s) in
|
|
Packit Service |
509fd4 |
"Linux")
|
|
Packit Service |
509fd4 |
genisoimage \
|
|
Packit Service |
509fd4 |
-input-charset utf-8 \
|
|
Packit Service |
509fd4 |
-output "$workdir/cloudinit.iso" \
|
|
Packit Service |
509fd4 |
-volid cidata \
|
|
Packit Service |
509fd4 |
-joliet \
|
|
Packit Service |
509fd4 |
-rock \
|
|
Packit Service |
509fd4 |
-quiet \
|
|
Packit Service |
509fd4 |
-graft-points \
|
|
Packit Service |
509fd4 |
"$workdir/cidata/user-data" \
|
|
Packit Service |
509fd4 |
"$workdir/cidata/meta-data"
|
|
Packit Service |
509fd4 |
;;
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
"Darwin")
|
|
Packit Service |
509fd4 |
# conviently uses the last component of source as volumeid, which has to be cidata
|
|
Packit Service |
509fd4 |
hdiutil makehybrid -iso -joliet -o "$workdir/cloudinit.iso" "$workdir/cidata"
|
|
Packit Service |
509fd4 |
;;
|
|
Packit Service |
509fd4 |
esac
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
qemu-system-x86_64 \
|
|
Packit Service |
509fd4 |
-M accel=kvm:hvf \
|
|
Packit Service |
509fd4 |
-m 1024 \
|
|
Packit Service |
509fd4 |
-snapshot \
|
|
Packit Service |
509fd4 |
-cpu host \
|
|
Packit Service |
509fd4 |
-net nic,model=virtio \
|
|
Packit Service |
509fd4 |
-net user,hostfwd=tcp::2222-:22,hostfwd=tcp::4430-:443 \
|
|
Packit Service |
509fd4 |
-cdrom "$workdir/cloudinit.iso" \
|
|
Packit Service |
509fd4 |
"${qemu_extra_args[@]}" "$image"
|