Browse code

Extract boot kernel from ramdisk image

Dean Troyer authored on 2011/10/27 05:13:00
Showing 1 changed files
... ...
@@ -1,17 +1,11 @@
1 1
 #!/bin/bash -e
2 2
 # build_usb_boot.sh - Create a syslinux boot environment
3 3
 #
4
-# build_usb_boot.sh [-k kernel-version] destdev
4
+# build_usb_boot.sh destdev
5 5
 #
6 6
 # Assumes syslinux is installed
7 7
 # Needs to run as root
8 8
 
9
-KVER=`uname -r`
10
-if [ "$1" = "-k" ]; then
11
-    KVER=$2
12
-    shift;shift
13
-fi
14
-
15 9
 DEST_DIR=${1:-/tmp/syslinux-boot}
16 10
 PXEDIR=${PXEDIR:-/var/cache/devstack/pxe}
17 11
 OPWD=`pwd`
... ...
@@ -20,7 +14,7 @@ PROGDIR=`dirname $0`
20 20
 if [ -b $DEST_DIR ]; then
21 21
     # We have a block device, install syslinux and mount it
22 22
     DEST_DEV=$DEST_DIR
23
-    DEST_DIR=`mktemp -d mntXXXXXX`
23
+    DEST_DIR=`mktemp -d --tmpdir mntXXXXXX`
24 24
     mount $DEST_DEV $DEST_DIR
25 25
 
26 26
     if [ ! -d $DEST_DIR/syslinux ]; then
... ...
@@ -57,20 +51,41 @@ mkdir -p $DEST_DIR/ubuntu
57 57
 if [ ! -d $PXEDIR ]; then
58 58
     mkdir -p $PXEDIR
59 59
 fi
60
-if [ ! -r $PXEDIR/vmlinuz-${KVER} ]; then
61
-    sudo chmod 644 /boot/vmlinuz-${KVER}
62
-    if [ ! -r /boot/vmlinuz-${KVER} ]; then
60
+
61
+# Get image into place
62
+if [ ! -r $PXEDIR/stack-initrd.img ]; then
63
+    cd $OPWD
64
+    $PROGDIR/build_ramdisk.sh $PXEDIR/stack-initrd.img
65
+fi
66
+if [ ! -r $PXEDIR/stack-initrd.gz ]; then
67
+    gzip -1 -c $PXEDIR/stack-initrd.img >$PXEDIR/stack-initrd.gz
68
+fi
69
+#cp -p $PXEDIR/stack-initrd.gz $DEST_DIR/ubuntu
70
+
71
+if [ ! -r $PXEDIR/vmlinuz-*-generic ]; then
72
+    MNTDIR=`mktemp -d --tmpdir mntXXXXXXXX`
73
+    mount -t ext4 -o loop $PXEDIR/stack-initrd.img $MNTDIR
74
+
75
+    if [ ! -r $MNTDIR/boot/vmlinuz-*-generic ]; then
63 76
         echo "No kernel found"
77
+        umount $MNTDIR
78
+        rmdir $MNTDIR
79
+        if [ -n "$DEST_DEV" ]; then
80
+            umount $DEST_DIR
81
+            rmdir $DEST_DIR
82
+        fi
83
+        exit 1
64 84
     else
65
-        cp -p /boot/vmlinuz-${KVER} $PXEDIR
85
+        cp -p $MNTDIR/boot/vmlinuz-*-generic $PXEDIR
66 86
     fi
87
+    umount $MNTDIR
88
+    rmdir $MNTDIR
67 89
 fi
68
-cp -p $PXEDIR/vmlinuz-${KVER} $DEST_DIR/ubuntu
69
-if [ ! -r $PXEDIR/stack-initrd.gz ]; then
70
-    cd $OPWD
71
-    sudo $PROGDIR/build_ramdisk.sh $PXEDIR/stack-initrd.gz
72
-fi
73
-cp -p $PXEDIR/stack-initrd.gz $DEST_DIR/ubuntu
90
+
91
+# Get generic kernel version
92
+KNAME=`basename $PXEDIR/vmlinuz-*-generic`
93
+KVER=${KNAME#vmlinuz-}
94
+cp -p $PXEDIR/vmlinuz-$KVER $DEST_DIR/ubuntu
74 95
 cat >>$CFG <<EOF
75 96
 
76 97
 LABEL devstack