commit 8b3f1f42d8e26050b55714fae949e8daef9671ed
Author: Michele Tartara <mtartara@google.com>
Date:   Tue Apr 2 15:03:49 2013 +0200

    Add script for building chroot
    
    Setting up a proper environment for building a Ganeti can be quite difficult.
    
    This patch adds a script for building a compressed chroot with all the
    required libraries and tools.
    
    Signed-off-by: Michele Tartara <mtartara@google.com>
    Reviewed-by: Guido Trotter <ultrotter@google.com>

diff --git a/.gitignore b/.gitignore
index 8656a8a..091a892 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,6 +31,8 @@
 /config.log
 /config.status
 /configure
+/devel/squeeze-amd64.tar.gz
+/devel/squeeze-amd64.conf
 /epydoc.conf
 /ganeti
 /stamp-srclinks
diff --git a/Makefile.am b/Makefile.am
index b43c187..e61b45b 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -93,6 +93,7 @@ DIRS = \
 	autotools \
 	daemons \
 	devel \
+	devel/data \
 	doc \
 	doc/css \
 	doc/examples \
@@ -178,6 +179,8 @@ CLEANFILES = \
 	$(SHELL_ENV_INIT) \
 	daemons/daemon-util \
 	daemons/ganeti-cleaner \
+	devel/squeeze-amd64.tar.gz \
+	devel/squeeze-amd64.conf \
 	$(mandocrst) \
 	doc/manpages-enabled.rst \
 	$(BUILT_EXAMPLES) \
