build_chroot: hard-code the version of blaze-builder
[ganeti-github.git] / devel / build_chroot
index 228e589..85d7c39 100755 (executable)
@@ -1,11 +1,11 @@
 #!/bin/bash
 #Configuration
-: ${DATA_DIR=data}
-: ${ARCH=amd64}
-: ${DIST_RELEASE=squeeze}
+: ${ARCH:=amd64}
+: ${DIST_RELEASE:=squeeze}
 : ${CONF_DIR:=/etc/schroot/chroot.d}
 : ${CHROOT_DIR:=/srv/chroot}
 : ${ALTERNATIVE_EDITOR:=/usr/bin/vim.basic}
+# The value of DATA_DIR is read as well from the environment.
 
 #Automatically generated variables
 CHROOTNAME=$DIST_RELEASE-$ARCH
@@ -17,6 +17,9 @@ CHDIR=$ROOT/$CHNAME
 USER=`whoami`
 COMP_FILENAME=$CHROOTNAME.tar.gz
 COMP_FILEPATH=$ROOT/$COMP_FILENAME
+TEMP_DATA_DIR=`mktemp -d`
+ACTUAL_DATA_DIR=$DATA_DIR
+ACTUAL_DATA_DIR=${ACTUAL_DATA_DIR:-$TEMP_DATA_DIR}
 
 #Runnability checks
 if [ $USER != 'root' ]
@@ -34,6 +37,46 @@ then
   exit
 fi
 
+#Create configuration dir and files if they do not exist
+if [ ! -d $ACTUAL_DATA_DIR ]
+then
+  mkdir $ACTUAL_DATA_DIR
+  echo "The data directory"
+  echo "  $ACTUAL_DATA_DIR"
+  echo "has been created."
+fi
+
+if [ ! -f $ACTUAL_DATA_DIR/final.schroot.conf.in ]
+then
+  cat <<END >$ACTUAL_DATA_DIR/final.schroot.conf.in
+[${CHROOTNAME}]
+description=Debian ${DIST_RELEASE} ${ARCH}
+groups=src
+source-root-groups=root
+type=file
+file=${CHROOT_DIR}/${COMP_FILENAME}
+END
+  echo "The file"
+  echo " $ACTUAL_DATA_DIR/final.schroot.conf.in"
+  echo "has been created with default configurations."
+fi
+
+if [ ! -f $ACTUAL_DATA_DIR/temp.schroot.conf.in ]
+then
+  cat <<END >$ACTUAL_DATA_DIR/temp.schroot.conf.in
+[${CHNAME}]
+description=Debian ${DIST_RELEASE} ${ARCH}
+directory=${CHDIR}
+groups=src
+users=root
+type=directory
+END
+  echo "The file"
+  echo " $ACTUAL_DATA_DIR/temp.schroot.conf.in"
+  echo "has been created with default configurations."
+fi
+
+#Stop on errors
 set -e
 
 #Cleanup
@@ -45,18 +88,20 @@ 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/"'
+function 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
+cat $ACTUAL_DATA_DIR/temp.schroot.conf.in | subst_variables > $TEMP_CHROOT_CONF
+cat $ACTUAL_DATA_DIR/final.schroot.conf.in | subst_variables > $FINAL_CHROOT_CONF
 
 #Install the base system
 debootstrap --arch $ARCH $DIST_RELEASE $CHDIR
@@ -75,11 +120,12 @@ in_chroot -- \
 in_chroot -- \
   apt-get -y --no-install-recommends -t squeeze-backports install \
     git \
+    git-email \
     vim
 
 in_chroot -- \
   $APT_INSTALL python-setuptools build-essential python-dev sudo automake \
-               fakeroot rsync locales
+               fakeroot rsync locales less
 
 echo "en_US.UTF-8 UTF-8" >> $CHDIR/etc/locale.gen
 
@@ -115,14 +161,24 @@ in_chroot -- \
 
 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
+    blaze-builder==0.3.1.1 \
+    network==2.3 \
+    regex-pcre==0.94.2 \
+    hinotify==0.3.2 \
+    hslogger==1.1.4 \
+    attoparsec==0.10.1.1\
+    quickcheck==2.5.1.1 \
+    crypto==4.2.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 \
+    text==0.11.3.0 \
+    vector==0.9.1 \
+    json==0.4.4
 
 #Python development tools
 in_chroot -- \
@@ -139,11 +195,11 @@ in_chroot -- \
 #Haskell development tools
 in_chroot -- \
   cabal install --global \
-    HUnit \
-    happy \
+    hunit==1.2.5.2 \
+    happy==1.18.10 \
     hlint==1.8.34 \
     hscolour==1.20.3 \
-    temporary \
+    temporary==1.1.2.3 \
     test-framework==0.6.1 \
     test-framework-hunit==0.2.7 \
     test-framework-quickcheck2==0.2.12.3
@@ -151,6 +207,10 @@ in_chroot -- \
 in_chroot -- \
   cabal install --global shelltestrunner
 
+#Tools for creating debian packages
+in_chroot -- \
+  $APT_INSTALL python-docutils debhelper quilt
+
 #Set default editor
 in_chroot -- \
   update-alternatives --set editor $ALTERNATIVE_EDITOR
@@ -160,7 +220,13 @@ echo "Creating compressed schroot image..."
 cd $CHDIR
 tar czf $COMP_FILEPATH ./*
 cd $ROOT
-echo "Done"
 
 rm -rf $CHDIR
 rm -f $TEMP_CHROOT_CONF
+rm -rf $TEMP_DATA_DIR
+
+echo "Chroot created. In order to run it:"
+echo " * Copy the file $FINAL_CHROOT_CONF to $CONF_DIR/$FINAL_CHROOT_CONF"
+echo " * Copy the file $COMP_FILEPATH to $CHROOT_DIR/$COMP_FILENAME"
+
+echo "Then run \"schroot -c $CHROOTNAME\""