Merge remote-tracking branch 'upstream/master'

This commit is contained in:
Dean Troyer 2011-09-29 11:27:25 -05:00
commit c966698e0c
6 changed files with 177 additions and 18 deletions

1
.gitignore vendored
View file

@ -1,2 +1,3 @@
proto proto
*~ *~
localrc

View file

@ -1,5 +1,16 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Sanity check
if [ "$EUID" -ne "0" ]; then
echo "This script must be run with root privileges."
exit 1
fi
# Warn users who aren't on natty
if ! grep -q natty /etc/lsb-release; then
echo "WARNING: this script has only been tested on natty"
fi
# Source params # Source params
source ./stackrc source ./stackrc
@ -23,18 +34,14 @@ STACKSH_PARAMS=${STACKSH_PARAMS:-}
# Option to use the version of devstack on which we are currently working # Option to use the version of devstack on which we are currently working
USE_CURRENT_DEVSTACK=${USE_CURRENT_DEVSTACK:-1} USE_CURRENT_DEVSTACK=${USE_CURRENT_DEVSTACK:-1}
# Warn users who aren't on natty
if ! grep -q natty /etc/lsb-release; then
echo "WARNING: this script has only been tested on natty"
fi
# Install deps # Install deps
apt-get install -y lxc debootstrap apt-get install -y lxc debootstrap
# Install cgroup-bin from source, since the packaging is buggy and possibly incompatible with our setup # Install cgroup-bin from source, since the packaging is buggy and possibly incompatible with our setup
if ! which cgdelete | grep -q cgdelete; then if ! which cgdelete | grep -q cgdelete; then
apt-get install -y g++ bison flex libpam0g-dev apt-get install -y g++ bison flex libpam0g-dev make
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 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
cd /tmp && bunzip2 libcgroup-0.37.1.tar.bz2 && tar xfv libcgroup-0.37.1.tar cd /tmp && bunzip2 libcgroup-0.37.1.tar.bz2 && tar xfv libcgroup-0.37.1.tar
cd libcgroup-0.37.1 cd libcgroup-0.37.1
./configure ./configure
@ -75,17 +82,25 @@ function git_clone {
fi fi
} }
# Warm the base image on first install # Location of the base image directory
CACHEDIR=/var/cache/lxc/natty/rootfs-amd64 CACHEDIR=/var/cache/lxc/natty/rootfs-amd64
if [ ! -d $CACHEDIR ]; then
# Provide option to do totally clean install
if [ "$CLEAR_LXC_CACHE" = "1" ]; then
rm -rf $CACHEDIR
fi
# Warm the base image on first install
if [ ! -f $CACHEDIR/bootstrapped ]; then
# by deleting the container, we force lxc-create to re-bootstrap (lxc is # by deleting the container, we force lxc-create to re-bootstrap (lxc is
# lazy and doesn't do anything if a container already exists) # lazy and doesn't do anything if a container already exists)
lxc-destroy -n $CONTAINER lxc-destroy -n $CONTAINER
# trigger the initial debootstrap # trigger the initial debootstrap
lxc-create -n $CONTAINER -t natty -f $LXC_CONF lxc-create -n $CONTAINER -t natty -f $LXC_CONF
chroot $CACHEDIR apt-get update chroot $CACHEDIR apt-get update
chroot $CACHEDIR apt-get install -y --force-yes `cat files/apts/* | cut -d\# -f1 | egrep -v "(rabbitmq|libvirt-bin|mysql-server)"` chroot $CACHEDIR apt-get install -y --force-yes `cat files/apts/* | cut -d\# -f1 | egrep -v "(rabbitmq|libvirt-bin|mysql-server|munin-node)"`
chroot $CACHEDIR pip install `cat files/pips/*` chroot $CACHEDIR pip install `cat files/pips/*`
touch $CACHEDIR/bootstrapped
fi fi
# Clean out code repos if directed to do so # Clean out code repos if directed to do so
@ -125,7 +140,7 @@ lxc-create -n $CONTAINER -t natty -f $LXC_CONF
# Specify where our container rootfs lives # Specify where our container rootfs lives
ROOTFS=/var/lib/lxc/$CONTAINER/rootfs/ ROOTFS=/var/lib/lxc/$CONTAINER/rootfs/
# Create a stack user that is a member of the libvirtd group so that stack # Create a stack user that is a member of the libvirtd group so that stack
# is able to interact with libvirt. # is able to interact with libvirt.
chroot $ROOTFS groupadd libvirtd chroot $ROOTFS groupadd libvirtd
chroot $ROOTFS useradd stack -s /bin/bash -d $DEST -G libvirtd chroot $ROOTFS useradd stack -s /bin/bash -d $DEST -G libvirtd
@ -133,7 +148,7 @@ chroot $ROOTFS useradd stack -s /bin/bash -d $DEST -G libvirtd
# a simple password - pass # a simple password - pass
echo stack:pass | chroot $ROOTFS chpasswd echo stack:pass | chroot $ROOTFS chpasswd
# and has sudo ability (in the future this should be limited to only what # and has sudo ability (in the future this should be limited to only what
# stack requires) # stack requires)
echo "stack ALL=(ALL) NOPASSWD: ALL" >> $ROOTFS/etc/sudoers echo "stack ALL=(ALL) NOPASSWD: ALL" >> $ROOTFS/etc/sudoers
@ -145,7 +160,7 @@ cp -pR /lib/modules/`uname -r`/kernel/net $ROOTFS/lib/modules/`uname -r`/kernel/
# Gracefully cp only if source file/dir exists # Gracefully cp only if source file/dir exists
function cp_it { function cp_it {
if [ -e $1 ] || [ -d $1 ]; then if [ -e $1 ] || [ -d $1 ]; then
cp -pr $1 $2 cp -pRL $1 $2
fi fi
} }
@ -196,6 +211,9 @@ if [ ! -d "$DEST/devstack" ]; then
git clone git://github.com/cloudbuilders/devstack.git $DEST/devstack git clone git://github.com/cloudbuilders/devstack.git $DEST/devstack
fi fi
cd $DEST/devstack && $STACKSH_PARAMS ./stack.sh > /$DEST/run.sh.log cd $DEST/devstack && $STACKSH_PARAMS ./stack.sh > /$DEST/run.sh.log
echo >> /$DEST/run.sh.log
echo >> /$DEST/run.sh.log
echo "All done! Time to start clicking." >> /$DEST/run.sh.log
EOF EOF
# Make the run.sh executable # Make the run.sh executable
@ -216,3 +234,20 @@ fi
# Start our container # Start our container
lxc-start -d -n $CONTAINER lxc-start -d -n $CONTAINER
# Done creating the container, let's tail the log
echo
echo "============================================================="
echo " -- YAY! --"
echo "============================================================="
echo
echo "We're done creating the container, about to start tailing the"
echo "stack.sh log. It will take a second or two to start."
echo
echo "Just CTRL-C at any time to stop tailing."
while [ ! -e "$ROOTFS/$DEST/run.sh.log" ]; do
sleep 1
done
tail -F $ROOTFS/$DEST/run.sh.log

