189 lines
4.8 KiB
Bash
189 lines
4.8 KiB
Bash
#! /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
|