#!/bin/bash
echo "==> CKIT - Construction KIT"
# ******************** SETTINGS ********************
#account ftp
ftpaddress="ftp.deelab.org"
foo=""
bar=""
#sito
httpaddress="http://www.deelab.org"
#organizzazione sito: $httpaddress/arch/$arch/
#cartella di compilazione
builddir="$HOME/pkg/yaourtbuild"
#cartella del repository NON DEVE ESSERE MAI TOCCATA
repodir="$HOME/pkg/CKIT"
#cache. dove pescare vecchi pacchetti. toccherà svuotarla a mano ogni tanto
#ho deciso di non automatizzare l'operazione di proposito
cachedir="$HOME/pkg/cache"
#nome repo
repo="deelab"
#architettura
arch="i686"
# ******************** SETTINGS ********************
# CONTROLLO AZIONE
if test -z "$1"; then
echo "==> SOMARO! Devi darmi un'azione!"
echo "==> Scegli tra check, update, build, build1, add o remove."
exit 0
fi
touch $repodir/listabuild
touch $repodir/listacheck
echo "==> Ok, azione scelta $1."
# CHECK
if [ "$1" == "check" ]; then
if [ -f $repodir/listacheck ]; then
rm $repodir/listacheck;
fi
touch $repodir/listacheck
cd $repodir
if [ -f $repo.db.tar.gz ]; then
rm $repo.db.tar.gz
fi
wget $httpaddress/arch/$arch/$repo.db.tar.gz &>/dev/null
echo "==> Controllo le versioni dei pacchetti e stampo solo quelli che vanno aggiornati."
REGEX=".*-(svn|cvs|hg|git|bzr|darcs|devel)"
for i in $(tar -tf $repo.db.tar.gz | grep -vE 'desc|depends' | sed -e 's:\/$::g'); do
pacco=$(echo $i | rev | cut -d'-' -f3- | rev)
foo=$(echo $i | rev | cut -d'-' -f2 | rev)
bar=$(echo $i | rev | cut -d'-' -f1 | rev)
repover=$(echo $foo-$bar)
#controllo su aur
url="http://aur.archlinux.org/packages/$pacco/$pacco/PKGBUILD"
if PKGBUILD=$(wget -q -O - "$url"); then
aurver="$(eval "$PKGBUILD" &>/dev/null; echo "$pkgver-$pkgrel")"
else
aurver="Null"
fi
#controllo in locale
if pacman -Q $pacco &> /dev/null; then
localver="$(LANG=C pacman -Qi "$pacco" | awk '/^Version/ {print $3}')"
else
localver="Null"
fi
#controllo devel
if [[ "$pacco" =~ $REGEX ]] && [ -d $builddir/$pacco ]; then
cd $builddir/$pacco
develver=$(makepkg -o 2>&1 | grep $pacco | awk '{print $6}')
cd ~
result=$(vercmp "$repover" "$develver")
else
develver="Null"
result=$(vercmp "$repover" "$aurver")
fi
if [[ "$result" < 0 ]]; then
echo " -> $pacco REPO:$repover LOCAL:$localver AUR:$aurver DEVEL:$develver"
echo $pacco >> /tmp/CKIT
cat /tmp/CKIT $repodir/listacheck > /tmp/listacheck
rm /tmp/CKIT
mv /tmp/listacheck $repodir/listacheck
fi
done
fi # CHECK
# UPDATE
if [ "$1" == "update" ]; then
echo "==> Aggiorno i PKGBUILD locali con quelli di AUR."
for i in $(tar -tf $repo.db.tar.gz | grep -vE 'desc|depends' | sed -e 's:\/$::g'); do
pacco=$(echo $i | rev | cut -d'-' -f3- | rev)
printf " -> $pacco: aggiorno con il PKGBUILD di AUR? (y/n) "
read risposta
if [ "$risposta" == "y" ]; then
cd $builddir
wget http://aur.archlinux.org/packages/$pacco/$pacco.tar.gz &>/dev/null
tar -xf "$pacco.tar.gz"
rm $pacco.tar.gz
fi
done
fi # UPDATE
# BUILD
if [ "$1" == "build" ]; then
# CONTROLLO GLI ARGOMENTI DEL BUILD
if test -z "$2" || test -z "$3" || test -z "$4"; then
echo "==> Per il build mi servono [pacchetto] [flag1] [flag2]"
echo "==> flag1=1 per prendere da AUR il PKGBUILD"
echo "==> flag2=1 per compilare da root"
exit 0
fi
echo "==> Compilo senza uppare. Preparativi per il PKGBUILD."
cd $builddir
# PKGBUILD
if [ "$3" == "1" ]; then
echo "==> Tiro il pacco da aur"
wget http://aur.archlinux.org/packages/$2/$2.tar.gz &>/dev/null
tar -xf "$2.tar.gz"
rm $builddir/$2.tar.gz
else
echo "==> Uso il PKGBUILD locale"
fi
cd $2
# makepkg
if [ "$4" == "1" ]; then
echo "==> Compilo da root!"
sudo makepkg -i --asroot
else
echo "==> Compilo da comune mortale!"
makepkg -i
fi
if [ -f $2*-$arch.pkg.tar.gz ]; then
echo "==> Ok, $2 fatto :)"
cd $repodir
mv $builddir/$2/$2*-$arch.pkg.tar.gz $repodir
# AGGIORNO IL FILE LISTA GLOB RM
echo $2 >> /tmp/CKIT
cat /tmp/CKIT $repodir/listabuild > /tmp/listabuild
rm /tmp/CKIT
mv /tmp/listabuild $repodir/listabuild
echo "==> Attualmente ci sono questi pacchetti da aggiungere al repo:"
cat $repodir/listabuild
else
echo "==> Spiacente, il pacco $2 non compila :("
fi
fi # BUILD
# BUILD1
if [ "$1" == "build1" ]; then
echo "==> Processo i pacchetti ottenuti dal check."
if [ $(stat -c%s $repodir/listacheck) == 0 ]; then
echo "==> Non c'è niente da compilare, fai un check prima!"
exit 0
fi
for pacco in $(cat $repodir/listacheck); do
printf "==> $pacco: vuoi aggiornare? (y/n) "
read risposta
if [ "$risposta" == "y" ]; then
cd $builddir
printf " -> Vuoi prendere il PKGBUILD da AUR? (y/n) "
read risposta
if [ "$risposta" == "y" ]; then
wget http://aur.archlinux.org/packages/$pacco/$pacco.tar.gz &>/dev/null
tar -xf "$pacco.tar.gz"
rm $pacco.tar.gz
else
echo " -> ok mantengo quello locale."
fi
cd $pacco
printf " -> Ti basta compilare da user? (y/n) "
read risposta
if [ "$risposta" == "y" ]; then
makepkg -i &>/dev/null
else
sudo makepkg -i --asroot &>/dev/null
fi
if [ -f $pacco*-$arch.pkg.tar.gz ]; then
echo " -> Ok, $pacco fatto :)"
cd $repodir
mv $builddir/$pacco/$pacco*-$arch.pkg.tar.gz $repodir
# AGGIORNO IL FILE LISTA GLOB RM
echo $pacco >> /tmp/CKIT
cat /tmp/CKIT $repodir/listabuild > /tmp/listabuild
rm /tmp/CKIT
mv /tmp/listabuild $repodir/listabuild
else
echo " -> Spiacente, il pacco $pacco non compila :("
fi
fi
done
echo "==> Appena compilati i seguenti pacchetti: "
cat $repodir/listabuild
fi # BUILD1
# ADD
if [ "$1" == "add" ]; then
echo "==> Non compilo un cacchio, aggiungo al repo tutti pacchetti presenti nel workspace."
cd $repodir
# CONTROLLO SE ESISTONO PACCHETTI COMPILATI
if [ $(stat -c%s $repodir/listabuild) == 0 ]; then
echo "==> Non c'è niente da aggiungere, fai qualche pacco prima!"
exit 0
fi
if [ -f $repo.db.tar.gz ]; then
rm $repo.db.tar.gz
fi
wget $httpaddress/arch/$arch/$repo.db.tar.gz &>/dev/null
#aggiungo al repo
echo "==> Aggiungo al repo."
for file in *$arch.pkg.tar.gz; do
repo-add $repo.db.tar.gz $file
done
#db
echo "==> Invio il db."
lftp -u "$foo,$bar" $ftpaddress/arch/$arch -e "put $repo.db.tar.gz; exit"
#sego i vecchi
echo "==> Sego i vecchi pacchetti."
for riga in $(cat listabuild); do
lftp -u "$foo,$bar" $ftpaddress/arch/$arch -e "glob rm -f $riga-*-*-$arch.pkg.tar.gz; exit"
done
rm lista*
#invio i nuovi
echo "==> Invio i nuovi pacchetti."
for file in *$arch.pkg.tar.gz; do
lftp -u "$foo,$bar" $ftpaddress/arch/$arch -e "put $file; exit"
mv $file $cachedir
done
echo "==> Fine aggiornamento repository."
fi # ADD
# REMOVE
if [ "$1" == "remove" ]; then
# CONTROLLO GLI ARGOMENTI DEL REMOVE
if test -z "$2"; then
echo "==> Dammi anche un pacchetto da cavare però!"
exit 0
fi
cd $repodir
if [ -f $repo.db.tar.gz ]; then
rm $repo.db.tar.gz
fi
wget $httpaddress/arch/$arch/$repo.db.tar.gz &>/dev/null
repo-remove $repo.db.tar.gz $2
echo "==> Segato dal DB!"
echo "==> Invio il DB."
lftp -u "$foo,$bar" $ftpaddress/arch/$arch -e "put $repo.db.tar.gz; exit"
echo "==> Cancello il pacco."
lftp -u "$foo,$bar" $ftpaddress/arch/$arch -e "glob rm -f $2-*-*-$arch.pkg.tar.gz; exit"
fi # REMOVE
# AZIONE NON VALIDA
if [ "$1" != "check" ] && [ "$1" != "update" ] && [ "$1" != "build" ] && [ "$1" != "build1" ] && [ "$1" != "add" ] && [ "$1" != "remove" ]; then
echo "==> CAPRA! $1 non è un'azione valida!!!"
exit 0
fi
foo="foo"
bar="bar"
cd ~
echo "==> Fine esecuzione CKIT!"