Zum Pollen verwende ich das Skript ifmail/misc/contrib/ifpoll
in leicht abgewandelter Form:
#!/bin/sh
# ver 0.7r
# ifpoll, poll my boss node or the node given as argument 1
#
# i start this shell script every day by crond, but you can
# start it also by hand :) start it as the owner of ifcico.
# rasca, berlin 1993 (Rasca Gmelch, 2:2410/305.4)
#
# Erweiterte Fassung von Roland Rosenfeld
# where "ifcico" and "ifpack" reside
FIDOPATH=/usr/local/lib/fnet
# logfile of ifcico
IFLOG=/var/log/fnet/ifmail
IFDEBUG=/var/log/fnet/ifdebug
# owner of "ifcico"
IFCICO_OWNER=uucp
# sysop of fido stuff
IFCICO_SYSOP=postmaster
# my boss node (default address to poll)
NODE="f111.n2450.z2"
# how often should i try to call NODE?
MaxTry=20
# delay between outgoing calls in seconds
DELAY=60
# where to log processing - file or tty/console
INFO_TTY=/dev/tty11
function GetConnectMessage () {
grep 'chat got "CONNECT.*", continue' $IFLOG \
| tail -n1 \
| sed 's/.*chat got //;s/, continue//'
}
function GetNoConnectMessage () {
grep 'chat got .*, aborting' $IFLOG \
| tail -n1 \
| sed 's/.*chat got //;s/, aborting//'
}
mv -f $IFDEBUG $IFDEBUG.old
touch $IFDEBUG
echo "`date \"+%b %d %T\"` ifpoll[$$]: starting" >> $INFO_TTY
# remember me, not to run as root..
#
if [ `whoami` != "$IFCICO_OWNER" ]; then
echo "*** run $0 as the owner of ifcico ***"
echo "`date \"+%b %d %T\"` ifpoll[$$]: wrong uid (rc 2)" >> $INFO_TTY
exit 2
fi
# argv[1] is the optional node to call
#
if [ "$1" != "" ]; then
if [ "$1" = "-?" ] || [ "$1" = "-h" ]; then
echo "usage: ifpoll [node]"
exit 3
else
NODE=$1
fi
fi
# let's pack the fido stuff..
#
$FIDOPATH/fgpack
# loop until ifcico could connect the node or MaxTry is encountered
#
i=1; errlv=1
while let 'i <= MaxTry' && let 'errlv != 0'
do
echo -n "`date \"+%b %d %T\"` ifpoll[$$]: $i. try ($NODE) " \
>> $INFO_TTY
#
# start ifcico in master mode ..
#
$FIDOPATH/ifcico -r 1 $NODE
errlv=$?
if [ $errlv != "0" ]; then
GetNoConnectMessage >> $INFO_TTY
if [ $i != $MaxTry ]; then
sleep $DELAY
fi
let i=i+1
else
GetConnectMessage >> $INFO_TTY
fi
done
# if the poll was fine, unpacking..
#
if [ $errlv = "0" ]; then
echo "`date \"+%b %d %T\"` ifpoll[$$]: unpacking.. " >> $INFO_TTY
$FIDOPATH/fgunpack $INFO_TTY
# add here some additional lines for processing tic files or
# incoming file-lists or simular..
grep 'chat got .*, aborting' $IFLOG | \
tail -n20 | \
elm -s "ifpoll: failed" $IFCICO_SYSOP >/dev/null
fi
echo "`date \"+%b %d %T\"` ifpoll[$$]: finished (rc $errlv)" >> $INFO_TTY
# return the errorlevel of ifcico
exit $errlv
Dieses Skript kann ohne Parameter gestartet werden und ruft dann
automatisch meinen Boß an, oder aber man gibt den gewünschten Node an
(in pfnz-Notation, also z.B. ifpoll f111.n2450.z2
).
Natürlich muß das Skript an den eigenen Bedarf angepaßt werden (so hat
nicht jeder 12 Consolen etc.).
Dieses Skript ruft zunächst das Pack-Skript auf:
#!/bin/sh
# /usr/local/lib/fnet/fgpack
# pack-script for FidoGate (together with ifcico)
#
# written by Roland Rosenfeld 19.08.94
# roland@p13.flokiste.fido.de (2:2450/111.13)
#
FNET=/var/spool/fnet
FTNPACK=/usr/local/lib/fidogate/ftnpack
PATH=/bin:/usr/bin:/usr/local/bin
topack=
for pkt in $FNET/*/????????.out $FNET/*/????????.pnt/????????.out
do
if [ -s $pkt ]
then
topack="$topack $pkt"
fi
done
$FTNPACK $topack
Damit werden die .out
-Files in ARCmail-Files zusammengepackt,
damit sie effizienter verschickt werden können.
Damit ftnpack
korrekt arbeitet, muß man in
/usr/local/lib/fidogate/packing
noch den Packer definieren:
# /usr/local/lib/fidogate/packing
#
# FIDOGATE ftnpack config file
#
# Commands:
#
# arc NAME "/PATH/PROG %s %s"
# prog NAME "/PATH/PROG %s"
#
# pack NAME NODES
# rpack NAME TARGET NODES
# fpack NAME TARGET NODES
#
arc zip "/usr/bin/zip -gkjq %s %s"
arc arc "/usr/local/bin/arc an %s %s"
prog gate "/usr/local/lib/fidogate/ftn2rfc %s"
######## P A C K I N G #######################################################
pack zip *
Natürlich sollte man die Pfade der Packer auf die eigenen
Bedürfnisse anpassen. Nach erfolgreichem Anruf von ifcico
wird
dann das folgende Entpack-Skript aufgerufen:
#!/bin/bash
# usr/local/lib/fnet/fgunpack
#
# unpack-script for FidoGate (together with ifcico)
#
# written by Roland Rosenfeld 12.06.94
# roland@p13.flokiste.fido.de (2:2450/111.13)
#
# corrected paths, usage of syslog, more packer, clean up, restructured
# martin@erde.GUN.de (Martin Seine) <2:2448/413.100>
#
FNET=/usr/local/lib/fnet
FGATE=/usr/local/lib/fidogate
IFCFG=$FNET/config
IN=/var/spool/fnet/in
# Facility is the log-file facility, where syslog stores the messages
# if you're not using syslog, no need to change it
FACILITY=local0
# System-manager who receives notices, if there are unpacking errors
MANAGER=postmaster
PATH=/bin:/usr/bin:/usr/local/bin:$FGATE
if [ $1 ]
then
INFO_TTY=$1
else
INFO_TTY=/dev/console
fi
WEARE=`basename $0`
#
# get directory-names from $IFCFG
#
INBOUND=`grep -i "^[ ]*inbound" $IFCFG | awk '{ print $2 }'`
LOGFILE=`grep -i "^[ ]*logfile" $IFCFG | awk '{ print $2 }'`
if [ ! -d $INBOUND/bad ] ; then
if [ -e $INBOUND/bad ] ; then
rm -Rf $INBOUND/bad
fi
mkdir $INBOUND/bad
fi
CORRECT=true
function iflog() {
if [ -S /dev/log ] ; then
logger -i -p $FACILITY.info -t $WEARE $@
else
echo "`date \"+%y/%m/%d %T\"` $$ $WEARE:" $@ >> $LOGFILE
fi
echo "`date \"+%b %d %T\"` $WEARE [$$]:" $@ >> $INFO_TTY
}
function unpack_mail() {
pushd $INBOUND >/dev/null
EMPTY=true
for f in *.mo? *.tu? *.we? *.th? *.fr? *.sa? *.su? *.pkt \
*.MO? *.TU? *.WE? *.TH? *.FR? *.SA? *.SU? *.PKT
do
if [ -f $f ] ; then
if [ $EMPTY = true ] ; then
rm -rf bak.oo
mv -f bak.o bak.oo >/dev/null
mv -f bak bak.o >/dev/null
mkdir bak
fi
mv -f $f bak/
ln -s -f $INBOUND/bak/$f $IN/$f
EMPTY=false
fi
done
# now all new packets lay in $INBOUND/bak
if [ $EMPTY = true ]
then
iflog No new mail found in $INBOUND
exit
fi
popd >/dev/null
pushd $IN >/dev/null
#
# Analyze packer with file(1) and unpack them if possible
#
for f in *.mo? *.tu? *.we? *.th? *.fr? *.sa? *.su?
do
if [ -f $f ] ; then
arc=`file -L $f | awk '{ print $2 }'`
case $arc in
ARJ) unarj e $f ;;
ARC) arc e $f ;;
ZIP) unzip -x $f < /dev/null ;;
LHA) lha e $f ;;
ZOO) zoo eq $f ;;
RAR) unrar e $f ;;
*) iflog unknown packer \'$arc\' for $f
false ;;
esac
if [ $? -gt 0 ] ; then
iflog couldn\'t unpack $f \(moved to $INBOUND/bad\)
cp -f $f $INBOUND/bad
CORRECT=false
else
iflog unpacked $f \($arc\)-archive
rm -f $f
fi
fi
done
popd >/dev/null
}
#
#
# main unpack-program
#
#
export FNET
cd $FNET
unpack_mail
iflog starting ftn2rfc
ftn2rfc -x ftninpost -l
if [ $CORRECT = false ] ; then
/usr/lib/sendmail $MANAGER <<END
Subject: Fido-packet errors
There occured errors while processing Fido-Packets.
Please check the logfiles
Your Gateway
END
fi
#iflog starting Linux-TIC-Processor
#/usr/local/lib/tic/process_tics.pl < /dev/null
#/usr/local/lib/tic/poster.pl Daily < /dev/null
#/usr/local/lib/tic/lister.pl < /dev/null
Dieses Skript schiebt alle in /var/spool/fnet/inbound
angekommenen Mails nach /var/spool/fnet/inbound/bak
, wobei
dieses Verzeichnis vorher in bak.o
und bak.oo
verschoben
wird, so daß man immer die letzten drei Poll-Resultate vorliegen hat
um mögliche Probleme auch nachträglich noch beheben zu können.
Anschließend werden alle .pkt
-Files nach
/var/spool/fnet/in
kopiert und die Archive werden dorthin
entpackt (das Skript erkennt automatisch ZIP, ARJ, ARC und LHA).
Hierzu müssen folgende Zeilen in /etc/magic
enthalten sein
(möglichst ganz oben, denn die Datei wird von oben nach unten
durchsucht):
# Einige Eintraege fuer das ifcico-Shell-Script
#
0 byte 0x1a ARC Archive (maybe)
0 string PK ZIP Archive
2 string -lh LHA Archive
0 string ZOO ZOO Archive
0 short 0xea60 ARJ Archive
Ist das geschehen, wird ftn2rfc
aufgerufen, welches die Pakete
nach Mail/News konvertiert und dann seinerseits mittels ftninpost
sendmail
und rnews
startet.
Im Anschluß daran können noch weitere Tools, wie z.B. ein TIC-Prozessor oder ein Programm, das News für User des eigenen Systems sucht, aufgerufen werden.