1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265
|
GETTY_PS 2.0.7d for Linux 1.0 and higher
----------------------------------------
OVERVIEW
This is my third major release of getty_ps for Linux. It is intended
for Linux kernels at version 1.0 or higher (although it should function
correctly on 0.99.15 kernels as well).
There are many modifications to the source. Some changes in the
serial drivers prompted this release. vhangup() is handled correctly
now. Also, thanks to Ted's new serial drivers, monitoring for other
processes that have possibly messed up the line is much easier now.
The following bugs have been fixed:
* SCHED is cleaned up and now handles timezones and
daylight savings time correctly
* utmp logging should work correctly now, regardless of
which init program is being used
* RINGBACK has slightly more sane default parameters
The following features have been added:
* error and debug logging are handled with syslog by
default (you can still log to a file if you must)
* users of ifmail (fidonet) should be able to run ifmail
without patching the getty source
* debugging and error output is more verbose and easier
to understand
This release is intended as a maintenance release only. The next
version of this package will be quite a bit different in most
aspects. There are some useful features coming up (such as fax-
receive and call-back).
If you have any problems setting up the package, questions about mod-
ifications, or suggestions for additional features, feel free to mail
me. I am more than happy to help out. When you mail me with problem
reports, please be sure to include full debugging output from getty
that illustrates the problem; I am pretty much helpless without it.
As always, I would love to hear any bug reports.
Kris Gleason
gleasokr@boulder.colorado.edu
CONTENTS
1. Brief explination of serial drivers under Linux (0.99.15 and up)
2. Compiling and installing the programs
3. Setting up the configuration files
4. Troubleshooting
5. Credits, Thanks, Etc...
1. SERIAL DRIVERS
The serial drivers have changed again as of 0.99.15. If you are
not too interested in knowing how the serial ports work, you can
probably skim over this section.
The basic idea behind Linux serial drivers is that callin and
callout devices should not try to use the same line at the same
time. In the past, this was accomplished by juggling lockfiles.
The new scheme takes care of the problem in the kernel. Instead
of one modem device, there are now two: a callin device, named
/dev/ttyS# (where # is the port number), and a callout device,
named /dev/cua# (again, # = port number). The callin devices are
used by programs like getty; the callout devices are used by
programs like Seyon and Kermit. If you don't have the callout
devices in /dev, you create them with the mknod command. They
are character devices, major number 5, minor number same as the
corresponding callin device. Consult the Linux Device List for
more information about creating the /dev entries.
So how does it work? Simple...
Suppose that kermit wants to open /dev/cua1 for a callout session.
The kernel allows the line to be open if and only if no other
program currently has the corresponding /dev/ttyS1 line open; if
it does, the error EBUSY is returned in errno.
The /dev/ttyS1 line is a bit more complicated. By default, the device
'blocks' on open. This means that the program will be stopped until
the device is clear to open. For the device to be clear, two things
must be true: no process can be using the corresponding /dev/cua1
line, and the carrier detect line of the serial port must be high.
While the device is blocking, it is not busy, so callout devices can
use the line. In other words, if getty is running on /dev/ttyS1, as
long as no incoming calls open the line (causing the carrier to go
high), other programs are free to use the line. Blocking can be dis-
abled by setting the O_NDELAY flag to the open system call. In this
case, carrier detect is not needed to open the line; however, if
/dev/ttyS1 is busy, EBUSY is still returned in errno and the open fails.
Finally, a blocking open will return EAGAIN in errno if another process
closes the corresponding callout device. This allows getty to easily
monitor the serial line, and reinitialize if another program might
have changed serial port parameters (or modem parameters).
2. COMPILING AND INSTALLING THE PROGRAMS
Two binaries are the product of this package: getty and uugetty.
The only difference between getty and uugetty is that uugetty checks
and creates lockfiles. Uugetty should be used on any bidirectional
line (modems, for example). Getty should be used on unidirectional
lines (virtual consoles, dumb terminals).
Everything should be all set to compile on any 'normal' Linux box
(whatever that is). Just untar the sources (which I assume you've
done if you're reading this), edit the Makefile to reflect your
local configuration, favorite linking flags, etc...
Also, edit the file tune.h, and change this to your liking. Most
everything is compiled in by default, so you probably don't need
to tinker with this too much. Do a make depend; make all to build
the programs. I have also included binaries of getty and uugetty;
these files were compiled with gcc 2.5.8, and linked with
libc.so.4.5.21. If your library is older, you will have to do the
compile yourself (or grab the new library).
After the sources are compiled, MAKE A BACKUP COPY OF YOUR EXISTING
WORKING GETTY PROGRAM! I cannot stress this enough. There is a good
chance that you will not have things configured correctly the first
time around, and will not be able to log into your machine. This is
also probably a good time to get one of those bootable rootdisks. In
any case, be sure you can boot your system in single user mode before
you install anything.
I like my getty binaries in /etc. If you want yours in /bin or /sbin,
edit the Makefile. Make install to copy the binaries into the correct
directories. By default, your old getty and uugetty programs are saved
under getty- and uugetty-. After everything is running smoothly, you
can remove these backup files.
3. SETING UP CONFIGURATION FILES
After you install the binaries AND BEFORE YOU LOGOUT/SHUTDOWN you must
edit the file /etc/inittab. The argument format for getty_ps is:
getty tty speed [terminal-type]
uugetty tty speed [terminal-type]
'Tty' is the line to run on (without the /dev). Speed is the line speed
as defined in /etc/gettydefs. This argument must match the first field
of one of the lines in /etc/gettydefs (see gettydefs(4) man page). The
optional terminal-type is the expected type of terminal to be found at the
other end. I set this to console for vt's and vt100 for serial lines.
Here is the relevant portion of my /etc/inittab file:
1:123:respawn:/etc/getty tty1 VC console
...
s2:23:respawn:/etc/uugetty ttys2 2400 vt100
Be sure the format of the inittab entries you create are consistent
with the version of init you are using. This example works with a
SYS-V compatible init program. If you are using simpleinit, the
format is different. You will want to change one of the lines to
use your OLD WORKING getty (named getty- if you used make install)
until everything is stable.
Next, you want to create the configuration files. The file
/etc/gettydefs must exist for proper operation. See the man page
for gettydefs(5) for the format of this file. There is an example
under the examples directory that you can use to get started.
You will also want to set up /etc/syslog.conf to properly log
getty error and debug output. By default, getty logs to facility
LOG_AUTH. Errors are sent with priority LOG_ERR, and debugging
output is sent with priority LOG_DEBUG. If you don't like syslog,
make the proper adjustments to tune.h. Here are the relevant lines
from my /etc/syslog.conf:
auth.warning; /usr/adm/auth.log
auth.debug; /usr/adm/getty.debug.log
Finally, you want to create configuration files for the individual
lines. These are kept in /etc/default. If you are running getty on
tty2, the configuration file is /etc/default/getty.tty2; for uugetty
on ttyS0, /etc/default/uugetty.ttyS0. Also, if you want the same file
for all instances of getty or uugetty, you can make the file
/etc/default/getty or /etc/default/uugetty. Example configuration
files are under the examples directory.
See the getty(1) manual page for more information on this file. These
configuration files are optional, so your system won't crash if you
don't have them, and no configuration files are needed to run getty
on a virtual console or dumb terminal (though you can still have them
if you want). The main purpose of the configuration files is to
configure your modem correctly.
If you think you have everything right, reboot your system (you do have
a _working_ bootable floppy, right? I thought so). If you can log into
your system on the consoles you set to use the new getty, everything is
working fine (at least on the consoles).
Next, after you have edited the configuration file for your modem's tty
line, go over to a friend's house and try to call up. If you have a
14400 baud Hayes modem, the files I have included should drop right in
and work; otherwise they might need some editing.
4. TROUBLESHOOTING
So, what could possibly go wrong?
In my experience, the major source of confusion with getty_ps has
been setting up the chat sequences correctly. Failing chat
sequences will cause init to produce errors like 'respawning too
fast'.
If your modem is not responding as expected to the INIT/OFF/CONNECT
chat sequences, getty will be continuously respawning. Check your
log files; if you have have lots of lines that say INIT sequence
failed, this is the problem. Check your /etc/default/* files. You
can turn on debugging of the init sequence by adding the following line
to your defaults file:
DEBUG=010
or, alternatly, add the -D010 flag to the entry in /etc/inittab.
This will log some helpful information to syslog. Read this for clues
as to what might be going wrong.
If you get CONNECT sequence failed, then the CONNECT line is to blame.
Debug this line the same way.
If you have other problems. Turn on full debugging:
DEBUG=777
and read the debugging log. If you can't make heads or tails of it,
mail it to me and I'll see what I can do with it (after all... it
may be a bug). I don't know anything about other types of modems,
so if you have modem specific questions, I probably can't help much.
5. CREDITS, ETC...
Special thanks to all of these people:
Paul Sutcliffe ... original author
Steve Robbins ... former maintanier of getty_ps
Michael Haardt ... SYSV init support
Theodore Tso ... for a valuable discussion of the
new serial drivers
Shane Alderton ... for the ringback patches
Julian Cowley ... for helping with the transition to the
0.99.15 serial drivers
Dr. G.W. Wettstein ... for syslog patches
Eugene Crosser ... fidonet patches
I have included all of the original documentation from this package under
the OLD directory. You might find it useful. If you find that this file
is missing something, please let me know. I've tried to be as complete as
possible without writing a book, but I have been known to screw up in the
past.
Good Luck.
Kris Gleason
gleasokr@boulder.colorado.edu
|