next_inactive up previous


configuration manuelle de pppd

par Jean-Michel OLTRA


Contents

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.

1 script de commande du modem

1.1 le script

C'est /etc/ppp/chatscript_lsurf

#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

1.2 les explications

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 \ensuremath{°}_de_tél_de_connexion. ATDT et le n \ensuremath{°} 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 :

chgrp oltra /etc/ppp/chatscript_lsurf

chmod 660 /etc/ppp/chatscript_lsurf

car il faut pouvoir accéder au fichier.

1.3 documentation

man chat
man pppd

2 donner les arguments à pppd et à chat

2.1 le script

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.

#! /bin/bash

# script de connexion à liberty surf

ttyS1 57600 crtscts defaultroute

connect ``/usr/sbin/chat -f /etc/ppp/chatscript_lsurf''

2.2 les explications

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).

2.3 documentation

man pppd :on peut passer tout un tas d'options à pppd, vous pouvez y aller voir et faire des ajouts au script.

3 chercher les DNS

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.

search libertysurf.fr

nameserver 194.149.160.9

nameserver 194.149.160.1

Si vous ne renseignez pas ce fichier vous serez connectés au réseau sans pouvoir vous en servir.

4 connexion et déconnexion

4.1 connexion

4.1.1 script

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.

#! /bin/bash

#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

4.1.2 les explications

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.

4.2 déconnexion

4.2.1 script

#! /bin/bash

# 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

4.2.2 explications

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.

5 automatisation

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 :

[oltra@espinasse oltra] crontab -e
Puis vous rajoutez les deux lignes suivantes :

30 7 * * * /home/oltra/bin/connect_lsurf 2>&1 | mail oltra -s pppd

35 7 * * * /home/oltra/bin/disconnect_lsurf 2>&1 |mail oltra -s pppd

Ce qui appelle le script de connexion à 7h30 et m'envoie un mail (mail) dont le sujet est pppd (option -s) avec les sorties standard et erreur standard (2>&1).

On fait la même chose pour la déconnexion programmée 5 mn après.

Et pour conclure

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.....

About this document ...

configuration manuelle de pppd

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


next_inactive up previous
oltra jean-michel 2001-06-26