Sophie

Sophie

distrib > Mandriva > 9.1 > i586 > by-pkgid > f1098342ec4a2b28475e34123ce17201 > files > 813

howto-html-it-9.1-0.5mdk.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
 <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
 <TITLE>Linux PPP HOWTO: Automatizzare la propria connessione e creazione degli script</TITLE>
 <LINK HREF="PPP-HOWTO-16.html" REL=next>
 <LINK HREF="PPP-HOWTO-14.html" REL=previous>
 <LINK HREF="PPP-HOWTO.html#toc15" REL=contents>
</HEAD>
<BODY>
<A HREF="PPP-HOWTO-16.html">Avanti</A>
<A HREF="PPP-HOWTO-14.html">Indietro</A>
<A HREF="PPP-HOWTO.html#toc15">Indice</A>
<HR>
<H2><A NAME="automate"></A> <A NAME="s15">15. Automatizzare la propria connessione e creazione degli script</A></H2>

<P>Sebbene si possa continuare a connettersi a mano come appena mostrato,
&egrave; molto pi&ugrave; elegante creare alcuni script che lo facciano
automaticamente per noi.
<P>
<P>Un insieme di script che automatizzano il login e l'avvio del PPP
cosicch&eacute; tutto quello che si deve fare (come root o come membro del
gruppo PPP) &egrave; dare un unico comando che avvii la connessione.
<P>
<H2><A NAME="ss15.1">15.1 Script di connessione per l'autentificazione con Nome utente/Password</A>
</H2>

<P>Se il proprio ISP NON richiede l'uso di PAP/CHAP, questi sono gli
script per te!
<P>
<P>Se il pacchetto ppp &egrave; installato correttamente, si dovrebbero avere
due file di esempio. Per PPP 2.1.2 sono in <CODE>/usr/sbin</CODE> e per
PPP 2.2 sono in <CODE>/etc/ppp/scripts</CODE>. Si chiamano
<P>
<P>per PPP-2.1.2
<P>
<BLOCKQUOTE><CODE>
<PRE>
ppp-on
ppp-off
</PRE>
</CODE></BLOCKQUOTE>
<P>
<P>e per PPP-2.2
<P>
<BLOCKQUOTE><CODE>
<PRE>
ppp-off
ppp-on
ppp-on-dialer
</PRE>
</CODE></BLOCKQUOTE>
<P>
<P>Ora, se si sta usando PPP 2.1.2, suggerisco caldamente di cancellare i
file d'esempio. Ci sono potenziali problemi con questi. E non
venitemi a dire che funzionano bene, li ho usati per anni anch'io (e
li raccomandavo nella prima versione di questo HOWTO)!
<P>
<P>A beneficio degli utilizzatori di PPP 2.1.2, qui sono riportate delle
versioni d'esempio MIGLIORI prese dalla distribuzione di PPP
2.2. Suggerisco di copiarsi ed usare questi script <B>invece</B> dei
vecchi script di PPP 2.1.2.
<P>
<H2><A NAME="ss15.2">15.2 Lo script ppp-on</A>
</H2>

<P>Questo &egrave; il primo di una COPPIA di script che lanciano la
connessione.
<P>
<HR>
<PRE>
#!/bin/sh
#
# Script per inizializzare una connessione PPP. Questo &egrave; il primo di
# una coppia di script. Questa coppia di script non &egrave; sicura in quanto
# il codice &egrave; visibile usando il comando `ps'. Comunque, &egrave; semplice.
#
# Questi sono i parametri. Li si modifichi a quel che necessita.
TELEPHONE=555-1212      # Il numero telefonico per la connessione
ACCOUNT=george          # Il nome di account per il login (come in
                        # 'George Burns')
PASSWORD=gracie         # La password per questo account (e 'Gracie Allen')
LOCAL_IP=0.0.0.0        # Indirizzo IP locale, se noto. Dinamico = 0.0.0.0
REMOTE_IP=0.0.0.0       # Indirizzo IP remoto, se desiderato.
                        # Dinamico = 0.0.0.0
NETMASK=255.255.255.0   # La netmask appropriata, se necessaria
#
# Gli esporta rendendoli globali cos&igrave; saranno disponibili anche a
# 'ppp-on-dialer'
export TELEPHONE ACCOUNT PASSWORD
#
# Questa &egrave; la posizione dello script che compone il numero e fa il
# login. Si invita ad usare il nome file assoluto in quanto la
# variabile $PATH non &egrave; usata nelle opzioni di connessione (e farlo in
# un account come 'root' sarebbe un buco di sicurezza, quindi non lo
# si richieda).
#
DIALER_SCRIPT=/etc/ppp/ppp-on-dialer
#
# Inizializza la connessione
#
#
exec /usr/sbin/pppd debug /dev/ttySx 38400 \
        $LOCAL_IP:$REMOTE_IP \
        connect $DIALER_SCRIPT
