| ... | ... |
@@ -51,6 +51,7 @@ fi |
| 51 | 51 |
# Default args |
| 52 | 52 |
DIST_NAME=$1 |
| 53 | 53 |
IMG_FILE=$2 |
| 54 |
+IMG_FILE_TMP=`mktemp $IMG_FILE.XXXXXX` |
|
| 54 | 55 |
|
| 55 | 56 |
case $FORMAT in |
| 56 | 57 |
kvm|qcow2) FORMAT=qcow2 |
| ... | ... |
@@ -88,11 +89,6 @@ case $DIST_NAME in |
| 88 | 88 |
;; |
| 89 | 89 |
esac |
| 90 | 90 |
|
| 91 |
-# Set up nbd |
|
| 92 |
-modprobe nbd max_part=63 |
|
| 93 |
-NBD=${NBD:-/dev/nbd9}
|
|
| 94 |
-NBD_DEV=`basename $NBD` |
|
| 95 |
- |
|
| 96 | 91 |
# Prepare the base image |
| 97 | 92 |
|
| 98 | 93 |
# Get the UEC image |
| ... | ... |
@@ -103,24 +99,37 @@ fi |
| 103 | 103 |
|
| 104 | 104 |
if [ "$FORMAT" = "qcow2" ]; then |
| 105 | 105 |
# Just copy image |
| 106 |
- cp -p $CACHEDIR/$UEC_NAME-disk1.img $IMG_FILE |
|
| 106 |
+ cp -p $CACHEDIR/$UEC_NAME-disk1.img $IMG_FILE_TMP |
|
| 107 | 107 |
else |
| 108 | 108 |
# Convert image |
| 109 |
- qemu-img convert -O $QFORMAT $CACHEDIR/$UEC_NAME-disk1.img $IMG_FILE |
|
| 109 |
+ qemu-img convert -O $QFORMAT $CACHEDIR/$UEC_NAME-disk1.img $IMG_FILE_TMP |
|
| 110 | 110 |
fi |
| 111 | 111 |
|
| 112 | 112 |
# Resize the image if necessary |
| 113 | 113 |
if [ $ROOTSIZE -gt 2000 ]; then |
| 114 | 114 |
# Resize the container |
| 115 |
- qemu-img resize $IMG_FILE +$((ROOTSIZE - 2000))M |
|
| 115 |
+ qemu-img resize $IMG_FILE_TMP +$((ROOTSIZE - 2000))M |
|
| 116 | 116 |
fi |
| 117 | 117 |
|
| 118 |
-# Connect to nbd and wait till it is ready |
|
| 119 |
-qemu-nbd -c $NBD $IMG_FILE |
|
| 120 |
-if ! timeout 60 sh -c "while ! [ -e /sys/block/$NBD_DEV/pid ]; do sleep 1; done"; then |
|
| 121 |
-echo "Couldn't connect $NBD" |
|
| 118 |
+# Set up nbd |
|
| 119 |
+modprobe nbd max_part=63 |
|
| 120 |
+for i in `seq 1 15`; do |
|
| 121 |
+ if [ ! -e /sys/block/nbd$i/pid ]; then |
|
| 122 |
+ NBD=/dev/nbd$i |
|
| 123 |
+ # Connect to nbd and wait till it is ready |
|
| 124 |
+ qemu-nbd -c $NBD $IMG_FILE_TMP |
|
| 125 |
+ if ! timeout 60 sh -c "while ! [ -e ${NBD}p1 ]; do sleep 1; done"; then
|
|
| 126 |
+ echo "Couldn't connect $NBD" |
|
| 127 |
+ exit 1 |
|
| 128 |
+ fi |
|
| 129 |
+ break |
|
| 130 |
+ fi |
|
| 131 |
+done |
|
| 132 |
+if [ -z "$NBD" ]; then |
|
| 133 |
+ echo "No free NBD slots" |
|
| 122 | 134 |
exit 1 |
| 123 | 135 |
fi |
| 136 |
+NBD_DEV=`basename $NBD` |
|
| 124 | 137 |
|
| 125 | 138 |
# Resize partition 1 to full size of the disk image |
| 126 | 139 |
echo "d |
| ... | ... |
@@ -153,3 +162,5 @@ rm -f $MNTDIR/etc/resolv.conf |
| 153 | 153 |
umount $MNTDIR |
| 154 | 154 |
rmdir $MNTDIR |
| 155 | 155 |
qemu-nbd -d $NBD |
| 156 |
+ |
|
| 157 |
+mv $IMG_FILE_TMP $IMG_FILE |