scripts/fix-active
stransky d6d04440c6 version 2 : y'a plus rien faire, le script s'occuppe de tout.
darcs-hash:20011105175937-a279a-2bf71ee78cdb9553ffd1208e4c597a93a45a05f1.gz
2001-11-05 18:59:37 +01:00

123 lines
3.3 KiB
Text

#/bin/sh
#
# à 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
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
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 -eq 0 -a $lo -eq 1 ] ; then
last=0
else
last="`ls -1 $d 2>/dev/null | sort -n | grep '^[1-9][0-9]*$' | tail -1`"
if [ "$last" = '' ] ; then
last=$hi
fi
fi
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