summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorVishvananda Ishaya <vishvananda@yahoo.com>2010-11-17 01:23:45 +0000
committerTarmac <>2010-11-17 01:23:45 +0000
commit9c3fa8b6da2a5b81c989520afa9ca5fb5b90f063 (patch)
tree3d05db83cd569ec3faac0dabe48e848aee26bc06 /tools
parent98ae92ccecacdf33f96ae8e21275456113839330 (diff)
parent7c5c8bc2cfc90a17f88a768610fa1bb286b8c05c (diff)
downloadnova-9c3fa8b6da2a5b81c989520afa9ca5fb5b90f063.tar.gz
Adds nova-debug to tools directory, for debugging of instances that lose networking.
Diffstat (limited to 'tools')
-rwxr-xr-xtools/nova-debug92
1 files changed, 92 insertions, 0 deletions
diff --git a/tools/nova-debug b/tools/nova-debug
new file mode 100755
index 0000000000..3ff68ca356
--- /dev/null
+++ b/tools/nova-debug
@@ -0,0 +1,92 @@
+#!/usr/bin/env bash
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+INSTANCES_PATH=${INSTANCES_PATH:-/var/lib/nova/instances}
+if [ -z "$1" ]; then echo "specify an instance id to debug"; exit; fi
+
+if [ -n "$3" ]; then DEVICE=$3; fi
+
+CMD="all"
+if [ -n "$2" ]; then CMD=$2; fi
+
+cd $INSTANCES_PATH/$1
+
+if [ $CMD != "umount" ] && [ $CMD != "launch" ]; then
+# destroy the instance
+virsh destroy $1
+
+# mount the filesystem
+mkdir t
+DEVICE=`losetup --show -f disk`
+echo $DEVICE
+kpartx -a $DEVICE
+mount /dev/mapper/${DEVICE:4}p1 t
+
+fi
+if [ $CMD != "mount" ] && [ $CMD != "umount" ]; then
+
+# make serial console listen on ttyS0
+cat >t/etc/init/ttyS0.conf <<TTY_EOF
+# ttyS0 - getty
+#
+# This service maintains a getty on ttyS0 from the point the system is
+# started until it is shut down again.
+
+start on stopped rc RUNLEVEL=[2345]
+stop on runlevel [!2345]
+
+respawn
+exec /sbin/getty -L 115200 ttyS0 xterm
+TTY_EOF
+
+echo
+# set debug root password
+chroot t passwd -u root
+# TODO(vish): automate this with expect
+chroot t passwd root
+
+tr -d '\n' < libvirt.xml > debug.xml
+sed -i "s/<serial type=\"file\">.*<\/serial>/<serial type=\"pty\"><source path=\"\/dev\/pts\/1\"\/><target port=\"0\"\/><\/serial>/g" debug.xml
+
+umount t
+
+virsh create debug.xml
+virsh console $1
+virsh destroy $1
+
+mount /dev/mapper/${DEVICE:4}p1 t
+
+# clear debug root password
+chroot t passwd -l root
+
+# remove the serial console conf
+rm -f t/etc/init/ttyS0.conf
+
+fi
+if [ $CMD != "mount" ] && [ $CMD != "launch" ]; then
+
+# unmount the filesystem
+umount t
+kpartx -d $DEVICE
+losetup -d $DEVICE
+rmdir t
+
+# recreate the instance
+virsh create libvirt.xml
+fi