Software bei DB0HRO
 
     
  Diese Dokumentation beschreibt den Aufbau und die Wirkunsweise der Software der automatischen Amateurfunkstelle DB0HRO (Digipeater). Weitere Komponenten des Digipeaters sind selbstverständlich die Transceiver, Antennen, die TNCs und die gesamte Installation  
  Der Aufbau des Systems ist historisch gewachsen. Während ursprünglich mehrer PCs für einzelne Komponenten eingesetzt wurden, ist heute alles mit einem PC realisiert. Der Digipeater stellt folgende Funktionen zur Verfügung:  
 

TheNetNode Netzwerkknoten mit Interlink zu den Nachbarn, Benutzeroberfläche, Convers
DpBox Mailbox für private und öffentliche Nachrichten
CLX DX-Cluster zum schnellen Austausch von DX-Meldungen
Folgende Programme dienen der Kommunikation der o.g. Programme und machen aus den einzelnen Komponenten den Digipeater:
TNTHostmode-Terminalprogramm
TFKISS: TNC-Emulation für Kompatibilität TNT/TNN

TheNetNode Netzwerkknoten mit Interlink zu den Nachbarn, Benutzeroberfläche, Convers
DpBox Mailbox für private und öffentliche Nachrichten
CLX DX-Cluster zum schnellen Austausch von DX-Meldungen

Folgende Programme dienen der Kommunikation der o.g. Programme und machen aus den einzelnen Komponenten den Digipeater:
TNT Hostmode-Terminalprogramm
TFKISS TNC-Emulation für Kompatibilität TNT/TNN

Alle Programme müssen gleichzeitig auf dem PC ausgeführt werden. Dazu dient das Multitasking Betriebssystem. Die Cluster- und die Mailboxsoftware steht nicht unter MS-DOS oder MS-Windows zur Verfügung. Weiterhin würden durch ein Microsoft-Betriebssystem lizenzrechtliche Probleme auftauchen oder weitere Kosten entstehen. Daher wurde als Betriebssystem Linux ausgewählt.

 

 
   Linux als Betriebssystem  
 


Linux ist ein komplexes Betriebssystem, daß optimal für Server ausgelegt ist. Streng genommen ist Linux nur ein kleiner Teil, der Kernel, zu dem Softwarekomponenten hinzugefügt werden. Die Zustammenstellung und Konfiguration der Komponenten wird von so genannten Distributoren vorgenommen. In einer Distribution ist der Umfang der Programme, die Verzeichnisstruktur und das Zusammenspiel der Systemkomponenten vorgenommen. Alle hier beschriebenen Konfigurationen beziehen sich auf eine Linux Distribution SuSE 6.1 mit der DB0HRO ausgestattet ist.

 

 
   Startvorgang  
 


Start des Betriebssystems
Nach dem Rechnerstart wird der LILO geladen. Der LILO (LinuxLoader) ist vergleichbar mit dem Bootsektor von MSDOS. Jedoch erlaubt LILO einerseits verschiedene (Varianten von) Betriebsystemen zu booten andererseit können an das Betriebssystem Parameter übergeben werden. Wenn Reparaturen vorzunehmen sind, kann es notwendig sein, Linux im Single-User Modus zu betreiben. In diesem Fall gibt man bei LILO die Kommandozeile

Linux single

ein. Danach wird Init nur die absolut notwendigen Programme starten. Von dieser Stelle sind Reparaturen in der Konfiguration aber auch am Filesystem möglich.

Normalerweise startet jedoch das Betriebssystem automatisch und es sind dann keine Eingriffe erforderlich.

Start der Amateurfunkprogramme

Für den Digipeater sind folgende Programme zu starten:

  • TheNetNode
  • TFKISS
  • TNT
  • DpBox
  • PostgreSQL Datenbank
  • CLX

