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
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.