Linux Fido-Node HOWTO: Datein im Verzeichniss vom Admin-user

Zurück Weiter Inhaltsverzeichnis

## 9. Datein im Verzeichniss vom Admin-user

Die Dateien die beim Admin-User im Verzeichniss liegen sind groessten Teils nur Vereinfachungen.

Also ich habe folgende Dateien ins Verzeichniss gelinkt.

    cd /home/fido
    ln -s /usr/local/lib/fidogate/areas.bbs
    ln -s /usr/local/lib/fidogate/fareas.bbs
    ln -s /usr/local/lib/fidogate/packing
    ln -s /usr/local/lib/fidogate/passwd
    ln -s /usr/local/lib/fidogate/routing
    ln -s /usr/local/lib/fidogate/ftn2rfc
    ln -s /usr/local/lib/fidogate/ftnaf
    ln -s /usr/local/lib/fidogate/ftnfattach
    ln -s /usr/local/lib/fidogate/ftnhatch
    ln -s /usr/local/lib/fidogate/ftntick
    ln -s /usr/local/lib/fidogate/rfc2ftn
    ln -s /usr/local/lib/fidogate/runin

    ln -s /etc/ifcico/config
    ln -s /etc/ifcico/passworts
    ln -s /usr/local/bin/ifcico/ifcico
    ln -s /usr/local/bin/ifcico/ifindex
    ln -s /usr/local/bin/ifcico/ifstat

Um bei meinem Hub meine Mails zu holen verwende ich das Skript `ifmail/misc/contrib/ifpoll` in STARK gekuerzter Fassung. Es liegt in beim admin-user im Verzeichniss und wird per CRON um 04:50 ausgefuehrt. (Gekuerzt habe ich es deshalb weil die Ausgaben in `/fido/log/ifdebug` bzw auf `tty7` voellig ausreichend sind.)

    #!/bin/sh
    #
    # /home/fido/ifpollhub
    #
    # gekuerzte Fassung von Matthias Schniedermeyer
    #
    # fuer Cry in the Darkness
    #

    # how often should i try to call NODE?
    MaxTry=20

    Node="f602.n2432.z2"

    # delay between outgoing calls in seconds
    DELAY=60

    # loop until ifcico could connect the node or MaxTry is encountered
    #
    i=1; errlv=1
    while let 'i <= MaxTry' && let 'errlv != 0'
    do
            #
            # start ifcico in master mode ..
            #
            ~/ifcico -r 1 $Node
            errlv=$?
            if [ $errlv != "0" ]; then
                    if [ $i != $MaxTry ]; then
                            sleep $DELAY
                    fi
                    let i=i+1
            fi
    done

Von diesem Script habe ich noch eine 2 Fassung.

    #!/bin/sh
    #
    # /home/fido/ifpollhub2
    #
    # gekuerzte Fassung von Matthias Schniedermeyer
    #
    # fuer Cry in the Darkness
    #

    if [ -f /var/spool/fnet/outbound/00000005.* ]; then

      # how often should i try to call NODE?
      MaxTry=20

      Node="f602.n2432.z2"

      # delay between outgoing calls in seconds
      DELAY=60

      # loop until ifcico could connect the node or MaxTry is encountered
      #
      i=1; errlv=1
      while let 'i <= MaxTry' && let 'errlv != 0'
      do
              #
              # start ifcico in master mode ..
              #
              ~/ifcico -r 1 $NODE
              errlv=$?
              if [ $errlv != "0" ]; then
                      if [ $i != $MaxTry ]; then
                              sleep $DELAY
                      fi
                      let i=i+1
              fi
      done

    fi

Dies Script liegt auch beim admin-user im Verzeichniss und wird per CRON um 00:00 aufgerufen und pollt nur dann beim Hub wenn auch wirklich ein Packet fuer ihn vorhanden ist. (Um den richtigen Dateinamen herrauszubekommen muss man aber warten bis ein Packet fuer den "Chef" im outbound liegt und sich den Dateinamen merken. Es ist naemlich IMMER der gleiche. (Mit Aussnahme der Extension, die ist Wochentags abhaengig))

