Grundsätzliches
Die Einrichtung von uucp ist naturgemäß nicht
einfach. Genaugenommen muss man sich intensiv mit der Anleitung
befassen und auch einiges an Erfahrung sammeln. Die originale
Anleitung ist als .info-Datei-System vorhanden, zum Lesen
empfehlen sich neben X-Tools das Konsolen-Tool pinfo (wer
die mit info selbst liest, ist Masochist).
Da vermutlich die wenigsten vorhaben, eine komplette
Hierarchie mit uucp zu vernetzen, wie das früher
noch üblich war, genügen aber für die
Nutzung von uucp für den durchschnittlichen
IN-Berliner wenige Grundeinstellungen.
Der Rechner, der den uucp-Dienst erledigt, heißt
Hirsch. Da uucp die Rechnernamen beim Aushandeln der
Verbindung übermittelt, muss man das wissen.
Grundsätzlich bieten wir über uucp zwei
Dienste an: Mail und News. Die früher noch
verbreitete Dateiübertragung ist von ftp
und www abgelöst worden und dient nur noch
dem Übertragen der Mail- und News-Jobs.
Prinzip
UUCP arbeitet erst einmal offline, d.h. ohne Verbindung
zur Gegenstelle. Arbeitsaufträge - Jobs - werden
von uux angenommen und in einem Spoolverzeichnis aufbewahrt.
Erst der uucico transportiert die Jobs zum Partnersystem, das sie
zunächst erst einmal wieder aufbewahrt,
bis sie vom uuxqt abgearbeitet werden.
UUCP kennt 4 Dateien:
- C-File
- ist ein Auftrag für den uucico. Es enthält
einen Befehl, z.B. eine Datei zu übertragen.
- D-File
- ist eine zu übertragene Datei.
- D.X-File
- ist eine zu übertragene Datei, die auf der Gegenseite
zum X-File wird. Wird heute kaum benutzt, weil das C-File
beim aktuellen Talor-UUCP bereits ein Kommando zum Anlegen eines
X-Files enthalten kann.
- X-File
- ist ein Auftrag fü den uuxqt und enthält
das dazu verwendete D-File.
Das Verfahren läuft wie folgt ab:
- Uux wird aufgerufen, um ein Kommando auf der Gegenseite
auszuführen, z.B. "rmail rechner!user". Uux
nimmt dabei den Standardinput als Daten an (also als die Mail).
- Uux legt nun ein D-File mit den erhaltenen Daten (also
der Mail selbst) an und ein C-File, welches den Kopierauftrag
für das D-File sowie das Kommando für die Gegenstelle
(also "rmail rechner!user") enthält. Nur bei
Nicht-Standard-Kommandos wird ein D.X-File angelegt, das dann
auf der Gegenseite zum X-File wird.
- Uucico stellt die Verbundung her und sucht nach C-Files.
Er entnimmt ihnen die Namen der D-Files und überträgt
sie (ein D-File, dem das C-File verlorengegangen ist, bleibt
ewig liegen!). Wenn im C-File noch ein Kommando steht, wird
dieses ebenfalls zur Gegenstelle geschickt und dort als X-File
gespeichert, steht im C-File ein D.X-File, wird dieses als
X-File auf der Gegenseite abgelegt. Ist ein C-File abgearbeitet
(also auch das D-File komplett übertragen), wird es entfernt.
Auf der Gegenseite liegt nun also ein X-File mit
"rmail rechner!user" und ein D-File mit der Mails selbst.
Ist uucico damit fertig, kann die Gegenseite ihre Dateien senden
(bei bidirektionalen Protokollen auch gleichzeitig).
Das wechselt so lange, bis alle C-Files abgearbeitet sind
(falls zwischendurch noch welche dazukommen).
Unvollständige Dateien werden beim nächsten Anruf
fortgesetzt. Die Verbindung wird schließlich beendet.
- Entweder automatisch vom uucico oder per cron oder per
Hand wird der uuxqt gestartet. Dieser sucht nach X-Files,
und führt die darin enthaltenen Kommandos aus, dazu
verwendet er die D-Files. Nach dem Abarbeiten werden die
Files gelöscht. Sollten Kommandos fehlschlagen,
werden D- und X-File in ein Verzeichnis .Failed/site
verschoben (das sollte man also ab und an checken),
und der Absender sowie der lokale uucp-User werden
benachrichtigt (Mail). Im Beispiel findet uuxqt nun
also ein X-File mit dem Namen des D-Files und
"rmail rechner!user". Uuxqt wird das D-File
als Standardinput dem rmail übergeben, und
wenn rmail ohne Fehler abgelaufen ist, die
Mail also angenommen wurde, beide Files löschen.
Im Prinzip können so beliebige Kommandos remote
ausgeführt werden - das wurde früher auch
durchaus benutzt. Die erlaubten Kommandos stehen im
sys-File, damit kein Missbrauch möglich ist.
Heute stehen dort meistens nur noch rmail rnews
und ggf. rsmtp rbsmtp rgsmtp.
Damit man mit uucp Mail und News transportieren kann,
müssen die verwendeten Mail- und News-Programme
natürlich mit uucp zusammenarbeiten, d.h. sie
müssen die Übertragung mit uux ausführen
und Mail/News mit den vom uuxqt ausgeführten Kommandos
annehmen.
Was geht?
Wie könnt ihr anrufen?
- Direkte uucp-Verbindung
- Mit dem Sitenamen plus U davor (also Usite) kann direkt
die Modem-/ISDN-Nummer gewählt werden. Unser Einwahlrouter
erkennt, dass es nicht PPP ist, und leitet den Anruf
zum Hirsch durch. Empfohlene Protokolle g und i. Dazu
das Modem in /etc/uucp/dial einrichten (AT-Befehle),
in /etc/port die Serielle Schnittstelle einrichten und
den Dialer angeben sowie /etc/sys einrichten.
- uucp über PPP, Einwahl bei uns
- Über eine normale PPP-Verbindung könnt ihr auch hirsch
erreichen. Dabei ist kein port- oder dial-Eintrag nötig.
- uucp über ssh, z.B. bei Einwahl woanders
- Flatrates wie z.B. bei T-DSL sind derzeit sehr günstig,
so dass der Gedanke nahe liegt, hinten rum bei uns zu
pollen. Damit dabei das Passwort nicht im Klartext über
die Leitung geht, bieten wir dafür an, uucp durch eine
ssh-Verbindung zu führen. Auch hierbei ist kein Eintrag
in dial/port nötig.
Angerufen werden
Wer per Standleitung/SDSL bei uns angeschlossen ist,
zu dem können wir auch die Verbindung von uns aus auslösen.
Das passiert dann 3x pro Stunde, wenn Daten da sind. Mail an
Support genügt.
Austausch von News
Um News per uucp auszutauschen, muss euer News-Server dafür
eingerichtet werden.
News werden gebatcht und komprimiert. Dabei kann die Site die Größe
der Batches (min/max) angeben und die Art der Kompression bestimmen,
mit der wir packen. Wir bieten an:
- compress (Header: cunbatch)
- gzip (Header: gunbatch)
- bzip2 (Header: bunbatch)
Dazu kann die Batchgröße (min max) angegeben werden. Default sind
200 kB/20 MB. Mail an support genügt.
Die Sites können die Batches nach eigenem Gutdünken packen (compress,
gzip oder bzip2), ohne uns Bescheid zu sagen (sofern der Header
stimmt).
Damit bzip2 funktioniert, muss Site folgendes tun (gültig für inn):
- in <Pfad-zu-news-bin>/rnews.libexec/ ein bunbatch anlegen
(ausführbar für news) mit:
#! /bin/sh
exec /bin/bzip2 -d
-
Um bzip2 zu verschicken, das script "send-uucp" kopieren
(z.B. auf send-bzip) und ändern (cunbatch -> bunbatch und
den default compressor auf bzip2 setzen:
*)
# The default is set in innshelvars
COMPRESS="bzip2"
;;
Analog natürlich für gzip, falls das bei älteren Systemen noch
nicht vorhanden ist.
Austausch von Mail
Um Mail per uucp auszutauschen, muss euer Mailer dafür
eingerichtet werden.
Auch hier kann die Site wahlweise einliefern, hirsch sollte
alles verstehen.
Wir können Mails wie folgt verschicken:
- rmail (normal),
- rsmtp (einzeln, mit SMTP-Dialog drumrum),
- rbsmtp (batched smtp, mit angebbarer Batchgröße, default
ist 100 kB),
- rgsmtp (gebatcht mit angebbarer Dateigröße, komprimiert
mit gzip).
Dabei wird (bei rbsmtp und rgsmtp) durch einen Poll der Site der
Batchvorgang ausgelöst, so dass die Mails dann automatisch alle
mitkommen, auch wenn die Batchgröße noch nicht erreicht ist.
Wer r*smtp mit sendmail nutzen will, hole sich am besten das
"Plugin" bsmtpd, das es für Debian fertig als Paket gibt.
Beim smail genügt es, rbsmtp auf rsmtp zu linken und ein
Script rgsmtp zu erzeugen, welches enthält:
#! /bin/sh
exec <pfad_zu>gzip -d -c -f | <pfad_zu>rsmtp
Außerdem muss man natürlich r*smtp als Kommandos im
uucp-sys-File hinzufügen, falls sie dort fehlen.
Solltet ihr vorhaben, hinter einer uucp-Site weitere Sites
mit Mail zu versorgen, muss eure Site diese per Domain-Adressierung
erreichen können.
Es erfolgt keine komplette Bang-Adressierung von weiter
hinten liegenden Sites mehr, sondern euer System bekommt
ein rmail user@site.do.main, und muss selbst wissen,
wohin diese Mail zu schicken ist.
Konfiguration von uucp
Generell
Die Konfiguration ist distributionsabhängig. Es gibt
zwar nur eine aktuelle uucp-Version (Taylor-uucp 1.06),
jedoch verschiedene Wege, diese zu konfigurieren:
- im config-File (meist /etc/uucp/config) können die
Namen der anderen Files festgelegt werden. Die üblichen
Namen sind sys, port, dial, call, passwd, es gibt aber
Distributionen, die diese ändern (z.B. in Dial oder gar
sonstwas).
- Kommandos können auch für die anderen Files angegeben
werden, im falschen File sozusagen. Z.B. port type tcp
im sys-File bedeutet, dass ein port <namenlos> mit
dem Typ tcp verwendet wird, der eigentlich im port-File
hätte stehen müssen (dort jedoch _mit_ Namen). Das ist
praktisch, weil man nur eine Datei wirklich bearbeiten
muss.
- Für die Logfiles gibt es drei Verfahren, BSD-like,
HDB-like und Taylor-like, und das noch an verschiedenen
Stellen. Dies wird beim Compilieren festgelegt...
- dto. Ort und Art der Spool-Verzeichnisse (getrennt nach
D., C. und X. oder zusammen oder wie...).
Das was folgt ist also nur _eine_ Möglichkeit (und geht
davon aus, dass das config-File keine anderen Namen festlegt).
Der obere Teil des sys-Files sowie das Auslösen des uucico ist
dabei für alle Poll-Arten gleich:
--- sys oberer Teil ---
#
# wo man z.B. rgsmtp, rnews usw. stehen hat
command-path /usr/bin /usr/lib/news/bin /usr/lib/uucp
commands uucp rmail rnews rsmtp rgsmtp rbsmtp
#
# für guten Durchsatz:
protocol-parameter i packet-size 1024
protocol-parameter g packet-size 1024
# wichtig, weil man sonst von hirsch nur
# 64-Byte-Pakete kriegt, was den Durchsatz stark drückt:
protocol-parameter g remote-packet-size 1024
#
# damit nimmt er die Daten aus dem call-File, welches
# dann uucp 600 sein sollte:
call-login *
call-password *
#
# Beginn der Site:
system hirsch
# falls der Rechner lokal anders heißt:
myname <site>
time any
--- Ende sys oberer Teil ---
Dazu muss hirsch ins call-File, und zwar so (mit U davor!):
hirsch U<site> password
Starten kann man dann per cron mit "uucico -S hirsch", oder
die vom Cron gestarteten Scripte benutzen, die z.B. Einträge
in einer Datei "Poll" auswerten (je nach Distribution _sehr_
verschieden).
Je nach Pollverfahren
- Bei Einwahl direkt per Modem oder ISDN (ohne ppp)
-
- Bei Verbindung über PPP
-
- Kein Eintrag in dial nötig.
- Debian hat einen Port TCP im port-File vordefiniert, den
man benutzen kann, aber nicht muss. Ob es den bei anderen
auch gibt, weiß ich nicht. Ich habe ihn nicht. Es geht auch
alles im sys-File, das dann so aussieht:
-
--- sys unterer Teil ---
# wer den port TCP aus dem port-File nicht benutzen will:
port type tcp
# wer den port TCP aus dem port-File benutzen will:
port TCP
# statt t geht auch g oder i oder andere,
# g bietet den Vorteil, dass man nebenher noch
# surfen kann, weil es die Leitung nicht so zudrückt,
# i ist bidirektional
protocol t
--- Ende sys unterer Teil ---
- Bei address kann man auch eine IP-Nr. angeben. Wer
als Standleiter eine DFN-Adresse hat, nimmt hirsch.in-berlin.de
- Bei Verbindung von beiden Seiten (ppp)
-
- Verbindung per ssh
-
- uucp vorbereiten
Anlegen eines Eintrags SSH im port-File ist zwar möglich,
aber unzweckmäßig, da die IP-Nummer drin auftaucht. Daher
mache man es ohne port- oder dial-Eintrag ausschließlich
im sys-File so:
-
--- sys unterer Teil ---
port type pipe
port reliable true
port command <pfad_zu>ssh -C -a -x -q -l uus \
-e none hirsch.in-berlin.de
# bei mir geht nur y-Protokoll, das kann am asymmetrischen T-DSL
# liegen, bei anderen geht auch i-Protokoll. Vorsicht, y-Protokoll
# bei gcc 3.3 ist buggy, muss man selbst compilieren und den ASM-
# Teil ausmachen.
protocol y
--- Ende sys unterer Teil ---
-
Um ein bestimmtes SSH-Protokoll vorzugeben, kann man die Zeile "port
command" auch noch durch die Parameter "-1" (für SSH1)
bzw. "-2" (für SSH2) ergänzen. SSH2 wird dringend,
empfohlen, ist in der Regel sowieso default.
-
- ssh-Verbindung einrichten
Der uucico ist suid uucp. Daher müssen alle ssh-Sachen
***als User uucp*** gemacht werden (su - uucp oder sudo -u uucp):
- Erzeugen eines Keys (ssh-keygen), dem key kein Passwort geben!
- Mailen der identity.pub ***von uucp*** an support.
- Auf hirschs Seite kann man sich natürlich nicht als uucp
einloggen - klar! - daher gibt es dort den User uus (uucp
ssh), der den uucico startet. Der ssh muss also immer ein
-l uus mitgegeben werden!
- Nach dem Eintragen des Keys durch support dann entweder
den public-key von hirsch manuell in known-hosts hinzufügen
oder - als User uucp! - einmal eine ssh zu hirsch aufbauen,
und zwar als uucp->uus: ssh hirsch.in-berlin.de -l uus
Dabei bestätige man mit "yes", dass man den Key speichern
will.
Dann erscheint "login:", das ist der uucico der Gegenseite,
drückt man weg.
Die Public-Keys vom User uus sind:
ssh 1:
hirsch.in-berlin.de,192.109.42.6 1024 35 144882872811171893167429396
70045396321867424655395483001648387814782478985311727884293180131810
17890068270879036289548125720075314187948382818911547848085778102042
05924271854399127250273381003191106364644854785403503134167603019610
26643018373464143304013777394416338233597244737899962453111121128403
1910042851
ssh2:
hirsch.in-berlin.de,192.109.42.6 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIE
A4lEyhZotlEhe8CM4L4ymiNAflhlwFkWr57Ycw+GNBmralR/UsckDmvNxBZYykmjh254
MjPHkkvboGnCT4rsFEvB74A3nILhQdvH4rmVE0ZItPO+5nJXD3FEfgoDj+KQZqefcmew
0b14/MujOhPvy6YDr2D3dCLhYadJJN6TrMRs=
(Alles auf einer langen Zeile natürlich.)
|