View file

@ -14,7 +14,7 @@ if [ ! -d natty-base ]; then
debootstrap natty natty-base debootstrap natty natty-base
# copy kernel modules... # copy kernel modules...
# NOTE(ja): is there a better way to do this? # NOTE(ja): is there a better way to do this?
cp -pr /lib/modules/`uname -r` proto/lib/modules cp -pr /lib/modules/`uname -r` natty-base/lib/modules
cp files/sources.list natty-base/etc/apt/sources.list cp files/sources.list natty-base/etc/apt/sources.list
chroot natty-base apt-get update chroot natty-base apt-get update
fi fi
@ -89,8 +89,8 @@ BASE=build.$$
IMG=$BASE.img IMG=$BASE.img
MNT=$BASE/ MNT=$BASE/
# create a 2GB blank filesystem # (quickly) create a 2GB blank filesystem
dd if=/dev/zero of=$IMG bs=1024k count=2048 dd bs=1 count=1 seek=$((2*1024*1024*1024)) if=/dev/zero of=$IMG
# force it to be initialized as ext2 # force it to be initialized as ext2
mkfs.ext2 -F $IMG mkfs.ext2 -F $IMG

93
lxc_network_hostonlyplusnat.sh Executable file
View file

@ -0,0 +1,93 @@
#!/bin/bash
# Print some usage info
function usage {
echo "Usage: $0 [OPTION] [host_ip]"
echo "Set up temporary networking for LXC"
echo ""
echo " -n, --dry-run Just print the commands that would execute."
echo " -h, --help Print this usage message."
echo ""
exit
}
# Allow passing the ip address on the command line.
function process_option {
case "$1" in
-h|--help) usage;;
-n|--dry-run) dry_run=1;;
*) host_ip="$1"
esac
}
# Set up some defaults
host_ip=
dry_run=0
bridge=br0
DRIER=
# Process the args
for arg in "$@"; do
process_option $arg
done
if [ $dry_run ]; then
DRIER=echo
fi
if [ "$UID" -ne "0" ]; then
echo "This script must be run with root privileges."
exit 1
fi
# Check for bridge-utils.
BRCTL=`which brctl`
if [ ! -x "$BRCTL" ]; then
echo "This script requires you to install bridge-utils."
echo "Try: sudo apt-get install bridge-utils."
exit 1
fi
# Scare off the nubs.
echo "====================================================="
echo
echo "WARNING"
echo
echo "This script will modify your current network setup,"
echo "this can be a scary thing and it is recommended that"
echo "you have something equivalent to physical access to"
echo "this machine before continuing in case your network"
echo "gets all funky."
echo
echo "If you don't want to continue, hit CTRL-C now."
if [ -z "$host_ip" ];
then
echo "Otherwise, please type in your host's ip address and"
echo "hit enter."
echo
echo "====================================================="
read host_ip
else
echo "Otherwise hit enter."
echo
echo "====================================================="
read accept
fi
# Add a bridge interface, this will choke if there is already
# a bridge named $bridge
$DRIER $BRCTL addbr $bridge
$DRIER ip addr add 192.168.1.1/24 dev $bridge
if [ $dry_run ]; then
echo "echo 1 > /proc/sys/net/ipv4/ip_forward"
else
echo 1 > /proc/sys/net/ipv4/ip_forward
fi
$DRIER ifconfig $bridge up
# Set up the NAT for the instances
$DRIER iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source $host_ip
$DRIER iptables -I FORWARD -s 192.168.1.0/24 -j ACCEPT

