Pierre Ficheux (pficheux@com1.fr)
Novembre 1999
Le protocole UUCP fut introduit dans les premières versions d'UNIX développées par AT&T à la fin des années 1970. La première version d'UUCP fut développée par Mike Lesk en 1976 et fut intégrée à la version V.7 de l'UNIX AT&T diffusée en 1977 (sous le nom d'UUCP version 2). Une nouvelle version fut distribuée avec UNIX System V R3 en 1983. Le nom officiel de cette nouvelle version fut BNU pour Basic Network Utilities. Elle fut cependant célèbre dans la communauté UNIX sous le nom de HoneyDanBer dérivé des noms des 3 auteurs: Peter Honeyman, David A. Nowitz et Brian E. Redman.
Malgré son grand age, UUCP surpasse largement dans certains cas bon nombre de systèmes de transfert de données plus récents. Lorsque l'on ne dispose pas d'une connexion IP permanente, UUCP peut être un système à la fois performant et très économique en particulier pour gèrer le service de courrier électronique même dans le cas d'un site relativement important (comme une petite entreprise comprenant plusieurs dizaines d'utilisateurs).
UUCP fut conçu à une époque ou les réseaux n'existaient pas (ou peu). Il est basé sur un principe de connexion temporaire (dial) qui s'effectue la plupart du temps à l'aide d'un MODEM (appelé aussi dialer). Le temps d'utilisation de la ligne et donc le coût de communication est très optimisé car les transferts UUCP sont rassemblés dans un zone de spool (file d'attente) qui permet de stocker plusieurs transferts (transfert de fichier, de courrier, etc...) avant d'effectuer l'appel effectif. Le protocole UUCP est également reversible ce qui permet de transférer des données dans les 2 sens lors d'un même appel.
Le système peut cependant fonctionner sur d'autres supports comme une connexion série directe ou un réseau.
UUCP est largement configurable à travers des fichiers décrits plus loin, il est également automatisable au maximum ce qui permet de limiter l 'administration du système une fois que celui-ci est correctement configuré. La configuration d'UUCP est cependant un peu délicate pour un profane...
UUCP est disponible en standard sous LINUX avec la version Taylor UUCP (du nom de l'auteur) appelée aussi GNU UUCP. Cette distribution a la particularité de pouvoir émuler les versions AT&T antérieures mais elle apporte aussi un format de fichier de configuration propre (TAYLOR_CONFIG). Le type de configuration est sélectionné par les options de compilation de Taylor UUCP, dans le fichier policy.h de la distribution.
Les différentes version UNIX d'UUCP diffèrent par la structure des fichiers de configuration bien que le protocole utilisé reste compatible. Dans la suite de l'article, nous parlerons de configuration BNU (compatible avec la distribution d'AT&T).
La configuration de UUCP est relativement complexe du fait du grands nombre de fichiers utilisés pour le paramètrage. Ces fichiers sont rassemblés sur un répertoire qui pourra être /etc/uucp ou bien /var/lib/uucp. Les fichiers décrits sont ceux de la version BNU.
Supposons que ma machine personnelle appelée mmxpf veuille dialoguer par UUCP avec un machine distante appelée bureau. On doit tout d'abord déclarer la machine bureau dans le fichier Systems de la machine locale par une ligne:
bureau Any ACU 57600 numéro_bureau "" \d\r login--gin uupf ord: uupf0
Dans le fichier Devices, on ajoutera la ligne:
ACU modem - 57600 deskline56qui indique que le pseudo-device ACU (Automatic Call Unit) est associé au device physique /dev/modem qui est en général un lien symbolique sur un device réel. La chaîne deskline56 spécifie la macro d'appel correspondant au modem utilisé (ici un Deskline 56K COM One) et devra être définie dans le fichier Dialers.
Dans le fichier Dialers, on ajoutera la ligne:
deskline56 =,-, "" \dAT&FE0M1V1X1&K3%TCB\r\c OK\r ATDT\T\r\c CONNECTqui représente la séquence Hayes utilisée pour initialiser le modem puis composer le numéro de téléphone.
On peut d'ores et déja tester la connexion en utilisant la commande UUCP cu (Call Unix) livrée dans la package UUCP:
cu bureau ... Connected. ~[mmxpf]. Disconnected.On quitte cu en tapant ~ puis . (il fallait l'inventer :-))
Le fichier Permissions permet de définir les droits d'accès des machines distantes utilisant le protocole UUCP. Il permet également de modifier le nom UUCP avec lequel apparaitra la machine local appelante lors de l'appel au site distant. Voici un exemple fichier Permissions:
MACHINE=bureau LOGNAME=uupf MYNAME=pcpf \ READ=/var/spool/uucppublic:/tmp \ WRITE=/var/spool/uucppublic:/tmp \ SENDFILES=yes REQUEST=yes \ COMMANDS=/bin/rmail:/bin/rnewsCette configuration indique que lors du dialogue avec la machine bureau en utilisant le login uupf, on sera identifié comme pcpf (alors que le nom local est mmxpf). Les répertoire accessibles par la machine distante sont /var/spool/uucppublic (le défaut) et /tmp, et ceci en lecture et écriture. La machine distante a le droit de télécharger des fichiers sur ces répertoires ainsi que d'exécuter les commandes rmail et rnews.
uucp -r bureau!~/fichier1.tar.gz /var/spool/uucppublic
La chaîne ~/ symbolise le répertoire distant /var/spool/uucppublic normalement réservé aux transferts UUCP. L'option -r indique de placer l'ordre de transfert dans la zone de spool et non d'effectuer un appel immédiat. On peut de même commander un transfert dans l'autre sens par:
uucp -r fichier2.tar.gz bureau!/tmpNB: dans la cas de l'utilisation du shell bash sous LINUX, il est nécessaire de placer un backslash devant le ! qui est un caractère spécial.
On peut lire l'état de la file d'attente UUCP avec la commande uustat -s:
root@mmxpf # uustat -s bureau bureauN007e bureau root 11-24 23:06 Sending /home/pierre/tar_gz/fichier2.tar.gz (35999 bytes) to /tmp bureauN0081 bureau root 11-24 23:11 Requesting ~/fichier1.tar.gz to /var/spool/uucppublic
On peut annuler le transfert (supprimer la requête de la file) par la commande uustat -k à laquelle on donne l'identificateur de la requête:
uustat -k bureauN0081
Les figures ci-dessous donnent la structure globale des 2 configurations:
![]() |
fig 1. Configuration pour accès personnel |
![]() |
fig 2. Configuration pour accès professionnel |
Dans les deux cas, une configuration UUCP correctement installée sur un simple PC LINUX permettra une utilisation très confortable du courrier électronique et ce de manière transparente pour l'utilisateur. De plus, les temps d'interrogation du serveur de messagerie distant seront beaucoup plus faibles, comparés à des solutions SMTP/POP3.
Dans le cas numéro 1 (PC personnel), on devra tout d'abord indiquer au programme sendmail local que le routage par défaut des courriers se fait par une passerelle UUCP. Cette configuration se fait facilement par exemple en utilisant le programme linuxconf. Une fois cette configuration effectué, on peut tester ce routage en utilisant le mode test de sendmail (option -bt):
root@mmxpf # /usr/lib/sendmail -bt ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter <ruleset> <address> > 0,3 somebody@some.where rewrite: ruleset 0 input: somebody @ some . where rewrite: ruleset 98 input: somebody @ some . where ... rewrite: ruleset 3 returns: $# uucp-dom $@ bureau $: somebody < @ some . where > > ^Dce qui indique bien qu'un courrier extérieur sera correctement routé par la passerelle UUCP bureau. Si on utilise un outil de courrier pour envoyer un message à truc@com1.fr, la requête sera stockée dans la file UUCP, lisible par la commande uustat:
root@mmxpf # uustat -s bureau bureauC0083 bureau pierre 11-25 00:20 Executing rmail truc@com1.fr (sending 764 bytes)Du coté de la machine distante bureau, il suffira de créer un fichier de redirection .forward sur le home-directory de l'utilisateur concerné, par exemple:
pierre,pcpf!pierreCe fichier indique que le courrier sera toujours délivré sur la machine bureau mais qu'une copie sera systématiquement envoyée via UUCP à la machine pcpf correspondant à la machine personnelle de l'utilisateur. Pour améliorer encore les choses, on peut ajouter au crontab de l'utilisateur sur la machine bureau une ligne validant automatiquement la copie UUCP le vendredi soir à partir de 19h00 (début du week-end):
0 19 * * 5 cp $HOME/forward.weekend $HOME/.forwardet supprimant la redirection dans la nuit du dimanche au lundi:
0 2 * * 1 rm -f $HOME/.forward
Coté machine distante bureau, on doit s'assurer que la machine pcpf est déclarée dans le fichier Systems par une ligne:
pcpf Neverqui indique que l'on n'appelle jamais ce système mais que c'est toujours lui qui appelle.
Dans le cas d'un serveur de messagerie professionnel, la config sera similaire à quelques points près:
R$*<@truc.fr> $#uucp-dom$@truc$:$1dans le sendmail.cf Il faut noter qu'un seul compte est nécessaire sur le serveur du fournisseur d'accès Internet (le compte accès UUCP) pour gèrer tout le courrier de l'entreprise.
Coté serveur, on devra bien sûr installer un accès modem entrant par exemple en utilisant mgetty. Pour cela on pourra se reporter à l'article Installer un serveur PPP de Linux Magazine numéro 2. L'entrée dans le fichier /etc/passwd pourra être:
uutruc:IJSrjU4zXl2Ys:14:14:login UUCP truc:/var/spool/uucp:/var/lib/uucp/uucico
/var/lib/uucp/uucico -r1 -x1 -S bureauL'option -r1 indique que uucico est l'initiateur du protocole, l'option -x1 indique le niveau de trace. Dans le cas d'une config BNU sur Taylor UUCP, les traces seront sauvées sur le fichier /var/log/uucp/.Admin/audit.local. On pourra donc tracer l'appel en effectuant la commande:
tail -f /var/log/uucp/.Admin/audit.localUn première solution simple est d'effectuer des appels réguliers au serveur distant en programmant des exécutions d'uucico dans une crontab. Le petit script ci-dessous permet d'appeler le serveur tout en suivant l'évolution du protocole:
#!/bin/sh DEBUG=1 DEFAULTSITE=bureau LOGFILE=/var/log/uucp/.Admin/audit.local if [ "$1" = "" ]; then SITE=$DEFAULTSITE else SITE=$1 fi /var/lib/uucp/uucico -r1 -x$DEBUG -S $SITE & tail -f $LOGFILEce qui permet d'obtenir une sortie du genre:
uucp bureau (11/14-11:53:33,145,0) Calling system bureau (port modem) uucp bureau (11/14-11:54:04,145,0) Login successful uucp bureau (11/14-11:54:04,145,0) Handshake successful (protocol 'i' sending packet/window 1024/16 receiving 1024/16) bin bureau (11/14-11:54:04,145,0) Receiving rmail pierre (2213 bytes) bin bureau (11/14-11:54:05,145,0) Receiving rmail pierre (1993 bytes) bin bureau (11/14-11:54:05,145,0) Receiving rmail pierre (1670 bytes) bin bureau (11/14-11:54:06,145,0) Receiving rmail pierre (1670 bytes) bin bureau (11/14-11:54:06,145,0) Receiving rmail pierre (3200 bytes) bin bureau (11/14-11:54:06,145,0) Receiving rmail pierre (170668 bytes) bin bureau (11/14-11:54:50,145,0) Receiving rmail pierre (2389 bytes) bin bureau (11/14-11:54:50,145,0) Receiving rmail pierre (1789 bytes) uucp bureau (11/14-11:54:51,145,0) Protocol 'i' packets: sent 19, resent 0, received 205 uucp bureau (11/14-11:54:51,145,0) Call complete (48 seconds 185592 bytes 3866 bps)Cette méthode est utilisable mais peut être améliorée en adoptant les principes suivants:
site1 0 12 17 bureau 12 18
/usr/lib/uucp/uusched & /usr/lib/uucp/uuxqt &
1 * * * * /var/lib/uucp/uudemon.poll > /dev/null 35 * * * * /var/lib/uucp/uudemon.hour > /dev/null