AlternC/nightlybuild/mchroot.sh

189 lines
4.8 KiB
Bash
Raw Permalink Normal View History

#! /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