View file

@ -13,6 +13,9 @@
# Sanity Check # Sanity Check
# ============ # ============
# Start our timer
START_TIME=`python -c "import time; print time.time()"`
# Warn users who aren't on natty, but allow them to override check and attempt # Warn users who aren't on natty, but allow them to override check and attempt
# installation with ``FORCE=yes ./stack`` # installation with ``FORCE=yes ./stack``
if ! grep -q natty /etc/lsb-release; then if ! grep -q natty /etc/lsb-release; then
@ -37,6 +40,15 @@ if [ ! -d $FILES ]; then
exit 1 exit 1
fi fi
# you need to run this as a regular user with sudo priviledges
if [[ $EUID -eq 0 ]]; then
echo "This script cannot be run as root." 1>&2
echo "You should run this script as the user you wish openstack to run as" 1>&2
echo "The user will need to be a sudoer (without password)" 1>&2
exit 1
fi
# Settings # Settings
# ======== # ========
@ -48,6 +60,11 @@ fi
# #
# You can also pass options on a single line ``MYSQL_PASS=simple ./stack.sh`` # You can also pass options on a single line ``MYSQL_PASS=simple ./stack.sh``
# #
# Additionally, you can put any local variables into a ``localrc`` file, like::
#
# MYSQL_PASS=anothersecret
# MYSQL_USER=hellaroot
#
# We try to have sensible defaults, so you should be able to run ``./stack.sh`` # We try to have sensible defaults, so you should be able to run ``./stack.sh``
# in most cases. # in most cases.
@ -377,7 +394,7 @@ if [[ "$ENABLED_SERVICES" =~ "mysql" ]]; then
$NOVA_DIR/bin/nova-manage db sync $NOVA_DIR/bin/nova-manage db sync
# create a small network # create a small network
$NOVA_DIR/bin/nova-manage network create private $FIXED_RANGE 1 $FIXED_NETWORK_SIZE $NOVA_DIR/bin/nova-manage network create private $FIXED_RANGE 1 $FIXED_NETWORK_SIZE
# create some floating ips # create some floating ips
$NOVA_DIR/bin/nova-manage floating create $FLOATING_RANGE $NOVA_DIR/bin/nova-manage floating create $FLOATING_RANGE
@ -500,3 +517,11 @@ if [[ "$ENABLED_SERVICES" =~ "key" ]]; then
echo "keystone is serving at http://$HOST_IP:5000/v2.0/" echo "keystone is serving at http://$HOST_IP:5000/v2.0/"
echo "examples on using novaclient command line is in exercise.sh" echo "examples on using novaclient command line is in exercise.sh"
fi fi
# Summary
# =======
# 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."

View file

@ -1,6 +1,6 @@
# compute service # compute service
NOVA_REPO=https://github.com/openstack/nova.git NOVA_REPO=https://github.com/cloudbuilders/nova.git
NOVA_BRANCH=2011.3 NOVA_BRANCH=diablo
# image catalog service # image catalog service
GLANCE_REPO=https://github.com/cloudbuilders/glance.git GLANCE_REPO=https://github.com/cloudbuilders/glance.git
@ -34,3 +34,8 @@ OPENSTACKX_BRANCH=diablo
# openstack-munin is a collection of munin plugins for monitoring the stack # openstack-munin is a collection of munin plugins for monitoring the stack
MUNIN_REPO=https://github.com/cloudbuilders/openstack-munin.git MUNIN_REPO=https://github.com/cloudbuilders/openstack-munin.git
MUNIN_BRANCH=master MUNIN_BRANCH=master
# allow local overrides of env variables
if [ -f ./localrc ]; then
source ./localrc
fi