blob: 59f11b3ab1cf00f6c6ac93f0cca1a8e51031d78c [file] [log] [blame]
#!/bin/bash
#Configuration
: ${ARCH:=amd64}
: ${DIST_RELEASE:=squeeze}
: ${CONF_DIR:=/etc/schroot/chroot.d}
: ${CHROOT_DIR:=/srv/chroot}
: ${ALTERNATIVE_EDITOR:=/usr/bin/vim.basic}
: ${CHROOT_FINAL_HOOK:=/bin/true}
# Additional Variables taken from the environmen
# DATA_DIR
# CHROOT_EXTRA_DEBIAN_PACKAGES
#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
TEMP_DATA_DIR=`mktemp -d`
ACTUAL_DATA_DIR=$DATA_DIR
ACTUAL_DATA_DIR=${ACTUAL_DATA_DIR:-$TEMP_DATA_DIR}
#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
#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
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 / '
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 $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
APT_INSTALL="apt-get install -y --no-install-recommends"
echo "deb http://backports.debian.org/debian-backports" \
"$DIST_RELEASE-backports main contrib non-free" \
> $CHDIR/etc/apt/sources.list.d/backports.list
#Install all the packages
in_chroot -- \
apt-get update
# do not install libghc6-network-dev, since it's too old, and just
# confuses the dependencies
in_chroot -- \
$APT_INSTALL \
autoconf automake \
ghc cabal-install \
libghc6-curl-dev \
libghc6-parallel-dev \
libghc6-text-dev \
libghc6-vector-dev \
libpcre3-dev \
hlint hscolour pandoc \
graphviz socat qemu-utils \
python-docutils \
python-simplejson \
python-pyparsing \
python-pyinotify \
python-pycurl \
python-ipaddr \
python-yaml \
python-paramiko
in_chroot -- \
$APT_INSTALL python-setuptools python-dev build-essential
in_chroot -- \
easy_install \
logilab-astng==0.24.1 \
logilab-common==0.58.3 \
mock==1.0.1 \
pylint==0.26.0
in_chroot -- \
easy_install \
sphinx==1.1.3 \
pep8==1.3.3 \
coverage==3.4 \
bitarray==0.8.0
in_chroot -- \
cabal update
in_chroot -- \
cabal install --global \
blaze-builder==0.3.1.1 \
network==2.3 \
regex-pcre==0.94.2 \
hinotify==0.3.2 \
hslogger==1.1.4 \
quickcheck==2.5.1.1 \
attoparsec==0.10.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 \
json==0.4.4
in_chroot -- \
cabal install --global \
hunit==1.2.5.2 \
happy==1.18.10 \
hlint==1.8.43 \
hscolour==1.20.3 \
temporary==1.1.2.3 \
test-framework==0.6.1 \
test-framework-hunit==0.2.7 \
test-framework-quickcheck2==0.2.12.3
in_chroot -- \
cabal install --global cabal-file-th
in_chroot -- \
cabal install --global shelltestrunner
#Install selected packages from backports
in_chroot -- \
$APT_INSTALL -t squeeze-backports \
git \
git-email \
vim
in_chroot -- \
$APT_INSTALL sudo fakeroot rsync locales less
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-mock \
socat fping
in_chroot -- \
$APT_INSTALL qemu-utils
in_chroot -- \
easy_install affinity
#Python development tools
in_chroot -- \
$APT_INSTALL python-epydoc
#Tools for creating debian packages
in_chroot -- \
$APT_INSTALL debhelper quilt
# extra debian packages
for package in $CHROOT_EXTRA_DEBIAN_PACKAGES
do in_chroot -- \
$APT_INSTALL $package
done
#Set default editor
in_chroot -- \
update-alternatives --set editor $ALTERNATIVE_EDITOR
# Final user hook
in_chroot -- $CHROOT_FINAL_HOOK
rm -f $COMP_FILEPATH
echo "Creating compressed schroot image..."
cd $CHDIR
tar czf $COMP_FILEPATH ./*
cd $ROOT
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\""