#! /bin/bash #Le repertoire racine ROOT_DIR="/root/compilation" #Les systeme à compiler CHROOT_DIR="$ROOT_DIR/chroot" #repertoire cible des compilations BUILD_AREA="$ROOT_DIR/build-area" #le repertoire contenant les sources SRC_DIR="/root/vcs" #repertoire local (dans chroot) contenant les builds area LOCAL_BUILD_AREA="/root/build-area" #Le depôt formaté pour le web DEPOT_DIR="$ROOT_DIR/depot" #SOURCES[x]='vcs url_ressource target_directory_in_chroot' SOURCES[0]='svn https://www.alternc.org/svn/ /root/vcs/' function prepare_chroot() { #Traiter dans les chroot for dir in $(ls $CHROOT_DIR); do if [[ ! -d $CHROOT_DIR/$dir ]]; then continue fi dist=$(echo $dir | sed 's/-.*//' ) arch=$(echo $dir | sed 's/.*-//' ) #Ouvrir un chroot SCHROOT_SESSION=$(schroot -b -c $dir) if [[ ! $SCHROOT_SESSION ]]; then continue fi #Nettoyer les chroot chroot_run $SCHROOT_SESSION "find /tmp/ -type f -exec rm {} \;" "./" done; #Nettoyer les build-area dans les sources # find $SRC_DIR -iname build-area -exec rm -r {} \; #Purger le depot de transition rm -r $DEPOT_DIR } function get_sources() { for CHROOT in $(ls $CHROOT_DIR); do #CHROOT=${1:-"etch-i386"} ELEMENTS=${#SOURCES[@]} for ((i=0;i<$ELEMENTS;i++)); do SOURCE=( `echo ${SOURCES[${i}]}` ) VCS=${SOURCE[0]} SOURCE=${SOURCE[1]} TARGET=${SOURCE[2]} chroot_run $CHROOT "mkdir -p $TARGET" '/root/' get_$VCS $CHROOT $SOURCE $TARGET done done; } function get_svn() { chroot_run ${1} "svn cleanup ${3}" ${3} command="echo t |svn --force --no-auth-cache co ${2} ${3}" chroot_run "$1" "$command" '/root/' } function chroot_run() { SCHROOT_SESSION="${1}" COMMAND="${2}" DIR="${3}" echo "$COMMAND" | \ schroot \ -p \ -r \ --chroot $SCHROOT_SESSION \ -d $DIR \ } function create_packages() { rm -r $BUILD_AREA rm -r $DEPOT_DIR for dir in $(ls $CHROOT_DIR); do if [[ ! -d $CHROOT_DIR/$dir ]]; then continue fi dist=$(echo $dir | sed 's/-.*//' ) arch=$(echo $dir | sed 's/.*-//' ) #Ouvrir un chroot SCHROOT_SESSION=$(schroot -b -c $dir) if [[ ! $SCHROOT_SESSION ]]; then continue fi CHROOT_SRC=$CHROOT_DIR/$dist-$arch$SRC_DIR CHROOT_BUILD_AREA=$CHROOT_DIR/$dist-$arch/$LOCAL_BUILD_AREA mkdir -p $BUILD_AREA/$dist-$arch mkdir -p $CHROOT_SRC mkdir -p $CHROOT_BUILD_AREA umount $CHROOT_BUILD_AREA mount --bind $BUILD_AREA/$dist-$arch $CHROOT_BUILD_AREA #Trouver les paquets for paquet in $(find $CHROOT_SRC -ipath \*/debian -printf %h\\n); do SVN_DIR=${paquet#$CHROOT_SRC} STATUT=$(basename $SVN_DIR) chroot_run $SCHROOT_SESSION "svn revert ./ -R" $SRC_DIR/$SVN_DIR if [[ $STATUT != "trunk" ]]; then STATUT=$(basename $(dirname $SVN_DIR)) else version=( `schroot -p -r --chroot $SCHROOT_SESSION -d $SRC_DIR/$SVN_DIR -- egrep -o '\(.*\)' -m 1 debian/changelog | sed 's/(//'|sed s'/)//'` ) chroot_run $SCHROOT_SESSION "dch -v ${version}.1~`date +%Y-%m-%d` nightly" $SRC_DIR/$SVN_DIR #echo "dch -l \"`date +%Y-%m-%d`\" nightly" | \ fi #Construire le package echo $STATUT mkdir -p "$CHROOT_BUILD_AREA/$STATUT" chroot_run $SCHROOT_SESSION "svn-buildpackage -us -uc -rfakeroot --svn-move-to=$LOCAL_BUILD_AREA/$STATUT --svn-ignore" $SRC_DIR/$SVN_DIR chroot_run $SCHROOT_SESSION "svn revert ./ -R" $SRC_DIR/$SVN_DIR done #Fermer le chroot schroot -e \ --chroot=$SCHROOT_SESSION # umount $CHROOT_BUILD_AREA done; } function create_apt() { #Création du depot mkdir -p $DEPOT_DIR for dir in $(ls $BUILD_AREA); do if [[ ! -d $CHROOT_DIR/$dir ]]; then continue fi dist=$(echo $dir | sed 's/-.*//' ) arch=$(echo $dir | sed 's/.*-//' ) DEPOT_DIST=$DEPOT_DIR/dists/$dist CHROOT_BUILD_AREA=$BUILD_AREA/$dist-$arch for dir in $(ls $CHROOT_BUILD_AREA); do echo $dir DEPOT_SRC=$DEPOT_DIST/$dir/source DEPOT_BIN=$DEPOT_DIST/$dir/binary-$arch/ mkdir -p $DEPOT_SRC mkdir -p $DEPOT_BIN cd $CHROOT_BUILD_AREA/$dir cp *.dsc $DEPOT_BIN cp *.deb $DEPOT_BIN cp *.dsc $DEPOT_SRC cp *.diff.gz $DEPOT_SRC cp *.tar.gz $DEPOT_SRC cd $DEPOT_DIST/$dir/ dpkg-scanpackages binary-$arch /dev/null dists/$dist/$dir/ | gzip -f9 > binary-$arch/Packages.gz dpkg-scansources source /dev/null dists/$dist/$dir/ | gzip -f9 > source/Sources.gz apt-ftparchive -c $ROOT_DIR/$dist-$arch-apt-ftparchive.conf release $DEPOT_BIN > $DEPOT_BIN/Release apt-ftparchive -c $ROOT_DIR/$dist-$arch-apt-ftparchive.conf release $DEPOT_SRC > $DEPOT_SRC/Release done done } prepare_chroot get_sources create_packages create_apt