A chat script automates the log in and PPP start up so all you have to do (as root or as a member of the ppp group) is issue a single command to fire up your connection.
If your ISP does NOT require the use of PAP/CHAP, these are the scripts for you!
If the ppp package installed correctly, you should have two example files.
For PPP 2.1.2 they are in /usr/sbin
and for PPP 2.2 they are in
/etc/ppp/scripts
. They are called
for PPP-2.1.2
ppp-on
ppp-off
and for PPP-2.2
ppp-off
ppp-on
ppp-on-dialer
Now, if you are using PPP 2.1.2, I strongly urge you to delete the sample files. There are potential problems with these - and don't tell me they work fine - I used them for ages too (and recommended them in the first version of this HOWTO!
For the benefit of PPP 2.1.2 users, here are BETTER template versions, taken from the PPP 2.2 distribution. I suggest you copy and use these scripts instead of the old PPP-2.1.2 scripts.
This is the first of a PAIR of scripts that actually fire up the connection.
#!/bin/sh # # Script to initiate a PPP connection. This is the first part of the # pair of scripts. This is not a secure pair of scripts as the codes # are visible with the 'ps' command. However, it is simple. # # These are the parameters. Change as needed. TELEPHONE=555-1212 # The telephone number for the connection ACCOUNT=george # The account name for logon (as in 'George Burns') PASSWORD=gracie # The password for this account (and 'Gracie Allen') LOCAL_IP=0.0.0.0 # Local IP address if known. Dynamic = 0.0.0.0 REMOTE_IP=0.0.0.0 # Remote IP address if desired. Normally 0.0.0.0 NETMASK=255.255.255.0 # The proper netmask if needed # # Export them so that they will be available to 'ppp-on-dialer' export TELEPHONE ACCOUNT PASSWORD # # This is the location of the script which dials the phone and logs # in. Please use the absolute file name as the $PATH variable is not # used on the connect option. (To do so on a 'root' account would be # a security hole so don't ask.) # DIALER_SCRIPT=/etc/ppp/ppp-on-dialer # # Initiate the connection # # exec /usr/sbin/pppd debug /dev/ttySx 38400 \ $LOCAL_IP:$REMOTE_IP \ connect $DIALER_SCRIPT
Here is the ppp-on-dialer script:-
#!/bin/sh # # This is part 2 of the ppp-on script. It will perform the connection # protocol for the desired connection. # 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
As the new scripts come in two parts, we will edit them in turn.
You will need to edit the script to reflect YOUR user name at your ISP, YOUR password at your ISP, the telephone number of your ISP.
Each of the lines like TELEPHONE=
actually set up shell variables that
contain the information to the right of the '=' (excluding the comments
of course). So edit each of these lines so it is correct for your ISP
and connection.
Also, as you are setting the IP number (if you need to) in the
/etc/ppp/options
file, DELETE the line that says
$LOCAL_IP:$REMOTE_IP \
Also, make sure that the shell variable DIALER_SCRIPT points at
the full path and name of the dialer script that you are actually going
to use. So, if you have moved this or renamed the script,
make sure you edit this line correctly in the ppp-on
script!
If you have set up your ppp-on
script correctly and your PPP server
uses username/password authentication, you should not need to edit the
ppp-on-dialer
script at all!
Although you can set up your serial port using /etc/rc.serial at boot time, I have found that it is a good idea to explicitly set up the serial port in the ppp-on script. This allows for my using the modem for other purposes (which may reset the serial settings) between times.
Immediately before the line that actually starts pppd, add the line
/bin/setserial /dev/cuaX spd_vhi
This sets up the serial port to actually set the baud rate to 115,200 baud when a speed of 38,400 baud is requested. This is fine for 28.8k (and faster) baud modems. However, many 14,400 baud modems cannot actually run their serial interface back to the computer at this speed.
Check you modem manual and if the maximum serial speed for your modem is 38,400 use the line
/bin/setserial /dev/cuaX spd_normal
Whilst the ppp-on-dialer script is fine for servers that automatically start pppd at the server end once you have logged in, some servers require that you explicitly start PPP on the server.
If you need to issue a command to start up PPP on the server, you DO need to edit the ppp-on-dialer script.
At the END of the script (after the password line) add an additional
expect send pair - this one would look for your login prompt (beware
of characters that have a special meaning in the Bourne shell - such as
$ and
Once chat has found the shell prompt, chat must issue the ppp start up command required for your ISPs PPP server.
In my case, my PPP server uses the standard Linux Bash prompt
[hartr@kepler hartr]$
and requires that I type
ppp
to start up PPP on the server.
It is a good idea to allow for a bit of error recovery here, so in my case I use
hartr--hartr ppp
This says - if we don't receive the prompt within the timeout, send a carriage return and looks for the prompt again.
Once the prompt is received, then send the string 'ppp'.
Note: don't forget to add a \ to the end of the previous line so chat still thinks the entire chat script is on one line!
Unfortunately, some servers produce a very variable set of prompts! You may need to log in several times using minicom to understand what is going on and pick the stable "expect" strings.
This is the second of the scripts that actually brings up our ppp link.
Note: a chat script is normally all on one line. the backslashes are used to allow line continuations across several physical lines (for human readability) and do not form part of the script itself.
However, it is very useful to look at it in detail so that we understand what it is actually (supposed) to be doing!
A chat script is a sequence of "
expect
string"
"
send string"
pairs. In particular, note that we ALWAYS expect something
before we send something.
If we are to send something WITHOUT receiving anything first, we
must use an empty expect string (indicated by
"
"
) and similarly for expecting something
without sending anything! Also, if a string consists of several words,
(e.g. NO CARRIER), you must quote the string so that it is seen as a
single entity by chat.
The chat line in our template is:-
exec 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
This chat script has reasonable error recovery capability. Chat has
considerably more features than demonstrated here. For more information
consult the chat manual page (man 8 chat
).
If your ISP is using PAP/CHAP, then your chat script is much simpler. All your chat script needs to do is dial the telephone, wait for a connect and then let pppd handle the logging in!
#!/bin/sh # # This is part 2 of the ppp-on script. It will perform the connection # protocol for the desired connection. # exec 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 '' \
As we have already seen, you can turn on debug information logging with the -d option to pppd. The 'debug' option is equivalent to this.
As we are establishing a new connection with a new script, leave in the debug option for now. (Warning: if your disk space is tight, logging pppd exchanges can rapidly extend your syslog file and run you into trouble - but to do this you must fail to connect and keep on trying for quite a few minutes).
Once you are happy that all is working properly, then you can remove this option.
If you have called your ppp options file anything other than
/etc/ppp/options
or /etc/ppp/options.ttySx
, specify
the file name with the -f option to pppd - e.g.
exec /usr/sbin/pppd debug -f options.myserver /dev/ttySx 38400 \