c'est fonctionnel maintenant je pense.

(stransky)

darcs-hash:20021123181849-a279a-a3450b7f20ba3054b472510b2b4e833b2e8726da.gz
This commit is contained in:
stransky 2002-11-23 19:18:49 +01:00
parent 99ac0511fe
commit e710cb231e

View file

@ -6,7 +6,7 @@
## Login stransky <stransky@crans.org> ## Login stransky <stransky@crans.org>
## ##
## Started on Mon 01 nov 2001 02:40:25 CET 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. # à utiliser en cas de plantage et de non synchro de /var/lib/news/active.
@ -29,35 +29,20 @@
#exit 0 #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" echo "erreur : il ne faut pas mettre d'argument"
exit 1 exit 1
fi 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)."
if [ -f /tmp/active.new ] ; then echo "mettre à jour active.template ? (n pour abondonner) y/n"
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; read reply2;
case $reply2 in case $reply2 in
y* | Y* | o* | O*) y* | Y* | o* | O*)
echo "OK, on écrase le active corrompu" cp /var/lib/news/active /usr/scripts/active.template
mv /var/lib/news/active /var/lib/news/active.bak echo active.template mis à jour.
echo active sauvé en /var/lib/news/active.bak
;; ;;
n* | N*) n* | N*)
echo "OK, on laisse active en place ; corriger active.template" echo "OK, on laisse active en place ; corriger active.template"
@ -68,14 +53,45 @@ fi
echo "arrêt d'innd..." echo "arrêt d'innd..."
#ctlinnd throttle 'COUPURE TEMPORAIRE - fix-active' INNSTOP
#ctlinnd shutdown 'fix-active'
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 #/id/inn2 stop
#### Pour avoir des logs plus clairs, on remplace stop par un message personnalisé. #### 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'' su news -c '/usr/lib/news/bin/ctlinnd shutdown 'réparation active''
# Stop innwatch (if running) # Stop innwatch (if running)
@ -98,13 +114,13 @@ su news -c '/usr/lib/news/bin/ctlinnd shutdown 'r
done' done'
printf "\n" printf "\n"
#### fin du stop personnalisé.
sleep 2 sleep 2
sync sync
#### fin du stop personnalisé.
}
touch /tmp/active.new MAKENEWACTIVE () {
rm -f /tmp/active.new
cd /var/spool/news/articles cd /var/spool/news/articles
while read gr hi lo md while read gr hi lo md
do do
@ -114,59 +130,24 @@ do
if [ "$hi" = '' ] ; then if [ "$hi" = '' ] ; then
hi=0 hi=0
fi fi
if [ $hi -eq 0 -a $lo -eq 1 ] ; then if [ "$hi" = 0 -a "$lo" = 1 ] ; then
last=0 last=0
lo=0
else else
last="`ls -1 $d 2>/dev/null | sort -n | tail | grep '^[1-9][0-9]*$' | tail -1`" last="`ls -1 $d 2>/dev/null | sort -n | tail | grep '^[1-9][0-9]*$' | tail -1`" 2> /dev/null
if [ "$last" = '' ] ; then if [ "$last" = '' ] ; then
last=$hi last=$hi
fi fi
lo="`ls -1 $d 2>/dev/null | sort -n | head | grep '^[1-9][0-9]*$' | head -1`" if [ "$lo" = '' -o "$lo" = 0 ] ; then
md='y' 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
fi
md='y'
printf "%s %010d %010d %s\n" $gr $last $lo $md >> /tmp/active.new printf "%s %010d %010d %s\n" $gr $last $lo $md >> /tmp/active.new
done < /var/lib/news/active 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