</PRE>
<HR>
<P>
<P>Ecco qui lo script ppp-on-dialer:
<P>
<HR>
<PRE>
#!/bin/sh
#
# Questa &egrave; la seconda parte dello script ppp-on. Effettua il
# protocollo di connessione per la connessione desiderata.
#
/usr/sbin/chat -v                                                 \
        TIMEOUT         3                               \
        ABORT           '\nBUSY\r'                      \
        ABORT           '\nNO ANSWER\r'                 \
        ABORT           '\nRINGING\r\n\r\nRINGING\r'    \
        ''              \rAT                            \
        'OK-+++\c-OK'   ATH0                            \
        TIMEOUT         30                              \
        OK              ATDT$TELEPHONE                  \
        CONNECT         ''                              \
        ogin:--ogin:    $ACCOUNT                        \
        assword:        $PASSWORD
</PRE>
<HR>
<P>
<P>Per PPP-2.2, lo script <CODE>ppp-off</CODE> &egrave; qualcosa di simile a:
<P>
<HR>
<PRE>
#!/bin/sh
######################################################################
#
# Determina il dispositivo da chiudere
#
if [ "$1" = "" ]; then
        DEVICE=ppp0
else
        DEVICE=$1
fi

######################################################################
#
# Se esiste il pid file ppp0 allora il programma &egrave; in esecuzione. Lo
# ferma.
if [ -r /var/run/$DEVICE.pid ]; then
        kill -INT `cat /var/run/$DEVICE.pid`
#
# Se il kill non funziona allora non c'&egrave; alcun processo in esecuzione
# con questo pid. Significa inoltre che il file di lock &egrave; stato
# lasciato l&igrave;. Allo stesso tempo si pu&ograve; quindi voler cancellare il
# file di lock.
        if [ ! "$?" = "0" ]; then
                rm -f /var/run/$DEVICE.pid
                echo "ERRORE: Rimozione del vecchio file pid"
                exit 1
        fi
#
# Successo. Si lascia che pppd pulisca da solo la sua roba vecchia.
        echo "Connessione PPP a $DEVICE terminata."
        exit 0
fi
#
# Il processo ppp non &egrave; in esecuzione per ppp0
echo "ERRORE: connessione PPP non attiva su $DEVICE"
exit 1
</PRE>
<HR>
<P>
<H2><A NAME="ss15.3">15.3 Modificare gli script forniti per l'avvio del PPP</A>
</H2>

<P>Poich&eacute; gli script sono due, andremo a modificarne uno alla volta.
<P>
<H3>Lo script ppp-on</H3>