Dabei ist PostgreSQL eigentlich kein Amateurfunkprogramm, sondern eine Datenbankengine (RDBMS), wird aber für den Betrieb von CLX benötigt. Die Programme sind für unterschiedliche Zwecke beschrieben, einige haben eine Konsole auf der man interaktiv arbeiten kann, andere sind Server. Daher ist für jedes Programm die richte Methode zum Starten auszuwählen. TheNetNode und TNT haben eine Konsole, an der der Sysop mit Bildschirm und Tastatur arbeiten kann. Für diese beiden Programme erfolgt der Start wie auch für jede andere Konsole, an der der Sysop sich am System anmelden kann. Sollte das Programm beendet werden, wird es automatisch neu gestartet. Die anderen Programme arbeiten im Hintergrund, sie werden beim Systemstart nur einmal gestartet. Dazu gibt es Scripte, die in einer festgelegten Reihenfolge, in jedem Fall aber vor TheNetNode und TNT ausgeführt werden. Gesteuert wird dieses alles von dem Linux-Programm init mit seinen Runlevel.

 
   Linux Runlevel  
 


Ein Linuxsystem kann in verschiedenen Zuständen sein. Jeder Zustand wird Runlevel genannt und dient einem bestimmten Zweck. So sind bei SuSE 6.x folgende Runlevel definiert:

S Single-User, kein Netzwerk
1 Multi-User, kein Netzwerk
2 Multi-User, Netzwerk, mehrere Konsolen, kein X-Window
3 Multi-User, Netzwerk, X-Window-Oberfläche
6 System-Restart
0 System-Halt (shutdown)

Beim Start des System wird in einen default Runlevel gewechselt. Dieser default Runlevel ist in der Datei /etc/inittab eingetragen. Er steht in der Zeile
id:2:initdefault:

Der Runlevel kann als nutzer root mit Hilfe des Befehls init umgeschaltet werden. Damit kann der Übergang und insbesondere der Bootvorgang simultiert werden, ohne den Rechner neu zu starten.

Runlevel werden auf zwei Wegen wirksam. Zunächst gibt es die Datei /etc/inittab. Der Vater aller Prozesse init liest diese Datei und startet nach einer Vorschrift die hier angegebenen Programme. Wenn ein Programm terminiert, wird es neu gestartet. So werden z.B. die Konsolen an denen man sich einloggen kann gestartet und nach dem Ausloggen beendet. Init überwacht die Prozesse und startet das login erneut, wie es in der /etc/inittab definiert ist. Dieser Vorgang wird in den Zeilen
1:123:respawn:/sbin/mingetty --noclear tty1

2:123:respawn:/sbin/mingetty tty2

3:123:respawn:/sbin/mingetty tty3

4:123:respawn:/sbin/mingetty tty4

5:123:respawn:/sbin/mingetty tty5

6:123:respawn:/sbin/mingetty tty6

definiert. Mingetty ist das Programm, das den Loginvorgang einleitet. Neben dem Login kann auch jedes andere Programm, daß </dev/tty11 >/dev/tty12> auf einer Konsole arbeitet gestartet werden. Auf diese Weise werden TheNetNode und TNN gestartet:
tnn:23:respawn:/usr/local/tnn/tnn -u                               </dev/tty11 >/dev/tty11
tnt:23:respawn:/usr/sbin/tnt -i /usr/local/tnt/tnt.ini            </dev/tty12 >/dev/tty12

Auch hier sorgt der respawn Parameter für den automatischen Neustart. Damit die Programme auf den Konsolen 11 und 12 arbeiten, wird die Eingabe und Ausgabe mit dieser Konsole verbunden. Die Umschaltung der Konsole auf TheNetNode erfolgt daher mit alt-F11 und auf TNT mit alt-F12. Die Zahl hinter dem ersten Doppelpunkt gibt an, in welchem Runlevel das Programm gestartet wird. Die Amateurfunkprogramme laufen also nur in Runlevel 2 und 3.

Die zweite Bedeutung der Runlevel wird durch die Zeilen

l0:0:wait:/sbin/init.d/rc 0

1:1:wait:/sbin/init.d/rc 1

l2:2:wait:/sbin/init.d/rc 2

l3:3:wait:/sbin/init.d/rc 3

l6:6:wait:/sbin/init.d/rc 6

