diff --git a/intranet/ftp_public/sync-ftp.sh b/intranet/ftp_public/sync-ftp.sh new file mode 100755 index 00000000..02744afd --- /dev/null +++ b/intranet/ftp_public/sync-ftp.sh @@ -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)" + local SUBJECT="Notification de synchronisation du FTP (test)" + local RECIPIENT="" + 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