From e710cb231ef1d0795fd4495a53ab8b0c69027305 Mon Sep 17 00:00:00 2001 From: stransky Date: Sat, 23 Nov 2002 19:18:49 +0100 Subject: [PATCH] c'est fonctionnel maintenant je pense. (stransky) darcs-hash:20021123181849-a279a-a3450b7f20ba3054b472510b2b4e833b2e8726da.gz --- fix-active | 141 +++++++++++++++++++++++------------------------------ 1 file changed, 61 insertions(+), 80 deletions(-) diff --git a/fix-active b/fix-active index 7f8a66c6..cc0c4919 100755 --- a/fix-active +++ b/fix-active @@ -6,7 +6,7 @@ ## Login stransky ## ## Started on Mon 01 nov 2001 02:40:25 CET stransky -## Last update sam 05 jan 2002 14:20:25 CET stransky +## Last update sam 23 nov 2002 19:15:14 CET stransky ## # # à utiliser en cas de plantage et de non synchro de /var/lib/news/active. @@ -29,35 +29,20 @@ #exit 0 -if [ 1 -le "$#" ] ; then +if [ `id -u` -ne 0 ] ; then + echo "Be root or die ! (Need to act as news user)" + exit 1 +elif [ 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" +elif [ "`cat /usr/scripts/active.template | wc -l`" -ne "`cat /var/lib/news/active | wc -l`" ] ; then + echo "Attention, soit le template est obsolète (nouveaux newsgroups ajoutés), soit /var/lib/news/active est corrompu (nb de ligne diffère)." + echo "mettre à jour active.template ? (n pour abondonner) 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 + cp /var/lib/news/active /usr/scripts/active.template + echo active.template mis à jour. ;; n* | N*) echo "OK, on laisse active en place ; corriger active.template" @@ -68,14 +53,45 @@ fi echo "arrêt d'innd..." -#ctlinnd throttle 'COUPURE TEMPORAIRE - fix-active' -#ctlinnd shutdown 'fix-active' +INNSTOP + +MAKENEWACTIVE + +echo "affichage du diff" +echo " " +diff /tmp/active.new /var/lib/news/active +echo " " + +if ! ( diff -q /tmp/active.new /var/lib/news/active > /dev/null ) ; then + 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 +else + echo "la version générée et la version en place sont identiques : on ne fait rien." ; +fi + +echo "redémarrage d'innd..." +/id/inn2 start + +exit 0 -# +INNSTOP () { + #/id/inn2 stop #### Pour avoir des logs plus clairs, on remplace stop par un message personnalisé. -# + su news -c '/usr/lib/news/bin/ctlinnd shutdown 'réparation active'' # Stop innwatch (if running) @@ -98,13 +114,13 @@ su news -c '/usr/lib/news/bin/ctlinnd shutdown 'r done' printf "\n" -#### fin du stop personnalisé. - - sleep 2 sync +#### fin du stop personnalisé. +} -touch /tmp/active.new +MAKENEWACTIVE () { +rm -f /tmp/active.new cd /var/spool/news/articles while read gr hi lo md do @@ -114,59 +130,24 @@ do if [ "$hi" = '' ] ; then hi=0 fi - if [ $hi -eq 0 -a $lo -eq 1 ] ; then + if [ "$hi" = 0 -a "$lo" = 1 ] ; then last=0 + lo=0 else - last="`ls -1 $d 2>/dev/null | sort -n | tail | grep '^[1-9][0-9]*$' | tail -1`" - if [ "$last" = '' ] ; then + last="`ls -1 $d 2>/dev/null | sort -n | tail | grep '^[1-9][0-9]*$' | tail -1`" 2> /dev/null + if [ "$last" = '' ] ; then last=$hi fi - lo="`ls -1 $d 2>/dev/null | sort -n | head | grep '^[1-9][0-9]*$' | head -1`" - md='y' + if [ "$lo" = '' -o "$lo" = 0 ] ; then + lo=0 +# certains articles sont encore là mais sont expirés (cf. expire.ctl) +# else +# lo="`ls -1 $d 2>/dev/null | sort -n | head | grep '^[1-9][0-9]*$' | head -1`" 2> /dev/null + fi fi + md='y' 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 - -exit 0 - -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..." - /id/inn2 start - #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 '' -/id/inn2 start - -exit 0