Change-Id: I5c156879f3c85f1555a1411695ac43cefbbf3b99
Jesse Andrews authored on 2011/11/21 03:02:26... | ... |
@@ -6,7 +6,7 @@ |
6 | 6 |
function usage { |
7 | 7 |
echo "$0 - Build config.ini for openstack-integration-tests" |
8 | 8 |
echo "" |
9 |
- echo "Usage: $0 configfile" |
|
9 |
+ echo "Usage: $0 configdir" |
|
10 | 10 |
exit 1 |
11 | 11 |
} |
12 | 12 |
|
... | ... |
@@ -14,22 +14,27 @@ if [ ! "$#" -eq "1" ]; then |
14 | 14 |
usage |
15 | 15 |
fi |
16 | 16 |
|
17 |
-CONFIG_FILE=$1 |
|
17 |
+CONFIG_DIR=$1 |
|
18 |
+CONFIG_CONF=$CONFIG_DIR/storm.conf |
|
19 |
+CONFIG_INI=$CONFIG_DIR/config.ini |
|
18 | 20 |
|
19 | 21 |
# Clean up any resources that may be in use |
20 | 22 |
cleanup() { |
21 | 23 |
set +o errexit |
22 | 24 |
|
23 | 25 |
# Mop up temporary files |
24 |
- if [ -n "$CONFIG_FILE_TMP" -a -e "$CONFIG_FILE_TMP" ]; then |
|
25 |
- rm -f $CONFIG_FILE_TMP |
|
26 |
+ if [ -n "$CONFIG_CONF_TMP" -a -e "$CONFIG_CONF_TMP" ]; then |
|
27 |
+ rm -f $CONFIG_CONF_TMP |
|
28 |
+ fi |
|
29 |
+ if [ -n "$CONFIG_INI_TMP" -a -e "$CONFIG_INI_TMP" ]; then |
|
30 |
+ rm -f $CONFIG_INI_TMP |
|
26 | 31 |
fi |
27 | 32 |
|
28 | 33 |
# Kill ourselves to signal any calling process |
29 | 34 |
trap 2; kill -2 $$ |
30 | 35 |
} |
31 | 36 |
|
32 |
-trap cleanup SIGHUP SIGINT SIGTERM |
|
37 |
+trap cleanup SIGHUP SIGINT SIGTERM SIGQUIT EXIT |
|
33 | 38 |
|
34 | 39 |
# Keep track of the current directory |
35 | 40 |
TOOLS_DIR=$(cd $(dirname "$0") && pwd) |
... | ... |
@@ -50,17 +55,19 @@ DEST=${DEST:-/opt/stack} |
50 | 50 |
|
51 | 51 |
DIST_NAME=${DIST_NAME:-oneiric} |
52 | 52 |
|
53 |
-# Process network configuration vars |
|
54 |
-GUEST_NETWORK=${GUEST_NETWORK:-1} |
|
55 |
-GUEST_RECREATE_NET=${GUEST_RECREATE_NET:-yes} |
|
56 |
- |
|
57 |
-GUEST_IP=${GUEST_IP:-192.168.$GUEST_NETWORK.50} |
|
58 |
-GUEST_CIDR=${GUEST_CIDR:-$GUEST_IP/24} |
|
59 |
-GUEST_NETMASK=${GUEST_NETMASK:-255.255.255.0} |
|
60 |
-GUEST_GATEWAY=${GUEST_GATEWAY:-192.168.$GUEST_NETWORK.1} |
|
61 |
-GUEST_MAC=${GUEST_MAC:-"02:16:3e:07:69:`printf '%02X' $GUEST_NETWORK`"} |
|
62 |
-GUEST_RAM=${GUEST_RAM:-1524288} |
|
63 |
-GUEST_CORES=${GUEST_CORES:-1} |
|
53 |
+if [ ! -f $DEST/.ramdisk ]; then |
|
54 |
+ # Process network configuration vars |
|
55 |
+ GUEST_NETWORK=${GUEST_NETWORK:-1} |
|
56 |
+ GUEST_RECREATE_NET=${GUEST_RECREATE_NET:-yes} |
|
57 |
+ |
|
58 |
+ GUEST_IP=${GUEST_IP:-192.168.$GUEST_NETWORK.50} |
|
59 |
+ GUEST_CIDR=${GUEST_CIDR:-$GUEST_IP/24} |
|
60 |
+ GUEST_NETMASK=${GUEST_NETMASK:-255.255.255.0} |
|
61 |
+ GUEST_GATEWAY=${GUEST_GATEWAY:-192.168.$GUEST_NETWORK.1} |
|
62 |
+ GUEST_MAC=${GUEST_MAC:-"02:16:3e:07:69:`printf '%02X' $GUEST_NETWORK`"} |
|
63 |
+ GUEST_RAM=${GUEST_RAM:-1524288} |
|
64 |
+ GUEST_CORES=${GUEST_CORES:-1} |
|
65 |
+fi |
|
64 | 66 |
|
65 | 67 |
# Use the GUEST_IP unless an explicit IP is set by ``HOST_IP`` |
66 | 68 |
HOST_IP=${HOST_IP:-$GUEST_IP} |
... | ... |
@@ -77,34 +84,75 @@ set `echo $GLANCE_HOSTPORT | tr ':' ' '` |
77 | 77 |
GLANCE_HOST=$1 |
78 | 78 |
GLANCE_PORT=$2 |
79 | 79 |
|
80 |
-CONFIG_FILE_TMP=$(mktemp $CONFIG_FILE.XXXXXX) |
|
80 |
+# Create storm.conf |
|
81 |
+ |
|
82 |
+CONFIG_CONF_TMP=$(mktemp $CONFIG_CONF.XXXXXX) |
|
83 |
+ cat >$CONFIG_CONF_TMP <<EOF |
|
84 |
+[nova] |
|
85 |
+auth_url=http://$HOST_IP:5000/v2.0/tokens |
|
86 |
+user=admin |
|
87 |
+api_key=$ADMIN_PASSWORD |
|
88 |
+tenant_name=admin |
|
89 |
+ssh_timeout=300 |
|
90 |
+build_interval=10 |
|
91 |
+build_timeout=600 |
|
92 |
+ |
|
93 |
+[environment] |
|
94 |
+image_ref=3 |
|
95 |
+image_ref_alt=4 |
|
96 |
+flavor_ref=1 |
|
97 |
+flavor_ref_alt=2 |
|
98 |
+create_image_enabled=true |
|
99 |
+resize_available=true |
|
100 |
+authentication=keystone_v2 |
|
101 |
+EOF |
|
102 |
+mv $CONFIG_CONF_TMP $CONFIG_CONF |
|
103 |
+CONFIG_CONF_TMP="" |
|
104 |
+ |
|
105 |
+# Create config.ini |
|
106 |
+ |
|
107 |
+CONFIG_INI_TMP=$(mktemp $CONFIG_INI.XXXXXX) |
|
81 | 108 |
if [ "$UPLOAD_LEGACY_TTY" ]; then |
82 |
- cat >$CONFIG_FILE_TMP <<EOF |
|
109 |
+ cat >$CONFIG_INI_TMP <<EOF |
|
83 | 110 |
[environment] |
84 | 111 |
aki_location = $DEST/devstack/files/images/aki-tty/image |
85 | 112 |
ari_location = $DEST/devstack/files/images/ari-tty/image |
86 | 113 |
ami_location = $DEST/devstack/files/images/ami-tty/image |
87 |
-image_ref = 1 |
|
114 |
+image_ref = 3 |
|
115 |
+image_ref_alt = 3 |
|
88 | 116 |
flavor_ref = 1 |
117 |
+flavor_ref_alt = 2 |
|
118 |
+ |
|
119 |
+[glance] |
|
120 |
+host = $GLANCE_HOST |
|
121 |
+apiver = v1 |
|
122 |
+port = $GLANCE_PORT |
|
123 |
+image_id = 3 |
|
124 |
+image_id_alt = 3 |
|
125 |
+tenant_id = 1 |
|
89 | 126 |
EOF |
90 | 127 |
else |
91 |
- cat >$CONFIG_FILE_TMP <<EOF |
|
128 |
+ cat >$CONFIG_INI_TMP <<EOF |
|
92 | 129 |
[environment] |
93 | 130 |
aki_location = $DEST/openstack-integration-tests/include/sample_vm/$DIST_NAME-server-cloudimg-amd64-vmlinuz-virtual |
94 | 131 |
#ari_location = $DEST/openstack-integration-tests/include/sample_vm/$DIST_NAME-server-cloudimg-amd64-loader |
95 | 132 |
ami_location = $DEST/openstack-integration-tests/include/sample_vm/$DIST_NAME-server-cloudimg-amd64.img |
96 |
-image_ref = 1 |
|
133 |
+image_ref = 2 |
|
134 |
+image_ref_alt = 2 |
|
97 | 135 |
flavor_ref = 1 |
98 |
-EOF |
|
99 |
-fi |
|
136 |
+flavor_ref_alt = 2 |
|
100 | 137 |
|
101 |
-cat >>$CONFIG_FILE_TMP <<EOF |
|
102 | 138 |
[glance] |
103 | 139 |
host = $GLANCE_HOST |
104 | 140 |
apiver = v1 |
105 | 141 |
port = $GLANCE_PORT |
106 | 142 |
image_id = 1 |
143 |
+image_id_alt = 1 |
|
107 | 144 |
tenant_id = 1 |
145 |
+EOF |
|
146 |
+fi |
|
147 |
+ |
|
148 |
+cat >>$CONFIG_INI_TMP <<EOF |
|
108 | 149 |
|
109 | 150 |
[keystone] |
110 | 151 |
service_host = $HOST_IP |
... | ... |
@@ -125,6 +173,7 @@ ssh_timeout = 300 |
125 | 125 |
build_timeout = 300 |
126 | 126 |
flavor_ref = 1 |
127 | 127 |
flavor_ref_alt = 2 |
128 |
+multi_node = no |
|
128 | 129 |
|
129 | 130 |
[rabbitmq] |
130 | 131 |
host = $RABBIT_HOST |
... | ... |
@@ -141,4 +190,7 @@ username = root |
141 | 141 |
password = password |
142 | 142 |
|
143 | 143 |
EOF |
144 |
-mv $CONFIG_FILE_TMP $CONFIG_FILE |
|
144 |
+mv $CONFIG_INI_TMP $CONFIG_INI |
|
145 |
+CONFIG_INI_TMP="" |
|
146 |
+ |
|
147 |
+trap - SIGHUP SIGINT SIGTERM SIGQUIT EXIT |
145 | 148 |
deleted file mode 100755 |
... | ... |
@@ -1,489 +0,0 @@ |
1 |
-#!/usr/bin/env bash |
|
2 |
- |
|
3 |
-# exit on error to stop unexpected errors |
|
4 |
-set -o errexit |
|
5 |
- |
|
6 |
-# Make sure that we have the proper version of ubuntu |
|
7 |
-UBUNTU_VERSION=`cat /etc/lsb-release | grep CODENAME | sed 's/.*=//g'` |
|
8 |
-if [ ! "oneiric" = "$UBUNTU_VERSION" ]; then |
|
9 |
- if [ ! "natty" = "$UBUNTU_VERSION" ]; then |
|
10 |
- echo "This script only works with oneiric and natty" |
|
11 |
- exit 1 |
|
12 |
- fi |
|
13 |
-fi |
|
14 |
- |
|
15 |
-# Clean up any resources that may be in use |
|
16 |
-cleanup() { |
|
17 |
- set +o errexit |
|
18 |
- unmount_images |
|
19 |
- |
|
20 |
- if [ -n "$COPY_DIR" ]; then |
|
21 |
- umount $COPY_DIR/dev |
|
22 |
- umount $COPY_DIR |
|
23 |
- fi |
|
24 |
- |
|
25 |
- if [ -n "$ROOTFS" ]; then |
|
26 |
- umount $ROOTFS/dev |
|
27 |
- umount $ROOTFS |
|
28 |
- fi |
|
29 |
- |
|
30 |
- # Release NBD devices |
|
31 |
- if [ -n "$NBD" ]; then |
|
32 |
- qemu-nbd -d $NBD |
|
33 |
- fi |
|
34 |
- |
|
35 |
- # Kill ourselves to signal any calling process |
|
36 |
- trap 2; kill -2 $$ |
|
37 |
-} |
|
38 |
- |
|
39 |
-trap cleanup SIGHUP SIGINT SIGTERM SIGQUIT EXIT |
|
40 |
- |
|
41 |
-# Echo commands |
|
42 |
-set -o xtrace |
|
43 |
- |
|
44 |
-# Keep track of the current directory |
|
45 |
-TOOLS_DIR=$(cd $(dirname "$0") && pwd) |
|
46 |
-TOP_DIR=`cd $TOOLS_DIR/..; pwd` |
|
47 |
- |
|
48 |
-# Where to store files and instances |
|
49 |
-WORK_DIR=${WORK_DIR:-/opt/kvmstack} |
|
50 |
- |
|
51 |
-# Where to store images |
|
52 |
-IMAGES_DIR=$WORK_DIR/images |
|
53 |
- |
|
54 |
-# Create images dir |
|
55 |
-mkdir -p $IMAGES_DIR |
|
56 |
- |
|
57 |
-# Abort if localrc is not set |
|
58 |
-if [ ! -e $TOP_DIR/localrc ]; then |
|
59 |
- echo "You must have a localrc with ALL necessary passwords defined before proceeding." |
|
60 |
- echo "See stack.sh for required passwords." |
|
61 |
- exit 1 |
|
62 |
-fi |
|
63 |
- |
|
64 |
-cd $TOP_DIR |
|
65 |
- |
|
66 |
-# Source params |
|
67 |
-source ./stackrc |
|
68 |
- |
|
69 |
-# Configure the root password of the vm to be the same as ``ADMIN_PASSWORD`` |
|
70 |
-ROOT_PASSWORD=${ADMIN_PASSWORD:-password} |
|
71 |
- |
|
72 |
-# Base image (natty by default) |
|
73 |
-DIST_NAME=${DIST_NAME:-natty} |
|
74 |
-IMAGE_FNAME=$DIST_NAME.raw |
|
75 |
- |
|
76 |
-# Name of our instance, used by libvirt |
|
77 |
-GUEST_NAME=${GUEST_NAME:-devstack} |
|
78 |
- |
|
79 |
-# Original version of built image |
|
80 |
-BASE_IMAGE=$IMAGES_DIR/$DIST_NAME.raw |
|
81 |
- |
|
82 |
-# Copy of base image, which we pre-install with tasty treats |
|
83 |
-VM_IMAGE=$IMAGES_DIR/$DIST_NAME.$GUEST_NAME.raw |
|
84 |
- |
|
85 |
-# Mop up after previous runs |
|
86 |
-virsh destroy $GUEST_NAME || true |
|
87 |
- |
|
88 |
-# Where this vm is stored |
|
89 |
-VM_DIR=$WORK_DIR/instances/$GUEST_NAME |
|
90 |
- |
|
91 |
-# Create vm dir |
|
92 |
-mkdir -p $VM_DIR |
|
93 |
- |
|
94 |
-# Mount point into copied base image |
|
95 |
-COPY_DIR=$VM_DIR/copy |
|
96 |
-mkdir -p $COPY_DIR |
|
97 |
- |
|
98 |
-# Get the base image if it does not yet exist |
|
99 |
-if [ ! -e $BASE_IMAGE ]; then |
|
100 |
- $TOOLS_DIR/get_uec_image.sh -f raw -r 5000 $DIST_NAME $BASE_IMAGE |
|
101 |
-fi |
|
102 |
- |
|
103 |
-# Create a copy of the base image |
|
104 |
-if [ ! -e $VM_IMAGE ]; then |
|
105 |
- cp -p $BASE_IMAGE $VM_IMAGE |
|
106 |
-fi |
|
107 |
- |
|
108 |
-# Unmount the copied base image |
|
109 |
-function unmount_images() { |
|
110 |
- # unmount the filesystem |
|
111 |
- while df | grep -q $COPY_DIR; do |
|
112 |
- umount $COPY_DIR || echo 'ok' |
|
113 |
- sleep 1 |
|
114 |
- done |
|
115 |
-} |
|
116 |
- |
|
117 |
-# Unmount from failed runs |
|
118 |
-unmount_images |
|
119 |
- |
|
120 |
-# Ctrl-c catcher |
|
121 |
-function kill_unmount() { |
|
122 |
- unmount_images |
|
123 |
- exit 1 |
|
124 |
-} |
|
125 |
- |
|
126 |
-# Install deps if needed |
|
127 |
-dpkg -l kvm libvirt-bin kpartx || apt-get install -y --force-yes kvm libvirt-bin kpartx |
|
128 |
- |
|
129 |
-# Where Openstack code will live in image |
|
130 |
-DEST=${DEST:-/opt/stack} |
|
131 |
- |
|
132 |
-# Mount the file system |
|
133 |
-# For some reason, UEC-based images want 255 heads * 63 sectors * 512 byte sectors = 8225280 |
|
134 |
-mount -t ext4 -o loop,offset=8225280 $VM_IMAGE $COPY_DIR |
|
135 |
-mount -o bind /dev $COPY_DIR/dev |
|
136 |
- |
|
137 |
-# git clone only if directory doesn't exist already. Since ``DEST`` might not |
|
138 |
-# be owned by the installation user, we create the directory and change the |
|
139 |
-# ownership to the proper user. |
|
140 |
-function git_clone { |
|
141 |
- if [ ! -d $2 ]; then |
|
142 |
- sudo mkdir $2 |
|
143 |
- sudo chown `whoami` $2 |
|
144 |
- git clone $1 $2 |
|
145 |
- cd $2 |
|
146 |
- # This checkout syntax works for both branches and tags |
|
147 |
- git checkout $3 |
|
148 |
- fi |
|
149 |
-} |
|
150 |
- |
|
151 |
-# Make sure that base requirements are installed |
|
152 |
-cp /etc/resolv.conf $COPY_DIR/etc/resolv.conf |
|
153 |
-chroot $COPY_DIR apt-get update |
|
154 |
-chroot $COPY_DIR apt-get install -y --download-only `cat files/apts/* | grep NOPRIME | cut -d\# -f1` |
|
155 |
-chroot $COPY_DIR apt-get install -y --force-yes `cat files/apts/* | grep -v NOPRIME | cut -d\# -f1` |
|
156 |
-chroot $COPY_DIR pip install `cat files/pips/*` |
|
157 |
- |
|
158 |
-umount $COPY_DIR/dev |
|
159 |
- |
|
160 |
-# Clean out code repos if directed to do so |
|
161 |
-if [ "$CLEAN" = "1" ]; then |
|
162 |
- rm -rf $COPY_DIR/$DEST |
|
163 |
-fi |
|
164 |
- |
|
165 |
-# Cache openstack code |
|
166 |
-mkdir -p $COPY_DIR/$DEST |
|
167 |
-git_clone $NOVA_REPO $COPY_DIR/$DEST/nova $NOVA_BRANCH |
|
168 |
-git_clone $GLANCE_REPO $COPY_DIR/$DEST/glance $GLANCE_BRANCH |
|
169 |
-git_clone $KEYSTONE_REPO $COPY_DIR/$DESTkeystone $KEYSTONE_BRANCH |
|
170 |
-git_clone $NOVNC_REPO $COPY_DIR/$DEST/noVNC $NOVNC_BRANCH |
|
171 |
-git_clone $HORIZON_REPO $COPY_DIR/$DEST/horizon $HORIZON_BRANCH $HORIZON_TAG |
|
172 |
-git_clone $NOVACLIENT_REPO $COPY_DIR/$DEST/python-novaclient $NOVACLIENT_BRANCH |
|
173 |
-git_clone $OPENSTACKX_REPO $COPY_DIR/$DEST/openstackx $OPENSTACKX_BRANCH |
|
174 |
-git_clone $KEYSTONE_REPO $COPY_DIR/$DEST/keystone $KEYSTONE_BRANCH |
|
175 |
-git_clone $NOVNC_REPO $COPY_DIR/$DEST/noVNC $NOVNC_BRANCH |
|
176 |
-git_clone $CITEST_REPO $COPY_DIR/$DEST/openstack-integration-tests $CITEST_BRANCH |
|
177 |
- |
|
178 |
-if [ -z "$UPLOAD_LEGACY_TTY" =; then |
|
179 |
- # Pre-load an image for testing |
|
180 |
- UEC_NAME=$DIST_NAME-server-cloudimg-amd64 |
|
181 |
- CIVMDIR=${COPY_DIR}${DEST}/openstack-integration-tests/include/sample_vm |
|
182 |
- if [ ! -e $CIVMDIR/$UEC_NAME.tar.gz ]; then |
|
183 |
- mkdir -p $CIVMDIR |
|
184 |
- (cd $CIVMDIR && wget -N http://uec-images.ubuntu.com/$DIST_NAME/current/$UEC_NAME.tar.gz; |
|
185 |
- tar xzf $UEC_NAME.tar.gz;) |
|
186 |
- fi |
|
187 |
-fi |
|
188 |
- |
|
189 |
-# Back to devstack |
|
190 |
-cd $TOP_DIR |
|
191 |
- |
|
192 |
-# Unmount the filesystems |
|
193 |
-unmount_images |
|
194 |
- |
|
195 |
-# Network configuration variables |
|
196 |
-GUEST_NETWORK=${GUEST_NETWORK:-1} |
|
197 |
-GUEST_RECREATE_NET=${GUEST_RECREATE_NET:-yes} |
|
198 |
- |
|
199 |
-GUEST_IP=${GUEST_IP:-192.168.$GUEST_NETWORK.50} |
|
200 |
-GUEST_CIDR=${GUEST_CIDR:-$GUEST_IP/24} |
|
201 |
-GUEST_NETMASK=${GUEST_NETMASK:-255.255.255.0} |
|
202 |
-GUEST_GATEWAY=${GUEST_GATEWAY:-192.168.$GUEST_NETWORK.1} |
|
203 |
-GUEST_MAC=${GUEST_MAC:-"02:16:3e:07:69:`printf '%02X' $GUEST_NETWORK`"} |
|
204 |
-GUEST_RAM=${GUEST_RAM:-1524288} |
|
205 |
-GUEST_CORES=${GUEST_CORES:-1} |
|
206 |
- |
|
207 |
-# libvirt.xml configuration |
|
208 |
-NET_XML=$VM_DIR/net.xml |
|
209 |
-cat > $NET_XML <<EOF |
|
210 |
-<network> |
|
211 |
- <name>devstack-$GUEST_NETWORK</name> |
|
212 |
- <bridge name="stackbr%d" /> |
|
213 |
- <forward/> |
|
214 |
- <ip address="$GUEST_GATEWAY" netmask="$GUEST_NETMASK" /> |
|
215 |
-</network> |
|
216 |
-EOF |
|
217 |
- |
|
218 |
-if [[ "$GUEST_RECREATE_NET" == "yes" ]]; then |
|
219 |
- virsh net-destroy devstack-$GUEST_NETWORK || true |
|
220 |
- virsh net-create $VM_DIR/net.xml |
|
221 |
-fi |
|
222 |
- |
|
223 |
-# libvirt.xml configuration |
|
224 |
-LIBVIRT_XML=$VM_DIR/libvirt.xml |
|
225 |
-cat > $LIBVIRT_XML <<EOF |
|
226 |
-<domain type='kvm'> |
|
227 |
- <name>$GUEST_NAME</name> |
|
228 |
- <memory>$GUEST_RAM</memory> |
|
229 |
- <os> |
|
230 |
- <type>hvm</type> |
|
231 |
- <bootmenu enable='yes'/> |
|
232 |
- </os> |
|
233 |
- <features> |
|
234 |
- <acpi/> |
|
235 |
- </features> |
|
236 |
- <vcpu>$GUEST_CORES</vcpu> |
|
237 |
- <devices> |
|
238 |
- <disk type='file'> |
|
239 |
- <driver type='qcow2'/> |
|
240 |
- <source file='$VM_DIR/disk'/> |
|
241 |
- <target dev='vda' bus='virtio'/> |
|
242 |
- </disk> |
|
243 |
- |
|
244 |
- <interface type='network'> |
|
245 |
- <source network='devstack-$GUEST_NETWORK'/> |
|
246 |
- </interface> |
|
247 |
- |
|
248 |
- <!-- The order is significant here. File must be defined first --> |
|
249 |
- <serial type="file"> |
|
250 |
- <source path='$VM_DIR/console.log'/> |
|
251 |
- <target port='1'/> |
|
252 |
- </serial> |
|
253 |
- |
|
254 |
- <console type='pty' tty='/dev/pts/2'> |
|
255 |
- <source path='/dev/pts/2'/> |
|
256 |
- <target port='0'/> |
|
257 |
- </console> |
|
258 |
- |
|
259 |
- <serial type='pty'> |
|
260 |
- <source path='/dev/pts/2'/> |
|
261 |
- <target port='0'/> |
|
262 |
- </serial> |
|
263 |
- |
|
264 |
- <graphics type='vnc' port='-1' autoport='yes' keymap='en-us' listen='0.0.0.0'/> |
|
265 |
- </devices> |
|
266 |
-</domain> |
|
267 |
-EOF |
|
268 |
- |
|
269 |
-# Mount point for instance fs |
|
270 |
-ROOTFS=$VM_DIR/root |
|
271 |
-mkdir -p $ROOTFS |
|
272 |
- |
|
273 |
-# Clean up from previous runs |
|
274 |
-umount $ROOTFS || echo 'ok' |
|
275 |
- |
|
276 |
-# Clean up old runs |
|
277 |
-cd $VM_DIR |
|
278 |
-rm -f $VM_DIR/disk |
|
279 |
- |
|
280 |
-# Create our instance fs |
|
281 |
-qemu-img create -f qcow2 -b $VM_IMAGE disk |
|
282 |
- |
|
283 |
-# Finds the next available NBD device |
|
284 |
-# Exits script if error connecting or none free |
|
285 |
-# map_nbd image |
|
286 |
-# returns full nbd device path |
|
287 |
-function map_nbd { |
|
288 |
- for i in `seq 0 15`; do |
|
289 |
- if [ ! -e /sys/block/nbd$i/pid ]; then |
|
290 |
- NBD=/dev/nbd$i |
|
291 |
- # Connect to nbd and wait till it is ready |
|
292 |
- qemu-nbd -c $NBD $1 |
|
293 |
- if ! timeout 60 sh -c "while ! [ -e ${NBD}p1 ]; do sleep 1; done"; then |
|
294 |
- echo "Couldn't connect $NBD" |
|
295 |
- exit 1 |
|
296 |
- fi |
|
297 |
- break |
|
298 |
- fi |
|
299 |
- done |
|
300 |
- if [ -z "$NBD" ]; then |
|
301 |
- echo "No free NBD slots" |
|
302 |
- exit 1 |
|
303 |
- fi |
|
304 |
- echo $NBD |
|
305 |
-} |
|
306 |
- |
|
307 |
-# Make sure we have nbd-ness |
|
308 |
-modprobe nbd max_part=63 |
|
309 |
- |
|
310 |
-# Set up nbd |
|
311 |
-NBD=`map_nbd disk` |
|
312 |
-NBD_DEV=`basename $NBD` |
|
313 |
- |
|
314 |
-# Mount the instance |
|
315 |
-mount ${NBD}p1 $ROOTFS |
|
316 |
- |
|
317 |
-# Configure instance network |
|
318 |
-INTERFACES=$ROOTFS/etc/network/interfaces |
|
319 |
-cat > $INTERFACES <<EOF |
|
320 |
-auto lo |
|
321 |
-iface lo inet loopback |
|
322 |
- |
|
323 |
-auto eth0 |
|
324 |
-iface eth0 inet static |
|
325 |
- address $GUEST_IP |
|
326 |
- netmask $GUEST_NETMASK |
|
327 |
- gateway $GUEST_GATEWAY |
|
328 |
-EOF |
|
329 |
- |
|
330 |
-# User configuration for the instance |
|
331 |
-chroot $ROOTFS groupadd libvirtd || true |
|
332 |
-chroot $ROOTFS useradd stack -s /bin/bash -d $DEST -G libvirtd |
|
333 |
-cp -pr $TOP_DIR $ROOTFS/$DEST/devstack |
|
334 |
-echo "root:$ROOT_PASSWORD" | chroot $ROOTFS chpasswd |
|
335 |
-echo "stack:pass" | chroot $ROOTFS chpasswd |
|
336 |
-echo "stack ALL=(ALL) NOPASSWD: ALL" >> $ROOTFS/etc/sudoers |
|
337 |
- |
|
338 |
-# Gracefully cp only if source file/dir exists |
|
339 |
-function cp_it { |
|
340 |
- if [ -e $1 ] || [ -d $1 ]; then |
|
341 |
- cp -pRL $1 $2 |
|
342 |
- fi |
|
343 |
-} |
|
344 |
- |
|
345 |
-# Copy over your ssh keys and env if desired |
|
346 |
-COPYENV=${COPYENV:-1} |
|
347 |
-if [ "$COPYENV" = "1" ]; then |
|
348 |
- cp_it ~/.ssh $ROOTFS/$DEST/.ssh |
|
349 |
- cp_it ~/.ssh/id_rsa.pub $ROOTFS/$DEST/.ssh/authorized_keys |
|
350 |
- cp_it ~/.gitconfig $ROOTFS/$DEST/.gitconfig |
|
351 |
- cp_it ~/.vimrc $ROOTFS/$DEST/.vimrc |
|
352 |
- cp_it ~/.bashrc $ROOTFS/$DEST/.bashrc |
|
353 |
-fi |
|
354 |
- |
|
355 |
-# pre-cache uec images |
|
356 |
-for image_url in ${IMAGE_URLS//,/ }; do |
|
357 |
- IMAGE_FNAME=`basename "$image_url"` |
|
358 |
- if [ ! -f $IMAGES_DIR/$IMAGE_FNAME ]; then |
|
359 |
- wget -c $image_url -O $IMAGES_DIR/$IMAGE_FNAME |
|
360 |
- fi |
|
361 |
- cp $IMAGES_DIR/$IMAGE_FNAME $ROOTFS/$DEST/devstack/files |
|
362 |
-done |
|
363 |
- |
|
364 |
-# Configure the runner |
|
365 |
-RUN_SH=$ROOTFS/$DEST/run.sh |
|
366 |
-cat > $RUN_SH <<EOF |
|
367 |
-#!/usr/bin/env bash |
|
368 |
- |
|
369 |
-# Kill any existing screens |
|
370 |
-killall screen |
|
371 |
- |
|
372 |
-# Install and run stack.sh |
|
373 |
-sudo apt-get update |
|
374 |
-sudo apt-get -y --force-yes install git-core vim-nox sudo |
|
375 |
-if [ ! -d "$DEST/devstack" ]; then |
|
376 |
- git clone git://github.com/cloudbuilders/devstack.git $DEST/devstack |
|
377 |
-fi |
|
378 |
-cd $DEST/devstack && $STACKSH_PARAMS FORCE=yes ./stack.sh > /$DEST/run.sh.log |
|
379 |
-echo >> /$DEST/run.sh.log |
|
380 |
-echo >> /$DEST/run.sh.log |
|
381 |
-echo "All done! Time to start clicking." >> /$DEST/run.sh.log |
|
382 |
-cat $DEST/run.sh.log |
|
383 |
-EOF |
|
384 |
-chmod 755 $RUN_SH |
|
385 |
- |
|
386 |
-# Make runner launch on boot |
|
387 |
-RC_LOCAL=$ROOTFS/etc/init.d/zlocal |
|
388 |
-cat > $RC_LOCAL <<EOF |
|
389 |
-#!/bin/sh -e |
|
390 |
-# cloud-init overwrites the hostname with ubuntuhost |
|
391 |
-echo $GUEST_NAME > /etc/hostname |
|
392 |
-hostname $GUEST_NAME |
|
393 |
-su -c "$DEST/run.sh" stack |
|
394 |
-EOF |
|
395 |
-chmod +x $RC_LOCAL |
|
396 |
-chroot $ROOTFS sudo update-rc.d zlocal defaults 99 |
|
397 |
- |
|
398 |
-# Make our ip address hostnames look nice at the command prompt |
|
399 |
-echo "export PS1='${debian_chroot:+($debian_chroot)}\\u@\\H:\\w\\$ '" >> $ROOTFS/$DEST/.bashrc |
|
400 |
-echo "export PS1='${debian_chroot:+($debian_chroot)}\\u@\\H:\\w\\$ '" >> $ROOTFS/etc/profile |
|
401 |
- |
|
402 |
-# Give stack ownership over $DEST so it may do the work needed |
|
403 |
-chroot $ROOTFS chown -R stack $DEST |
|
404 |
- |
|
405 |
-# Set the hostname |
|
406 |
-echo $GUEST_NAME > $ROOTFS/etc/hostname |
|
407 |
- |
|
408 |
-# We need the hostname to resolve for rabbit to launch |
|
409 |
-if ! grep -q $GUEST_NAME $ROOTFS/etc/hosts; then |
|
410 |
- echo "$GUEST_IP $GUEST_NAME" >> $ROOTFS/etc/hosts |
|
411 |
-fi |
|
412 |
- |
|
413 |
-# GRUB 2 wants to see /dev |
|
414 |
-mount -o bind /dev $ROOTFS/dev |
|
415 |
- |
|
416 |
-# Change boot params so that we get a console log |
|
417 |
-G_DEV_UUID=`blkid -t LABEL=cloudimg-rootfs -s UUID -o value | head -1` |
|
418 |
-sed -e "s/GRUB_TIMEOUT=.*$/GRUB_TIMEOUT=3/" -i $ROOTFS/etc/default/grub |
|
419 |
-sed -e "s,GRUB_CMDLINE_LINUX_DEFAULT=.*$,GRUB_CMDLINE_LINUX_DEFAULT=\"console=ttyS0 console=tty0 ds=nocloud ubuntu-pass=pass\",g" -i $ROOTFS/etc/default/grub |
|
420 |
-sed -e 's/[#]*GRUB_TERMINAL=.*$/GRUB_TERMINAL="serial console"/' -i $ROOTFS/etc/default/grub |
|
421 |
-echo 'GRUB_SERIAL_COMMAND="serial --unit=0"' >>$ROOTFS/etc/default/grub |
|
422 |
-echo 'GRUB_DISABLE_OS_PROBER=true' >>$ROOTFS/etc/default/grub |
|
423 |
-echo "GRUB_DEVICE_UUID=$G_DEV_UUID" >>$ROOTFS/etc/default/grub |
|
424 |
- |
|
425 |
-chroot $ROOTFS update-grub |
|
426 |
- |
|
427 |
-# Pre-generate ssh host keys and allow password login |
|
428 |
-chroot $ROOTFS dpkg-reconfigure openssh-server |
|
429 |
-sed -e 's/^PasswordAuthentication.*$/PasswordAuthentication yes/' -i $ROOTFS/etc/ssh/sshd_config |
|
430 |
- |
|
431 |
-# Unmount |
|
432 |
-umount $ROOTFS/dev |
|
433 |
-umount $ROOTFS || echo 'ok' |
|
434 |
-ROOTFS="" |
|
435 |
-qemu-nbd -d $NBD |
|
436 |
-NBD="" |
|
437 |
- |
|
438 |
-trap - SIGHUP SIGINT SIGTERM SIGQUIT EXIT |
|
439 |
- |
|
440 |
-# Create the instance |
|
441 |
-cd $VM_DIR && virsh create libvirt.xml |
|
442 |
- |
|
443 |
-# Tail the console log till we are done |
|
444 |
-WAIT_TILL_LAUNCH=${WAIT_TILL_LAUNCH:-1} |
|
445 |
-if [ "$WAIT_TILL_LAUNCH" = "1" ]; then |
|
446 |
- # Done creating the container, let's tail the log |
|
447 |
- echo |
|
448 |
- echo "=============================================================" |
|
449 |
- echo " -- YAY! --" |
|
450 |
- echo "=============================================================" |
|
451 |
- echo |
|
452 |
- echo "We're done launching the vm, about to start tailing the" |
|
453 |
- echo "stack.sh log. It will take a second or two to start." |
|
454 |
- echo |
|
455 |
- echo "Just CTRL-C at any time to stop tailing." |
|
456 |
- |
|
457 |
- while [ ! -e "$VM_DIR/console.log" ]; do |
|
458 |
- sleep 1 |
|
459 |
- done |
|
460 |
- |
|
461 |
- tail -F $VM_DIR/console.log & |
|
462 |
- |
|
463 |
- TAIL_PID=$! |
|
464 |
- |
|
465 |
- function kill_tail() { |
|
466 |
- kill $TAIL_PID |
|
467 |
- exit 1 |
|
468 |
- } |
|
469 |
- |
|
470 |
- # Let Ctrl-c kill tail and exit |
|
471 |
- trap kill_tail SIGINT |
|
472 |
- |
|
473 |
- set +o xtrace |
|
474 |
- |
|
475 |
- echo "Waiting stack.sh to finish..." |
|
476 |
- while ! cat $VM_DIR/console.log | grep -q 'All done' ; do |
|
477 |
- sleep 1 |
|
478 |
- done |
|
479 |
- |
|
480 |
- set -o xtrace |
|
481 |
- |
|
482 |
- kill $TAIL_PID |
|
483 |
- |
|
484 |
- if ! grep -q "^stack.sh completed in" $VM_DIR/console.log; then |
|
485 |
- exit 1 |
|
486 |
- fi |
|
487 |
- echo "" |
|
488 |
- echo "Finished - Zip-a-dee Doo-dah!" |
|
489 |
-fi |
490 | 1 |
deleted file mode 100755 |
... | ... |
@@ -1,324 +0,0 @@ |
1 |
-#!/usr/bin/env bash |
|
2 |
- |
|
3 |
-# Debug stuff |
|
4 |
-set -o errexit |
|
5 |
-set -o xtrace |
|
6 |
- |
|
7 |
-# Sanity check |
|
8 |
-if [ "$EUID" -ne "0" ]; then |
|
9 |
- echo "This script must be run with root privileges." |
|
10 |
- exit 1 |
|
11 |
-fi |
|
12 |
- |
|
13 |
-# Keep track of ubuntu version |
|
14 |
-UBUNTU_VERSION=`cat /etc/lsb-release | grep CODENAME | sed 's/.*=//g'` |
|
15 |
- |
|
16 |
-# Move to top devstack dir |
|
17 |
-cd .. |
|
18 |
- |
|
19 |
-# Abort if localrc is not set |
|
20 |
-if [ ! -e ./localrc ]; then |
|
21 |
- echo "You must have a localrc with ALL necessary passwords defined before proceeding." |
|
22 |
- echo "See stack.sh for required passwords." |
|
23 |
- exit 1 |
|
24 |
-fi |
|
25 |
- |
|
26 |
-# Source params |
|
27 |
-source ./stackrc |
|
28 |
- |
|
29 |
-# Store cwd |
|
30 |
-CWD=`pwd` |
|
31 |
- |
|
32 |
-# Configurable params |
|
33 |
-BRIDGE=${BRIDGE:-br0} |
|
34 |
-GUEST_NAME=${GUEST_NAME:-STACK} |
|
35 |
-GUEST_IP=${GUEST_IP:-192.168.1.50} |
|
36 |
-GUEST_CIDR=${GUEST_CIDR:-$GUEST_IP/24} |
|
37 |
-GUEST_NETMASK=${GUEST_NETMASK:-255.255.255.0} |
|
38 |
-GUEST_GATEWAY=${GUEST_GATEWAY:-192.168.1.1} |
|
39 |
-NAMESERVER=${NAMESERVER:-`cat /etc/resolv.conf | grep nameserver | head -1 | cut -d " " -f2`} |
|
40 |
-COPYENV=${COPYENV:-1} |
|
41 |
-DEST=${DEST:-/opt/stack} |
|
42 |
-WAIT_TILL_LAUNCH=${WAIT_TILL_LAUNCH:-1} |
|
43 |
- |
|
44 |
-# Param string to pass to stack.sh. Like "EC2_DMZ_HOST=192.168.1.1 MYSQL_USER=nova" |
|
45 |
-# By default, n-vol is disabled for lxc, as iscsitarget doesn't work properly in lxc |
|
46 |
-STACKSH_PARAMS=${STACKSH_PARAMS:-"ENABLED_SERVICES=g-api,g-reg,key,n-api,n-cpu,n-net,n-sch,n-vnc,horizon,mysql,rabbit"} |
|
47 |
- |
|
48 |
-# Option to use the version of devstack on which we are currently working |
|
49 |
-USE_CURRENT_DEVSTACK=${USE_CURRENT_DEVSTACK:-1} |
|
50 |
- |
|
51 |
- |
|
52 |
-# Install deps |
|
53 |
-apt-get install -y lxc debootstrap |
|
54 |
- |
|
55 |
-# Install cgroup-bin from source, since the packaging is buggy and possibly incompatible with our setup |
|
56 |
-if ! which cgdelete | grep -q cgdelete; then |
|
57 |
- apt-get install -y g++ bison flex libpam0g-dev make |
|
58 |
- wget http://sourceforge.net/projects/libcg/files/libcgroup/v0.37.1/libcgroup-0.37.1.tar.bz2/download -O /tmp/libcgroup-0.37.1.tar.bz2 |
|
59 |
- cd /tmp && bunzip2 libcgroup-0.37.1.tar.bz2 && tar xfv libcgroup-0.37.1.tar |
|
60 |
- cd libcgroup-0.37.1 |
|
61 |
- ./configure |
|
62 |
- make install |
|
63 |
- ldconfig |
|
64 |
-fi |
|
65 |
- |
|
66 |
-# Create lxc configuration |
|
67 |
-LXC_CONF=/tmp/$GUEST_NAME.conf |
|
68 |
-cat > $LXC_CONF <<EOF |
|
69 |
-lxc.network.type = veth |
|
70 |
-lxc.network.link = $BRIDGE |
|
71 |
-lxc.network.flags = up |
|
72 |
-lxc.network.ipv4 = $GUEST_CIDR |
|
73 |
-# allow tap/tun devices |
|
74 |
-lxc.cgroup.devices.allow = c 10:200 rwm |
|
75 |
-EOF |
|
76 |
- |
|
77 |
-# Shutdown any existing container |
|
78 |
-lxc-stop -n $GUEST_NAME |
|
79 |
- |
|
80 |
-# This kills zombie containers |
|
81 |
-if [ -d /cgroup/$GUEST_NAME ]; then |
|
82 |
- cgdelete -r cpu,net_cls:$GUEST_NAME |
|
83 |
-fi |
|
84 |
- |
|
85 |
-# git clone only if directory doesn't exist already. Since ``DEST`` might not |
|
86 |
-# be owned by the installation user, we create the directory and change the |
|
87 |
-# ownership to the proper user. |
|
88 |
-function git_clone { |
|
89 |
- if [ ! -d $2 ]; then |
|
90 |
- sudo mkdir $2 |
|
91 |
- sudo chown `whoami` $2 |
|
92 |
- git clone $1 $2 |
|
93 |
- cd $2 |
|
94 |
- # This checkout syntax works for both branches and tags |
|
95 |
- git checkout $3 |
|
96 |
- fi |
|
97 |
-} |
|
98 |
- |
|
99 |
-# Helper to create the container |
|
100 |
-function create_lxc { |
|
101 |
- if [ "natty" = "$UBUNTU_VERSION" ]; then |
|
102 |
- lxc-create -n $GUEST_NAME -t natty -f $LXC_CONF |
|
103 |
- else |
|
104 |
- lxc-create -n $GUEST_NAME -t ubuntu -f $LXC_CONF |
|
105 |
- fi |
|
106 |
-} |
|
107 |
- |
|
108 |
-# Location of the base image directory |
|
109 |
-if [ "natty" = "$UBUNTU_VERSION" ]; then |
|
110 |
- CACHEDIR=/var/cache/lxc/natty/rootfs-amd64 |
|
111 |
-else |
|
112 |
- CACHEDIR=/var/cache/lxc/oneiric/rootfs-amd64 |
|
113 |
-fi |
|
114 |
- |
|
115 |
-# Provide option to do totally clean install |
|
116 |
-if [ "$CLEAR_LXC_CACHE" = "1" ]; then |
|
117 |
- rm -rf $CACHEDIR |
|
118 |
-fi |
|
119 |
- |
|
120 |
-# Warm the base image on first install |
|
121 |
-if [ ! -f $CACHEDIR/bootstrapped ]; then |
|
122 |
- # by deleting the container, we force lxc-create to re-bootstrap (lxc is |
|
123 |
- # lazy and doesn't do anything if a container already exists) |
|
124 |
- lxc-destroy -n $GUEST_NAME |
|
125 |
- # trigger the initial debootstrap |
|
126 |
- create_lxc |
|
127 |
- touch $CACHEDIR/bootstrapped |
|
128 |
-fi |
|
129 |
- |
|
130 |
-# Make sure that base requirements are installed |
|
131 |
-chroot $CACHEDIR apt-get update |
|
132 |
-chroot $CACHEDIR apt-get install -y --download-only `cat files/apts/* | grep NOPRIME | cut -d\# -f1` |
|
133 |
-chroot $CACHEDIR apt-get install -y --force-yes `cat files/apts/* | grep -v NOPRIME | cut -d\# -f1` || true |
|
134 |
-chroot $CACHEDIR pip install `cat files/pips/*` |
|
135 |
- |
|
136 |
-# Clean out code repos if directed to do so |
|
137 |
-if [ "$CLEAN" = "1" ]; then |
|
138 |
- rm -rf $CACHEDIR/$DEST |
|
139 |
-fi |
|
140 |
- |
|
141 |
-# Cache openstack code |
|
142 |
-mkdir -p $CACHEDIR/$DEST |
|
143 |
-git_clone $NOVA_REPO $CACHEDIR/$DEST/nova $NOVA_BRANCH |
|
144 |
-git_clone $GLANCE_REPO $CACHEDIR/$DEST/glance $GLANCE_BRANCH |
|
145 |
-git_clone $KEYSTONE_REPO $CACHEDIR/$DESTkeystone $KEYSTONE_BRANCH |
|
146 |
-git_clone $NOVNC_REPO $CACHEDIR/$DEST/noVNC $NOVNC_BRANCH |
|
147 |
-git_clone $HORIZON_REPO $CACHEDIR/$DEST/horizon $HORIZON_BRANCH $HORIZON_TAG |
|
148 |
-git_clone $NOVACLIENT_REPO $CACHEDIR/$DEST/python-novaclient $NOVACLIENT_BRANCH |
|
149 |
-git_clone $OPENSTACKX_REPO $CACHEDIR/$DEST/openstackx $OPENSTACKX_BRANCH |
|
150 |
-git_clone $KEYSTONE_REPO $CACHEDIR/$DEST/keystone $KEYSTONE_BRANCH |
|
151 |
-git_clone $NOVNC_REPO $CACHEDIR/$DEST/novnc $NOVNC_BRANCH |
|
152 |
- |
|
153 |
-# Use this version of devstack? |
|
154 |
-if [ "$USE_CURRENT_DEVSTACK" = "1" ]; then |
|
155 |
- rm -rf $CACHEDIR/$DEST/devstack |
|
156 |
- cp -pr $CWD $CACHEDIR/$DEST/devstack |
|
157 |
-fi |
|
158 |
- |
|
159 |
-# pre-cache uec images |
|
160 |
-for image_url in ${IMAGE_URLS//,/ }; do |
|
161 |
- IMAGE_FNAME=`basename "$image_url"` |
|
162 |
- if [ ! -f $CACHEDIR/$IMAGE_FNAME ]; then |
|
163 |
- wget -c $image_url -O $CACHEDIR/$IMAGE_FNAME |
|
164 |
- fi |
|
165 |
- cp $CACHEDIR/$IMAGE_FNAME $CACHEDIR/$DEST/devstack/files |
|
166 |
-done |
|
167 |
- |
|
168 |
-# Destroy the old container |
|
169 |
-lxc-destroy -n $GUEST_NAME |
|
170 |
- |
|
171 |
-# If this call is to TERMINATE the container then exit |
|
172 |
-if [ "$TERMINATE" = "1" ]; then |
|
173 |
- exit |
|
174 |
-fi |
|
175 |
- |
|
176 |
-# Create the container |
|
177 |
-create_lxc |
|
178 |
- |
|
179 |
-# Specify where our container rootfs lives |
|
180 |
-ROOTFS=/var/lib/lxc/$GUEST_NAME/rootfs/ |
|
181 |
- |
|
182 |
-# Create a stack user that is a member of the libvirtd group so that stack |
|
183 |
-# is able to interact with libvirt. |
|
184 |
-chroot $ROOTFS groupadd libvirtd |
|
185 |
-chroot $ROOTFS useradd stack -s /bin/bash -d $DEST -G libvirtd |
|
186 |
- |
|
187 |
-# a simple password - pass |
|
188 |
-echo stack:pass | chroot $ROOTFS chpasswd |
|
189 |
- |
|
190 |
-# and has sudo ability (in the future this should be limited to only what |
|
191 |
-# stack requires) |
|
192 |
-echo "stack ALL=(ALL) NOPASSWD: ALL" >> $ROOTFS/etc/sudoers |
|
193 |
- |
|
194 |
-# Copy kernel modules |
|
195 |
-mkdir -p $ROOTFS/lib/modules/`uname -r`/kernel |
|
196 |
-cp -p /lib/modules/`uname -r`/modules.dep $ROOTFS/lib/modules/`uname -r`/ |
|
197 |
-cp -pR /lib/modules/`uname -r`/kernel/net $ROOTFS/lib/modules/`uname -r`/kernel/ |
|
198 |
- |
|
199 |
-# Gracefully cp only if source file/dir exists |
|
200 |
-function cp_it { |
|
201 |
- if [ -e $1 ] || [ -d $1 ]; then |
|
202 |
- cp -pRL $1 $2 |
|
203 |
- fi |
|
204 |
-} |
|
205 |
- |
|
206 |
-# Copy over your ssh keys and env if desired |
|
207 |
-if [ "$COPYENV" = "1" ]; then |
|
208 |
- cp_it ~/.ssh $ROOTFS/$DEST/.ssh |
|
209 |
- cp_it ~/.ssh/id_rsa.pub $ROOTFS/$DEST/.ssh/authorized_keys |
|
210 |
- cp_it ~/.gitconfig $ROOTFS/$DEST/.gitconfig |
|
211 |
- cp_it ~/.vimrc $ROOTFS/$DEST/.vimrc |
|
212 |
- cp_it ~/.bashrc $ROOTFS/$DEST/.bashrc |
|
213 |
-fi |
|
214 |
- |
|
215 |
-# Make our ip address hostnames look nice at the command prompt |
|
216 |
-echo "export PS1='${debian_chroot:+($debian_chroot)}\\u@\\H:\\w\\$ '" >> $ROOTFS/$DEST/.bashrc |
|
217 |
-echo "export PS1='${debian_chroot:+($debian_chroot)}\\u@\\H:\\w\\$ '" >> $ROOTFS/etc/profile |
|
218 |
- |
|
219 |
-# Give stack ownership over $DEST so it may do the work needed |
|
220 |
-chroot $ROOTFS chown -R stack $DEST |
|
221 |
- |
|
222 |
-# Configure instance network |
|
223 |
-INTERFACES=$ROOTFS/etc/network/interfaces |
|
224 |
-cat > $INTERFACES <<EOF |
|
225 |
-auto lo |
|
226 |
-iface lo inet loopback |
|
227 |
- |
|
228 |
-auto eth0 |
|
229 |
-iface eth0 inet static |
|
230 |
- address $GUEST_IP |
|
231 |
- netmask $GUEST_NETMASK |
|
232 |
- gateway $GUEST_GATEWAY |
|
233 |
-EOF |
|
234 |
- |
|
235 |
-# Configure the runner |
|
236 |
-RUN_SH=$ROOTFS/$DEST/run.sh |
|
237 |
-cat > $RUN_SH <<EOF |
|
238 |
-#!/usr/bin/env bash |
|
239 |
-# Make sure dns is set up |
|
240 |
-echo "nameserver $NAMESERVER" | sudo resolvconf -a eth0 |
|
241 |
-# Make there is a default route - needed for natty |
|
242 |
-if ! route | grep -q default; then |
|
243 |
- sudo ip route add default via $GUEST_GATEWAY |
|
244 |
-fi |
|
245 |
-sleep 1 |
|
246 |
- |
|
247 |
-# Kill any existing screens |
|
248 |
-killall screen |
|
249 |
- |
|
250 |
-# Install and run stack.sh |
|
251 |
-sudo apt-get update |
|
252 |
-sudo apt-get -y --force-yes install git-core vim-nox sudo |
|
253 |
-if [ ! -d "$DEST/devstack" ]; then |
|
254 |
- git clone git://github.com/cloudbuilders/devstack.git $DEST/devstack |
|
255 |
-fi |
|
256 |
-cd $DEST/devstack && $STACKSH_PARAMS FORCE=yes ./stack.sh > /$DEST/run.sh.log |
|
257 |
-echo >> /$DEST/run.sh.log |
|
258 |
-echo >> /$DEST/run.sh.log |
|
259 |
-echo "All done! Time to start clicking." >> /$DEST/run.sh.log |
|
260 |
-EOF |
|
261 |
- |
|
262 |
-# Make the run.sh executable |
|
263 |
-chmod 755 $RUN_SH |
|
264 |
- |
|
265 |
-# Make runner launch on boot |
|
266 |
-RC_LOCAL=$ROOTFS/etc/init.d/local |
|
267 |
-cat > $RC_LOCAL <<EOF |
|
268 |
-#!/bin/sh -e |
|
269 |
-su -c "$DEST/run.sh" stack |
|
270 |
-EOF |
|
271 |
-chmod +x $RC_LOCAL |
|
272 |
-chroot $ROOTFS sudo update-rc.d local defaults 80 |
|
273 |
- |
|
274 |
-# Configure cgroup directory |
|
275 |
-if ! mount | grep -q cgroup; then |
|
276 |
- mkdir -p /cgroup |
|
277 |
- mount none -t cgroup /cgroup |
|
278 |
-fi |
|
279 |
- |
|
280 |
-# Start our container |
|
281 |
-lxc-start -d -n $GUEST_NAME |
|
282 |
- |
|
283 |
-if [ "$WAIT_TILL_LAUNCH" = "1" ]; then |
|
284 |
- # Done creating the container, let's tail the log |
|
285 |
- echo |
|
286 |
- echo "=============================================================" |
|
287 |
- echo " -- YAY! --" |
|
288 |
- echo "=============================================================" |
|
289 |
- echo |
|
290 |
- echo "We're done creating the container, about to start tailing the" |
|
291 |
- echo "stack.sh log. It will take a second or two to start." |
|
292 |
- echo |
|
293 |
- echo "Just CTRL-C at any time to stop tailing." |
|
294 |
- |
|
295 |
- while [ ! -e "$ROOTFS/$DEST/run.sh.log" ]; do |
|
296 |
- sleep 1 |
|
297 |
- done |
|
298 |
- |
|
299 |
- tail -F $ROOTFS/$DEST/run.sh.log & |
|
300 |
- |
|
301 |
- TAIL_PID=$! |
|
302 |
- |
|
303 |
- function kill_tail() { |
|
304 |
- kill $TAIL_PID |
|
305 |
- exit 1 |
|
306 |
- } |
|
307 |
- |
|
308 |
- # Let Ctrl-c kill tail and exit |
|
309 |
- trap kill_tail SIGINT |
|
310 |
- |
|
311 |
- echo "Waiting stack.sh to finish..." |
|
312 |
- while ! cat $ROOTFS/$DEST/run.sh.log | grep -q 'All done' ; do |
|
313 |
- sleep 5 |
|
314 |
- done |
|
315 |
- |
|
316 |
- kill $TAIL_PID |
|
317 |
- |
|
318 |
- if grep -q "stack.sh failed" $ROOTFS/$DEST/run.sh.log; then |
|
319 |
- exit 1 |
|
320 |
- fi |
|
321 |
- |
|
322 |
- echo "" |
|
323 |
- echo "Finished - Zip-a-dee Doo-dah!" |
|
324 |
-fi |
325 | 1 |
deleted file mode 100755 |
... | ... |
@@ -1,39 +0,0 @@ |
1 |
-#!/usr/bin/env bash |
|
2 |
-# Head node host, which runs glance, api, keystone |
|
3 |
-HEAD_HOST=${HEAD_HOST:-192.168.1.52} |
|
4 |
-COMPUTE_HOSTS=${COMPUTE_HOSTS:-192.168.1.53,192.168.1.54} |
|
5 |
- |
|
6 |
-# Networking params |
|
7 |
-NAMESERVER=${NAMESERVER:-192.168.1.1} |
|
8 |
-GATEWAY=${GATEWAY:-192.168.1.1} |
|
9 |
-NETMASK=${NETMASK:-255.255.255.0} |
|
10 |
-FLOATING_RANGE=${FLOATING_RANGE:-192.168.1.196/30} |
|
11 |
- |
|
12 |
-# Setting this to 1 shuts down and destroys our containers without relaunching. |
|
13 |
-TERMINATE=${TERMINATE:-0} |
|
14 |
- |
|
15 |
-# Variables common amongst all hosts in the cluster |
|
16 |
-COMMON_VARS="MYSQL_HOST=$HEAD_HOST RABBIT_HOST=$HEAD_HOST GLANCE_HOSTPORT=$HEAD_HOST:9292 NET_MAN=FlatDHCPManager FLAT_INTERFACE=eth0 FLOATING_RANGE=$FLOATING_RANGE MULTI_HOST=1" |
|
17 |
- |
|
18 |
-# Helper to launch containers |
|
19 |
-function run_lxc { |
|
20 |
- # For some reason container names with periods can cause issues :/ |
|
21 |
- GUEST_NAME=$1 GUEST_IP=$2 GUEST_NETMASK=$NETMASK GUEST_GATEWAY=$GATEWAY NAMESERVER=$NAMESERVER TERMINATE=$TERMINATE STACKSH_PARAMS="$COMMON_VARS $3" ./build_lxc.sh |
|
22 |
-} |
|
23 |
- |
|
24 |
-# Launch the head node - headnode uses a non-ip domain name, |
|
25 |
-# because rabbit won't launch with an ip addr hostname :( |
|
26 |
-run_lxc STACKMASTER $HEAD_HOST "ENABLED_SERVICES=g-api,g-reg,key,n-api,n-sch,n-vnc,horizon,mysql,rabbit" |
|
27 |
- |
|
28 |
-# Wait till the head node is up |
|
29 |
-if [ ! "$TERMINATE" = "1" ]; then |
|
30 |
- while ! wget -q -O- http://$HEAD_HOST | grep -q username; do |
|
31 |
- echo "Waiting for head node ($HEAD_HOST) to start..." |
|
32 |
- sleep 5 |
|
33 |
- done |
|
34 |
-fi |
|
35 |
- |
|
36 |
-# Launch the compute hosts |
|
37 |
-for compute_host in ${COMPUTE_HOSTS//,/ }; do |
|
38 |
- run_lxc $compute_host $compute_host "ENABLED_SERVICES=n-cpu,n-net,n-api" |
|
39 |
-done |
40 | 1 |
deleted file mode 100755 |
... | ... |
@@ -1,118 +0,0 @@ |
1 |
-#!/bin/bash |
|
2 |
- |
|
3 |
-PROGDIR=`dirname $0` |
|
4 |
-CHROOTCACHE=${CHROOTCACHE:-/var/cache/devstack} |
|
5 |
- |
|
6 |
-# Source params |
|
7 |
-source ./stackrc |
|
8 |
- |
|
9 |
-# Store cwd |
|
10 |
-CWD=`pwd` |
|
11 |
- |
|
12 |
-NAME=$1 |
|
13 |
-NFSDIR="/nfs/$NAME" |
|
14 |
-DEST=${DEST:-/opt/stack} |
|
15 |
- |
|
16 |
-# Option to use the version of devstack on which we are currently working |
|
17 |
-USE_CURRENT_DEVSTACK=${USE_CURRENT_DEVSTACK:-1} |
|
18 |
- |
|
19 |
-# remove old nfs filesystem if one exists |
|
20 |
-rm -rf $DEST |
|
21 |
- |
|
22 |
-# clean install of natty |
|
23 |
-if [ ! -d $CHROOTCACHE/natty-base ]; then |
|
24 |
- $PROGDIR/make_image.sh -C natty $CHROOTCACHE/natty-base |
|
25 |
- # copy kernel modules... |
|
26 |
- # NOTE(ja): is there a better way to do this? |
|
27 |
- cp -pr /lib/modules/`uname -r` $CHROOTCACHE/natty-base/lib/modules |
|
28 |
- # a simple password - pass |
|
29 |
- echo root:pass | chroot $CHROOTCACHE/natty-base chpasswd |
|
30 |
-fi |
|
31 |
- |
|
32 |
-# prime natty with as many apt/pips as we can |
|
33 |
-if [ ! -d $CHROOTCACHE/natty-dev ]; then |
|
34 |
- rsync -azH $CHROOTCACHE/natty-base/ $CHROOTCACHE/natty-dev/ |
|
35 |
- chroot $CHROOTCACHE apt-get install -y --download-only `cat files/apts/* | grep NOPRIME | cut -d\# -f1` |
|
36 |
- chroot $CHROOTCACHE apt-get install -y --force-yes `cat files/apts/* | grep -v NOPRIME | cut -d\# -f1` |
|
37 |
- chroot $CHROOTCACHE pip install `cat files/pips/*` |
|
38 |
- |
|
39 |
- # Create a stack user that is a member of the libvirtd group so that stack |
|
40 |
- # is able to interact with libvirt. |
|
41 |
- chroot $CHROOTCACHE/natty-dev groupadd libvirtd |
|
42 |
- chroot $CHROOTCACHE/natty-dev useradd stack -s /bin/bash -d $DEST -G libvirtd |
|
43 |
- mkdir -p $CHROOTCACHE/natty-dev/$DEST |
|
44 |
- chown stack $CHROOTCACHE/natty-dev/$DEST |
|
45 |
- |
|
46 |
- # a simple password - pass |
|
47 |
- echo stack:pass | chroot $CHROOTCACHE/natty-dev chpasswd |
|
48 |
- |
|
49 |
- # and has sudo ability (in the future this should be limited to only what |
|
50 |
- # stack requires) |
|
51 |
- echo "stack ALL=(ALL) NOPASSWD: ALL" >> $CHROOTCACHE/natty-dev/etc/sudoers |
|
52 |
-fi |
|
53 |
- |
|
54 |
-# clone git repositories onto the system |
|
55 |
-# ====================================== |
|
56 |
- |
|
57 |
-if [ ! -d $CHROOTCACHE/natty-stack ]; then |
|
58 |
- rsync -azH $CHROOTCACHE/natty-dev/ $CHROOTCACHE/natty-stack/ |
|
59 |
-fi |
|
60 |
- |
|
61 |
-# git clone only if directory doesn't exist already. Since ``DEST`` might not |
|
62 |
-# be owned by the installation user, we create the directory and change the |
|
63 |
-# ownership to the proper user. |
|
64 |
-function git_clone { |
|
65 |
- |
|
66 |
- # clone new copy or fetch latest changes |
|
67 |
- CHECKOUT=$CHROOTCACHE/natty-stack$2 |
|
68 |
- if [ ! -d $CHECKOUT ]; then |
|
69 |
- mkdir -p $CHECKOUT |
|
70 |
- git clone $1 $CHECKOUT |
|
71 |
- else |
|
72 |
- pushd $CHECKOUT |
|
73 |
- git fetch |
|
74 |
- popd |
|
75 |
- fi |
|
76 |
- |
|
77 |
- # FIXME(ja): checkout specified version (should works for branches and tags) |
|
78 |
- |
|
79 |
- pushd $CHECKOUT |
|
80 |
- # checkout the proper branch/tag |
|
81 |
- git checkout $3 |
|
82 |
- # force our local version to be the same as the remote version |
|
83 |
- git reset --hard origin/$3 |
|
84 |
- popd |
|
85 |
- |
|
86 |
- # give ownership to the stack user |
|
87 |
- chroot $CHROOTCACHE/natty-stack/ chown -R stack $2 |
|
88 |
-} |
|
89 |
- |
|
90 |
-git_clone $NOVA_REPO $DEST/nova $NOVA_BRANCH |
|
91 |
-git_clone $GLANCE_REPO $DEST/glance $GLANCE_BRANCH |
|
92 |
-git_clone $KEYSTONE_REPO $DEST/keystone $KEYSTONE_BRANCH |
|
93 |
-git_clone $NOVNC_REPO $DEST/novnc $NOVNC_BRANCH |
|
94 |
-git_clone $HORIZON_REPO $DEST/horizon $HORIZON_BRANCH $HORIZON_TAG |
|
95 |
-git_clone $NOVACLIENT_REPO $DEST/python-novaclient $NOVACLIENT_BRANCH |
|
96 |
-git_clone $OPENSTACKX_REPO $DEST/openstackx $OPENSTACKX_BRANCH |
|
97 |
- |
|
98 |
-chroot $CHROOTCACHE/natty-stack mkdir -p $DEST/files |
|
99 |
-wget -c http://images.ansolabs.com/tty.tgz -O $CHROOTCACHE/natty-stack$DEST/files/tty.tgz |
|
100 |
- |
|
101 |
-# Use this version of devstack? |
|
102 |
-if [ "$USE_CURRENT_DEVSTACK" = "1" ]; then |
|
103 |
- rm -rf $CHROOTCACHE/natty-stack/$DEST/devstack |
|
104 |
- cp -pr $CWD $CHROOTCACHE/natty-stack/$DEST/devstack |
|
105 |
-fi |
|
106 |
- |
|
107 |
-cp -pr $CHROOTCACHE/natty-stack $NFSDIR |
|
108 |
- |
|
109 |
-# set hostname |
|
110 |
-echo $NAME > $NFSDIR/etc/hostname |
|
111 |
-echo "127.0.0.1 localhost $NAME" > $NFSDIR/etc/hosts |
|
112 |
- |
|
113 |
-# injecting root's public ssh key if it exists |
|
114 |
-if [ -f /root/.ssh/id_rsa.pub ]; then |
|
115 |
- mkdir $NFSDIR/root/.ssh |
|
116 |
- chmod 700 $NFSDIR/root/.ssh |
|
117 |
- cp /root/.ssh/id_rsa.pub $NFSDIR/root/.ssh/authorized_keys |
|
118 |
-fi |
... | ... |
@@ -10,8 +10,7 @@ |
10 | 10 |
dpkg -l syslinux || apt-get install -y syslinux |
11 | 11 |
|
12 | 12 |
DEST_DIR=${1:-/tmp}/tftpboot |
13 |
-PXEDIR=${PXEDIR:-/var/cache/devstack/pxe} |
|
14 |
-OPWD=`pwd` |
|
13 |
+PXEDIR=${PXEDIR:-/opt/ramstack/pxe} |
|
15 | 14 |
PROGDIR=`dirname $0` |
16 | 15 |
|
17 | 16 |
# Clean up any resources that may be in use |
... | ... |
@@ -28,7 +27,11 @@ cleanup() { |
28 | 28 |
trap 2; kill -2 $$ |
29 | 29 |
} |
30 | 30 |
|
31 |
-trap cleanup SIGHUP SIGINT SIGTERM |
|
31 |
+trap cleanup SIGHUP SIGINT SIGTERM SIGQUIT EXIT |
|
32 |
+ |
|
33 |
+# Keep track of the current directory |
|
34 |
+TOOLS_DIR=$(cd $(dirname "$0") && pwd) |
|
35 |
+TOP_DIR=`cd $TOOLS_DIR/..; pwd` |
|
32 | 36 |
|
33 | 37 |
mkdir -p $DEST_DIR/pxelinux.cfg |
34 | 38 |
cd $DEST_DIR |
... | ... |
@@ -42,7 +45,7 @@ default menu.c32 |
42 | 42 |
prompt 0 |
43 | 43 |
timeout 0 |
44 | 44 |
|
45 |
-MENU TITLE PXE Boot Menu |
|
45 |
+MENU TITLE devstack PXE Boot Menu |
|
46 | 46 |
|
47 | 47 |
EOF |
48 | 48 |
|
... | ... |
@@ -54,7 +57,7 @@ fi |
54 | 54 |
|
55 | 55 |
# Get image into place |
56 | 56 |
if [ ! -r $PXEDIR/stack-initrd.img ]; then |
57 |
- cd $OPWD |
|
57 |
+ cd $TOP_DIR |
|
58 | 58 |
$PROGDIR/build_ramdisk.sh $PXEDIR/stack-initrd.img |
59 | 59 |
fi |
60 | 60 |
if [ ! -r $PXEDIR/stack-initrd.gz ]; then |
... | ... |
@@ -110,3 +113,5 @@ LABEL local |
110 | 110 |
MENU LABEL ^Local disk |
111 | 111 |
LOCALBOOT 0 |
112 | 112 |
EOF |
113 |
+ |
|
114 |
+trap cleanup SIGHUP SIGINT SIGTERM SIGQUIT EXIT |
... | ... |
@@ -37,27 +37,34 @@ DEPS="kvm libvirt-bin kpartx cloud-utils curl" |
37 | 37 |
apt-get install -y --force-yes $DEPS || true # allow this to fail gracefully for concurrent builds |
38 | 38 |
|
39 | 39 |
# Where to store files and instances |
40 |
-WORK_DIR=${WORK_DIR:-/opt/kvmstack} |
|
40 |
+WORK_DIR=${WORK_DIR:-/opt/uecstack} |
|
41 | 41 |
|
42 | 42 |
# Where to store images |
43 | 43 |
image_dir=$WORK_DIR/images/$DIST_NAME |
44 | 44 |
mkdir -p $image_dir |
45 | 45 |
|
46 |
-# Original version of built image |
|
47 |
-uec_url=http://uec-images.ubuntu.com/$DIST_NAME/current/$DIST_NAME-server-cloudimg-amd64.tar.gz |
|
48 |
-tarball=$image_dir/$(basename $uec_url) |
|
46 |
+# Start over with a clean base image, if desired |
|
47 |
+if [ $CLEAN_BASE ]; then |
|
48 |
+ rm -f $image_dir/disk |
|
49 |
+fi |
|
49 | 50 |
|
50 |
-# download the base uec image if we haven't already |
|
51 |
-if [ ! -f $tarball ]; then |
|
52 |
- curl $uec_url -o $tarball |
|
53 |
- (cd $image_dir && tar -Sxvzf $tarball) |
|
54 |
- resize-part-image $image_dir/*.img $GUEST_SIZE $image_dir/disk |
|
55 |
- cp $image_dir/*-vmlinuz-virtual $image_dir/kernel |
|
51 |
+# Get the base image if it does not yet exist |
|
52 |
+if [ ! -e $image_dir/disk ]; then |
|
53 |
+ $TOOLS_DIR/get_uec_image.sh -r $GUEST_SIZE $DIST_NAME $image_dir/disk $image_dir/kernel |
|
56 | 54 |
fi |
57 | 55 |
|
56 |
+# Copy over dev environment if COPY_ENV is set. |
|
57 |
+# This will also copy over your current devstack. |
|
58 |
+if [ $COPY_ENV ]; then |
|
59 |
+ cd $TOOLS_DIR |
|
60 |
+ ./copy_dev_environment_to_uec.sh $image_dir/disk |
|
61 |
+fi |
|
58 | 62 |
|
59 |
-# Configure the root password of the vm to be the same as ``ADMIN_PASSWORD`` |
|
60 |
-ROOT_PASSWORD=${ADMIN_PASSWORD:-password} |
|
63 |
+# Option to warm the base image with software requirements. |
|
64 |
+if [ $WARM_CACHE ]; then |
|
65 |
+ cd $TOOLS_DIR |
|
66 |
+ ./warm_apts_and_pips_for_uec.sh $image_dir/disk |
|
67 |
+fi |
|
61 | 68 |
|
62 | 69 |
# Name of our instance, used by libvirt |
63 | 70 |
GUEST_NAME=${GUEST_NAME:-devstack} |
... | ... |
@@ -178,22 +185,23 @@ cat > $vm_dir/uec/user-data<<EOF |
178 | 178 |
sed -i "s/127.0.0.1/127.0.0.1 \`hostname\`/" /etc/hosts |
179 | 179 |
apt-get update |
180 | 180 |
apt-get install git sudo -y |
181 |
-git clone https://github.com/cloudbuilders/devstack.git |
|
182 |
-cd devstack |
|
183 |
-git remote set-url origin `cd $TOP_DIR; git remote show origin | grep Fetch | awk '{print $3}'` |
|
184 |
-git fetch |
|
185 |
-git checkout `git rev-parse HEAD` |
|
186 |
-cat > localrc <<LOCAL_EOF |
|
181 |
+if [ ! -d devstack ]; then |
|
182 |
+ git clone https://github.com/cloudbuilders/devstack.git |
|
183 |
+ cd devstack |
|
184 |
+ git remote set-url origin `cd $TOP_DIR; git remote show origin | grep Fetch | awk '{print $3}'` |
|
185 |
+ git fetch |
|
186 |
+ git checkout `git rev-parse HEAD` |
|
187 |
+ cat > localrc <<LOCAL_EOF |
|
187 | 188 |
ROOTSLEEP=0 |
188 | 189 |
`cat $TOP_DIR/localrc` |
189 | 190 |
LOCAL_EOF |
191 |
+fi |
|
190 | 192 |
# Disable byobu |
191 |
-/usr/bin/byobu-disable |
|
193 |
+sudo apt-get remove -y byobu |
|
192 | 194 |
EOF |
193 | 195 |
|
194 | 196 |
# Setup stack user with our key |
195 |
-CONFIGURE_STACK_USER=${CONFIGURE_STACK_USER:-yes} |
|
196 |
-if [[ -e ~/.ssh/id_rsa.pub && "$CONFIGURE_STACK_USER" = "yes" ]]; then |
|
197 |
+if [[ -e ~/.ssh/id_rsa.pub ]]; then |
|
197 | 198 |
PUB_KEY=`cat ~/.ssh/id_rsa.pub` |
198 | 199 |
cat >> $vm_dir/uec/user-data<<EOF |
199 | 200 |
mkdir -p /opt/stack |
... | ... |
@@ -242,6 +250,20 @@ if [ "$WAIT_TILL_LAUNCH" = "1" ]; then |
242 | 242 |
echo "stack.sh log. It will take a second or two to start." |
243 | 243 |
echo |
244 | 244 |
echo "Just CTRL-C at any time to stop tailing." |
245 |
+ echo |
|
246 |
+ |
|
247 |
+ if ! timeout 60 sh -c "while [ ! -s /var/lib/libvirt/dnsmasq/$NET_NAME.leases ]; do sleep 1; done"; then |
|
248 |
+ echo "Your instance failed to acquire an IP address" |
|
249 |
+ exit 1 |
|
250 |
+ fi |
|
251 |
+ |
|
252 |
+ ip=`cat /var/lib/libvirt/dnsmasq/$NET_NAME.leases | cut -d " " -f3` |
|
253 |
+ echo "#############################################################" |
|
254 |
+ echo " -- This is your instance's IP: --" |
|
255 |
+ echo " $ip" |
|
256 |
+ echo "#############################################################" |
|
257 |
+ |
|
258 |
+ sleep 2 |
|
245 | 259 |
|
246 | 260 |
while [ ! -e "$vm_dir/console.log" ]; do |
247 | 261 |
sleep 1 |
... | ... |
@@ -271,6 +293,8 @@ if [ "$WAIT_TILL_LAUNCH" = "1" ]; then |
271 | 271 |
if ! grep -q "^stack.sh completed in" $vm_dir/console.log; then |
272 | 272 |
exit 1 |
273 | 273 |
fi |
274 |
+ |
|
275 |
+ set +o xtrace |
|
274 | 276 |
echo "" |
275 | 277 |
echo "Finished - Zip-a-dee Doo-dah!" |
276 | 278 |
fi |
277 | 279 |
new file mode 100755 |
... | ... |
@@ -0,0 +1,203 @@ |
0 |
+#!/usr/bin/env bash |
|
1 |
+# build_uec_ramdisk.sh - Build RAM disk images based on UEC image |
|
2 |
+ |
|
3 |
+# exit on error to stop unexpected errors |
|
4 |
+set -o errexit |
|
5 |
+ |
|
6 |
+if [ ! "$#" -eq "1" ]; then |
|
7 |
+ echo "$0 builds a gziped Ubuntu OpenStack install" |
|
8 |
+ echo "usage: $0 dest" |
|
9 |
+ exit 1 |
|
10 |
+fi |
|
11 |
+ |
|
12 |
+# Make sure that we have the proper version of ubuntu (only works on oneiric) |
|
13 |
+if ! egrep -q "oneiric" /etc/lsb-release; then |
|
14 |
+ echo "This script only works with ubuntu oneiric." |
|
15 |
+ exit 1 |
|
16 |
+fi |
|
17 |
+ |
|
18 |
+# Clean up resources that may be in use |
|
19 |
+cleanup() { |
|
20 |
+ set +o errexit |
|
21 |
+ |
|
22 |
+ if [ -n "$MNT_DIR" ]; then |
|
23 |
+ umount $MNT_DIR/dev |
|
24 |
+ umount $MNT_DIR |
|
25 |
+ fi |
|
26 |
+ |
|
27 |
+ if [ -n "$DEST_FILE_TMP" ]; then |
|
28 |
+ rm $DEST_FILE_TMP |
|
29 |
+ fi |
|
30 |
+ |
|
31 |
+ # Kill ourselves to signal parents |
|
32 |
+ trap 2; kill -2 $$ |
|
33 |
+} |
|
34 |
+ |
|
35 |
+trap cleanup SIGHUP SIGINT SIGTERM SIGQUIT EXIT |
|
36 |
+ |
|
37 |
+# Output dest image |
|
38 |
+DEST_FILE=$1 |
|
39 |
+ |
|
40 |
+# Keep track of the current directory |
|
41 |
+TOOLS_DIR=$(cd $(dirname "$0") && pwd) |
|
42 |
+TOP_DIR=`cd $TOOLS_DIR/..; pwd` |
|
43 |
+ |
|
44 |
+cd $TOP_DIR |
|
45 |
+ |
|
46 |
+# Source params |
|
47 |
+source ./stackrc |
|
48 |
+ |
|
49 |
+DEST=${DEST:-/opt/stack} |
|
50 |
+ |
|
51 |
+# Ubuntu distro to install |
|
52 |
+DIST_NAME=${DIST_NAME:-oneiric} |
|
53 |
+ |
|
54 |
+# Configure how large the VM should be |
|
55 |
+GUEST_SIZE=${GUEST_SIZE:-2G} |
|
56 |
+ |
|
57 |
+# exit on error to stop unexpected errors |
|
58 |
+set -o errexit |
|
59 |
+set -o xtrace |
|
60 |
+ |
|
61 |
+# Abort if localrc is not set |
|
62 |
+if [ ! -e $TOP_DIR/localrc ]; then |
|
63 |
+ echo "You must have a localrc with ALL necessary passwords defined before proceeding." |
|
64 |
+ echo "See stack.sh for required passwords." |
|
65 |
+ exit 1 |
|
66 |
+fi |
|
67 |
+ |
|
68 |
+# Install deps if needed |
|
69 |
+DEPS="kvm libvirt-bin kpartx cloud-utils curl" |
|
70 |
+apt-get install -y --force-yes $DEPS |
|
71 |
+ |
|
72 |
+# Where to store files and instances |
|
73 |
+CACHEDIR=${CACHEDIR:-/opt/stack/cache} |
|
74 |
+WORK_DIR=${WORK_DIR:-/opt/ramstack} |
|
75 |
+ |
|
76 |
+# Where to store images |
|
77 |
+image_dir=$WORK_DIR/images/$DIST_NAME |
|
78 |
+mkdir -p $image_dir |
|
79 |
+ |
|
80 |
+# Get the base image if it does not yet exist |
|
81 |
+if [ ! -e $image_dir/disk ]; then |
|
82 |
+ $TOOLS_DIR/get_uec_image.sh -r 2000M $DIST_NAME $image_dir/disk |
|
83 |
+fi |
|
84 |
+ |
|
85 |
+# Configure the root password of the vm to be the same as ``ADMIN_PASSWORD`` |
|
86 |
+ROOT_PASSWORD=${ADMIN_PASSWORD:-password} |
|
87 |
+ |
|
88 |
+# Name of our instance, used by libvirt |
|
89 |
+GUEST_NAME=${GUEST_NAME:-devstack} |
|
90 |
+ |
|
91 |
+# Pre-load the image with basic environment |
|
92 |
+if [ ! -e $image_dir/disk-primed ]; then |
|
93 |
+ cp $image_dir/disk $image_dir/disk-primed |
|
94 |
+ $TOOLS_DIR/warm_apts_and_pips_for_uec.sh $image_dir/disk-primed |
|
95 |
+ $TOOLS_DIR/copy_dev_environment_to_uec.sh $image_dir/disk-primed |
|
96 |
+fi |
|
97 |
+ |
|
98 |
+# Back to devstack |
|
99 |
+cd $TOP_DIR |
|
100 |
+ |
|
101 |
+DEST_FILE_TMP=`mktemp $DEST_FILE.XXXXXX` |
|
102 |
+MNT_DIR=`mktemp -d --tmpdir mntXXXXXXXX` |
|
103 |
+cp $image_dir/disk-primed $DEST_FILE_TMP |
|
104 |
+mount -t ext4 -o loop $DEST_FILE_TMP $MNT_DIR |
|
105 |
+mount -o bind /dev /$MNT_DIR/dev |
|
106 |
+cp -p /etc/resolv.conf $MNT_DIR/etc/resolv.conf |
|
107 |
+echo root:$ROOT_PASSWORD | chroot $MNT_DIR chpasswd |
|
108 |
+touch $MNT_DIR/$DEST/.ramdisk |
|
109 |
+ |
|
110 |
+# We need to install a non-virtual kernel and modules to boot from |
|
111 |
+if [ ! -r "`ls $MNT_DIR/boot/vmlinuz-*-generic | head -1`" ]; then |
|
112 |
+ chroot $MNT_DIR apt-get install -y linux-generic |
|
113 |
+fi |
|
114 |
+ |
|
115 |
+# git clone only if directory doesn't exist already. Since ``DEST`` might not |
|
116 |
+# be owned by the installation user, we create the directory and change the |
|
117 |
+# ownership to the proper user. |
|
118 |
+function git_clone { |
|
119 |
+ |
|
120 |
+ # clone new copy or fetch latest changes |
|
121 |
+ CHECKOUT=${MNT_DIR}$2 |
|
122 |
+ if [ ! -d $CHECKOUT ]; then |
|
123 |
+ mkdir -p $CHECKOUT |
|
124 |
+ git clone $1 $CHECKOUT |
|
125 |
+ else |
|
126 |
+ pushd $CHECKOUT |
|
127 |
+ git fetch |
|
128 |
+ popd |
|
129 |
+ fi |
|
130 |
+ |
|
131 |
+ # FIXME(ja): checkout specified version (should works for branches and tags) |
|
132 |
+ |
|
133 |
+ pushd $CHECKOUT |
|
134 |
+ # checkout the proper branch/tag |
|
135 |
+ git checkout $3 |
|
136 |
+ # force our local version to be the same as the remote version |
|
137 |
+ git reset --hard origin/$3 |
|
138 |
+ popd |
|
139 |
+ |
|
140 |
+ # give ownership to the stack user |
|
141 |
+ chroot $MNT_DIR chown -R stack $2 |
|
142 |
+} |
|
143 |
+ |
|
144 |
+git_clone $NOVA_REPO $DEST/nova $NOVA_BRANCH |
|
145 |
+git_clone $GLANCE_REPO $DEST/glance $GLANCE_BRANCH |
|
146 |
+git_clone $KEYSTONE_REPO $DEST/keystone $KEYSTONE_BRANCH |
|
147 |
+git_clone $NOVNC_REPO $DEST/novnc $NOVNC_BRANCH |
|
148 |
+git_clone $HORIZON_REPO $DEST/horizon $HORIZON_BRANCH |
|
149 |
+git_clone $NOVACLIENT_REPO $DEST/python-novaclient $NOVACLIENT_BRANCH |
|
150 |
+git_clone $OPENSTACKX_REPO $DEST/openstackx $OPENSTACKX_BRANCH |
|
151 |
+git_clone $CITEST_REPO $DEST/openstack-integration-tests $CITEST_BRANCH |
|
152 |
+ |
|
153 |
+# Use this version of devstack |
|
154 |
+rm -rf $MNT_DIR/$DEST/devstack |
|
155 |
+cp -pr $TOP_DIR $MNT_DIR/$DEST/devstack |
|
156 |
+chroot $MNT_DIR chown -R stack $DEST/devstack |
|
157 |
+ |
|
158 |
+# Configure host network for DHCP |
|
159 |
+mkdir -p $MNT_DIR/etc/network |
|
160 |
+cat > $MNT_DIR/etc/network/interfaces <<EOF |
|
161 |
+auto lo |
|
162 |
+iface lo inet loopback |
|
163 |
+ |
|
164 |
+auto eth0 |
|
165 |
+iface eth0 inet dhcp |
|
166 |
+EOF |
|
167 |
+ |
|
168 |
+# Set hostname |
|
169 |
+echo "ramstack" >$MNT_DIR/etc/hostname |
|
170 |
+echo "127.0.0.1 localhost ramstack" >$MNT_DIR/etc/hosts |
|
171 |
+ |
|
172 |
+# Configure the runner |
|
173 |
+RUN_SH=$MNT_DIR/$DEST/run.sh |
|
174 |
+cat > $RUN_SH <<EOF |
|
175 |
+#!/usr/bin/env bash |
|
176 |
+ |
|
177 |
+# Get IP range |
|
178 |
+set \`ip addr show dev eth0 | grep inet\` |
|
179 |
+PREFIX=\`echo \$2 | cut -d. -f1,2,3\` |
|
180 |
+export FLOATING_RANGE="\$PREFIX.224/27" |
|
181 |
+ |
|
182 |
+# Kill any existing screens |
|
183 |
+killall screen |
|
184 |
+ |
|
185 |
+# Run stack.sh |
|
186 |
+cd $DEST/devstack && \$STACKSH_PARAMS ./stack.sh > $DEST/run.sh.log |
|
187 |
+echo >> $DEST/run.sh.log |
|
188 |
+echo >> $DEST/run.sh.log |
|
189 |
+echo "All done! Time to start clicking." >> $DEST/run.sh.log |
|
190 |
+EOF |
|
191 |
+ |
|
192 |
+# Make the run.sh executable |
|
193 |
+chmod 755 $RUN_SH |
|
194 |
+chroot $MNT_DIR chown stack $DEST/run.sh |
|
195 |
+ |
|
196 |
+umount $MNT_DIR/dev |
|
197 |
+umount $MNT_DIR |
|
198 |
+rmdir $MNT_DIR |
|
199 |
+mv $DEST_FILE_TMP $DEST_FILE |
|
200 |
+rm -f $DEST_FILE_TMP |
|
201 |
+ |
|
202 |
+trap - SIGHUP SIGINT SIGTERM SIGQUIT EXIT |
... | ... |
@@ -7,8 +7,7 @@ |
7 | 7 |
# Needs to run as root |
8 | 8 |
|
9 | 9 |
DEST_DIR=${1:-/tmp/syslinux-boot} |
10 |
-PXEDIR=${PXEDIR:-/var/cache/devstack/pxe} |
|
11 |
-OPWD=`pwd` |
|
10 |
+PXEDIR=${PXEDIR:-/opt/ramstack/pxe} |
|
12 | 11 |
PROGDIR=`dirname $0` |
13 | 12 |
|
14 | 13 |
# Clean up any resources that may be in use |
... | ... |
@@ -29,7 +28,11 @@ cleanup() { |
29 | 29 |
trap 2; kill -2 $$ |
30 | 30 |
} |
31 | 31 |
|
32 |
-trap cleanup SIGHUP SIGINT SIGTERM |
|
32 |
+trap cleanup SIGHUP SIGINT SIGTERM SIGQUIT EXIT |
|
33 |
+ |
|
34 |
+# Keep track of the current directory |
|
35 |
+TOOLS_DIR=$(cd $(dirname "$0") && pwd) |
|
36 |
+TOP_DIR=`cd $TOOLS_DIR/..; pwd` |
|
33 | 37 |
|
34 | 38 |
if [ -b $DEST_DIR ]; then |
35 | 39 |
# We have a block device, install syslinux and mount it |
... | ... |
@@ -62,7 +65,7 @@ default /syslinux/menu.c32 |
62 | 62 |
prompt 0 |
63 | 63 |
timeout 0 |
64 | 64 |
|
65 |
-MENU TITLE Boot Menu |
|
65 |
+MENU TITLE devstack Boot Menu |
|
66 | 66 |
|
67 | 67 |
EOF |
68 | 68 |
|
... | ... |
@@ -74,8 +77,8 @@ fi |
74 | 74 |
|
75 | 75 |
# Get image into place |
76 | 76 |
if [ ! -r $PXEDIR/stack-initrd.img ]; then |
77 |
- cd $OPWD |
|
78 |
- $PROGDIR/build_ramdisk.sh $PXEDIR/stack-initrd.img |
|
77 |
+ cd $TOP_DIR |
|
78 |
+ $PROGDIR/build_uec_ramdisk.sh $PXEDIR/stack-initrd.img |
|
79 | 79 |
fi |
80 | 80 |
if [ ! -r $PXEDIR/stack-initrd.gz ]; then |
81 | 81 |
gzip -1 -c $PXEDIR/stack-initrd.img >$PXEDIR/stack-initrd.gz |
... | ... |
@@ -139,3 +142,5 @@ if [ -n "$DEST_DEV" ]; then |
139 | 139 |
umount $DEST_DIR |
140 | 140 |
rmdir $DEST_DIR |
141 | 141 |
fi |
142 |
+ |
|
143 |
+trap - SIGHUP SIGINT SIGTERM SIGQUIT EXIT |
142 | 144 |
new file mode 100755 |
... | ... |
@@ -0,0 +1,72 @@ |
0 |
+#!/usr/bin/env bash |
|
1 |
+ |
|
2 |
+# Echo commands |
|
3 |
+set -o xtrace |
|
4 |
+ |
|
5 |
+# Exit on error to stop unexpected errors |
|
6 |
+set -o errexit |
|
7 |
+ |
|
8 |
+# Keep track of the current directory |
|
9 |
+TOOLS_DIR=$(cd $(dirname "$0") && pwd) |
|
10 |
+TOP_DIR=`cd $TOOLS_DIR/..; pwd` |
|
11 |
+ |
|
12 |
+# Change dir to top of devstack |
|
13 |
+cd $TOP_DIR |
|
14 |
+ |
|
15 |
+# Echo usage |
|
16 |
+usage() { |
|
17 |
+ echo "Add stack user and keys" |
|
18 |
+ echo "" |
|
19 |
+ echo "Usage: $0 [full path to raw uec base image]" |
|
20 |
+} |
|
21 |
+ |
|
22 |
+# Make sure this is a raw image |
|
23 |
+if ! qemu-img info $1 | grep -q "file format: raw"; then |
|
24 |
+ usage |
|
25 |
+ exit 1 |
|
26 |
+fi |
|
27 |
+ |
|
28 |
+# Mount the image |
|
29 |
+DEST=/opt/stack |
|
30 |
+STAGING_DIR=/tmp/`echo $1 | sed "s/\//_/g"`.stage.user |
|
31 |
+mkdir -p $STAGING_DIR |
|
32 |
+umount $STAGING_DIR || true |
|
33 |
+sleep 1 |
|
34 |
+mount -t ext4 -o loop $1 $STAGING_DIR |
|
35 |
+mkdir -p $STAGING_DIR/$DEST |
|
36 |
+ |
|
37 |
+# Create a stack user that is a member of the libvirtd group so that stack |
|
38 |
+# is able to interact with libvirt. |
|
39 |
+chroot $STAGING_DIR groupadd libvirtd || true |
|
40 |
+chroot $STAGING_DIR useradd stack -s /bin/bash -d $DEST -G libvirtd || true |
|
41 |
+ |
|
42 |
+# Add a simple password - pass |
|
43 |
+echo stack:pass | chroot $STAGING_DIR chpasswd |
|
44 |
+ |
|
45 |
+# Configure sudo |
|
46 |
+( umask 226 && echo "stack ALL=(ALL) NOPASSWD:ALL" \ |
|
47 |
+ > $STAGING_DIR/etc/sudoers.d/50_stack_sh ) |
|
48 |
+ |
|
49 |
+# Gracefully cp only if source file/dir exists |
|
50 |
+function cp_it { |
|
51 |
+ if [ -e $1 ] || [ -d $1 ]; then |
|
52 |
+ cp -pRL $1 $2 |
|
53 |
+ fi |
|
54 |
+} |
|
55 |
+ |
|
56 |
+# Copy over your ssh keys and env if desired |
|
57 |
+cp_it ~/.ssh $STAGING_DIR/$DEST/.ssh |
|
58 |
+cp_it ~/.ssh/id_rsa.pub $STAGING_DIR/$DEST/.ssh/authorized_keys |
|
59 |
+cp_it ~/.gitconfig $STAGING_DIR/$DEST/.gitconfig |
|
60 |
+cp_it ~/.vimrc $STAGING_DIR/$DEST/.vimrc |
|
61 |
+cp_it ~/.bashrc $STAGING_DIR/$DEST/.bashrc |
|
62 |
+ |
|
63 |
+# Copy devstack |
|
64 |
+rm -rf $STAGING_DIR/$DEST/devstack |
|
65 |
+cp_it . $STAGING_DIR/$DEST/devstack |
|
66 |
+ |
|
67 |
+# Give stack ownership over $DEST so it may do the work needed |
|
68 |
+chroot $STAGING_DIR chown -R stack $DEST |
|
69 |
+ |
|
70 |
+# Unmount |
|
71 |
+umount $STAGING_DIR |
... | ... |
@@ -1,14 +1,8 @@ |
1 | 1 |
#!/bin/bash |
2 |
-# get_uec_image.sh - Prepare Ubuntu images in various formats |
|
3 |
-# |
|
4 |
-# Supported formats: qcow (kvm), vmdk (vmserver), vdi (vbox), vhd (vpc), raw |
|
5 |
-# |
|
6 |
-# Required to run as root |
|
7 |
- |
|
8 |
-CACHEDIR=${CACHEDIR:-/var/cache/devstack} |
|
9 |
-FORMAT=${FORMAT:-qcow2} |
|
2 |
+# get_uec_image.sh - Prepare Ubuntu UEC images |
|
3 |
+ |
|
4 |
+CACHEDIR=${CACHEDIR:-/opt/stack/cache} |
|
10 | 5 |
ROOTSIZE=${ROOTSIZE:-2000} |
11 |
-MIN_PKGS=${MIN_PKGS:-"apt-utils gpgv openssh-server"} |
|
12 | 6 |
|
13 | 7 |
# Keep track of the current directory |
14 | 8 |
TOOLS_DIR=$(cd $(dirname "$0") && pwd) |
... | ... |
@@ -18,14 +12,14 @@ TOP_DIR=`cd $TOOLS_DIR/..; pwd` |
18 | 18 |
set -o errexit |
19 | 19 |
|
20 | 20 |
usage() { |
21 |
- echo "Usage: $0 - Prepare Ubuntu images" |
|
21 |
+ echo "Usage: $0 - Fetch and prepare Ubuntu images" |
|
22 | 22 |
echo "" |
23 |
- echo "$0 [-f format] [-r rootsize] release imagefile" |
|
23 |
+ echo "$0 [-r rootsize] release imagefile [kernel]" |
|
24 | 24 |
echo "" |
25 |
- echo "-f format - image format: qcow2 (default), vmdk, vdi, vhd, xen, raw, fs" |
|
26 |
- echo "-r size - root fs size in MB (min 2000MB)" |
|
25 |
+ echo "-r size - root fs size (min 2000MB)" |
|
27 | 26 |
echo "release - Ubuntu release: jaunty - oneric" |
28 | 27 |
echo "imagefile - output image file" |
28 |
+ echo "kernel - output kernel" |
|
29 | 29 |
exit 1 |
30 | 30 |
} |
31 | 31 |
|
... | ... |
@@ -38,42 +32,21 @@ cleanup() { |
38 | 38 |
rm -f $IMG_FILE_TMP |
39 | 39 |
fi |
40 | 40 |
|
41 |
- # Release NBD devices |
|
42 |
- if [ -n "$NBD" ]; then |
|
43 |
- qemu-nbd -d $NBD |
|
44 |
- fi |
|
45 |
- |
|
46 | 41 |
# Kill ourselves to signal any calling process |
47 | 42 |
trap 2; kill -2 $$ |
48 | 43 |
} |
49 | 44 |
|
50 |
-# apt-get wrapper to just get arguments set correctly |
|
51 |
-function apt_get() { |
|
52 |
- local sudo="sudo" |
|
53 |
- [ "$(id -u)" = "0" ] && sudo="env" |
|
54 |
- $sudo DEBIAN_FRONTEND=noninteractive apt-get \ |
|
55 |
- --option "Dpkg::Options::=--force-confold" --assume-yes "$@" |
|
56 |
-} |
|
57 |
- |
|
58 |
-while getopts f:hmr: c; do |
|
45 |
+while getopts hr: c; do |
|
59 | 46 |
case $c in |
60 |
- f) FORMAT=$OPTARG |
|
61 |
- ;; |
|
62 | 47 |
h) usage |
63 | 48 |
;; |
64 |
- m) MINIMAL=1 |
|
65 |
- ;; |
|
66 | 49 |
r) ROOTSIZE=$OPTARG |
67 |
- if [[ $ROOTSIZE < 2000 ]]; then |
|
68 |
- echo "root size must be greater than 2000MB" |
|
69 |
- exit 1 |
|
70 |
- fi |
|
71 | 50 |
;; |
72 | 51 |
esac |
73 | 52 |
done |
74 | 53 |
shift `expr $OPTIND - 1` |
75 | 54 |
|
76 |
-if [ ! "$#" -eq "2" ]; then |
|
55 |
+if [[ ! "$#" -eq "2" && ! "$#" -eq "3" ]]; then |
|
77 | 56 |
usage |
78 | 57 |
fi |
79 | 58 |
|
... | ... |
@@ -81,134 +54,49 @@ fi |
81 | 81 |
DIST_NAME=$1 |
82 | 82 |
IMG_FILE=$2 |
83 | 83 |
IMG_FILE_TMP=`mktemp $IMG_FILE.XXXXXX` |
84 |
- |
|
85 |
-case $FORMAT in |
|
86 |
- kvm|qcow2) FORMAT=qcow2 |
|
87 |
- QFORMAT=qcow2 |
|
88 |
- ;; |
|
89 |
- vmserver|vmdk) |
|
90 |
- FORMAT=vmdk |
|
91 |
- QFORMAT=vmdk |
|
92 |
- ;; |
|
93 |
- vbox|vdi) FORMAT=vdi |
|
94 |
- QFORMAT=vdi |
|
95 |
- ;; |
|
96 |
- vhd|vpc) FORMAT=vhd |
|
97 |
- QFORMAT=vpc |
|
98 |
- ;; |
|
99 |
- xen) FORMAT=raw |
|
100 |
- QFORMAT=raw |
|
101 |
- ;; |
|
102 |
- raw) FORMAT=raw |
|
103 |
- QFORMAT=raw |
|
104 |
- ;; |
|
105 |
- *) echo "Unknown format: $FORMAT" |
|
106 |
- usage |
|
107 |
-esac |
|
84 |
+KERNEL=$3 |
|
108 | 85 |
|
109 | 86 |
case $DIST_NAME in |
110 | 87 |
oneiric) ;; |
111 | 88 |
natty) ;; |
112 | 89 |
maverick) ;; |
113 | 90 |
lucid) ;; |
114 |
- karmic) ;; |
|
115 |
- jaunty) ;; |
|
116 | 91 |
*) echo "Unknown release: $DIST_NAME" |
117 | 92 |
usage |
118 | 93 |
;; |
119 | 94 |
esac |
120 | 95 |
|
121 |
-trap cleanup SIGHUP SIGINT SIGTERM SIGQUIT |
|
96 |
+trap cleanup SIGHUP SIGINT SIGTERM SIGQUIT EXIT |
|
122 | 97 |
|
123 |
-# Check for dependencies |
|
124 |
- |
|
125 |
-if [ ! -x "`which qemu-img`" -o ! -x "`which qemu-nbd`" ]; then |
|
98 |
+# Check dependencies |
|
99 |
+if [ ! -x "`which qemu-img`" -o -z "`dpkg -l | grep cloud-utils`" ]; then |
|
126 | 100 |
# Missing KVM? |
127 |
- apt_get install qemu-kvm |
|
101 |
+ apt_get install qemu-kvm cloud-utils |
|
128 | 102 |
fi |
129 | 103 |
|
130 |
-# Prepare the base image |
|
104 |
+# Find resize script |
|
105 |
+RESIZE=`which resize-part-image || which uec-resize-image` |
|
106 |
+if [ -z "$RESIZE" ]; then |
|
107 |
+ echo "resize tool from cloud-utils not found" |
|
108 |
+ exit 1 |
|
109 |
+fi |
|
131 | 110 |
|
132 | 111 |
# Get the UEC image |
133 | 112 |
UEC_NAME=$DIST_NAME-server-cloudimg-amd64 |
134 |
-if [ ! -e $CACHEDIR/$UEC_NAME-disk1.img ]; then |
|
135 |
- mkdir -p $CACHEDIR |
|
136 |
- (cd $CACHEDIR && wget -N http://uec-images.ubuntu.com/$DIST_NAME/current/$UEC_NAME-disk1.img) |
|
113 |
+if [ ! -d $CACHEDIR ]; then |
|
114 |
+ mkdir -p $CACHEDIR/$DIST_NAME |
|
137 | 115 |
fi |
138 |
- |
|
139 |
-if [ "$FORMAT" = "qcow2" ]; then |
|
140 |
- # Just copy image |
|
141 |
- cp -p $CACHEDIR/$UEC_NAME-disk1.img $IMG_FILE_TMP |
|
142 |
-else |
|
143 |
- # Convert image |
|
144 |
- qemu-img convert -O $QFORMAT $CACHEDIR/$UEC_NAME-disk1.img $IMG_FILE_TMP |
|
116 |
+if [ ! -e $CACHEDIR/$DIST_NAME/$UEC_NAME.tar.gz ]; then |
|
117 |
+ (cd $CACHEDIR/$DIST_NAME && wget -N http://uec-images.ubuntu.com/$DIST_NAME/current/$UEC_NAME.tar.gz) |
|
118 |
+ (cd $CACHEDIR/$DIST_NAME && tar Sxvzf $UEC_NAME.tar.gz) |
|
145 | 119 |
fi |
146 | 120 |
|
147 |
-# Resize the image if necessary |
|
148 |
-if [ $ROOTSIZE -gt 2000 ]; then |
|
149 |
- # Resize the container |
|
150 |
- qemu-img resize $IMG_FILE_TMP +$((ROOTSIZE - 2000))M |
|
151 |
-fi |
|
152 |
- |
|
153 |
-# Finds the next available NBD device |
|
154 |
-# Exits script if error connecting or none free |
|
155 |
-# map_nbd image |
|
156 |
-# returns full nbd device path |
|
157 |
-function map_nbd { |
|
158 |
- for i in `seq 0 15`; do |
|
159 |
- if [ ! -e /sys/block/nbd$i/pid ]; then |
|
160 |
- NBD=/dev/nbd$i |
|
161 |
- # Connect to nbd and wait till it is ready |
|
162 |
- qemu-nbd -c $NBD $1 |
|
163 |
- if ! timeout 60 sh -c "while ! [ -e ${NBD}p1 ]; do sleep 1; done"; then |
|
164 |
- echo "Couldn't connect $NBD" |
|
165 |
- exit 1 |
|
166 |
- fi |
|
167 |
- break |
|
168 |
- fi |
|
169 |
- done |
|
170 |
- if [ -z "$NBD" ]; then |
|
171 |
- echo "No free NBD slots" |
|
172 |
- exit 1 |
|
173 |
- fi |
|
174 |
- echo $NBD |
|
175 |
-} |
|
121 |
+$RESIZE $CACHEDIR/$DIST_NAME/$UEC_NAME.img ${ROOTSIZE} $IMG_FILE_TMP |
|
122 |
+mv $IMG_FILE_TMP $IMG_FILE |
|
176 | 123 |
|
177 |
-# Set up nbd |
|
178 |
-modprobe nbd max_part=63 |
|
179 |
-NBD=`map_nbd $IMG_FILE_TMP` |
|
180 |
- |
|
181 |
-# Resize partition 1 to full size of the disk image |
|
182 |
-echo "d |
|
183 |
-n |
|
184 |
-p |
|
185 |
-1 |
|
186 |
-2 |
|
187 |
- |
|
188 |
-t |
|
189 |
-83 |
|
190 |
-a |
|
191 |
-1 |
|
192 |
-w |
|
193 |
-" | fdisk $NBD |
|
194 |
-e2fsck -f -p ${NBD}p1 |
|
195 |
-resize2fs ${NBD}p1 |
|
196 |
- |
|
197 |
-# Do some preliminary installs |
|
198 |
-MNTDIR=`mktemp -d mntXXXXXXXX` |
|
199 |
-mount -t ext4 ${NBD}p1 $MNTDIR |
|
200 |
- |
|
201 |
-# Install our required packages |
|
202 |
-cp -p files/sources.list $MNTDIR/etc/apt/sources.list |
|
203 |
-sed -e "s,%DIST%,$DIST_NAME,g" -i $MNTDIR/etc/apt/sources.list |
|
204 |
-cp -p /etc/resolv.conf $MNTDIR/etc/resolv.conf |
|
205 |
-chroot $MNTDIR apt-get update |
|
206 |
-chroot $MNTDIR apt-get install -y $MIN_PKGS |
|
207 |
-rm -f $MNTDIR/etc/resolv.conf |
|
208 |
- |
|
209 |
-umount $MNTDIR |
|
210 |
-rmdir $MNTDIR |
|
211 |
-qemu-nbd -d $NBD |
|
212 |
-NBD="" |
|
124 |
+# Copy kernel to destination |
|
125 |
+if [ -n "$KERNEL" ]; then |
|
126 |
+ cp -p $CACHEDIR/$DIST_NAME/*-vmlinuz-virtual $KERNEL |
|
127 |
+fi |
|
213 | 128 |
|
214 |
-mv $IMG_FILE_TMP $IMG_FILE |
|
129 |
+trap - SIGHUP SIGINT SIGTERM SIGQUIT EXIT |
... | ... |
@@ -1,5 +1,9 @@ |
1 | 1 |
#!/bin/bash |
2 | 2 |
|
3 |
+# exit on error to stop unexpected errors |
|
4 |
+set -o errexit |
|
5 |
+set -o xtrace |
|
6 |
+ |
|
3 | 7 |
EXECUTOR_NUMBER=$1 |
4 | 8 |
CONFIGURATION=$2 |
5 | 9 |
ADAPTER=$3 |
... | ... |
@@ -25,7 +29,7 @@ cd ../../.. |
25 | 25 |
TOP_DIR=$(pwd) |
26 | 26 |
|
27 | 27 |
# Deps |
28 |
-apt-get install -y --force-yes libvirt-bin |
|
28 |
+apt-get install -y --force-yes libvirt-bin || true |
|
29 | 29 |
|
30 | 30 |
# Name test instance based on executor |
31 | 31 |
BASE_NAME=executor-`printf "%02d" $EXECUTOR_NUMBER` |
32 | 32 |
deleted file mode 100755 |
... | ... |
@@ -1,93 +0,0 @@ |
1 |
-#!/bin/bash |
|
2 |
- |
|
3 |
-# Print some usage info |
|
4 |
-function usage { |
|
5 |
- echo "Usage: $0 [OPTION] [host_ip]" |
|
6 |
- echo "Set up temporary networking for LXC" |
|
7 |
- echo "" |
|
8 |
- echo " -n, --dry-run Just print the commands that would execute." |
|
9 |
- echo " -h, --help Print this usage message." |
|
10 |
- echo "" |
|
11 |
- exit |
|
12 |
-} |
|
13 |
- |
|
14 |
-# Allow passing the ip address on the command line. |
|
15 |
-function process_option { |
|
16 |
- case "$1" in |
|
17 |
- -h|--help) usage;; |
|
18 |
- -n|--dry-run) dry_run=1;; |
|
19 |
- *) host_ip="$1" |
|
20 |
- esac |
|
21 |
-} |
|
22 |
- |
|
23 |
-# Set up some defaults |
|
24 |
-host_ip= |
|
25 |
-dry_run=0 |
|
26 |
-bridge=br0 |
|
27 |
-DRIER= |
|
28 |
- |
|
29 |
-# Process the args |
|
30 |
-for arg in "$@"; do |
|
31 |
- process_option $arg |
|
32 |
-done |
|
33 |
- |
|
34 |
-if [ $dry_run ]; then |
|
35 |
- DRIER=echo |
|
36 |
-fi |
|
37 |
- |
|
38 |
-if [ "$UID" -ne "0" ]; then |
|
39 |
- echo "This script must be run with root privileges." |
|
40 |
- exit 1 |
|
41 |
-fi |
|
42 |
- |
|
43 |
-# Check for bridge-utils. |
|
44 |
-BRCTL=`which brctl` |
|
45 |
-if [ ! -x "$BRCTL" ]; then |
|
46 |
- echo "This script requires you to install bridge-utils." |
|
47 |
- echo "Try: sudo apt-get install bridge-utils." |
|
48 |
- exit 1 |
|
49 |
-fi |
|
50 |
- |
|
51 |
-# Scare off the nubs. |
|
52 |
-echo "=====================================================" |
|
53 |
-echo |
|
54 |
-echo "WARNING" |
|
55 |
-echo |
|
56 |
-echo "This script will modify your current network setup," |
|
57 |
-echo "this can be a scary thing and it is recommended that" |
|
58 |
-echo "you have something equivalent to physical access to" |
|
59 |
-echo "this machine before continuing in case your network" |
|
60 |
-echo "gets all funky." |
|
61 |
-echo |
|
62 |
-echo "If you don't want to continue, hit CTRL-C now." |
|
63 |
- |
|
64 |
-if [ -z "$host_ip" ]; |
|
65 |
-then |
|
66 |
- echo "Otherwise, please type in your host's ip address and" |
|
67 |
- echo "hit enter." |
|
68 |
- echo |
|
69 |
- echo "=====================================================" |
|
70 |
- read host_ip |
|
71 |
-else |
|
72 |
- echo "Otherwise hit enter." |
|
73 |
- echo |
|
74 |
- echo "=====================================================" |
|
75 |
- read accept |
|
76 |
-fi |
|
77 |
- |
|
78 |
- |
|
79 |
-# Add a bridge interface, this will choke if there is already |
|
80 |
-# a bridge named $bridge |
|
81 |
-$DRIER $BRCTL addbr $bridge |
|
82 |
-$DRIER ip addr add 192.168.1.1/24 dev $bridge |
|
83 |
-if [ $dry_run ]; then |
|
84 |
- echo "echo 1 > /proc/sys/net/ipv4/ip_forward" |
|
85 |
-else |
|
86 |
- echo 1 > /proc/sys/net/ipv4/ip_forward |
|
87 |
-fi |
|
88 |
-$DRIER ifconfig $bridge up |
|
89 |
- |
|
90 |
-# Set up the NAT for the instances |
|
91 |
-$DRIER iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source $host_ip |
|
92 |
-$DRIER iptables -I FORWARD -s 192.168.1.0/24 -j ACCEPT |
|
93 |
- |
94 | 1 |
deleted file mode 100755 |
... | ... |
@@ -1,187 +0,0 @@ |
1 |
-#!/bin/bash |
|
2 |
-# make_image.sh - Create Ubuntu images in various formats |
|
3 |
-# |
|
4 |
-# Supported formats: qcow (kvm), vmdk (vmserver), vdi (vbox), vhd (vpc), raw |
|
5 |
-# |
|
6 |
-# Requires sudo to root |
|
7 |
- |
|
8 |
-ROOTSIZE=${ROOTSIZE:-8192} |
|
9 |
-SWAPSIZE=${SWAPSIZE:-1024} |
|
10 |
-MIN_PKGS=${MIN_PKGS:-"apt-utils gpgv openssh-server"} |
|
11 |
- |
|
12 |
-usage() { |
|
13 |
- echo "Usage: $0 - Create Ubuntu images" |
|
14 |
- echo "" |
|
15 |
- echo "$0 [-m] [-r rootsize] [-s swapsize] release format" |
|
16 |
- echo "$0 -C [-m] release chrootdir" |
|
17 |
- echo "$0 -I [-r rootsize] [-s swapsize] chrootdir format" |
|
18 |
- echo "" |
|
19 |
- echo "-C - Create the initial chroot dir" |
|
20 |
- echo "-I - Create the final image from a chroot" |
|
21 |
- echo "-m - minimal installation" |
|
22 |
- echo "-r size - root fs size in MB" |
|
23 |
- echo "-s size - swap fs size in MB" |
|
24 |
- echo "release - Ubuntu release: jaunty - oneric" |
|
25 |
- echo "format - image format: qcow2, vmdk, vdi, vhd, xen, raw, fs" |
|
26 |
- exit 1 |
|
27 |
-} |
|
28 |
- |
|
29 |
-while getopts CIhmr:s: c; do |
|
30 |
- case $c in |
|
31 |
- C) CHROOTONLY=1 |
|
32 |
- ;; |
|
33 |
- I) IMAGEONLY=1 |
|
34 |
- ;; |
|
35 |
- h) usage |
|
36 |
- ;; |
|
37 |
- m) MINIMAL=1 |
|
38 |
- ;; |
|
39 |
- r) ROOTSIZE=$OPTARG |
|
40 |
- ;; |
|
41 |
- s) SWAPSIZE=$OPTARG |
|
42 |
- ;; |
|
43 |
- esac |
|
44 |
-done |
|
45 |
-shift `expr $OPTIND - 1` |
|
46 |
- |
|
47 |
-if [ ! "$#" -eq "2" -o -n "$CHROOTONLY" -a -n "$IMAGEONLY" ]; then |
|
48 |
- usage |
|
49 |
-fi |
|
50 |
- |
|
51 |
-# Default args |
|
52 |
-RELEASE=$1 |
|
53 |
-FORMAT=$2 |
|
54 |
-CHROOTDIR="" |
|
55 |
- |
|
56 |
-if [ -n "$CHROOTONLY" ]; then |
|
57 |
- RELEASE=$1 |
|
58 |
- CHROOTDIR=$2 |
|
59 |
- FORMAT="pass" |
|
60 |
-fi |
|
61 |
- |
|
62 |
-if [ -n "$IMAGEONLY" ]; then |
|
63 |
- CHROOTDIR=$1 |
|
64 |
- FORMAT=$2 |
|
65 |
- RELEASE="pass" |
|
66 |
-fi |
|
67 |
- |
|
68 |
-# Make sure that we have the proper version of ubuntu |
|
69 |
-UBUNTU_VERSION=`cat /etc/lsb-release | grep CODENAME | sed 's/.*=//g'` |
|
70 |
-if [ "$UBUNTU_VERSION" = "natty" -a "$RELEASE" = "oneiric" ]; then |
|
71 |
- echo "natty installs can't build oneiric images" |
|
72 |
- exit 1 |
|
73 |
-fi |
|
74 |
- |
|
75 |
-case $FORMAT in |
|
76 |
- kvm|qcow2) FORMAT=qcow2 |
|
77 |
- QFORMAT=qcow2 |
|
78 |
- HYPER=kvm |
|
79 |
- ;; |
|
80 |
- vmserver|vmdk) |
|
81 |
- FORMAT=vmdk |
|
82 |
- QFORMAT=vmdk |
|
83 |
- HYPER=vmserver |
|
84 |
- ;; |
|
85 |
- vbox|vdi) FORMAT=vdi |
|
86 |
- QFORMAT=vdi |
|
87 |
- HYPER=kvm |
|
88 |
- ;; |
|
89 |
- vhd|vpc) FORMAT=vhd |
|
90 |
- QFORMAT=vpc |
|
91 |
- HYPER=kvm |
|
92 |
- ;; |
|
93 |
- xen) FORMAT=raw |
|
94 |
- QFORMAT=raw |
|
95 |
- HYPER=xen |
|
96 |
- ;; |
|
97 |
- raw) FORMAT=raw |
|
98 |
- QFORMAT=raw |
|
99 |
- HYPER=kvm |
|
100 |
- ;; |
|
101 |
- pass) ;; |
|
102 |
- *) echo "Unknown format: $FORMAT" |
|
103 |
- usage |
|
104 |
-esac |
|
105 |
- |
|
106 |
-case $RELEASE in |
|
107 |
- oneiric) ;; |
|
108 |
- natty) ;; |
|
109 |
- maverick) ;; |
|
110 |
- lucid) ;; |
|
111 |
- karmic) ;; |
|
112 |
- jaunty) ;; |
|
113 |
- pass) ;; |
|
114 |
- *) echo "Unknown release: $RELEASE" |
|
115 |
- usage |
|
116 |
- ;; |
|
117 |
-esac |
|
118 |
- |
|
119 |
-# Install stuff if necessary |
|
120 |
-if [ -z `which vmbuilder` ]; then |
|
121 |
- sudo apt-get install -y ubuntu-vm-builder |
|
122 |
-fi |
|
123 |
- |
|
124 |
-if [ -n "$CHROOTONLY" ]; then |
|
125 |
- # Build a chroot directory |
|
126 |
- HYPER=kvm |
|
127 |
- if [ "$MINIMAL" = 1 ]; then |
|
128 |
- ARGS="--variant=minbase" |
|
129 |
- for i in $MIN_PKGS; do |
|
130 |
- ARGS="$ARGS --addpkg=$i" |
|
131 |
- done |
|
132 |
- fi |
|
133 |
- sudo vmbuilder $HYPER ubuntu $ARGS \ |
|
134 |
- --suite $RELEASE \ |
|
135 |
- --only-chroot \ |
|
136 |
- --chroot-dir=$CHROOTDIR \ |
|
137 |
- --overwrite \ |
|
138 |
- --addpkg=$MIN_PKGS \ |
|
139 |
- |
|
140 |
- sudo cp -p files/sources.list $CHROOTDIR/etc/apt/sources.list |
|
141 |
- sed -e "s,%DIST%,$RELEASE,g" -i $CHROOTDIR/etc/apt/sources.list |
|
142 |
- sudo chroot $CHROOTDIR apt-get update |
|
143 |
- |
|
144 |
- exit 0 |
|
145 |
-fi |
|
146 |
- |
|
147 |
-# Build the image |
|
148 |
-TMPDIR=tmp |
|
149 |
-TMPDISK=`mktemp imgXXXXXXXX` |
|
150 |
-SIZE=$[$ROOTSIZE+$SWAPSIZE+1] |
|
151 |
-dd if=/dev/null of=$TMPDISK bs=1M seek=$SIZE count=1 |
|
152 |
- |
|
153 |
-if [ -n "$IMAGEONLY" ]; then |
|
154 |
- # Build image from chroot |
|
155 |
- sudo vmbuilder $HYPER ubuntu $ARGS \ |
|
156 |
- --existing-chroot=$CHROOTDIR \ |
|
157 |
- --overwrite \ |
|
158 |
- --rootsize=$ROOTSIZE \ |
|
159 |
- --swapsize=$SWAPSIZE \ |
|
160 |
- --tmpfs - \ |
|
161 |
- --raw=$TMPDISK \ |
|
162 |
- |
|
163 |
-else |
|
164 |
- # Do the whole shebang in one pass |
|
165 |
- ARGS="--variant=minbase" |
|
166 |
- for i in $MIN_PKGS; do |
|
167 |
- ARGS="$ARGS --addpkg=$i" |
|
168 |
- done |
|
169 |
- sudo vmbuilder $HYPER ubuntu $ARGS \ |
|
170 |
- --suite $RELEASE \ |
|
171 |
- --overwrite \ |
|
172 |
- --rootsize=$ROOTSIZE \ |
|
173 |
- --swapsize=$SWAPSIZE \ |
|
174 |
- --tmpfs - \ |
|
175 |
- --raw=$TMPDISK \ |
|
176 |
- |
|
177 |
-fi |
|
178 |
- |
|
179 |
-if [ "$FORMAT" = "raw" ]; then |
|
180 |
- # Get image |
|
181 |
- mv $TMPDISK $RELEASE.$FORMAT |
|
182 |
-else |
|
183 |
- # Convert image |
|
184 |
- qemu-img convert -O $QFORMAT $TMPDISK $RELEASE.$FORMAT |
|
185 |
- rm $TMPDISK |
|
186 |
-fi |
|
187 |
-rm -rf ubuntu-$HYPER |
188 | 1 |
deleted file mode 100755 |
... | ... |
@@ -1,70 +0,0 @@ |
1 |
-#!/usr/bin/env bash |
|
2 |
- |
|
3 |
-# Echo commands |
|
4 |
-set -o xtrace |
|
5 |
- |
|
6 |
-# Exit on error to stop unexpected errors |
|
7 |
-set -o errexit |
|
8 |
- |
|
9 |
-# Keep track of the current directory |
|
10 |
-TOOLS_DIR=$(cd $(dirname "$0") && pwd) |
|
11 |
-TOP_DIR=`cd $TOOLS_DIR/..; pwd` |
|
12 |
- |
|
13 |
-# Change dir to top of devstack |
|
14 |
-cd $TOP_DIR |
|
15 |
- |
|
16 |
-# Echo usage |
|
17 |
-usage() { |
|
18 |
- echo "Add stack user and keys" |
|
19 |
- echo "" |
|
20 |
- echo "Usage: $0 [full path to raw uec base image]" |
|
21 |
-} |
|
22 |
- |
|
23 |
-# Make sure this is a raw image |
|
24 |
-if ! qemu-img info $1 | grep -q "file format: raw"; then |
|
25 |
- usage |
|
26 |
- exit 1 |
|
27 |
-fi |
|
28 |
- |
|
29 |
-# Mount the image |
|
30 |
-DEST=/opt/stack |
|
31 |
-STAGING_DIR=/tmp/`echo $1 | sed "s/\//_/g"`.stage.user |
|
32 |
-mkdir -p $STAGING_DIR |
|
33 |
-umount $STAGING_DIR || true |
|
34 |
-sleep 1 |
|
35 |
-mount -t ext4 -o loop $1 $STAGING_DIR |
|
36 |
-mkdir -p $STAGING_DIR/$DEST |
|
37 |
- |
|
38 |
-# Create a stack user that is a member of the libvirtd group so that stack |
|
39 |
-# is able to interact with libvirt. |
|
40 |
-chroot $STAGING_DIR groupadd libvirtd || true |
|
41 |
-chroot $STAGING_DIR useradd stack -s /bin/bash -d $DEST -G libvirtd || true |
|
42 |
- |
|
43 |
-# Add a simple password - pass |
|
44 |
-echo stack:pass | chroot $STAGING_DIR chpasswd |
|
45 |
- |
|
46 |
-# Configure sudo |
|
47 |
-grep -q "^#includedir.*/etc/sudoers.d" $STAGING_DIR/etc/sudoers || |
|
48 |
- echo "#includedir /etc/sudoers.d" | sudo tee -a $STAGING_DIR/etc/sudoers |
|
49 |
-cp $TOP_DIR/files/sudo/* $STAGING_DIR/etc/sudoers.d/ |
|
50 |
-sed -e "s,%USER%,$USER,g" -i $STAGING_DIR/etc/sudoers.d/* |
|
51 |
- |
|
52 |
-# Gracefully cp only if source file/dir exists |
|
53 |
-function cp_it { |
|
54 |
- if [ -e $1 ] || [ -d $1 ]; then |
|
55 |
- cp -pRL $1 $2 |
|
56 |
- fi |
|
57 |
-} |
|
58 |
- |
|
59 |
-# Copy over your ssh keys and env if desired |
|
60 |
-cp_it ~/.ssh $STAGING_DIR/$DEST/.ssh |
|
61 |
-cp_it ~/.ssh/id_rsa.pub $STAGING_DIR/$DEST/.ssh/authorized_keys |
|
62 |
-cp_it ~/.gitconfig $STAGING_DIR/$DEST/.gitconfig |
|
63 |
-cp_it ~/.vimrc $STAGING_DIR/$DEST/.vimrc |
|
64 |
-cp_it ~/.bashrc $STAGING_DIR/$DEST/.bashrc |
|
65 |
- |
|
66 |
-# Give stack ownership over $DEST so it may do the work needed |
|
67 |
-chroot $STAGING_DIR chown -R stack $DEST |
|
68 |
- |
|
69 |
-# Unmount |
|
70 |
-umount $STAGING_DIR |
71 | 1 |
deleted file mode 100755 |
... | ... |
@@ -1,90 +0,0 @@ |
1 |
-#!/bin/bash |
|
2 |
-# upload_image.sh - Upload Ubuntu images (create if necessary) in various formats |
|
3 |
-# Supported formats: qcow (kvm), vmdk (vmserver), vdi (vbox), vhd (vpc) |
|
4 |
-# Requires sudo to root |
|
5 |
- |
|
6 |
-usage() { |
|
7 |
- echo "$0 - Upload images to OpenStack" |
|
8 |
- echo "" |
|
9 |
- echo "$0 [-h host] [-p port] release format" |
|
10 |
- exit 1 |
|
11 |
-} |
|
12 |
- |
|
13 |
-HOST=${HOST:-localhost} |
|
14 |
-PORT=${PORT:-9292} |
|
15 |
-DEST=${DEST:-/opt/stack} |
|
16 |
- |
|
17 |
-while getopts h:p: c; do |
|
18 |
- case $c in |
|
19 |
- h) HOST=$OPTARG |
|
20 |
- ;; |
|
21 |
- p) PORT=$OPTARG |
|
22 |
- ;; |
|
23 |
- esac |
|
24 |
-done |
|
25 |
-shift `expr $OPTIND - 1` |
|
26 |
- |
|
27 |
-RELEASE=$1 |
|
28 |
-FORMAT=$2 |
|
29 |
- |
|
30 |
-case $FORMAT in |
|
31 |
- kvm|qcow2) FORMAT=qcow2 |
|
32 |
- TARGET=kvm |
|
33 |
- ;; |
|
34 |
- vmserver|vmdk) |
|
35 |
- FORMAT=vmdk |
|
36 |
- TARGET=vmserver |
|
37 |
- ;; |
|
38 |
- vbox|vdi) TARGET=kvm |
|
39 |
- FORMAT=vdi |
|
40 |
- ;; |
|
41 |
- vhd|vpc) TARGET=kvm |
|
42 |
- FORMAT=vhd |
|
43 |
- ;; |
|
44 |
- *) echo "Unknown format: $FORMAT" |
|
45 |
- usage |
|
46 |
-esac |
|
47 |
- |
|
48 |
-case $RELEASE in |
|
49 |
- natty) ;; |
|
50 |
- maverick) ;; |
|
51 |
- lucid) ;; |
|
52 |
- karmic) ;; |
|
53 |
- jaunty) ;; |
|
54 |
- *) if [ ! -r $RELEASE.$FORMAT ]; then |
|
55 |
- echo "Unknown release: $RELEASE" |
|
56 |
- usage |
|
57 |
- fi |
|
58 |
- ;; |
|
59 |
-esac |
|
60 |
- |
|
61 |
-GLANCE=`which glance` |
|
62 |
-if [ -z "$GLANCE" ]; then |
|
63 |
- if [ -x "$DEST/glance/bin/glance" ]; then |
|
64 |
- # Look for stack.sh's install |
|
65 |
- GLANCE="$DEST/glance/bin/glance" |
|
66 |
- else |
|
67 |
- # Install Glance client in $DEST |
|
68 |
- echo "Glance not found, must install client" |
|
69 |
- OWD=`pwd` |
|
70 |
- cd $DEST |
|
71 |
- sudo apt-get install python-pip python-eventlet python-routes python-greenlet python-argparse python-sqlalchemy python-wsgiref python-pastedeploy python-xattr |
|
72 |
- sudo pip install kombu |
|
73 |
- sudo git clone https://github.com/cloudbuilders/glance.git |
|
74 |
- cd glance |
|
75 |
- sudo python setup.py develop |
|
76 |
- cd $OWD |
|
77 |
- GLANCE=`which glance` |
|
78 |
- fi |
|
79 |
-fi |
|
80 |
- |
|
81 |
-# Create image if it doesn't exist |
|
82 |
-if [ ! -r $RELEASE.$FORMAT ]; then |
|
83 |
- DIR=`dirname $0` |
|
84 |
- echo "$RELEASE.$FORMAT not found, creating..." |
|
85 |
- $DIR/make_image.sh $RELEASE $FORMAT |
|
86 |
-fi |
|
87 |
- |
|
88 |
-# Upload the image |
|
89 |
-echo "Uploading image $RELEASE.$FORMAT to $HOST" |
|
90 |
-$GLANCE add name=$RELEASE.$FORMAT is_public=true disk_format=$FORMAT --host $HOST --port $PORT <$RELEASE.$FORMAT |
91 | 1 |
deleted file mode 100755 |
... | ... |
@@ -1,53 +0,0 @@ |
1 |
-#!/usr/bin/env bash |
|
2 |
- |
|
3 |
-# Echo commands |
|
4 |
-set -o xtrace |
|
5 |
- |
|
6 |
-# Exit on error to stop unexpected errors |
|
7 |
-set -o errexit |
|
8 |
- |
|
9 |
-# Keep track of the current directory |
|
10 |
-TOOLS_DIR=$(cd $(dirname "$0") && pwd) |
|
11 |
-TOP_DIR=`cd $TOOLS_DIR/..; pwd` |
|
12 |
- |
|
13 |
-# Change dir to top of devstack |
|
14 |
-cd $TOP_DIR |
|
15 |
- |
|
16 |
-# Echo usage |
|
17 |
-usage() { |
|
18 |
- echo "Cache OpenStack dependencies on a uec image to speed up performance." |
|
19 |
- echo "" |
|
20 |
- echo "Usage: $0 [full path to raw uec base image]" |
|
21 |
-} |
|
22 |
- |
|
23 |
-# Make sure this is a raw image |
|
24 |
-if ! qemu-img info $1 | grep -q "file format: raw"; then |
|
25 |
- usage |
|
26 |
- exit 1 |
|
27 |
-fi |
|
28 |
- |
|
29 |
-# Make sure we are in the correct dir |
|
30 |
-if [ ! -d files/apts ]; then |
|
31 |
- echo "Please run this script from devstack/tools/" |
|
32 |
- exit 1 |
|
33 |
-fi |
|
34 |
- |
|
35 |
-# Mount the image |
|
36 |
-STAGING_DIR=/tmp/`echo $1 | sed "s/\//_/g"`.stage |
|
37 |
-mkdir -p $STAGING_DIR |
|
38 |
-umount $STAGING_DIR || true |
|
39 |
-sleep 1 |
|
40 |
-mount -t ext4 -o loop $1 $STAGING_DIR |
|
41 |
- |
|
42 |
-# Make sure that base requirements are installed |
|
43 |
-cp /etc/resolv.conf $STAGING_DIR/etc/resolv.conf |
|
44 |
- |
|
45 |
-# Perform caching on the base image to speed up subsequent runs |
|
46 |
-chroot $STAGING_DIR apt-get update |
|
47 |
-chroot $STAGING_DIR apt-get install -y --download-only `cat files/apts/* | grep NOPRIME | cut -d\# -f1` |
|
48 |
-chroot $STAGING_DIR apt-get install -y --force-yes `cat files/apts/* | grep -v NOPRIME | cut -d\# -f1` || true |
|
49 |
-mkdir -p $STAGING_DIR/var/cache/pip |
|
50 |
-PIP_DOWNLOAD_CACHE=/var/cache/pip chroot $STAGING_DIR pip install `cat files/pips/*` || true |
|
51 |
- |
|
52 |
-# Unmount |
|
53 |
-umount $STAGING_DIR |
54 | 1 |
new file mode 100755 |
... | ... |
@@ -0,0 +1,53 @@ |
0 |
+#!/usr/bin/env bash |
|
1 |
+ |
|
2 |
+# Echo commands |
|
3 |
+set -o xtrace |
|
4 |
+ |
|
5 |
+# Exit on error to stop unexpected errors |
|
6 |
+set -o errexit |
|
7 |
+ |
|
8 |
+# Keep track of the current directory |
|
9 |
+TOOLS_DIR=$(cd $(dirname "$0") && pwd) |
|
10 |
+TOP_DIR=`cd $TOOLS_DIR/..; pwd` |
|
11 |
+ |
|
12 |
+# Change dir to top of devstack |
|
13 |
+cd $TOP_DIR |
|
14 |
+ |
|
15 |
+# Echo usage |
|
16 |
+usage() { |
|
17 |
+ echo "Cache OpenStack dependencies on a uec image to speed up performance." |
|
18 |
+ echo "" |
|
19 |
+ echo "Usage: $0 [full path to raw uec base image]" |
|
20 |
+} |
|
21 |
+ |
|
22 |
+# Make sure this is a raw image |
|
23 |
+if ! qemu-img info $1 | grep -q "file format: raw"; then |
|
24 |
+ usage |
|
25 |
+ exit 1 |
|
26 |
+fi |
|
27 |
+ |
|
28 |
+# Make sure we are in the correct dir |
|
29 |
+if [ ! -d files/apts ]; then |
|
30 |
+ echo "Please run this script from devstack/tools/" |
|
31 |
+ exit 1 |
|
32 |
+fi |
|
33 |
+ |
|
34 |
+# Mount the image |
|
35 |
+STAGING_DIR=/tmp/`echo $1 | sed "s/\//_/g"`.stage |
|
36 |
+mkdir -p $STAGING_DIR |
|
37 |
+umount $STAGING_DIR || true |
|
38 |
+sleep 1 |
|
39 |
+mount -t ext4 -o loop $1 $STAGING_DIR |
|
40 |
+ |
|
41 |
+# Make sure that base requirements are installed |
|
42 |
+cp /etc/resolv.conf $STAGING_DIR/etc/resolv.conf |
|
43 |
+ |
|
44 |
+# Perform caching on the base image to speed up subsequent runs |
|
45 |
+chroot $STAGING_DIR apt-get update |
|
46 |
+chroot $STAGING_DIR apt-get install -y --download-only `cat files/apts/* | grep NOPRIME | cut -d\# -f1` |
|
47 |
+chroot $STAGING_DIR apt-get install -y --force-yes `cat files/apts/* | grep -v NOPRIME | cut -d\# -f1` || true |
|
48 |
+mkdir -p $STAGING_DIR/var/cache/pip |
|
49 |
+PIP_DOWNLOAD_CACHE=/var/cache/pip chroot $STAGING_DIR pip install `cat files/pips/*` || true |
|
50 |
+ |
|
51 |
+# Unmount |
|
52 |
+umount $STAGING_DIR |