Browse code

Trap SIGINT, etc and release used resources

Dean Troyer authored on 2011/11/02 07:44:03
Showing 5 changed files
... ...
@@ -12,6 +12,27 @@ if [ ! "oneiric" = "$UBUNTU_VERSION" ]; then
12 12
     fi
13 13
 fi
14 14
 
15
+# Clean up any resources that may be in use
16
+cleanup() {
17
+    set +o errexit
18
+    unmount_images
19
+
20
+    if [ -n "$ROOTFS" ]; then
21
+        umount $ROOTFS/dev
22
+        umount $ROOTFS
23
+    fi
24
+
25
+    # Release NBD devices
26
+    if [ -n "$NBD" ]; then
27
+        qemu-nbd -d $NBD
28
+    fi
29
+
30
+    # Kill ourselves to signal any calling process
31
+    trap 2; kill -2 $$
32
+}
33
+
34
+trap cleanup SIGHUP SIGINT SIGTERM
35
+
15 36
 # Echo commands
16 37
 set -o xtrace
17 38
 
... ...
@@ -100,9 +121,6 @@ function kill_unmount() {
100 100
 # Install deps if needed
101 101
 dpkg -l kvm libvirt-bin kpartx || apt-get install -y --force-yes kvm libvirt-bin kpartx
102 102
 
103
-# Let Ctrl-c kill tail and exit
104
-trap kill_unmount SIGINT
105
-
106 103
 # Where Openstack code will live in image
107 104
 DEST=${DEST:-/opt/stack}
108 105
 
... ...
@@ -390,7 +408,9 @@ sed -e 's/^PasswordAuthentication.*$/PasswordAuthentication yes/' -i $ROOTFS/etc
390 390
 
391 391
 # Unmount
392 392
 umount $ROOTFS || echo 'ok'
393
+ROOTFS=""
393 394
 qemu-nbd -d $NBD
395
+NBD=""
394 396
 
395 397
 # Create the instance
396 398
 cd $VM_DIR && virsh create libvirt.xml
... ...
@@ -11,6 +11,22 @@ PXEDIR=${PXEDIR:-/var/cache/devstack/pxe}
11 11
 OPWD=`pwd`
12 12
 PROGDIR=`dirname $0`
13 13
 
14
+# Clean up any resources that may be in use
15
+cleanup() {
16
+    set +o errexit
17
+
18
+    # Mop up temporary files
19
+    if [ -n "$MNTDIR" -a -d "$MNTDIR" ]; then
20
+        umount $MNTDIR
21
+        rmdir $MNTDIR
22
+    fi
23
+
24
+    # Kill ourselves to signal any calling process
25
+    trap 2; kill -2 $$
26
+}
27
+
28
+trap cleanup SIGHUP SIGINT SIGTERM
29
+
14 30
 mkdir -p $DEST_DIR/pxelinux.cfg
15 31
 cd $DEST_DIR
16 32
 for i in memdisk menu.c32 pxelinux.0; do
... ...
@@ -10,6 +10,33 @@ if [ ! "$#" -eq "1" ]; then
10 10
     exit 1
11 11
 fi
12 12
 
13
+# Clean up any resources that may be in use
14
+cleanup() {
15
+    set +o errexit
16
+
17
+    # Mop up temporary files
18
+    if [ -n "$MNTDIR" -a -d "$MNTDIR" ]; then
19
+        umount $MNTDIR
20
+        rmdir $MNTDIR
21
+    fi
22
+    if [ -n "$DEV_FILE_TMP" -a -e "$DEV_FILE_TMP "]; then
23
+        rm -f $DEV_FILE_TMP
24
+    fi
25
+    if [ -n "$IMG_FILE_TMP" -a -e "$IMG_FILE_TMP" ]; then
26
+        rm -f $IMG_FILE_TMP
27
+    fi
28
+
29
+    # Release NBD devices
30
+    if [ -n "$NBD" ]; then
31
+        qemu-nbd -d $NBD
32
+    fi
33
+
34
+    # Kill ourselves to signal any calling process
35
+    trap 2; kill -2 $$
36
+}
37
+
38
+trap cleanup SIGHUP SIGINT SIGTERM
39
+
13 40
 # Set up nbd
14 41
 modprobe nbd max_part=63
15 42
 
... ...
@@ -107,6 +134,7 @@ if [ ! -r $DEV_FILE ]; then
107 107
     umount $MNTDIR
108 108
     rmdir $MNTDIR
109 109
     qemu-nbd -d $NBD
110
+    NBD=""
110 111
     mv $DEV_FILE_TMP $DEV_FILE
111 112
 fi
112 113
 rm -f $DEV_FILE_TMP
... ...
@@ -127,6 +155,7 @@ if [ ! -r $IMG_FILE ]; then
127 127
     dd if=${NBD}p1 of=$IMG_FILE_TMP bs=1M
128 128
 
129 129
     qemu-nbd -d $NBD
130
+    NBD=""
130 131
     mv $IMG_FILE_TMP $IMG_FILE
131 132
 fi
132 133
 rm -f $IMG_FILE_TMP
... ...
@@ -11,6 +11,26 @@ PXEDIR=${PXEDIR:-/var/cache/devstack/pxe}
11 11
 OPWD=`pwd`
12 12
 PROGDIR=`dirname $0`
13 13
 
14
+# Clean up any resources that may be in use
15
+cleanup() {
16
+    set +o errexit
17
+
18
+    # Mop up temporary files
19
+    if [ -n "$DEST_DEV" ]; then
20
+        umount $DEST_DIR
21
+        rmdir $DEST_DIR
22
+    fi
23
+    if [ -n "$MNTDIR" -a -d "$MNTDIR" ]; then
24
+        umount $MNTDIR
25
+        rmdir $MNTDIR
26
+    fi
27
+
28
+    # Kill ourselves to signal any calling process
29
+    trap 2; kill -2 $$
30
+}
31
+
32
+trap cleanup SIGHUP SIGINT SIGTERM
33
+
14 34
 if [ -b $DEST_DIR ]; then
15 35
     # We have a block device, install syslinux and mount it
16 36
     DEST_DEV=$DEST_DIR
... ...
@@ -26,6 +26,24 @@ usage() {
26 26
     exit 1
27 27
 }
28 28
 
29
+# Clean up any resources that may be in use
30
+cleanup() {
31
+    set +o errexit
32
+
33
+    # Mop up temporary files
34
+    if [ -n "$IMG_FILE_TMP" -a -e "$IMG_FILE_TMP" ]; then
35
+        rm -f $IMG_FILE_TMP
36
+    fi
37
+
38
+    # Release NBD devices
39
+    if [ -n "$NBD" ]; then
40
+        qemu-nbd -d $NBD
41
+    fi
42
+
43
+    # Kill ourselves to signal any calling process
44
+    trap 2; kill -2 $$
45
+}
46
+
29 47
 while getopts f:hmr: c; do
30 48
     case $c in
31 49
         f)  FORMAT=$OPTARG
... ...
@@ -89,6 +107,8 @@ case $DIST_NAME in
89 89
                 ;;
90 90
 esac
91 91
 
92
+trap cleanup SIGHUP SIGINT SIGTERM
93
+
92 94
 # Prepare the base image
93 95
 
94 96
 # Get the UEC image
... ...
@@ -170,5 +190,6 @@ rm -f $MNTDIR/etc/resolv.conf
170 170
 umount $MNTDIR
171 171
 rmdir $MNTDIR
172 172
 qemu-nbd -d $NBD
173
+NBD=""
173 174
 
174 175
 mv $IMG_FILE_TMP $IMG_FILE