nova-debug, relaunch an instance with a serial console
This commit is contained in:
parent
ebffd9cb35
commit
fcb0e91045
92
tools/nova-debug
Executable file
92
tools/nova-debug
Executable file
@ -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
|
Loading…
Reference in New Issue
Block a user