Jetzt muessen aber auch Packete die von Points hochgeladen wurden eingetosst werden. Dafuer habe ich folgendes Script geschrieben das auch beim admin-user im Verzeichniss liegt und per CRON alle 5 Minuten aufgerufen wird.

    #!/bin/sh
    #--------------------------------------------
    ls /var/spool/fnet/in/*.mo* &>/dev/null && ~/runin
    ls /var/spool/fnet/in/*.tu* &>/dev/null && ~/runin
    ls /var/spool/fnet/in/*.we* &>/dev/null && ~/runin
    ls /var/spool/fnet/in/*.th* &>/dev/null && ~/runin
    ls /var/spool/fnet/in/*.fr* &>/dev/null && ~/runin
    ls /var/spool/fnet/in/*.sa* &>/dev/null && ~/runin
    ls /var/spool/fnet/in/*.su* &>/dev/null && ~/runin
    ls /var/spool/fnet/in/*.pkt &>/dev/null && ~/runin

    ls /var/spool/fnet/in/*.MO* &>/dev/null && ~/runin
    ls /var/spool/fnet/in/*.TU* &>/dev/null && ~/runin
    ls /var/spool/fnet/in/*.WE* &>/dev/null && ~/runin
    ls /var/spool/fnet/in/*.TH* &>/dev/null && ~/runin
    ls /var/spool/fnet/in/*.FR* &>/dev/null && ~/runin
    ls /var/spool/fnet/in/*.SA* &>/dev/null && ~/runin
    ls /var/spool/fnet/in/*.SU* &>/dev/null && ~/runin
    ls /var/spool/fnet/in/*.PKT &>/dev/null && ~/runin
    #-------------------------------------------------

    # Ticker -------------------------------------------
    ls /var/spool/fnet/in/*.tic &>/dev/null && ~/ftntick
    #---------------------------------------------------

    #E-Mail -----------------------------------------------------
    if [ -f /fido/fnet/outbound/0980025d.pnt/00000063.hut ]; then
            ~/ftnin
            ~/ftninpost
    fi
    #------------------------------------------------------------

    #-----------------------------------------------------------------
    if [ -f /var/spool/fnet/outbound/0980025d.pnt/00000062.hut ]; then
            ~/ftn2rfc -i /var/spool/fnet/outbound/0980025d.pnt/00000062.hut
            for pack in /var/spool/fnet/in/mail/*.msg
            do
                    ~/ftnaf -m -r < $pack > message.body
                    username=`grep "From " $pack | cut -d ' ' -f 2`
                    cat message.header message.body > message
                    ~/rfc2ftn -O /var/spool/fnet/in $username < message
                    rm message message.body $pack
                    ~/runin
            done
    fi
    #-----------------------------------------------------------------

Dies Script ist jetzt aber starker Tobac als werde ich versuche es zu erklaeren.

Im ersten Abschnitt wird geprueft ob ein Packet im inbound liegt und wenn ja dann wird `runin` gestarted. (runin entpackt die Packete und started dann den tosser.)

Der zweite Abschnitt prueft ob Tic-Files vorhanden sind und started gegebenfalls den File-ticker.

Der dritte Abschnitt sorgt dafuer das die E-Mails, die an den Gate-Point geschrieben wurden, ins I-Net verschickt werden.

Der vierte Abschnitt ist mein "Ersatz" fuer Sendmail. Es verarbeitet Mails an den Areafix und schickt die Repleys zurueck.

(Die "fehlende" Datei `message.header` sieht so aus.

    Subject: Areafix
    From: Areafix@p0.f605.n2432.z2.fidonet.org

    Deine Mail an Areafix ergab:

Ein Sonderfall bei mir ist ja, das ich nur die Areas beim Hub bestellt habe die auch wirklich von den Points gelesen werden. (Spart bares Geld!) Dafuer musste ich mir aber ein paar Gedanken machen und bis Fidogate das kann (Wurde von Martin in die TODO-Liste aufgenommen) behelfe ich mir mit folgendem Script + C Programm.

    /* Check if an area in areas.bbs is subscribed or not */

    #include <stdio.h>
    #include <string.h>

    FILE *areas, *new, *sub;

    int main (void)
    {
       char zeile[200];
       int test;
       int count;
       char node[]="605";

       areas = fopen ("areas.bbs", "r");
       new = fopen ("areas.new", "w");
       sub = fopen ("sub", "w");

       fgets (zeile, 199, areas);
       fputs (zeile, new);
       fgets (zeile, 199, areas);

       while (!feof (areas))
       {
          if (zeile[1] == 45)
          {
             test = (int) strstr (zeile, node);
             if (test)
             {
                zeile[1] = 43;
                count = 3;
                while (!(zeile[count] == 32))
                {
                   fputc (zeile[count], sub);
                   count += 1;
                }
                fputc (10, sub);

             }
          }
          else
          {
             test = (int) strstr (zeile, node);
             if (!(test))
             {
                zeile[1] = 45;
                count = 3;
                fputc (45, sub);
                while (!(zeile[count] == 32))
                {
                   fputc (zeile[count], sub);
                   count += 1;
                }
                fputc (10, sub);

             }
          }

          fputs (zeile, new);
          fgets (zeile, 199, areas);
       }

       fclose (areas);
       fclose (new);
       fclose (sub);
       return 0;
    }

Und das passende Script dazu.

    if [ ! -s sub ]; then
            ~/check
    fi
    if [ -s sub ]; then
            mv areas.new /usr/local/lib/fidogate/areas.bbs
            cat Areafix sub | ~/rfc2ftn -t
            cd /var/spool/fnet/outbound
            a=`ls *.pkt`
            mv $a 0980025a.cut
            cd /fido/fido
    fi
    if [ -f areas.new ]; then
    rm areas.new
    fi
    rm sub

Und die `Areafix`

    Subject: <Hier das Passwort hinschreiben!!>
    To: Areafix@p0.f600.n2432.z2.fidonet.org
    From: Cry in the darkness@p0.f605.n2432.z2.fidonet.org

Ich weiss das das alles ein BISSCHEN unuebersichtlich und ohne Kommentare ist. Wie gesagt das ist die Uebergangsloesung bis Fidogate das "von selbst" regelt.

So das wars was bei meinem Admin-User im Verzeichniss liegt.

Zurück Weiter Inhaltsverzeichnis