diff --git a/fix-active b/fix-active index f7636ca3..3ca5ab5f 100644 --- a/fix-active +++ b/fix-active @@ -1,28 +1,67 @@ #/bin/sh # -## à utiliser en cas de plantage et de non synchro de /var/lib/news/active. +# à utiliser en cas de plantage et de non synchro de /var/lib/news/active. +# +# V 2.0 : +# à lancer tel quel. théoriquement le script s'occuppe de tout. # -# ctlinnd throttle ' ' # -## À ce niveau, il est TRES important de vérifier que l'on ne peut plus -## poster de messages dans les news. -## Puis il faut vérifier que le fichier active a la bonne syntaxe, du début -## à la fin, i-e : -## y -## Sinon, il faut corriger à la main. # +# +# V 1.0 : +# ctlinnd throttle '' +# à ce niveau, il est TRES important de vérifier que l'on ne peut plus poster de messages. +# puis il faut vérifier que le fichier active a la bonne syntaxe du début à la fin, i-e : +# newsgroup nombre nombre y +# sinon, il faut corriger à la main. # ./fix-active < /var/lib/news/active > active.new # cp active.new /var/lib/news/active -# -## Important : vérifier les droits de active (inn ne démarre pas s'il râle à -## cause des droits...) -# -# chmod 664 /var/lib/news/active -# chown news.news /var/lib/news/active # ctlinnd go '' -# -## le 1/11/01 2h40 -- Nico -# +# le 1/11/01 2h40 -- Nico +if [ 1 -le "$#" ] ; then + echo "erreur : il ne faut pas mettre d'argument" + exit 1 +fi + +if [ -f /tmp/active.new ] ; then + echo "/tmp/active.new: le fichier existe déjà ! Effacer ? y/n" + read reply1; + case $reply1 in + y* | Y* | o* | O*) + echo "OK, on le remplace avec une version toute neuve" + rm -f /tmp/active.new + ;; + n* | N*) + echo "OK, on le laisse" + exit 0 + ;; + esac +fi + +if [ "`cat /usr/scripts/active.template | wc -l`" -ne "`cat /var/lib/news/active | wc -l`" ] ; then + echo "Attention, soit le template est obsolète, soit /var/lib/news/active est corrompu (nb de ligne diffère)" + echo "continuer ? y/n" + read reply2; + case $reply2 in + y* | Y* | o* | O*) + echo "OK, on écrase le active corrompu" + mv /var/lib/news/active /var/lib/news/active.bak + echo active sauvé en /var/lib/news/active.bak + ;; + n* | N*) + echo "OK, on laisse active en place ; corriger active.template" + exit 0 + ;; + esac +fi + + +echo "arrêt d'innd..." +ctlinnd throttle 'COUPURE TEMPORAIRE -- NICO' +sleep 5 +sync + +touch /tmp/active.new cd /var/spool/news/articles while read gr hi lo md do @@ -40,5 +79,45 @@ do last=$hi fi fi - printf "%s %010d %010d %s\n" $gr $last $lo $md -done + printf "%s %010d %010d %s\n" $gr $last $lo $md >> /tmp/active.new +done < /var/lib/news/active + +echo "affichage du diff" +echo " " + +diff /tmp/active.new /var/lib/news/active + +echo " " + +diff /tmp/active.new /var/lib/news/active > /dev/null && + { + echo "la version générée et la version en place sont identiques : on ne fait rien." ; + echo "redémarrage d'innd..." + ctlinnd go '' + exit 0 + } + + +diff /tmp/active.new /var/lib/news/active > /dev/null || + { + echo "la version générée et la version en place diffèrent : il faut la remplacer" ; + echo "souhaitez-vous remplacer le fichier actuellement en place ? y/n" ; + read reply3; + case $reply3 in + y* | Y* | o* | O*) + echo "OK, on le remplace" + cp /tmp/active.new /var/lib/news/active + chown news.news /var/lib/news/active + chmod 664 /var/lib/news/active + ;; + n* | N*) + echo "OK, on le laisse, mais il faut corriger cela !" + ;; + esac + } + + +echo "redémarrage d'innd..." +ctlinnd go '' + +exit 0