| Index: lib/cros_vm_lib.sh
|
| diff --git a/lib/cros_vm_lib.sh b/lib/cros_vm_lib.sh
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..61d575bfff6bd4b9197f230d8e07163e30547670
|
| --- /dev/null
|
| +++ b/lib/cros_vm_lib.sh
|
| @@ -0,0 +1,73 @@
|
| +# Copyright (c) 2010 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.
|
| +#
|
| +# Common vm functions for use in crosutils.
|
| +
|
| +DEFINE_string kvm_pid "" \
|
| + "Use this pid file. If it exists and is set, use the vm specified by pid."
|
| +DEFINE_boolean no_graphics ${FLAGS_FALSE} "Runs the KVM instance silently."
|
| +DEFINE_boolean persist "${FLAGS_FALSE}" "Persist vm."
|
| +DEFINE_boolean snapshot ${FLAGS_FALSE} "Don't commit changes to image."
|
| +DEFINE_integer ssh_port 9222 "Port to tunnel ssh traffic over."
|
| +
|
| +
|
| +KVM_PID_FILE=/tmp/kvm.$$.pid
|
| +
|
| +function get_pid() {
|
| + sudo cat "${KVM_PID_FILE}"
|
| +}
|
| +
|
| +# TODO(rtc): These flags assume that we'll be using KVM on Lucid and won't work
|
| +# on Hardy.
|
| +# $1: Path to the virtual image to start.
|
| +function start_kvm() {
|
| + # Override default pid file.
|
| + [ -n "${FLAGS_kvm_pid}" ] && KVM_PID_FILE=${FLAGS_kvm_pid}
|
| + if [ -e "${KVM_PID_FILE}" ]; then
|
| + local pid=$(get_pid)
|
| + # Check if the process exists.
|
| + if ps -p ${pid} > /dev/null ; then
|
| + echo "Using a pre-created KVM instance specified by ${FLAGS_kvm_pid}."
|
| + else
|
| + # Let's be safe in case they specified a file that isn't a pid file.
|
| + echo "File ${KVM_PID_FILE} exists but specified pid doesn't."
|
| + exit 1
|
| + fi
|
| + else
|
| + # No pid specified by PID file. Let's create a VM instance in this case.
|
| + echo "Starting a KVM instance"
|
| + local nographics=""
|
| + local usesnapshot=""
|
| + if [ ${FLAGS_no_graphics} -eq ${FLAGS_TRUE} ]; then
|
| + nographics="-nographic"
|
| + fi
|
| +
|
| + if [ ${FLAGS_snapshot} -eq ${FLAGS_TRUE} ]; then
|
| + snapshot="-snapshot"
|
| + fi
|
| +
|
| + sudo kvm -m 1024 \
|
| + -vga std \
|
| + -pidfile "${KVM_PID_FILE}" \
|
| + -daemonize \
|
| + -net nic \
|
| + ${nographics} \
|
| + ${snapshot} \
|
| + -net user,hostfwd=tcp::${FLAGS_ssh_port}-:22 \
|
| + -hda "${1}"
|
| + fi
|
| +}
|
| +
|
| +function stop_kvm() {
|
| + if [ "${FLAGS_persist}" -eq "${FLAGS_TRUE}" ]; then
|
| + echo "Persist requested. Use --ssh_port ${FLAGS_ssh_port} " \
|
| + "--kvm_pid ${KVM_PID_FILE} to re-connect to it."
|
| + else
|
| + echo "Stopping the KVM instance"
|
| + local pid=$(get_pid)
|
| + echo "Killing ${pid}"
|
| + sudo kill ${pid}
|
| + sudo rm "${KVM_PID_FILE}"
|
| + fi
|
| +}
|
|
|