Script de maj du ftp public. Quelques trucs restent encore faire avant de

le migrer sur Sila.

darcs-hash:20060921085756-1dcb7-d6354626e73f7aa68b38e4b42117e0c80bd0e184.gz
This commit is contained in:
parret-freaud 2006-09-21 10:57:56 +02:00
parent 714b0037cc
commit 0f1525ca67

213
intranet/ftp_public/sync-ftp.sh Executable file
View file

@ -0,0 +1,213 @@
#! /bin/sh
#
# Script de mise à jour automatique du FTP public du Cr@ns.
#
# Copyright (C) Augustin Parret-Fréaud
# Licence : GPLv2
#
# TODO : * creer un fichier de logs journalier (modifier la config de rsync
# devrait suffire)
# * intéger Chronomium, Dynebolic et Kaella (ie. trouver un
# serveur rsync qui le fasse ou utiliser autre chose (ftpmirror ?)
# Chemin du FTP
PATHFTP="/pubftp/august/"
# Distributions à gérer (nb : le nom du répertoire doit être
# le même que celui indiqué dans la liste ci-après).
DISTRIB="Knoppix"
#DISTRIB="Debian Fedora Gentoo Knoppix Ubuntu"
# Variables diverses
LOGFILE="sync-ftp.log"
LOGRSYNC="/localhome/parret-freaud/log/rsync"
LOGTEMP="/localhome/parret-freaud/log/temp"
LOGMAIL="/localhome/parret-freaud/log/mail"
RSYNCOPT="--recursive --links --hard-links --times --verbose --delete-after"
ENTMAIL1="Liste des fichiers mis à jour sur le ftp public\n\
===============================================\n\n"
ENTMAIL3="-- \nMessage généré par sync-ftp.sh"
# Fichiers en écriture pour le groupe (ça ne fonctionne pas, à creuser ...)
cd $PATHFTP
umask 002
# Boucle principale
echo -e $ENTMAIL1 > $LOGMAIL
for DIST in $DISTRIB; do
case $DIST in
Debian)
# Adresse du miroir
MIRROR="rsync://ftp.de.debian.org/debian-cd"
# Architectures à exclure (à choisir parmi :
# alpha arm hppa i386 ia64 m68k mips mipsel powerpc s390)
ARCH_EXCLUDE="alpha arm hppa ia64 m68k mips mipsel powerpc s390"
# Fichiers/repertoires à exclude pour ces architectures
# de la forme "--exclude foo1$ARCH/ --exclude foo2$ARCH/ ... "
#ARCH_FR_EXCL="--exclude ${ARCH} "
# Exclusions supplémentaires
EXCLUDE="--exclude project --exclude bt-cd --exclude jigdo-cd \
--exclude jigdo-dvd --exclude bt-dvd --exclude source --exclude sparc \
--exclude HEADER.html --exclude trace --exclude mkimage.log "
# A virer une fois les tests finis
# EXCLUDE=$EXCLUDE"--exclude iso-cd --exclude iso-dvd "
EXCLUDE=$EXCLUDE"--exclude debian-* "
for ARCH in $ARCH_EXCLUDE; do
EXCLUDE=$EXCLUDE"--exclude $ARCH "
done
PATHLOCAL=$PATHFTP"$DIST/"
ENTMAIL2="$DIST ($PATHLOCAL)\n======\n"
TAIL=15
;;
Fedora)
# Adresse du miroir
MIRROR="rsync://ftp.uvsq.fr/fedora/"
# Architectures à exclure (à choisir parmi :
# i386, x86-64)
ARCH_EXCLUDE="x86_64"
# Exclusions supplémentaires
EXCLUDE="--exclude development --exclude test --exclude updates \
--exclude source --exclude debug --exclude os --exclude SRPMS "
# A virer une fois les tests finis
EXCLUDE=$EXCLUDE"--exclude iso "
for ARCH in $ARCH_EXCLUDE; do
EXCLUDE=$EXCLUDE"--exclude $ARCH "
done
PATHLOCAL=$PATHFTP"$DIST/"
ENTMAIL2="$DIST ($PATHLOCAL)\n======\n"
TAIL=3
;;
Gentoo)
# Adresse du miroir
MIRROR="rsync://ftp.belnet.be/gentoo/releases/"
# Architectures à exclure (à choisir parmi :
# alpha, amd64, hppa, ia64, ppc, ppc64, sparc, x86)
ARCH_EXCLUDE="alpha amd64 hppa ia64 ppc ppc64 sparc"
# Exclusions supplémentaires
EXCLUDE="--exclude historical --exclude mips --exclude stages \
--exclude packagecd --exclude snapshots --exclude livecd "
# A virer une fois les tests finis
EXCLUDE=$EXCLUDE"--exclude 2005.1 --exclude 2005.1-r1 "
for ARCH in $ARCH_EXCLUDE; do
EXCLUDE=$EXCLUDE"--exclude $ARCH "
done
PATHLOCAL=$PATHFTP"$DIST/"
ENTMAIL2="$DIST ($PATHLOCAL)\n======\n"
TAIL=21
;;
Knoppix)
# Adresse du miroir
MIRROR="rsync://ftp.belnet.be/packages/knoppix/"
# Architectures à exclure (à choisir parmi :
# alpha, amd64, hppa, ia64, ppc, ppc64, sparc, x86)
ARCH_EXCLUDE=""
# Exclusions supplémentaires
EXCLUDE="--exclude contrib --exclude docs \
--exclude knoppix-cover --exclude knoppix-customize \
--exclude knoppix-vortrag-als2000 --exclude md5-old --exclude qemu-0.8.1 \
--exclude qemu-0.8.1-windows-README.txt --exclude *DE.iso* "
# A virer une fois les tests finis
EXCLUDE=$EXCLUDE"--exclude knoppix-dvd --exclude KNOPPIX* "
for ARCH in $ARCH_EXCLUDE; do
EXCLUDE=$EXCLUDE"--exclude $ARCH "
done
PATHLOCAL=$PATHFTP"$DIST/"
ENTMAIL2="$DIST ($PATHLOCAL)\n=======\n"
TAIL=21
;;
Ubuntu)
# Adresse du miroir
MIRROR="rsync://ftp.oleane.net/ubuntu-cd/"
# Architectures à exclure (à choisir parmi :
# amd64 i386 powerpc sparc)
ARCH_EXCLUDE="amd64 powerpc sparc"
# Fichiers/repertoires à exclude pour ces architectures
# de la forme "--exclude foo1$ARCH/ --exclude foo2$ARCH/ ... "
#ARCH_FR_EXCL="--exclude ${ARCH} "
# Exclusions supplémentaires
EXCLUDE="--exclude cdicons --exclude edubuntu --exclude favicon.ico \
--exclude FOOTER.html --exclude HEADER.html --exclude jigit \
--exclude releases --exclude ubuntu-server --exclude .trace \
--exclude .htaccess --exclude .manifest "
# A virer une fois les tests finis
EXCLUDE=$EXCLUDE"--exclude kubuntu* --exclude xubuntu* --exclude ubuntu* "
for ARCH in $ARCH_EXCLUDE; do
EXCLUDE=$EXCLUDE"--exclude *-$ARCH.* "
done
PATHLOCAL=$PATHFTP"$DIST/"
ENTMAIL2="$DIST ($PATHLOCAL)\n======\n"
TAIL=8
;;
esac
# Sorties de test, à virer dans la version finale
echo $MIRROR
echo $ARCH_EXCLUDE
echo $EXCLUDE
echo $PATHLOCAL
umask 002
rsync $RSYNCOPT $EXCLUDE $MIRROR $PATHLOCAL > $LOGRSYNC
# rsync $RSYNCOPT $EXCLUDE $MIRROR > $LOGRSYNC
ERRC=$?
cat $LOGRSYNC
# En cas d'erreur, on notifie avec le code de sortie.
if [ $ERRC != 0 ]; then
echo "Erreur $ERRC"
echo -e $ENTMAIL2 >> $LOGMAIL
echo -e "Erreur, le processus rsync a retourné le code $ERRC.\n\n" >> $LOGMAIL
else
# Si une mise à jour a été effectuée, on notifie.
tail -n +$TAIL $LOGRSYNC > $LOGTEMP
# Sortie de test
cat $LOGTEMP
STATUS=$(cat $LOGTEMP | wc -l)
if (($STATUS > 2)); then
echo "Une mise à jour à été effectuée"
echo -e $ENTMAIL2 >> $LOGMAIL
cat $LOGTEMP >> $LOGMAIL
echo -e "\n" >> $LOGMAIL
else echo "Pas de mise à jour effectuée"
fi
fi
#echo $STATUS
done
# Fonction d'envoi du mail de notification
mail_ftp() {
local FROM="From:FTP Public (Sila)<august@crans.org>"
local SUBJECT="Notification de synchronisation du FTP (test)"
local RECIPIENT="<augustin@crans.org>"
local XMAILER="X-Mailer:Bash sync-ftp (by August')"
echo $1 | mail -a "$FROM" -a "$XMAILER" -s "$SUBJECT" $RECIPIENT < $1
}
# Envoi du mail de notification
LENGTH_MAIL=$(cat $LOGMAIL | wc -l)
if (($LENGTH_MAIL > 4)); then
echo -e $ENTMAIL3 >> $LOGMAIL
mail_ftp $LOGMAIL
# Infos à virer par la suite
echo "Envoi du mail"
else echo "Pas d'envoi de mail"
fi
echo $LENGTH_MAIL
# Nettoyage des fichiers temporaires
rm -f $LOGRSYNC
rm -f $LOGTEMP
rm -f $LOGMAIL
exit 0