OLD | NEW |
1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 # | 4 # |
5 # Common vm functions for use in crosutils. | 5 # Common vm functions for use in crosutils. |
6 | 6 |
7 DEFINE_string kvm_pid "" \ | 7 DEFINE_string kvm_pid "" \ |
8 "Use this pid file. If it exists and is set, use the vm specified by pid." | 8 "Use this pid file. If it exists and is set, use the vm specified by pid." |
9 DEFINE_boolean no_graphics ${FLAGS_FALSE} "Runs the KVM instance silently." | 9 DEFINE_boolean no_graphics ${FLAGS_FALSE} "Runs the KVM instance silently." |
10 DEFINE_boolean persist "${FLAGS_FALSE}" "Persist vm." | 10 DEFINE_boolean persist "${FLAGS_FALSE}" "Persist vm." |
(...skipping 10 matching lines...) Expand all Loading... |
21 # TODO(rtc): These flags assume that we'll be using KVM on Lucid and won't work | 21 # TODO(rtc): These flags assume that we'll be using KVM on Lucid and won't work |
22 # on Hardy. | 22 # on Hardy. |
23 # $1: Path to the virtual image to start. | 23 # $1: Path to the virtual image to start. |
24 function start_kvm() { | 24 function start_kvm() { |
25 # Override default pid file. | 25 # Override default pid file. |
26 [ -n "${FLAGS_kvm_pid}" ] && KVM_PID_FILE=${FLAGS_kvm_pid} | 26 [ -n "${FLAGS_kvm_pid}" ] && KVM_PID_FILE=${FLAGS_kvm_pid} |
27 if [ -e "${KVM_PID_FILE}" ]; then | 27 if [ -e "${KVM_PID_FILE}" ]; then |
28 local pid=$(get_pid) | 28 local pid=$(get_pid) |
29 # Check if the process exists. | 29 # Check if the process exists. |
30 if ps -p ${pid} > /dev/null ; then | 30 if ps -p ${pid} > /dev/null ; then |
31 echo "Using a pre-created KVM instance specified by ${FLAGS_kvm_pid}." | 31 echo "Using a pre-created KVM instance specified by ${FLAGS_kvm_pid}." >&2 |
32 else | 32 else |
33 # Let's be safe in case they specified a file that isn't a pid file. | 33 # Let's be safe in case they specified a file that isn't a pid file. |
34 echo "File ${KVM_PID_FILE} exists but specified pid doesn't." | 34 echo "File ${KVM_PID_FILE} exists but specified pid doesn't." >&2 |
35 exit 1 | 35 exit 1 |
36 fi | 36 fi |
37 else | 37 else |
38 # No pid specified by PID file. Let's create a VM instance in this case. | 38 # No pid specified by PID file. Let's create a VM instance in this case. |
39 echo "Starting a KVM instance" | 39 echo "Starting a KVM instance" >&2 |
40 local nographics="" | 40 local nographics="" |
41 local usesnapshot="" | 41 local usesnapshot="" |
42 if [ ${FLAGS_no_graphics} -eq ${FLAGS_TRUE} ]; then | 42 if [ ${FLAGS_no_graphics} -eq ${FLAGS_TRUE} ]; then |
43 nographics="-nographic" | 43 nographics="-nographic" |
44 fi | 44 fi |
45 | 45 |
46 if [ ${FLAGS_snapshot} -eq ${FLAGS_TRUE} ]; then | 46 if [ ${FLAGS_snapshot} -eq ${FLAGS_TRUE} ]; then |
47 snapshot="-snapshot" | 47 snapshot="-snapshot" |
48 fi | 48 fi |
49 | 49 |
50 sudo kvm -m 1024 \ | 50 sudo kvm -m 1024 \ |
51 -vga std \ | 51 -vga std \ |
52 -pidfile "${KVM_PID_FILE}" \ | 52 -pidfile "${KVM_PID_FILE}" \ |
53 -daemonize \ | 53 -daemonize \ |
54 -net nic \ | 54 -net nic \ |
55 ${nographics} \ | 55 ${nographics} \ |
56 ${snapshot} \ | 56 ${snapshot} \ |
57 -net user,hostfwd=tcp::${FLAGS_ssh_port}-:22 \ | 57 -net user,hostfwd=tcp::${FLAGS_ssh_port}-:22 \ |
58 -hda "${1}" | 58 -hda "${1}" |
59 | 59 |
60 LIVE_VM_IMAGE="${1}" | 60 LIVE_VM_IMAGE="${1}" |
61 fi | 61 fi |
62 } | 62 } |
63 | 63 |
64 # Checks to see if we can access the target virtual machine with ssh. | 64 # Checks to see if we can access the target virtual machine with ssh. |
65 function ssh_ping() { | 65 function ssh_ping() { |
66 "$(dirname $0)"/../ssh_test.sh \ | 66 "$(dirname $0)"/../ssh_test.sh \ |
67 --ssh_port=${FLAGS_ssh_port} \ | 67 --ssh_port=${FLAGS_ssh_port} \ |
68 --remote=127.0.0.1 | 68 --remote=127.0.0.1 >&2 |
69 } | 69 } |
70 | 70 |
71 # Tries to ssh into live image $1 times. After first failure, a try involves | 71 # Tries to ssh into live image $1 times. After first failure, a try involves |
72 # shutting down and restarting kvm. | 72 # shutting down and restarting kvm. |
73 function retry_until_ssh() { | 73 function retry_until_ssh() { |
74 local can_ssh_into=1 | 74 local can_ssh_into=1 |
75 local retries=0 | 75 local retries=0 |
76 ssh_ping && can_ssh_into=0 | 76 ssh_ping && can_ssh_into=0 |
77 | 77 |
78 while [ ${can_ssh_into} -eq 1 ] && [ ${retries} -lt ${1} ]; do | 78 while [ ${can_ssh_into} -eq 1 ] && [ ${retries} -lt ${1} ]; do |
79 echo "Failed to connect to virtual machine, retrying ... " >&2 | 79 echo "Failed to connect to virtual machine, retrying ... " >&2 |
80 stop_kvm || echo "Could not stop kvm. Retrying anyway." >&2 | 80 stop_kvm || echo "Could not stop kvm. Retrying anyway." >&2 |
81 start_kvm "${LIVE_VM_IMAGE}" | 81 start_kvm "${LIVE_VM_IMAGE}" |
82 ssh_ping && can_ssh_into=0 | 82 ssh_ping && can_ssh_into=0 |
83 retries=$((retries + 1)) | 83 retries=$((retries + 1)) |
84 done | 84 done |
85 return ${can_ssh_into} | 85 return ${can_ssh_into} |
86 } | 86 } |
87 | 87 |
88 function stop_kvm() { | 88 function stop_kvm() { |
89 if [ "${FLAGS_persist}" -eq "${FLAGS_TRUE}" ]; then | 89 if [ "${FLAGS_persist}" -eq "${FLAGS_TRUE}" ]; then |
90 echo "Persist requested. Use --ssh_port ${FLAGS_ssh_port} " \ | 90 echo "Persist requested. Use --ssh_port ${FLAGS_ssh_port} " \ |
91 "--kvm_pid ${KVM_PID_FILE} to re-connect to it." | 91 "--kvm_pid ${KVM_PID_FILE} to re-connect to it." >&2 |
92 else | 92 else |
93 echo "Stopping the KVM instance" >&2 | 93 echo "Stopping the KVM instance" >&2 |
94 local pid=$(get_pid) | 94 local pid=$(get_pid) |
95 if [ -n "${pid}" ]; then | 95 if [ -n "${pid}" ]; then |
96 echo "Killing ${pid}" | 96 echo "Killing ${pid}" >&2 |
97 sudo kill ${pid} | 97 sudo kill ${pid} |
98 sudo rm "${KVM_PID_FILE}" | 98 sudo rm "${KVM_PID_FILE}" |
99 else | 99 else |
100 echo "No kvm pid found to stop." >&2 | 100 echo "No kvm pid found to stop." >&2 |
101 return 1 | 101 return 1 |
102 fi | 102 fi |
103 fi | 103 fi |
104 } | 104 } |
OLD | NEW |