summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/scripts/kvm-cloud/cloudinit.txt16
-rwxr-xr-xcommon/scripts/kvm-cloud/start-kvm.sh157
-rwxr-xr-xcommon/scripts/kvm-cloud/wait-ip.py24
3 files changed, 197 insertions, 0 deletions
diff --git a/common/scripts/kvm-cloud/cloudinit.txt b/common/scripts/kvm-cloud/cloudinit.txt
new file mode 100644
index 0000000..d9363f1
--- /dev/null
+++ b/common/scripts/kvm-cloud/cloudinit.txt
@@ -0,0 +1,16 @@
+#cloud-config
+
+users:
+ - name: linaro
+ ssh-authorized-keys:
+ - LAVA_KEY
+ sudo: ['ALL=(ALL) NOPASSWD:ALL']
+ groups: sudo
+ shell: /bin/bash
+
+runcmd:
+ - cp /home/linaro/.ssh/authorized_keys /root/.ssh/authorized_keys
+ - chown root:root /root/.ssh/authorized_keys
+
+phone_home:
+ url: http://LOCALIP:8080/
diff --git a/common/scripts/kvm-cloud/start-kvm.sh b/common/scripts/kvm-cloud/start-kvm.sh
new file mode 100755
index 0000000..ff3922b
--- /dev/null
+++ b/common/scripts/kvm-cloud/start-kvm.sh
@@ -0,0 +1,157 @@
+#!/bin/bash
+#
+# Copyright (C) 2010 - 2016, Linaro Limited.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Maintainer: Riku Voipio <riku.voipio@linaro.org>
+
+# Create cloud-config image to set up credentials for image
+configure_guest()
+{
+ IP=`ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/'`
+ SSH_KEY=`head -1 /root/.ssh/authorized_keys||head -1 $HOME/.ssh/authorized_keys`
+ sed -e "s,LAVA_KEY,$SSH_KEY,g" -e "s,LOCALIP,$IP,g" common/scripts/kvm-cloud/cloudinit.txt > cloudinit.tmp
+ cat cloudinit.tmp
+ cloud-localds cloud.img cloudinit.tmp
+}
+
+# Download url and puts the filename of downloaded file in first argument
+download_file()
+{
+ local _outvar=$1
+ local url=$2
+ local filename=`basename $url`
+ if [ ! -e $filename ]
+ then
+ if [ -z $url -o $url = none ]
+ then
+ >&2 echo "Error, url for $_outvar not set!"
+ exit 2
+ fi
+ if ! curl --retry 3 -SOL -# $url
+ then
+ >&2 echo "Error downloading $url for $_outvar"
+ exit 3
+ fi
+ fi
+ eval $_outvar=\$filename
+}
+
+start_qemu_x86_64_aarch64()
+{
+ image=$1
+ configimage=$2
+ download_file efi $GUEST_FIRMWARE
+
+ qemu-system-aarch64 -smp 2 -m 1024 -cpu cortex-a57 -M virt \
+ -bios $efi \
+ -device virtio-blk-device,drive=image \
+ -drive if=none,id=image,file=$image \
+ -device virtio-blk-device,drive=cloud \
+ -drive if=none,id=cloud,file=$configimage \
+ -device virtio-net-device,netdev=tap0 -netdev tap,id=tap0,script=no,downscript=no,ifname=tap0 \
+ -daemonize -display vnc=none \
+ -serial file:qemu_aarch64.txt
+}
+
+start_qemu_aarch64_aarch64()
+{
+ image=$1
+ configimage=$2
+ download_file efi $GUEST_FIRMWARE
+
+ qemu-system-aarch64 -smp 2 -m 1024 -cpu host -M virt \
+ -bios $efi \
+ -device virtio-blk-device,drive=image \
+ -drive if=none,id=image,file=$image \
+ -device virtio-blk-device,drive=cloud \
+ -drive if=none,id=cloud,file=$configimage \
+ -device virtio-net-device,netdev=tap0 -netdev tap,id=tap0,script=no,downscript=no,ifname=tap0 \
+ -daemonize -enable-kvm -display vnc=none \
+ -serial file:kvm-aarch64_aarch64.txt
+}
+
+start_qemu_x86_64_armv7l()
+{
+ image=$1
+ configimage=$2
+ download_file kernel $GUEST_KERNEL
+
+ qemu-system-arm -smp 2 -m 1024 -cpu cortex-a15 -M virt \
+ -kernel $kernel \
+ -append 'root=/dev/vdb1 rw rootwait mem=1024M console=ttyAMA0,38400n8' \
+ -device virtio-blk-device,drive=image \
+ -drive if=none,id=image,file=$image \
+ -device virtio-blk-device,drive=cloud \
+ -drive if=none,id=cloud,file=$configimage \
+ -device virtio-net-device,netdev=tap0 -netdev tap,id=tap0,script=no,downscript=no,ifname=tap0 \
+ -daemonize -display vnc=none \
+ -serial file:qemu_armv7l.txt
+}
+
+start_qemu_aarch64_armv7l()
+{
+ image=$1
+ configimage=$2
+ download_file kernel $GUEST_KERNEL
+
+ qemu-system-aarch64 -smp 2 -m 1024 -cpu host,aarch64=off -M virt \
+ -kernel $kernel \
+ -append 'root=/dev/vdb1 rw rootwait mem=1024M console=ttyAMA0,38400n8' \
+ -device virtio-blk-device,drive=image \
+ -drive if=none,id=image,file=$image \
+ -device virtio-blk-device,drive=cloud \
+ -drive if=none,id=cloud,file=$configimage \
+ -device virtio-net-device,netdev=tap0 -netdev tap,id=tap0,script=no,downscript=no,ifname=tap0 \
+ -daemonize -enable-kvm -display vnc=none \
+ -serial file:kvm-aarch64_armv7l.txt
+}
+
+start_qemu_armv7l_armv7l()
+{
+ image=$1
+ configimage=$2
+ download_file kernel $GUEST_KERNEL
+
+ qemu-system-arm -smp 2 -m 1024 -cpu cortex-a15 -M vexpress-a15 \
+ -kernel $kernel \
+ -append 'root=/dev/vdb1 rw rootwait mem=1024M console=ttyAMA0,38400n8' \
+ -device virtio-blk-device,drive=image \
+ -drive if=none,id=image,file=$image \
+ -device virtio-blk-device,drive=cloud \
+ -drive if=none,id=cloud,file=$configimage \
+ -device virtio-net-device,netdev=tap0 -netdev tap,id=tap0,script=no,downscript=no,ifname=tap0 \
+ -daemonize -enable-kvm -display vnc=none \
+ -serial file:kvm-armv7l_armv7l.txt
+}
+
+# This testcase expects a predefined br0 to connect to
+tunctl -u root
+ifconfig tap0 0.0.0.0 up
+brctl addif br0 tap0
+
+ARCH=`uname -m`
+GUEST_ARCH=$1
+GUEST_IMAGE=$2
+GUEST_FIRMWARE=$3
+GUEST_KERNEL=$4
+
+download_file IMAGE $GUEST_IMAGE
+configure_guest
+
+start_qemu_${ARCH}_${GUEST_ARCH} ${IMAGE} cloud.img
+sleep 10
+tail *.txt
diff --git a/common/scripts/kvm-cloud/wait-ip.py b/common/scripts/kvm-cloud/wait-ip.py
new file mode 100755
index 0000000..392fc8c
--- /dev/null
+++ b/common/scripts/kvm-cloud/wait-ip.py
@@ -0,0 +1,24 @@
+#!/usr/bin/python
+# Wait for a HTTP post and echo the IP of the first visitor
+
+from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
+
+class MyHandler(BaseHTTPRequestHandler):
+ def returnIP(self):
+ self.send_response(200)
+ self.end_headers()
+ print self.client_address[0]
+ return
+
+ def log_message(self, format, *args):
+ return
+
+ def do_POST(self):
+ self.returnIP()
+
+ def do_GET(self):
+ self.returnIP()
+
+server = HTTPServer(('', 8080), MyHandler)
+server.handle_request()
+