erreicht. Nach dem Setzen des neuen Runlevels wird das Script /sbin/init.d/rc mit dem jeweiligen Runlevel als Parameter aufgerufen. Das Script arbeitet mit dem Verzeichnis /etc/rc.d zusammen. In diesem Verzeichnis liegen Scripte, die bestimmte Programme starten, stoppen und auch beeinflussen können. Wird z.B. /etc/rc.d/clx mit dem Parameter start aufgerufen, sorgt das Script dafür, daß das Clusterprogram CLX gestartet wird. /etc/rc.d/clx stop sorgt dementsprechend für die Terminierung. Im Verzeichnis /etc/rc.d gibt es weiterhin Verzeichnisse für jeden Runlevel, also rcS.d, rc0.d, .. rc6.d. In diesen Verzeichnissen befinden sich Verweise (symlinks) auf die Scripte. Diese symlinks haben jedoch eine besondere Namensstrukur. Sie beginnen mit einen S (start) oder K (kill), gefolgt von einer zweistelligen Zahl und einem Namen. Wenn also /sbin/init.d/rc durch einen Runlevelwechsel aufgerufen wird, werden das Verzeichnis für den alten und für den neuen Runlevel untersucht. Zunächst werden alle symlinks, die mit K beginnen, in der Reihenfolge der Nummer untersucht. Gibt es im Verzeichnis für den neuen Runlevel keinen passenden symlink mit einem S wird das Script mit dem Argumtent stop aufgerufen und dadurch das zugehörige Programm beendet. Danach wird das neue Verzeichnis nach symlinks, die mit S beginnen in der Reihenfolge der Nummer durchsucht. Existiert im alten Verzeichnis keinen passsenden Symlink, der mit K beginnt, wird das Script mit dem Parameter start aufgerufen, womit das Proramm i.a. gestartet wird.

 

 
   Manueller Programmstart/-stop  
 


Die Scripte in /etc/rc.d können auch einfach manuell aufgerufen werden. Damit ist es z.B. möglich ein Programm zu stoppen, die Konfiguration zu ändern und danach wieder zu starten. Für das Script sieht es dann genauso aus, als ob das Betriebssystem gestartet oder angehalten wird. Z.B.

/etc/rc.d/clx stop
(Konfiguration ändern)
/etc/rc.d/clx start
Da die Konfiguration häufig nur beim Start gelesen ist, reicht es häufig auch, die Konfiguration zu änderen und anschließend
/etc/rc.d/clx reload
aufzurufen. Das Script führt dann die notwendigen Schritte aus.

 
   Dateizugriff  
 


Die Konfigurationsdateien können über eine AX.25 Verbindung direkt im Editor ed bearbeitet werden. Die Benutzung erfolgt in etwa wie die vom DOS Programm edlin. Hierfür ist schon eine gewisse Übung notwendig. Als Alternative kann man die Dateien über die Mailbox oder TNT übertragen. Um eine Datei auszulesen wird das DpBox Kommando fread benutzt, geschrieben werden kann es mit fwrite, das Inhaltsverzeichnis wird mit fdir angezeigt. Zu beachten ist, daß diese Kommandos eigentlich nur im DpBox-Verzeichnis arbeiten. Um an das gesamte Filesystem zu gelangen wurde ein symlink rl eingetragen, um an das Wurzelverzeichnis zu gelangen. Um z.B. die Datei /etc/inittab zu lesen, muß also das Kommando

fread /rl/etc/inittab

verwendet werden. Es gibt kein chdir Kommanod, alle Pfade müssen vollständig eingegeben werden. Weiterhin ist zu beachten, unter welchem Benutzerkonto die Programme laufen. DpBox läuft auf dem Nutzerkonto dpbox. Damit ist kein globaler Zugriff auf alle Dateien notwendig. Daher ist es zweckmäßig, die Dateien über die Shell an einem anderen Ort zu kopieren, die Zugriffsrechte anzupassen und dann zu übertragen.

Die Amateurfunkprogramme laufen auf folgenden Nutzerkonten:

TheNetNode root
TNN root
Postgres postgres
DpBox dpbox
TFKISS root
CLX clx_us

Wenn also eine Datei von clx zu modifizieren ist, sollte sie in der Shell (von root) nach /tmp kopiert werden. Dort sind deren Zugriffsrechte so zu setzen, daß dpbox sie lesen kann. Nach der Übertragung durch die DpBox löscht man die Datei in /tmp. Jetzt wird die Datei auf dem Heim-PC des OM’s bearbeitet. Danach erfolgt die neue Einspielung durch die DpBox in /tmp. Der Eigentümer der Datei ist automatisch dpbox, weil die Datei durch das Programm DpBox geschrieben wird. In der Shell muß die Datei dann kopiert und der Eigentümer korrekt auf clx_us gesetzt werden(beliebige Reihenfolge). Da die Kopie immer dem Kopierenden gehört, ist es auch möglich, in der Shell den Nutzer zu setzen und als richtiger Nutzer den Kopiervorgang auszuführen. z.B.

