Merge remote-tracking branch 'origin/master' into password_prompt
diff --git a/README b/README.md
similarity index 94%
rename from README
rename to README.md
index 61119e9..82ef7fb 100644
--- a/README
+++ b/README.md
@@ -7,6 +7,8 @@
* To make it easier for developers to dive into openstack so that they can productively contribute without having to understand every part of the system at once
* To make it easy to prototype cross-project features
+Read more at http://devstack.org (built from the gh-pages branch)
+
Be sure to carefully read these scripts before you run them as they install software and may alter your networking configuration.
# To start a dev cloud on your local machine (installing on a dedicated vm is safer!):
@@ -32,7 +34,6 @@
* Add python-novaclient cli support
* syslog
-* allow rabbit connection to be specified via environment variables with sensible defaults
* Add volume support
* Add quantum support
diff --git a/stack.sh b/stack.sh
index 4fbfa28..97c39f8 100755
--- a/stack.sh
+++ b/stack.sh
@@ -20,9 +20,6 @@
# Sanity Check
# ============
-# Record the start time. This allows us to print how long this script takes to run.
-START_TIME=`python -c "import time; print time.time()"`
-
# Warn users who aren't on natty, but allow them to override check and attempt
# installation with ``FORCE=yes ./stack``
if ! grep -q natty /etc/lsb-release; then
@@ -53,40 +50,38 @@
if [[ $EUID -eq 0 ]]; then
echo "You are running this script as root."
+ echo "In 10 seconds, we will create a user 'stack' and run as that user"
+ sleep 10
# since this script runs as a normal user, we need to give that user
# ability to run sudo
apt-get update
- apt-get install -qqy sudo
+ apt-get install -y sudo
- if ! getent passwd | grep -q stack; then
+ if ! getent passwd stack >/dev/null; then
echo "Creating a user called stack"
useradd -U -G sudo -s /bin/bash -m stack
fi
+
echo "Giving stack user passwordless sudo priviledges"
- echo "stack ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
+ # natty uec images sudoers does not have a '#includedir'. add one.
+ grep -q "^#includedir.*/etc/sudoers.d" /etc/sudoers ||
+ echo "#includedir /etc/sudoers.d" >> /etc/sudoers
+ ( umask 226 && echo "stack ALL=(ALL) NOPASSWD:ALL" \
+ > /etc/sudoers.d/50_stack_sh )
echo "Copying files to stack user"
- cp -r -f `pwd` /home/stack/
- THIS_DIR=$(basename $(dirname $(readlink -f $0)))
- chown -R stack /home/stack/$THIS_DIR
- echo "Running the script as stack in 3 seconds..."
- sleep 3
+ STACK_DIR="/home/stack/${PWD##*/}"
+ cp -r -f "$PWD" "$STACK_DIR"
+ chown -R stack "$STACK_DIR"
if [[ "$SHELL_AFTER_RUN" != "no" ]]; then
- exec su -c "cd /home/stack/$THIS_DIR/; bash stack.sh; bash" stack
+ exec su -c "set -e; cd $STACK_DIR; bash stack.sh; bash" stack
else
- exec su -c "cd /home/stack/$THIS_DIR/; bash stack.sh" stack
+ exec su -c "set -e; cd $STACK_DIR; bash stack.sh" stack
fi
- exit 0
+ exit 1
fi
-# So that errors don't compound we exit on any errors so you see only the
-# first error that occured.
-set -o errexit
-
-# Print the commands being run so that we can see the command that triggers
-# an error. It is also useful for following allowing as the install occurs.
-set -o xtrace
# Settings
# ========
@@ -120,8 +115,6 @@
# Destination path for installation ``DEST``
DEST=${DEST:-/opt/stack}
-sudo mkdir -p $DEST
-sudo chown `whoami` $DEST
# Set the destination directories for openstack projects
NOVA_DIR=$DEST/nova
@@ -261,6 +254,24 @@
# Dash currently truncates usernames and passwords at 20 characters
read_password ADMIN_PASSWORD "ENTER A PASSWORD TO USE FOR DASH AND KEYSTONE (20 CHARS OR LESS)."
+LOGFILE=${LOGFILE:-"$PWD/stack.sh.$$.log"}
+(
+# So that errors don't compound we exit on any errors so you see only the
+# first error that occured.
+trap failed ERR
+failed() {
+ local r=$?
+ set +o xtrace
+ [ -n "$LOGFILE" ] && echo "${0##*/} failed: full log in $LOGFILE"
+ exit $r
+}
+
+# Print the commands being run so that we can see the command that triggers
+# an error. It is also useful for following along as the install occurs.
+set -o xtrace
+
+sudo mkdir -p $DEST
+sudo chown `whoami` $DEST
# Install Packages
# ================
@@ -269,6 +280,7 @@
# install apt requirements
+sudo apt-get update
sudo apt-get install -qqy `cat $FILES/apts/* | cut -d\# -f1 | grep -Ev "mysql-server|rabbitmq-server"`
# install python requirements
@@ -347,6 +359,19 @@
mysql-server-5.1 mysql-server/start_on_boot boolean true
MYSQL_PRESEED
+ # while ``.my.cnf`` is not needed for openstack to function, it is useful
+ # as it allows you to access the mysql databases via ``mysql nova`` instead
+ # of having to specify the username/password each time.
+ if [[ ! -e $HOME/.my.cnf ]]; then
+ cat <<EOF >$HOME/.my.cnf
+[client]
+user=$MYSQL_USER
+password=$MYSQL_PASS
+host=$MYSQL_HOST
+EOF
+ chmod 0600 $HOME/.my.cnf
+ fi
+
# Install and start mysql-server
sudo apt-get -y -q install mysql-server
# Update the DB to give user ‘$MYSQL_USER’@’%’ full control of the all databases:
@@ -625,9 +650,8 @@
# have to do a little more than that in our script. Since we add the group
# ``libvirtd`` to our user in this script, when nova-compute is run it is
# within the context of our original shell (so our groups won't be updated).
-# We can send the command nova-compute to the ``newgrp`` command to execute
-# in a specific context.
-screen_it n-cpu "cd $NOVA_DIR && echo $NOVA_DIR/bin/nova-compute | newgrp libvirtd"
+# Use 'sg' to execute nova-compute as a member of the libvirtd group.
+screen_it n-cpu "cd $NOVA_DIR && sg libvirtd $NOVA_DIR/bin/nova-compute"
screen_it n-net "cd $NOVA_DIR && $NOVA_DIR/bin/nova-network"
screen_it n-sch "cd $NOVA_DIR && $NOVA_DIR/bin/nova-scheduler"
screen_it n-vnc "cd $NOVNC_DIR && ./utils/nova-wsproxy.py 6080 --web . --flagfile=../nova/bin/nova.conf"
@@ -687,6 +711,16 @@
fi
+# Fin
+# ===
+
+
+) 2>&1 | tee "${LOGFILE}"
+
+# Check that the left side of the above pipe succeeded
+for ret in "${PIPESTATUS[@]}"; do [ $ret -eq 0 ] || exit $ret; done
+
+(
# Using the cloud
# ===============
@@ -704,10 +738,7 @@
echo "the password: $ADMIN_PASSWORD"
fi
-# Fin
-# ===
+# indicate how long this took to run (bash maintained variable 'SECONDS')
+echo "stack.sh completed in $SECONDS seconds."
-# End our timer and give a timing summary
-END_TIME=`python -c "import time; print time.time()"`
-ELAPSED=`python -c "print $END_TIME - $START_TIME"`
-echo "stack.sh completed in $ELAPSED seconds."
+) | tee -a "$LOGFILE"
diff --git a/build_nfs.sh b/tools/build_nfs.sh
similarity index 100%
rename from build_nfs.sh
rename to tools/build_nfs.sh
diff --git a/build_pxe_boot.sh b/tools/build_pxe_boot.sh
similarity index 60%
rename from build_pxe_boot.sh
rename to tools/build_pxe_boot.sh
index 4feb14d..0653664 100755
--- a/build_pxe_boot.sh
+++ b/tools/build_pxe_boot.sh
@@ -4,15 +4,8 @@
# build_pxe_boot.sh [-k kernel-version] destdir
#
# Assumes syslinux is installed
-# Assumes devstack files are in `pwd`/pxe
# Only needs to run as root if the destdir permissions require it
-UBUNTU_MIRROR=http://archive.ubuntu.com/ubuntu/dists/natty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64
-
-MEMTEST_VER=4.10
-MEMTEST_BIN=memtest86+-${MEMTEST_VER}.bin
-MEMTEST_URL=http://www.memtest.org/download/${MEMTEST_VER}/
-
KVER=`uname -r`
if [ "$1" = "-k" ]; then
KVER=$2
@@ -30,8 +23,8 @@
cp -p /usr/lib/syslinux/$i $DEST_DIR
done
-DEFAULT=$DEST_DIR/pxelinux.cfg/default
-cat >$DEFAULT <<EOF
+CFG=$DEST_DIR/pxelinux.cfg/default
+cat >$CFG <<EOF
default menu.c32
prompt 0
timeout 0
@@ -56,10 +49,10 @@
cp -p $PXEDIR/vmlinuz-${KVER} $DEST_DIR/ubuntu
if [ ! -r $PXEDIR/stack-initrd.gz ]; then
cd $OPWD
- sudo $PROGDIR/build_pxe_ramdisk.sh $PXEDIR/stack-initrd.gz
+ sudo $PROGDIR/build_ramdisk.sh $PXEDIR/stack-initrd.gz
fi
cp -p $PXEDIR/stack-initrd.gz $DEST_DIR/ubuntu
-cat >>$DEFAULT <<EOF
+cat >>$CFG <<EOF
LABEL devstack
MENU LABEL ^devstack
@@ -69,48 +62,21 @@
EOF
# Get Ubuntu
-if [ -d $PXEDIR ]; then
+if [ -d $PXEDIR -a -r $PXEDIR/natty-base-initrd.gz ]; then
cp -p $PXEDIR/natty-base-initrd.gz $DEST_DIR/ubuntu
-fi
-cat >>$DEFAULT <<EOF
+ cat >>$CFG <<EOF
LABEL ubuntu
MENU LABEL ^Ubuntu Natty
KERNEL ubuntu/vmlinuz-$KVER
APPEND initrd=ubuntu/natty-base-initrd.gz ramdisk_size=419600 root=/dev/ram0
EOF
-
-# Get Memtest
-cd $DEST_DIR
-if [ ! -r $MEMTEST_BIN ]; then
- wget -N --quiet ${MEMTEST_URL}/${MEMTEST_BIN}.gz
- gunzip $MEMTEST_BIN
fi
-cat >>$DEFAULT <<EOF
-
-LABEL memtest
- MENU LABEL ^Memtest86+
- KERNEL $MEMTEST_BIN
-EOF
-
-# Get FreeDOS
-mkdir -p $DEST_DIR/freedos
-cd $DEST_DIR/freedos
-wget -N --quiet http://www.fdos.org/bootdisks/autogen/FDSTD.288.gz
-gunzip -f FDSTD.288.gz
-cat >>$DEFAULT <<EOF
-
-LABEL freedos
- MENU LABEL ^FreeDOS bootdisk
- KERNEL memdisk
- APPEND initrd=freedos/FDSTD.288
-EOF
# Local disk boot
-cat >>$DEFAULT <<EOF
+cat >>$CFG <<EOF
LABEL local
MENU LABEL ^Local disk
- MENU DEFAULT
LOCALBOOT 0
EOF
diff --git a/build_pxe_ramdisk.sh b/tools/build_ramdisk.sh
similarity index 98%
rename from build_pxe_ramdisk.sh
rename to tools/build_ramdisk.sh
index a01656b..63d37a9 100755
--- a/build_pxe_ramdisk.sh
+++ b/tools/build_ramdisk.sh
@@ -1,4 +1,5 @@
#!/bin/bash
+# build_ramdisk.sh - Build RAM disk images
if [ ! "$#" -eq "1" ]; then
echo "$0 builds a gziped natty openstack install"
diff --git a/tools/build_usb_boot.sh b/tools/build_usb_boot.sh
new file mode 100755
index 0000000..ac49848
--- /dev/null
+++ b/tools/build_usb_boot.sh
@@ -0,0 +1,103 @@
+#!/bin/bash -e
+# build_usb_boot.sh - Create a syslinux boot environment
+#
+# build_usb_boot.sh [-k kernel-version] destdev
+#
+# Assumes syslinux is installed
+# Needs to run as root
+
+KVER=`uname -r`
+if [ "$1" = "-k" ]; then
+ KVER=$2
+ shift;shift
+fi
+
+DEST_DIR=${1:-/tmp/syslinux-boot}
+PXEDIR=${PXEDIR:-/var/cache/devstack/pxe}
+OPWD=`pwd`
+PROGDIR=`dirname $0`
+
+if [ -b $DEST_DIR ]; then
+ # We have a block device, install syslinux and mount it
+ DEST_DEV=$DEST_DIR
+ DEST_DIR=`mktemp -d mntXXXXXX`
+
+ # Install syslinux on the device
+ syslinux --install --directory syslinux $DEST_DEV
+
+ mount $DEST_DEV $DEST_DIR
+else
+ # We have a directory (for sanity checking output)
+ DEST_DEV=""
+ if [ ! -d $DEST_DIR/syslinux ]; then
+ mkdir -p $DEST_DIR/syslinux
+ fi
+fi
+
+# Get some more stuff from syslinux
+for i in memdisk menu.c32; do
+ cp -p /usr/lib/syslinux/$i $DEST_DIR/syslinux
+done
+
+CFG=$DEST_DIR/syslinux/syslinux.cfg
+cat >$CFG <<EOF
+default /syslinux/menu.c32
+prompt 0
+timeout 0
+
+MENU TITLE Boot Menu
+
+EOF
+
+# Setup devstack boot
+mkdir -p $DEST_DIR/ubuntu
+if [ ! -d $PXEDIR ]; then
+ mkdir -p $PXEDIR
+fi
+if [ ! -r $PXEDIR/vmlinuz-${KVER} ]; then
+ sudo chmod 644 /boot/vmlinuz-${KVER}
+ if [ ! -r /boot/vmlinuz-${KVER} ]; then
+ echo "No kernel found"
+ else
+ cp -p /boot/vmlinuz-${KVER} $PXEDIR
+ fi
+fi
+cp -p $PXEDIR/vmlinuz-${KVER} $DEST_DIR/ubuntu
+if [ ! -r $PXEDIR/stack-initrd.gz ]; then
+ cd $OPWD
+ sudo $PROGDIR/build_ramdisk.sh $PXEDIR/stack-initrd.gz
+fi
+cp -p $PXEDIR/stack-initrd.gz $DEST_DIR/ubuntu
+cat >>$CFG <<EOF
+
+LABEL devstack
+ MENU LABEL ^devstack
+ MENU DEFAULT
+ KERNEL /ubuntu/vmlinuz-$KVER
+ APPEND initrd=/ubuntu/stack-initrd.gz ramdisk_size=2109600 root=/dev/ram0
+EOF
+
+# Get Ubuntu
+if [ -d $PXEDIR -a -r $PXEDIR/natty-base-initrd.gz ]; then
+ cp -p $PXEDIR/natty-base-initrd.gz $DEST_DIR/ubuntu
+ cat >>$CFG <<EOF
+
+LABEL ubuntu
+ MENU LABEL ^Ubuntu Natty
+ KERNEL /ubuntu/vmlinuz-$KVER
+ APPEND initrd=/ubuntu/natty-base-initrd.gz ramdisk_size=419600 root=/dev/ram0
+EOF
+fi
+
+# Local disk boot
+cat >>$CFG <<EOF
+
+LABEL local
+ MENU LABEL ^Local disk
+ LOCALBOOT 0
+EOF
+
+if [ -n "$DEST_DEV" ]; then
+ umount $DEST_DIR
+ rmdir $DEST_DIR
+fi
diff --git a/make_image.sh b/tools/make_image.sh
similarity index 100%
rename from make_image.sh
rename to tools/make_image.sh
diff --git a/upload_image.sh b/tools/upload_image.sh
similarity index 100%
rename from upload_image.sh
rename to tools/upload_image.sh