<P>Si deve modificare questo script per riflettere il PROPRIO nome utente
nell'ISP, la PROPRIA password per l'ISP, e il numero di telefono di
quest'ultimo.
<P>
<P>Ognuna delle righe simili a <CODE>TELEPHONE=</CODE> in realt&agrave; impostano una
variabile shell che contiene l'informazione a destra di '=' (ad
esclusione dei commenti naturalmente). Quindi si modifichi ognuna di
queste righe in modo che vadano bene per la propria connessione e il
proprio ISP.
<P>
<P>Inoltre, se si imposta il numero IP (se ce n'&egrave; bisogno), nel file
<CODE>/etc/ppp/options</CODE> si CANCELLI la riga che dice
<P>
<HR>
<PRE>
$LOCAL_IP:$REMOTE_IP \
</PRE>
<HR>
<P>
<P>Inoltre, ci si assicuri che la variabile shell DIALER_SCRIPT punti al
percorso completo e al nome dello script che compone il numero che si
intende usare. Quindi, se si &egrave; spostato o rinominato lo script, ci si
assicuri di modificare in modo adeguato lo script <CODE>ppp-on</CODE>.
<P>
<H3>Lo script ppp-on-dialer</H3>

<P>Questo &egrave; il secondo degli script che mettono in funzione la propria
connessione PPP.
<P>
<P>Nota: uno script di conversazione (chat) &egrave; solitamente tutto in una
riga. I backslash ('\') sono usati per permettere la continuazione di
una riga in pi&ugrave; righe fisiche (per comodit&agrave; di lettura) e non fanno
parte dello script stesso.
<P>
<P>Comunque, &egrave; molto utile analizzarlo in dettaglio cos&igrave; da capire cosa
realmente fa (o dovrebbe fare)!
<P>
<H2><A NAME="ss15.4">15.4 Il significato di uno script di conversazione (chat)...</A>
</H2>

<P>Un script di conversazione &egrave; una sequenza di coppie
<CODE>&quot;</CODE>stringa attesa<CODE>&quot;</CODE> <CODE>&quot;</CODE>stringa
inviata<CODE>&quot;</CODE>. In particolare si noti che ci si aspetta
<B>SEMPRE qualcosa</B> prima di inviare qualcos'altro.
<P>
<P>Se si invia qualcosa <B>SENZA</B> prima ricevere niente, si deve usare
una stringa attesa vuota (indicata da
<CODE>&quot;</CODE><CODE>&quot;</CODE>) e similmente per aspettare qualcosa
senza mandare niente! Inoltre, se una stringa consiste di diverse
parole (p.es. NO CARRIER), bisogna racchiuderla tra apici
in modo che chat la veda come una singola entit&agrave;.
<P>
<P>La riga di conversazione nel nostro esempio &egrave;:
<P>
<HR>
<PRE>
exec /usr/sbin/chat -v
</PRE>
<HR>
<P>Invocando chat, il -v dice a chat di copiare TUTTO il suo I/O nei log
di sistema (solitamente /var/log/messages). Una volta che si &egrave;
contenti di come funziona lo script, si modifichi questa riga per
rimuovere il -v per preservare i log di sistema da confusione non
necessaria.
<P>
<HR>
<PRE>
TIMEOUT         3
</PRE>
<HR>

Questo imposta il timeout per la ricezione di un input atteso a tre
secondi. Ci pu&ograve; essere bisogno di incrementarlo diciamo a 5 o 10
secondi se si usa un modem veramente lento!
<P>
<HR>
<PRE>
ABORT           '\nBUSY\r'
</PRE>
<HR>
<P>Se chat riceve la stringa BUSY, termina l'operazione.
<P>
<HR>
<PRE>
ABORT           '\nNO ANSWER\r'
</PRE>
<HR>
<P>Se chat riceve la stringa NO ANSWER, termina l'operazione.
<P>
<HR>
<PRE>
ABORT           '\nRINGING\r\n\r\nRINGING\r'
</PRE>
<HR>
<P>Se chat riceve (ripetutamente) la stringa RINGING, termina
l'operazione. Significa che qualcuno vi sta chiamando al telefono!
<P>
<HR>
<PRE>
&quot;              \rAT
</PRE>
<HR>
<P>Attende che il modem non ritorni niente prima di inviare la stringa AT.
<P>
<HR>
<PRE>
OK-+++\c-OK   ATH0
</PRE>
<HR>
<P>Questa &egrave; un po' pi&ugrave; complicata in quanto sfrutta qualcuna delle capacit&agrave;
di recupero dagli errori di chat.
<P>
<P>Quel che dice &egrave;... Attendi OK, se NON &egrave; ricevuto (perch&eacute; in modem non &egrave;
in modo comandi) allora invia +++ (la stringa predefinita compatibile
Hayes che riporta il modem in modo comandi) e attendi OK. Poi invia
ATH0 (la stringa di ``riattacco'' del modem). Ci&ograve; permette al nostro
script di far fronte alle situazioni nella quali il proprio modem &egrave;
``bloccato in linea''!
<P>
<HR>
<PRE>
TIMEOUT         30
</PRE>
<HR>
<P>Imposta il timeout a 30 secondi per il resto dello script. Se si ha
esperienza di problemi con lo script di chat che termina a causa di
timeout, lo si incrementi a 45 secondi o pi&ugrave;.
<P>
<HR>
<PRE>
OK              ATDT$TELEPHONE
</PRE>
<HR>
<P>Attende OK (la risposta del modem al comando ATH0) e compone il numero
che si vuole chiamare.
<P>
<HR>
<PRE>
CONNECT         ''
</PRE>
<HR>
<P>Attende CONNECT (che il modem invia quando il modem remoto risponde) e
non invia niente in risposta.
<P>
<HR>
<PRE>
ogin:--ogin:    $ACCOUNT
</PRE>
<HR>
<P>Ancora, abbiamo anche qui un po' di recupero dagli errori. Aspetta il
prompt per il login (...ogin:) ma se non lo riceve entro il timeout,
invia un return e poi attende ancora il prompt per il login. Quando ha
ricevuto il prompt, invia il nome utente (salvato nella variabile
$ACCOUNT).
<P>
<HR>
<PRE>
assword:        $PASSWORD
</PRE>
<HR>
<P>Attende il prompt per la password e invia la password (ancora salvata
in una variabile shell).
<P>
<P>Questo script ha delle ragionevoli capacit&agrave; per il recupero dagli
errori. chat ha considerevolmente molte pi&ugrave; possibilit&agrave; di quelle qui
dimostrate. Per maggiori informazioni si consulti la pagina di
manuale di chat (<CODE>man 8 chat</CODE>).
<P>
<H3>L'avvio di PPP dal lato server</H3>

<P>Sebbene lo script ppp-on-dialer vada bene per server che avviano
automaticamente il pppd da loro lato della connessione una volta
effettuato il login, alcuni server richiedono che si avvii
esplicitamente il PPP nel server.
<P>
<P>Se si deve dare un comando per avviare il PPP sul server, allora si
DEVE modificare lo script ppp-on-dialer.
<P>
<P>Alla FINE dello script (dopo la riga della password) si aggiunga
un'altra coppia <B>attesa inviata</B> - questa cercher&agrave; il proprio
prompt della shell (si faccia attenzione ai caratteri che hanno un
significato particolare nelle Bourne shell, come $ e [ o ]
(parentesi quadre aperte e chiuse).
<P>
<P>Una volta che chat ha trovato il prompt della shell, deve dare il
comando di avvio del PPP richiesto dal proprio ISP.
<P>
<P>Nel mio caso, il mio server PPP usa il prompt della Linux Bash
predefinito
<HR>
<PRE>
[hartr@kepler hartr]$
</PRE>
<HR>
<P>
<P>e richiede che io digiti
<P>
<HR>
<PRE>
ppp
</PRE>
<HR>
<P>
<P>per avviare il PPP sul server.
<P>
<P>&Egrave; una buona idea permettere un po' di recupero dagli errori anche qui,
quindi nel mio caso uso
<HR>
<PRE>
        hartr--hartr    ppp
</PRE>
<HR>
<P>
<P>Questo dice che se non si riceve il prompt entro il timeout, di
inviare un ritorno carrello (carriage return) e di cercare un'altra
volta il prompt.
<P>
<P>Una volta ricevuto il prompt, allora invia la stringa <CODE>ppp</CODE>.
<P>
<P>Nota: non si dimentichi di aggiungere un \ alla fine della riga
precedente cosicch&eacute; chat pensi ancora che l'intero script di
conversazione sia in una riga!
<P>
<P>Sfortunatamente, alcuni server producono un insieme di prompt molto
variabili. Pu&ograve; essere necessario effettuare pi&ugrave; volte il login usando
minicom per capire l'andamento e scegliere una stringa
&quot;attesa&quot; stabile.
<P>
<H2><A NAME="ss15.5">15.5 Uno script di conversazione per le connessioni autentificate con PAP/CHAP</A>
</H2>

<P>Se il proprio ISP usa PAP/CHAP, allora lo script di conversazione &egrave;
molto pi&ugrave; semplice. Tutto ci&ograve; che lo script deve fare &egrave; di comporre il
numero telefonico, attendere la connessione e poi lasciare che pppd
gestisca il login!
<P>
<HR>
<PRE>
#!/bin/sh
#
# Questa &egrave; la parte 2 dello script ppp-on. Effettuer&agrave; il protocollo di
# connessione per la connessione desiderata.
#
exec /usr/sbin/chat -v                                  \
        TIMEOUT         3                               \
        ABORT           '\nBUSY\r'                      \
        ABORT           '\nNO ANSWER\r'                 \
        ABORT           '\nRINGING\r\n\r\nRINGING\r'    \
        ''              \rAT                            \
        'OK-+++\c-OK'   ATH0                            \
        TIMEOUT         30                              \
        OK              ATDT$TELEPHONE                  \
        CONNECT         ''                              \
</PRE>
<HR>
<P>
<P>
<P>
<H2><A NAME="ss15.6">15.6 Le opzioni "<CODE>debug</CODE>" e "<CODE>file file_opzioni</CODE>" di pppd</A>
</H2>

<P>Come si &egrave; gi&agrave; visto, si pu&ograve; abilitare la registrazione delle
informazioni di debug usando l'opzione -d di pppd. L'opzione 'debug' &egrave;
equivalente.
<P>
<P>Poich&eacute; stiamo stabilendo una connessione con un nuovo script, per il
momento si lasci l'opzione per il debug (Attenzione: se lo spazio del
disco &egrave; stringente, la registrazione degli scambi pppd pu&ograve; far
aumentare rapidamente la dimensione del file syslog, causando
problemi - questo succede solo nel caso in cui si fallisce la
connessione e si continua a provare per qualche minuto).
<P>
<P>Una volta contenti di come tutto funziona, si pu&ograve; rimuovere
questa opzione.
<P>
<P>Se si &egrave; chiamato il file delle opzioni di ppp con qualcosa di diverso
da <CODE>/etc/ppp/options</CODE> o <CODE>/etc/ppp/options.ttySx</CODE>, si
specifichi il nome del file con l'opzione <CODE>file</CODE> di pppd - p.es.
<P>
<HR>
<PRE>
exec /usr/sbin/pppd debug file options.myserver /dev/ttyS0 38400 \
</PRE>
<HR>
<P>
<HR>
<A HREF="PPP-HOWTO-16.html">Avanti</A>
<A HREF="PPP-HOWTO-14.html">Indietro</A>
<A HREF="PPP-HOWTO.html#toc15">Indice</A>
</BODY>
</HTML>