diff --git a/devel/build_chroot b/devel/build_chroot
new file mode 100755
index 0000000..e4225cb
--- /dev/null
+++ b/devel/build_chroot
@@ -0,0 +1,151 @@
+#!/bin/bash
+#Configuration
+: ${DATA_DIR=data}
+: ${ARCH=amd64}
+: ${DIST_RELEASE=squeeze}
+: ${CONF_DIR:=/etc/schroot/chroot.d}
+: ${CHROOT_DIR:=/srv/chroot}
+
+#Automatically generated variables
+CHROOTNAME=$DIST_RELEASE-$ARCH
+CHNAME=building_$CHROOTNAME
+TEMP_CHROOT_CONF=$CONF_DIR/$CHNAME.conf
+FINAL_CHROOT_CONF=$CHROOTNAME.conf
+ROOT=`pwd`
+CHDIR=$ROOT/$CHNAME
+USER=`whoami`
+COMP_FILENAME=$CHROOTNAME.tar.gz
+COMP_FILEPATH=$ROOT/$COMP_FILENAME
+
+#Runnability checks
+if [ $USER != 'root' ]
+then
+  echo "This script requires root permissions to run"
+  exit
+fi
+
+if [ -f $TEMP_CHROOT_CONF ]
+then
+  echo "The configuration file name for the temporary chroot"
+  echo "  $TEMP_CHROOT_CONF"
+  echo "already exists."
+  echo "Remove it or change the CHNAME value in the script."
+  exit
+fi
+
+set -e
+
+#Cleanup
+rm -rf $CHDIR
+mkdir $CHDIR
+
+#Install tools for building chroots
+apt-get install -y schroot debootstrap
+
+shopt -s expand_aliases
+alias in_chroot='schroot -c $CHNAME -d / '
+alias subst_variables='sed \
+  -e "s/\${ARCH}/$ARCH/" \
+  -e "s*\${CHDIR}*$CHDIR*" \
+  -e "s/\${CHNAME}/$CHNAME/" \
+  -e "s/\${CHROOTNAME}/$CHROOTNAME/" \
+  -e "s*\${CHROOT_DIR}*$CHROOT_DIR*" \
+  -e "s/\${COMP_FILENAME}/$COMP_FILENAME/" \
+  -e "s/\${DIST_RELEASE}/$DIST_RELEASE/"'
+
+#Generate chroot configurations
+cat $DATA_DIR/temp.schroot.conf.in | subst_variables > $TEMP_CHROOT_CONF
+cat $DATA_DIR/final.schroot.conf.in | subst_variables > $FINAL_CHROOT_CONF
+
+#Install the base system
+debootstrap --arch $ARCH $DIST_RELEASE $CHDIR
+
+APT_INSTALL="apt-get install -y --no-install-recommends"
+
+#Install all the packages
+in_chroot -- \
+  apt-get update
+
+in_chroot -- \
+  $APT_INSTALL python-setuptools build-essential python-dev sudo automake git \
+               fakeroot vim rsync locales
+
+echo "en_US.UTF-8 UTF-8" >> $CHDIR/etc/locale.gen
+
+in_chroot -- \
+  locale-gen
+
+in_chroot -- \
+  $APT_INSTALL lvm2 ssh bridge-utils iproute iputils-arping \
+               ndisc6 python python-pyopenssl openssl \
+               python-pyparsing python-simplejson \
+               python-pyinotify python-pycurl python-yaml socat fping
+
+in_chroot -- \
+  $APT_INSTALL python-paramiko qemu-utils
+
+in_chroot -- \
+  easy_install affinity bitarray ipaddr
+
+#Haskell packages
+in_chroot -- \
+  $APT_INSTALL ghc6 \
+               libghc6-parallel-dev libghc6-deepseq-dev \
+               libghc6-curl-dev
+
+in_chroot -- \
+  $APT_INSTALL cabal-install
+
+in_chroot -- \
+  cabal update
+
+in_chroot -- \
+  $APT_INSTALL libpcre3-dev
+
+in_chroot -- \
+  cabal install --global \
+    QuickCheck==2.5.1.1 \
+    network==2.3 hslogger Crypto text regex-pcre \
+    attoparsec vector \
+    json==0.4.4 \
+    MonadCatchIO-transformers==0.2.2.0 mtl==2.0.1.0 \
+    hashable==1.1.2.0 case-insensitive==0.3 parsec==3.0.1 \
+    network==2.3 snap-server==0.8.1 \
+    hinotify==0.3.2
+
+#Python development tools
+in_chroot -- \
+  $APT_INSTALL pandoc python-epydoc graphviz
+
+in_chroot -- \
+  easy_install sphinx==1.1.3 \
+               logilab-common \
+               logilab-astng==0.23.1 \
+               pylint==0.25.1 \
+               pep8==1.2 \
+               coverage
+
+#Haskell development tools
+in_chroot -- \
+  cabal install --global \
+    HUnit \
+    happy \
+    hlint==1.8.34 \
+    hscolour==1.20.3 \
+    temporary \
+    test-framework==0.6.1 \
+    test-framework-hunit==0.2.7 \
+    test-framework-quickcheck2==0.2.12.3
+
+in_chroot -- \
+  cabal install --global shelltestrunner
+
+rm -f $COMP_FILEPATH
+echo "Creating compressed schroot image..."
+cd $CHDIR
+tar czf $COMP_FILEPATH ./*
+cd $ROOT
+echo "Done"
+
+rm -rf $CHDIR
+rm -f $TEMP_CHROOT_CONF
diff --git a/devel/data/final.schroot.conf.in b/devel/data/final.schroot.conf.in
new file mode 100644
index 0000000..08bb4b0
--- /dev/null
+++ b/devel/data/final.schroot.conf.in
@@ -0,0 +1,6 @@
+[${CHROOTNAME}]
+description=Debian ${DIST_RELEASE} ${ARCH}
+groups=src
+source-root-groups=root
+type=file
+file=${CHROOT_DIR}/${COMP_FILENAME}
diff --git a/devel/data/temp.schroot.conf.in b/devel/data/temp.schroot.conf.in
new file mode 100644
index 0000000..fe9a409
--- /dev/null
+++ b/devel/data/temp.schroot.conf.in
@@ -0,0 +1,6 @@
+[${CHNAME}]
+description=Debian ${DIST_RELEASE} ${ARCH}
+directory=${CHDIR}
+groups=src
+users=root
+type=directory
