diff --git a/news/fix-active b/news/fix-active new file mode 100755 index 00000000..797541ef --- /dev/null +++ b/news/fix-active @@ -0,0 +1,155 @@ +#!/bin/sh +## +## fix-active +## +## Made by stransky +## Login stransky +## +## Started on Mon 01 nov 2001 02:40: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. +# +# V 2.0 : +# à lancer tel quel. théoriquement le script s'occuppe de tout. +# +# 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 +# ctlinnd go '' +# le 1/11/01 2h40 -- Nico +# +# + +#exit 0 + +if [ `id -u` -ne 0 ] ; then + echo "Be r00t 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 +elif [ "`cat /usr/scripts/news/active.template | wc -l`" -ne "`cat /var/lib/news/active | wc -l`" ] ; then + echo "Attention, soit le template est obsolète (nouveaux newsgroups ajeouté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*) + cp /var/lib/news/active /usr/scripts/news/active.template + echo active.template mis à jour. + ;; + n* | N*) + echo "OK, on laisse active en place ; corriger active.template" + exit 0 + ;; + esac +fi + + +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) + if [ -f /var/run/news/innwatch.pid ]; then + su news -c 'kill `cat /var/run/news/innwatch.pid`' + rm -f /var/run/news/innwatch.pid + fi + + # wait for innd to exit (up to 60 sec) + printf "Stopping innd: " +/bin/su news -c 'i=12 + while [ $i -gt 0 ]; + do + pid=`cat /var/run/news/innd.pid 2>/dev/null` + [ "$pid" = "" ] && break + kill -0 $pid 2>/dev/null || break + sleep 5 + printf "." + i=`expr $i - 1` + done' + printf "\n" + +sleep 2 +sync +#### fin du stop personnalisé. +} + +MAKENEWACTIVE () { +rm -f /tmp/active.new +cd /var/spool/news/articles +while read gr hi lo md +do + d="`echo $gr | tr . /`" + hi="`echo $hi | sed -e 's/^00*//'`" + lo="`echo $lo | sed -e 's/^00*//'`" + if [ "$hi" = '' ] ; then + hi=0 + fi + 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`" 2> /dev/null + if [ "$last" = '' ] ; then + last=$hi + fi + 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 "arrêt d'innd..." +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 + + + + diff --git a/news/fix-overview b/news/fix-overview new file mode 100755 index 00000000..ca9479c2 --- /dev/null +++ b/news/fix-overview @@ -0,0 +1,48 @@ +#!/bin/bash + +if [ $UID != 0 ]; then + echo "Il faut être root pour lancer ce script" + exit 1 +fi + +/etc/init.d/inn2 stop + +(awk -F: -f - /etc/news/buffindexed.conf <> $id ) + done + else # si le dernier message avant le dernier id-xage est annule ou modere + # ou si le fichier des mid n'existe pas : + # on est bourrin : on re-indexe l'ensemble + $(echo -n > $id) + for article in $(find $Rep_News$forum -type f -maxdepth 1 -printf '%P \n') ; do + mid=$(awk '/^Message-ID: / {print $2}' $Rep_News$forum/$article) + ref=$(awk 'BEGIN{RS="";FS=":"} /References: / {i=1;while($i !~ /References$/) i++;print $(i+1)}' $Rep_News$forum/$article | grep "^ <" | tr -d '\n') + $(echo $article $mid $ref >> $id ) + done + fi + fi +done