db0hro:/tmp # su - clx_us

db0hro:/tmp $ cp /tmp/clx_par /usr/local/clx/config

db0hro:/tmp $ exit

db0hro:/tmp #

 
   Konfiguration TheNetNode  
 


Die Konfigurationsdateien liegen im Verzeichnis /usr/local/tnn bzw. in den Verzeichnissen darunten. Wichtige Dateien sind:

tnn.ini Hardwarekonfiguration, Zuordnung von Schnittstellen zu Ports
tnn177.tnb Betriebsparameter
parms.tnb Die aktuelle Konfiguration wird von TheNetNode mit dem Kommano sp in diese Datei geschrieben; kann mit DOSCOPY für den nächsten Start auf tnn177.tnb kopiert werden.
ax25ip.cfg Definiert die TheNetNode-Seite der Kommunikation mit TFKISS

 

 
   Konfiguration TFKISS  
 


Die Konfigurationsdateien liegen im Verzeichnis /usr/local/tfkiss

tfkiss.ini Basiskonfiguration
tfkiss.cfg Definiert die TFKISS-Seite der Kommunikation mit TheNetNode

 

 
   Konfiguration TNT  
 


Die Konfigurationsdateien liegen im Verzeichnis /usr/local/tnt.

tnt.ini Definiert die Anschlüsse und das Erscheinungsbild von TNT.
tnt.up Definiert die TNC (eigentlich TFKISS) Initialisierung beim Start von TNT
Schaltet weiterhin die Verbindung zu DpBox und CLX ein:
DpBox: ACTBOX
CLX: socket netcmd *:4718 db0hro-6
Legt die TNC-Kanäle für DpBox und CLX fest.
sys.tnt Legt die Sysops und deren Passwortdateien fest.
<call>.pw Passwortdatei des Sysops. Sysops sind in der Lage auf dem #admin Port DB0HRO-13 das //SYS Kommando und danach die //ROOTSH zu starten. Sie erhalten dann eine Linux-Shell (bash) mit allen Rechten (Konto: root)
routes.tnt Connect-Listen für Ziele, z.B. DB0SUE-7
autostrt.tnt Definiert das automatische Starten von Programmen. z.B. User-Zugang zu CLX Die gestarteten Programme werden im Verzeichnis /usr/local/tnt/bin gestartet.
bin/clx_sh Das Programm, das den Nutzer (und das reinkommende Cluster) mit CLX verbindet.

 

 
   Konfiguration DpBox  
 


Die Konfigurationsdateien liegen im Verzeichnis /usr/local/dpbox.

dpbox.ini Definiert Rufzeichen und Konto unter dem DpBox lauft
sf Verzeichnis, daß pro S&F-Partner eine Datei mit der S&F-Konfiguration enthält.
system Verzeichnis mit der restlichen Konfiguration
config.box Viele Parameter, alle in der Datei dokumentiert
convlt.box Automatische Änderung der Lifetime
convtit.box Automatischer Transfer in eine andere Rubrik.
rubriken.box Die in der Box vorhandenen Rubriken mit Standard-Lifetime

 

 
   Konfiguration CLX  
 


Die Konfigurationsdateien liegen im Verzeichnis /usr/local/clx/config

clx_par Definition dieses CLX Knotens
cluster_par Definition des Clusters (der Nachbarn)

In der cluster_par ist die Verbindung zu DB0SUE-7 als Typ Wampes eingetragen. Damit dieses funktioniert ist in der TNT-Konfiguration, Datei tnt.up der Wampes-Socket aktiviert (socket netcmd *:4718 db0hro-6).

 

 
   Routing  
 


In den tnt/routes.tnt wird DB0SUE-7 über HRO-6 connected. Dazu ist in der tfkiss/tfkiss.cfg eine Route von TFKISS nach TheNetNode definiert. Von TheNetNode wird die „normale“ AX.25 Kommunikatio benutzt. In der anderen Richtung ist in der TheNetNode-Konfiguration, Datei ax25ip.cfg eine Route für DB0HRO-6 festgelegt, die TFKISS erreicht.

 

 
  Architektur DB0HRO