blob: 0a78af16a0679d9cce40d18f305a0e401ffcb956 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
#!/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
virsh undefine $1
# mount the filesystem
mkdir t
DEVICE=/dev/nbd0
echo $DEVICE
qemu-nbd -c $DEVICE disk
sleep 3
mount $DEVICE 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 define debug.xml
virsh start $1
virsh console $1
virsh destroy $1
virsh undefine $1
mount $DEVICE 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
qemu-nbd -d $DEVICE
rmdir t
# recreate the instance
virsh define libvirt.xml
virsh start $1
fi
|