par Jean-Michel OLTRA
L'objectif de ce document est de mettre en place une connexion manuelle à pppd afin de pouvoir lancer pppd automatiquement par la crontab. Le but en est l'envoi et la récupértion automatique des courriels. Nous allons voir chaque script les uns après les autres. C'est un exemple mono-compte, de toutes façons il m'est plus compliqué de configurer postfix pour modifier à la demande mon relayhost pour les courriels. Bien évidemment si vous n'avez pas de système de messagerie, ni de système de récupération des courriels tout ceci ne vous sert pas à grand chose.
Personnellement je suis sur une Mandrake 7.1, avec Postfix, procmail, fetchmail et pine comme MUA.
Je ne suis pas très imaginatif alors j'ai donné dans le présent document les noms de fichiers que j'ai véritablement attribués, ainsi que certains de mes paramètres de connexion (pas les mots de passe quand même), sans parler de mes messages niais...Faites à votre guise !
Le débutant trouvera quand même un intérêt à la lecture des scripts bash de connexion (ça m'a beaucoup appris de les mettre au point), ainsi quà l'utilisation de la crontab.
C'est /etc/ppp/chatscript_lsurf
#interrogation du modem et connexion à Liberty Surf
ABORT BUSY
ABORT 'ERROR'
ABORT 'NO CARRIER'
ABORT 'NO DIALTONE'
ABORT 'Invalid login'
'' ATZ
OK ATM1l1
OK ATDT0860165555
CONNECT ''
TIMEOUT 5
ogin:-BREAK-ogin: mon_login
word: mon_mot_de_passe
Le programme 'chat' va se servir de ce script pour interroger le modem et appeler la connexion. Vous trouverez dans la fenêtre kppp un onglet 'commandes du modem' qui vous donnera quelques renseignements sur les commandes propres à votre modem.
Les premières lignes commençant par 'ABORT' donnent la réponse du modem en cas de problème à la connexion. Votre modem n'utilise peut-être pas toutes ces chaînes.
Les lignes suivantes sont construites par paire d'éléments (chaîne expect-send) : le premier constitue la réponse du modem (ce que l'on attend de lui), le second ce que l'on renvoie (ce que lui attend).
Au début on n'attend rien du modem ('' c'est la chaîne vide) et on lui envoie
ATZ qui est la chaîne d'initialisation. Il doit répondre OK et on lui renvoie
ATM1L1 qui règle le niveau sonore. Ca va lui plaire et il répond OK, par conséquent
on lui envoie dans la foulée ATDTn
_de_tél_de_connexion. ATDT
et le n
sont collés, j'ai mis le mien dans l'exemple. Et là il
doit composer le numéro de téléphone.
Si tout va bien le modem répond CONNECT et on ne lui répond rien ce n'est pas la peine de s'égosiller...
Puis on laisse le modem souffler un peu et on indique à chat qu'il faut attendre la réponse du modem pendant le temps indiqué : TIMEOUT 5
Les deux dernières lignes constituent le processus d'authentification : le modem attend 'login' mais il se peut que le traffic sur le réseau perturbe la réception. On lui demande donc d'attendre 'ogin' ce qui permet au 'l' de s'égarer dans les méandres du net...J'ai du rajouter la séquence BREAK suivie d'une nouvelle séquence d'attente car je n'arrivais pas à bien envoyer le login. Evidemment si le FAI demande le login, on le lui envoie, le contraire serait peu civil, pour nous récompenser de notre persévérance il nous demande le mot de passe (password que l'on abrège en 'word' pour les mêmes raisons que précedemment) et on le lui donne.
J'ai fait un :
chmod 660 /etc/ppp/chatscript_lsurf
man chat
man pppd
C'est le rôle du fichier /etc/ppp/peers/connexion_lsurf.
On est obligé de le mettre dans ce répertoire là (peers). Si il n'existe pas, créez le, car pppd le cherche dans ce répertoire précis avec l'option 'call' qu'on va lui donner.
# script de connexion à liberty surf
ttyS1 57600 crtscts defaultroute
connect ``/usr/sbin/chat -f /etc/ppp/chatscript_lsurf''
On peut mettre dans ce répertoire (peers) des options d'utilisateur. Il s'agit là de passer des options à pppd.
La première ligne du script indique le périphérique de connexion (/dev/ttyS1 chez moi), la vitesse de connexion, l'activation du contrôle de flux (crtscts), la route par défaut des paquets (ppp).
La seconde demande l'utilisation du programme chat, tout en indiquant à chat d'aller chercher ses options dans le fichier /etc/ppp/chatscript_lsurf.
GID et permissions comme précédemment, pour les mêmes raisons (quoique là il n'y ait pas de donnée sensible dans le fichier).
man pppd :on peut passer tout un tas d'options à pppd, vous pouvez y aller voir et faire des ajouts au script.
Il s'agit de /etc/resolv.conf
Prenez modèle sur ma configuration pour rajouter au début du fichier les lignes correspondant à votre FAI.
nameserver 194.149.160.9
nameserver 194.149.160.1
Avec mon imagination débordante je l'ai appelé connect_lsurf...et je l'ai mis dans /bin. Ledit répertoire est dans mon path.
#script de connexion à libertysurf
pid=`/bin/ps -e | grep '[p]ppd' | awk '/[0-9]*/ {print $1}'`
if [ ``${pid}'' = ``'' ]; then \
/usr/bin/pppd call connexion_lsurf
sleep 90
mess=`ls /var/spool/postfix/deferred/`
if [ ``${mess}'' != ``'' ]; then \
echo ``il y a du courriel''
/usr/sbin/sendmail -q
sleep 15
else
echo ``pas de message en attente''
fi
echo ``on lance fetchmail''
/usr/bin/fetchmail
pid=`/bin/ps -e | grep '[p]ppd' | awk '/[0-9]*/ {print $1}'`
if [ ``${pid}'' = ``'' ]; then \
echo ``la connexion a avorté, voir les log''
fi
else
echo ``déjà connecté''
exit 1
fi
Tout d'abord : j'utilise pour encadrer les commandes (ligne 3) le guillemet oblique (altgr-7) qui n'apparaît pas dans la typographie de lyx.
On va regarder si il existe déjà un pid pour pppd (ce qui voudrait dire que l'on est déjà connecté). Si il n'y en a pas on lance la connexion avec la chaîne de scripts précédemment décrite.
J'ai introduit la commande 'sleep'. En effet sans ce temps d'attente dans l'exécution du script sendmail tente d'envoyer les messages alors que la connexion n'est pas encore valide et fetchmail va chercher ses courriels dans le vide. 90 secondes c'est peut-être un peu élevé, mais 45 ce n'est pas assez.
Puis je regarde (en listant avec ls) si j'ai des messages (des fichiers) dans la file d'attente de postfix. En fonction du résultat, on lance sendmail ou pas, mais de toutes façons on va récupérer le courrier avec fetchmail.
De la même manière que précédemment on reteste l'existence d'un pid pour pppd. En effet il m'arrive d'avoir des problèmes à me connecter avec Liberty Surf. Si effectivemment le pid n'existe pas, c'est que la connexion s'est mal passée, d'où le message d'avertissement.
La fin du script concerne l'option 'else' de la construction 'if'. Si il existait un pid, alors c'est qu'on est déjà connecté. On envoie un message et on sort avec exit.
# script de déconnexion à libertysurf
#teste l'existence de pppd
pid_p=`/bin/ps -e|grep 'pppd'|awk '/[0-9]*/ {print $1}'
if [ ``${pid_p}'' != ``'' ]; then \
#on vérifie qu'une session n'a pas été lancée
#par l'utilisateur avant cron
hst=`ps -aux| awk -F `` `` '/[p]ppd/ {print $9}'`
st=`date -d ``${hst}'' '+%s'`
now=`date '+%s'`
let tu=$now-$st
if [ $tu -gt 305 ]; then \
echo ``une session est déjà lancée''
exit 1
fi
echo ``on détruit pppd''
kill `cat /var/run/ppp0.pid`
else
echo ``pppd n'est pas actif, connexion coupée ou avortée''
fi
#teste fetchmail
pid_f=`/bin/ps -e|grep 'fetchmail'|awk '/[0-9]*/ {print $1}'`
if [ ``${pid_f}'' != ``'' ]; then \
echo ``on quitte fetchmail''
/usr/bin/fetchmail -quit
else
echo ``fetchmail n'a pas été lancé''
fi
#teste le courriel restant
mess=`ls /var/spool/postfix/deferred`
if [ ``${mess}'' != ``'' ]; then \
echo ``il y a toujours du courriel, souci de connexion ou avec postfix''
fi
C'est un peu le même principe que précédemment.
On regarde si il y a un pid pour pppd. Si oui on regarde quand pppd a été lancé. Il se peut en effet qu'un utilisateur lance une connexion avant l'entrée en action de cron. Il ne s'agit pas de couper la session ! En comparant les 'dates' de lancement (hst) et l'heure actuelle (now) on obtient un temps d'utilisation (tu), que l'on compare à 305. Car j'ai fixé la durée de connexion automatique à 5 mn (300 s). Evidemment si une session est lancée on ne la coupe pas et on sort. En revanche si tout s'est passé comme prévu on détruit pppd dont le pid est dans /var/run.
Puis on regarde si tout va bien du côté de fetchmail : si oui, on arrête le démon, si non on édite un petit message.
Encore une fois on va tester la file d'attente du courriel : si il y a eu un problème dans l'envoi on génère un message.
C'est le rôle de cron et on va lui dire quoi et quand faire avec la crontab. Commençons par éditer notre crontab utilisateur :
35 7 * * * /home/oltra/bin/disconnect_lsurf 2>&1 |mail oltra -s pppd
On fait la même chose pour la déconnexion programmée 5 mn après.
Cette petite manip m'est utile pour être sur que mon courrier parte au moins une fois par jour, même si je ne vais pas sur le net. De la même manière je récupère mes courriels à la même heure. Comme je suis paresseux je n'ai plus à cliquer sur l'icône de kppp dans mon WindowMaker à moi !
Un autre intérêt, ainsi que je l'ai annoncé plus haut, réside dans les scripts proprements dits et dans l'utilisation de la crontab avec une sortie par courrier interne : on utilise souvent les tests avec if, awk permet de récupérer des valeurs de pid et de date, la fonction 'date' permet de faire un petit calcul, on utilise kill en commande composée avec cat...
Il devrait être très possible de faire plus compact : un seul script en passant pour argument 'start' ou 'stop'. Mais comme j'ai écrit ça par bribes je l'ai fait en deux fois. A vos claviers donc, pour une amélioration.
J'espère que vous vous en êtes rendu compte :il va falloir adapter certaines parties du script à vos besoins et paramètres. A 7h30 votre machine n'est peut-être pas allumée.....
This document was generated using the LaTeX2HTML translator Version 99.2beta6 (1.42)
Copyright © 1993, 1994, 1995, 1996,
Nikos Drakos,
Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999,
Ross Moore,
Mathematics Department, Macquarie University, Sydney.
The command line arguments were:
latex2html -no_subdir -split 0 -show_section_numbers /home/oltra/documentation/docLyx/pppd_manuel.tex
The translation was initiated by oltra jean-michel on 2001-06-26