Commit 8b3f1f42 authored by Michele Tartara's avatar Michele Tartara

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: default avatarMichele Tartara <mtartara@google.com>
Reviewed-by: default avatarGuido Trotter <ultrotter@google.com>
parent 6559d7f8
......@@ -31,6 +31,8 @@
/config.log
/config.status
/configure
/devel/squeeze-amd64.tar.gz
/devel/squeeze-amd64.conf
/epydoc.conf
/ganeti
/stamp-srclinks
......
......@@ -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) \
......
#!/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
[${CHROOTNAME}]
description=Debian ${DIST_RELEASE} ${ARCH}
groups=src
source-root-groups=root
type=file
file=${CHROOT_DIR}/${COMP_FILENAME}
[${CHNAME}]
description=Debian ${DIST_RELEASE} ${ARCH}
directory=${CHDIR}
groups=src
users=root
type=directory
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment