| #!/bin/sh |
| # Copyright 2014 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # This is a helper script to be create libvirt VM for factory server |
| # testing. |
| # |
| # Usage: |
| # Create Umpire VM: |
| # ./uvt_umpire.sh |
| # Remove previous Umpire VM and create a new one: |
| # ./uvt_umpire.sh -f |
| # Get Umpire IP address: |
| # uvt-kvm ip umpire |
| # Connect to Umpire VM: |
| # uvt-kvm ssh umpire --insecure |
| # Change host DHCP range: |
| # virsh net-edit default |
| # |
| |
| SCRIPT_DIR="$(dirname "$(readlink -f "$0")")" |
| |
| # uvtools/libvirt domain |
| VM_DOMAIN="umpire" |
| # debian/ubuntu distribution |
| VM_ARCH="amd64" |
| VM_RELEASE="trusty" |
| # memory size in MiB |
| VM_MEMORY=2048 |
| # number of cpus |
| VM_CPU=1 |
| # disk size in GiB |
| VM_DISK=32 |
| # ssh public key file name, place in same directory as this script |
| VM_PUBLIC_KEY=$SCRIPT_DIR/../sshkeys/testing_rsa.pub |
| # extra packages to install |
| VM_PACKAGES="linux-image-generic,python-yaml,python-netifaces,python-pexpect,"\ |
| "python-numpy,python-twisted,python-twisted-web,python-protobuf,lighttpd,"\ |
| "python-flup,unzip,parallel,pbzip2,pigz,binutils,sharutils,rsync,aptitude,"\ |
| "screen,vim,psmisc,dbus,ssh,htop" |
| |
| # host dependencies |
| HOST_REQUIRED_PACKAGES="uvtool-libvirt qemu-kvm" |
| |
| # get script base directory |
| BASE_DIR=$(dirname $(readlink -f $0)) |
| |
| |
| # check and install debian package |
| may_install_system_dependencies() { |
| local pkg_name="$1" |
| echo "$(date): Check package $pkg_name" |
| if ! dpkg -s "$pkg_name" 2>/dev/null | |
| grep -q "Status: install ok installed"; then |
| echo "$(date): Install package $pkg_name" |
| sudo apt-get install $pkg_name |
| fi |
| } |
| |
| |
| # sync uvtool distro |
| may_sync_uvtool_distro() { |
| local not_found=1 |
| uvt-simplestreams-libvirt query arch="$VM_ARCH" release="$VM_RELEASE" | |
| grep -q "release=$VM_RELEASE" && not_found=0 |
| if [ "$not_found" != "0" ]; then |
| echo "$(date): Synchronize distro $VM_RELEASE" |
| uvt-simplestreams-libvirt sync arch="$VM_ARCH" release="$VM_RELEASE" |
| uvt-simplestreams-libvirt query |
| echo "$(date): Synchronized" |
| fi |
| } |
| |
| |
| # install host dependencies |
| for pkg_name in $HOST_REQUIRED_PACKAGES; do |
| may_install_system_dependencies $pkg_name |
| done |
| |
| # add current user to libvirtd group |
| if ! grep libvirtd: /etc/group | grep -q $(id -un); then |
| echo -n "$(date): Add $(id -un) to group libvirtd" |
| sudo usermod -G libvirtd $(id -un) |
| fi |
| |
| # log out and back in if needed |
| if ! groups | grep -q libvirtd; then |
| # logout current session and login again |
| echo "**************************************************" |
| echo "* After changing user group, you will need to *" |
| echo "* log out and back in for the group membership *" |
| echo "* to take effect. *" |
| echo "**************************************************" |
| read -p "Press enter to continue ..." |
| gnome-session-quit --force > /dev/null 2>&1 |
| if [ -f /etc/init/lightdm ]; then |
| if initctl status lightdm | grep -q running; then |
| sudo initctl restart lightdm |
| fi |
| fi |
| if [ -f /etc/init/gdm ]; then |
| if initctl status gdm | grep -q running; then |
| sudo initctl restart gdm |
| fi |
| fi |
| exit |
| else |
| groups | grep --color=always libvirtd |
| fi |
| |
| |
| exist=$(uvt-kvm list | grep $VM_DOMAIN 2>/dev/null) |
| if [ "$1" = "-f" -o "$1" = "--force" -o "$exist" = "" ]; then |
| if [ "$exist" = "$VM_DOMAIN" ]; then |
| echo "Removing existing domain $VM_DOMAIN" |
| uvt-kvm destroy "$VM_DOMAIN" |
| fi |
| may_sync_uvtool_distro |
| echo "$(date): Creating domain $VM_DOMAIN" |
| uvt-kvm create "$VM_DOMAIN" release="$VM_RELEASE" \ |
| --memory "$VM_MEMORY" \ |
| --cpu "$VM_CPU" \ |
| --disk "$VM_DISK" \ |
| --ssh-public-key-file "$BASE_DIR/$VM_PUBLIC_KEY" \ |
| --packages "$VM_PACKAGES" |
| echo "$(date): Waiting for $VM_DOMAIN installation to complete" |
| uvt-kvm wait "$VM_DOMAIN" --insecure |
| echo "$(date): Done!" |
| fi |