On Mon, Dec 09, 2002 at 09:31:27PM +0000, François Boisson wrote: >> Si tu est en PPTP, voici comment je procède: >> Je créé ce script: >> /usr/sbin/pptp 10.0.1.138 nodetach call provider >& /dev/null >> killall -INT pptp >> sleep 3 >> rm -f /var/run/pptp/10.0.1.138 >> Et puis, je lance ce script par une entrée dans /etc/inittab. Ainsi, >> dès que la connexion est rompue, elle est relancée. > > Ca m'intéresse ton histoire, > Je fais bêtement > pptp 10.0.0.138 > J'imagine que les options qui suivent 10.0.1.138 sont passé à pppd. Oui: nodetach, ça veut dire que la commande (pppd) ne va pas forker en background, mais ne va retourner qu'après rupture de la connexion. "call provider", c'est parce que les options qui vont bien sont dans "/etc/ppp/peers/provider" chez moi. Si avant, tu faisais simplement "pptp 10.0.0.138", alors mets "pptp 10.0.0.138 nodetach" dans le script. > Donc si pppd se termine, tu tue correctement le pptp et tu as mis > une entrée respawn dans /etc/initab du type > 1:2345:respawn:/usr/local/bin/nomdetonscript Presque: La ligne exacte est: in:A:ondemand:/etc/ppp/clean_pptp Ceci me permet de ne lancer la connection qu'au moment où je veux (au hasard... après que les interfaces réseau soient "up", mais avant que les serveurs (apache, ...) ne se lancent). En fait, c'est lancé par le script /etc/ppp/ppp_on_boot, qui 1) est exécutable 2) est lancé automatiquement (si exécutable) par /etc/init.d/ppp au boot, au bon moment (j'y ai rajouté un sleep pour que mes serveurs ne se lancent qu'une fois la connexion établie). 3) Et le voici: #!/bin/sh telinit a Par contre, je ne peux pas stopper la connexion sans aller éditer /etc/inittab :-) Par contre, dans clean_pptp, le ">& /dev/null" est très important. Sans ça, au boot, pppd (ou pptp, je sais plus), veut écrire quelque chose sur le terminal _avant_ que la connexion ne soit faite, et il n'y arrive que _après_ que le dernier script de /etc/init.d/ aie fini, ce qui veut dire que mes serveurs se lançaient avant établissement de la connexion :-(. Avec ça, ça va impec. Ah oui, tiens, sur une machine OpenBSD que j'ai installée récemment, j'ai fait un peut différemment. L'avantage de cette méthode, c'est que l'on a pas un shell qui ne fait qu'attendre la fin de la connexion, et ne sert à rien d'autre. Ça consomme donc moins de ressources. À l'occasion, je vais convertir mes machines Debian à ce système aussi, je crois... Le fichier /etc/ppp/clean_pptp est tel que voici: --------------- début script -------------- #!/bin/sh # $OpenBSD: pptp_reconnect,v 1.3 2001/06/08 17:59:19 fgsch Exp $ # Modified by Lionel to be a clean _connect_ script # meant to be launched by init # # PPTP connect script # MODEMIP=10.0.1.138 PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/sbin if [ "$MODEMIP" = "" ]; then echo "You have to edit the $0 script." exit fi echo "Killing pppd." for s in INT KILL; do kill -$s `ps -ax|grep pppd|grep -v grep|awk '{print $1}'` && /bin/sleep 3; done echo "Killing pptp." for s in TERM KILL; do kill -$s `ps -ax|grep pptp|grep -v clean_pptp|grep -v grep|awk '{print $1}'` && /bin/sleep 3; done if [ -S /var/run/pptp/$MODEMIP ]; then /bin/rm -f /var/run/pptp/$MODEMIP fi echo "Establishing connection." echo "=========================================================" >> /var/log/ppp.log echo "Establishing connection at `date`." >> /var/log/ppp.log exec /usr/local/sbin/pptp $MODEMIP nodetach >> /var/log/ppp.log 2>&1 --------------- fin script -------------- La construction à base de grep et d'awk, c'est surtout parce qu'il n'y a pas de commande "killall" sous BSD, ça fait la même chose :-). Le init des BSD n'ayant pas de notion de "ondemand", j'ai utilisé cette ligne dans /etc/ttys: ttyp0 "/etc/ppp/clean_pptp" network on > J'ai bien compris (La machine en question est la passerelle de tout > un lycée et en période d'inscription je ne peux pas me permettre > d'erreurs)? Gniark, gniark, gniark. -- Lionel
Attachment:
pgpNc3b47H_ov.pgp
Description: PGP signature