197 lines
6.1 KiB
Bash
197 lines
6.1 KiB
Bash
#! /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).
|
|
# Debian, Fedora, Gentoo, Knoppix, Ubuntu
|
|
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 sparc)
|
|
ARCH_EXCLUDE="alpha arm hppa ia64 m68k mips mipsel 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 HEADER.html --exclude trace --exclude mkimage.log "
|
|
# A virer une fois les tests finis
|
|
for ARCH in $ARCH_EXCLUDE; do
|
|
EXCLUDE=$EXCLUDE"--exclude $ARCH "
|
|
done
|
|
PATHLOCAL=$PATHFTP"$DIST/"
|
|
ENTMAIL2="$DIST ($PATHLOCAL)\n======\n"
|
|
TAIL=15 # Pour le formattage du mail
|
|
;;
|
|
|
|
Fedora)
|
|
# Adresse du miroir
|
|
MIRROR="rsync://ftp.uvsq.fr/fedora/"
|
|
# Architectures à exclure (à choisir parmi :
|
|
# i386, x86-64)
|
|
ARCH_EXCLUDE=""
|
|
# Exclusions supplémentaires
|
|
EXCLUDE="--exclude development --exclude test --exclude updates \
|
|
--exclude source --exclude debug --exclude os --exclude SRPMS \
|
|
--exclude *-rescuecd.iso --exclude *-disc* "
|
|
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 hppa ia64 ppc ppc64 sparc"
|
|
# Exclusions supplémentaires
|
|
EXCLUDE="--exclude historical --exclude mips --exclude stages \
|
|
--exclude packagecd --exclude snapshots --exclude livecd "
|
|
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 dvd \
|
|
--exclude knoppix-cover --exclude knoppix-customize \
|
|
--exclude knoppix-dvd --exclude packages-dvd.txt \
|
|
--exclude knoppix-vortrag-als2000 --exclude md5-old --exclude qemu-0.8.1 \
|
|
--exclude qemu-0.8.1-windows-README.txt --exclude *DE* "
|
|
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
|
|
|
|
umask 002
|
|
rsync $RSYNCOPT $EXCLUDE $MIRROR $PATHLOCAL > $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 -e $ENTMAIL2 >> $LOGMAIL
|
|
cat $LOGTEMP >> $LOGMAIL
|
|
echo -e "\n" >> $LOGMAIL
|
|
fi
|
|
fi
|
|
|
|
#echo $STATUS
|
|
|
|
done
|
|
|
|
# Fonction d'envoi du mail de notification
|
|
mail_ftp() {
|
|
local FROM="From:FTP Public (Sila)<roots@crans.org>"
|
|
local SUBJECT="Notification de synchronisation du FTP"
|
|
local RECIPIENT="<roots@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
|
|
fi
|
|
|
|
echo $LENGTH_MAIL
|
|
|
|
# Nettoyage des fichiers temporaires
|
|
rm -f $LOGRSYNC
|
|
rm -f $LOGTEMP
|
|
rm -f $LOGMAIL
|
|
|
|
exit 0
|