The CLX 5.04 Installation and Administration Manual
Franta, DJ0ZY (
[email protected]) and Ben, DL6RAI
(
[email protected])
November 20, 2000
The complete reference for installing and maintaining a CLX node on
your packet system.
______________________________________________________________________
Table of Contents
1. Overview of the CLX System
1.1 What is CLX?
1.2 CLX --- Another PacketCluster clone based on Linux
1.3 Hardware requirements
1.4 Availability
2. How to install the CLX software on your system
2.1 Users in /etc/passwd
2.2 Unpacking the software
2.3 A new Kernel
2.4 Testing the AX.25 driver
2.5 Configuring TCP/IP
2.6 Adding Shared Library Paths
2.7 Configuring Postgres
2.8 Create CLX database and tables
2.9 Starting CLX for the first time
2.10 Migrating from an older CLX installation
2.11 Migrating from a Pavillion PacketCluster installation
3. Description of the CLX Configuration Files
3.1 Obtaining a callsign string
3.2 CLX configuration files in ~/config
3.3 CLX parameters in clx_par
3.4 Cluster network configuration in cluster_par
3.5 System messages in ~/config/adv_txt.
3.6 Location data in ~/config/wpxloc.raw
3.7 Special Characters in System messages and Help Files
3.8 Message of the day or ``notice''
3.9 CLX unavailable
3.10 Multiple Connects
3.11 Amateur Band Boundaries
3.12 Configuring the AX.25 software
3.12.1 Using a KISS serial port
3.12.2 Using AX.25 over Ethernet
3.13 WAMPES and CLX
3.13.1 Installing real WAMPES
3.13.2 Using TNT's WAMPES socket feature
3.14 Making CLX access available through telnet
3.15 Using CLX with TNOS
3.16 Connect Scripts
3.16.1 Shell Scripts as Connect Scripts
3.16.2 Using TCP/IP for a connect
3.16.3 A simple Expect Script
3.16.4 A more sophisticated Script
3.16.5 A virtual one-way connection
3.17 CLX and Callbook Data
3.17.1 The QRZ! Hamradio CDROM and other callbook data
3.17.2 The Flying Horse CDROM Callbook
3.17.3 Using online address data from the Internet
4. CLX Programs, directories and database tables
4.1 Files and Directories of CLX
4.2 Programs
4.2.1 Server programs
4.2.2 User Programs
4.3 Database tables
4.3.1 User defined database tables (UDTs)
4.3.2 Administration commands
4.3.3 Remote database access
4.4 Files under the ~/box directory
4.4.1 The batch subdirectory
4.4.2 The bulletin subdirectory
4.4.3 The iclb subdirectory
4.4.4 The info subdirectory
4.4.5 The
5. System Administration Tasks
5.1 Time
5.2 Log files and Syslogd
5.3 Keeping track of CLX's Status
5.4 Automatically starting CLX
5.5 Shutting down CLX
5.6 The CLX watchdog
5.7 Kernel Panic
5.8 Other regular Tasks
5.9 The ~/tools directory
5.9.1 Database administration
5.9.2 CLX Maintenance, Startup and Shutdown
5.9.3 Other programs
5.10 Admin Commands
5.10.1 Achieving Admin Status
5.10.2 Admin shell commands
5.10.3 Admin commands for the ~/box directory
5.10.4 User Data Table Commands (Udt)
5.10.4.1 UDT Admin Commands
5.10.4.2 User commands
5.10.5 Database Maintenance Tool
5.10.6 Managing Distribution Lists
5.10.7 Checking for bad words in mail
5.11 Superuser Status
5.12 Extending CLX -- the ~/exec/command directory
5.13 Extending CLX even further -- the ~/exec/interpr directory
5.14 The interactive clx_adm tool
6. User Administration
6.1 User Commands
6.2 User flags
6.3 The us_adm tool
6.4 Connecting, Disconnecting and Locking out
7. Appendix
7.1 Release Notes
7.2 PacketCluster's PCxx protocol
7.2.1 Excerpt the from PacketCluster sysop manual, Appendix C
7.2.2 Overview
7.2.3 CLX additions to the PCxx protocol
7.2.4 Syntax description
7.2.5 Protocol messages handled by the CLX software
7.3 Current Users of the CLX software
7.4 Thank You!
7.5 Frequently Asked Questions
7.6 Known Bugs in the CLX software
7.7 Bugs and Bug Reporting
7.8 Wish List
______________________________________________________________________
1. Overview of the CLX System
1.1. What is CLX?
PacketCluster nodes have been around since around 1985. The original
PacketCluster idea came from Dick Newell, AK1A, and was running under
DOS. Circa in 1992 Dick stopped the development of the PacketCluster
software for amateur radio. Many systems are still using this
relatively old DOS software today.
CLX is a system which clones a PacketCluster node. To the outside
user, commands and features are mostly identical, remote PacketCluster
nodes, which can be networked, don't see the difference between a
generic PacketCluster node and CLX. So it fits well into an
established network of PacketCluster nodes.
1.2. CLX --- Another PacketCluster clone based on Linux
CLX, short for ``Cluster Software running under Linux'' has been under
development since February 1994. For many years before we were
dreaming of improving Pavillion's PacketCluster software, which was
developed in the mid-eighties. Now the time had come.
In order to add features to the cluster software it was necessary to
look for a new operating system platform. Under DOS it was practically
impossible to improve anything. The 640k memory limit makes things
very difficult when it comes to writing a multi user application with
up to 60 users or more, handling port interrupts for internal and
external TNCs and database queries. So we came to the conclusion to
use the Unix platform for this new project. The Linux Operating System
seemed like an ideal playground for us.
Here are some of the features of CLX
o Full compatibility with the original PCxx protocol and from a
users' point of view. It comes with multitasking and different
priorities.
o The software allows loops and multiple connects without generating
endless DX spots and announce messages. This is a feature to make
the network more reliable.
o CLX uses modern programming concepts like shared memory for common
data, lex & yacc for syntax checking, shared libraries to keep
binaries small, remote procedure calls for inter process
communication. It is strictly modularised with its own dedicated
process for every major task.
o CLX can be extended, you can add your own programs and software.
o You may re-use the old PacketCluster database files (*.ful files).
They can be imported into the new system without too much trouble.
o CLX is based on a data base system called PostgreSQL version 6.1.
Currently, the CLX code consists of about 60,000 lines of C++ code.
o CLX's connectivity is very flexible. It supports the generic AX.25
drivers in the Linux kernel, uses WAMPES, NOS, JNOS or TNOS and
plain TCP/IP via telnet. You can accommodate even the wildest
network configurations including hook-up to the Internet via a
dial-up line. Through the use of universal connect scripts almost
everything is possible in CLX.
First on-air experiments started in late May (1994) under the callsign
DB0PV-6, which now has become DB0CLX. It currently runs on Linux
Version 2.0.25 with Alan Cox's and Jonathan Naylor's AX.25 kernel
driver and a KISS connection to the local digipeater.
A current list of CLX users can be found in ``CLX User List''.
1.3. Hardware requirements
CLX runs on PC 386-40 with 8 MB memory. Well, it creeps. It sure
loves a little more CPU power. A typical production-level CLX system
like DB0MDX has a Pentium-233 and 64MB RAM. At DB0CLX, which is
rather a low-profile installation, we currently have a 486-100 with 32
MB RAM and 500 MB disk space.
For an average Linux installation you will need about 200 MB. CLX is
about 5 MB after the installation but the data grows quickly. If you
keep log files, these can easily fill up to 50-100 MB. So 500 MB is
certainly no luxury.
For a connection to the the external world you can either use a KISS
TNC on a serial port, WAMPES, AX.25 over Ethernet or even plain
TCP/IP.
1.4. Availability
CLX is available by anonymous ftp from the following address:
ftp://ftp.funet.fi/pub/ham/unix/Linux/cluster/clx
This site is mirrored by many other sites world wide so you may pick
up CLX from another place. Be aware, however, that ftp.funet.fi is the
place where the most recent version of CLX usually gets uploaded
first. Thanks for the ham-admins of ftp.funet.fi for the nice service
they provide to the ham community and we hope that we will be able to
continue using ftp.funet.fi as our main distribution site.
KB8EHT has offered to make CLX available in the US under the following
address:
http://www.timsnet.com/pub/clx
2. How to install the CLX software on your system
The installation of the CLX software requires some knowledge of Linux
and Unix in general. It is not an easy task.
Here's a checklist for you:
o I know how to use an editor (vi/emacs/joe)
o I know how to add new users
o I know about tar, zcat and gzip
o I know about TCP/IP, networking, ping
o I know about syslogd
o I know how to make a new Kernel
o I know about the lilo boot loader
o I know how to add commands to /etc/rc.* or /sbin/init.d
o I know about crontab entries
o I know about the dynamic linker ld.so and shared libraries
If you can say yes to all of the above, you are prepared to install
CLX. If not, you better get yourself a book about Linux/Unix and play
around with your system to become familiar. This may take some time
(weeks, months).
This version of CLX is glibc-based. That means, no longer will it
require you to make symbolic links and find a special version of
libc.so.5 as it used to be in previous versions. However, CLX will no
longer run on an old libc.5-based system.
For CLX to run, the following software packages must be installed on
your system.
o Perl (most CLX tools are written in perl)
o Expect which requires Tcl (if you want to write your own connect
scripts)
o Postgres (CLX data storage is based on Postgres)
From CLX version 5.00 Postgres is no longer part of the CLX
distribution. We used to have Postgres along with CLX for many years
but lately Linux distributions come with rather current Postgres
packages and so the hassle to remove a pre-installed Postgres from a
new Linux system has become bigger than the benefits of providing
Postgres along with CLX. So the decision was made to leave it out and
you have to install it for yourself.
You need at least Postgres version 6.5 tp run with CLX 5.00.
2.1. Users in /etc/passwd
CLX needs one new user in your /etc/passwd:
User Group Home Directory UID
---------------------------------------------------------
clx_us users /usr/local/clx 101
---------------------------------------------------------
It is necessary to add the clx_us before you unpack the software, so
the files will have correct ownership and permissions. The UID is
chosen randomly, it does not really matter.
2.2. Unpacking the software
The CLX software comes in a single huge .tgz file. The file should be
installed as follows:
# cd /
# tar xvzf clx_XXX.tgz
This will unpack the CLX software in the directory /usr/local/clx.
You will need approximately 5 MB of disk space to install it.
You have now completed step one of the CLX installation! Fine!
2.3. A new Kernel
You need a Linux kernel of version 2.0.36 with the following
drivers/components:
o System V IPC
o TCP/IP networking
o Amateur Radio AX.25 Level 2 (optional)
o Radio network interfaces (optional)
o Serial port KISS driver for AX.25 (optional)
o BPQ Ethernet driver for AX.25 (optional)
Earlier or later kernel versions may or may not work. Earlier versions
required patches (called ax25-module14f or the like). We are currently
using 2.0.36 at DB0CLX. The 2.0.36 kernel sources come with the AX.25
drivers in place, but they must be activated.
Currently I am not aware of how the 2.2.x kernels work with AX.25.
There used to be some problems which may be fixed now.
If you got to compile a new kernel, please consult your Linux
distribution manual. It is usually a sequency of "make config, make
dep, make".
Congratulations! You have now finished the second step of the CLX
installation procedure.
2.4. Testing the AX.25 driver
CLX does not require you to use the AX.25 kernel driver. If you wish
to do so, you should now make sure everything works. If not you may
skip this section and continue with the next one.
To check whether the newly created kernel driver is working we will
make some tests. First you should get the most recent AX.25 utility
package. This package contains programs which will allow you to make
use of the kernel drivers. Without them, the drivers are just sitting
in the kernel doing nothing.
The old version ax25-utils-2.0.12c.tar.gz dated December 28, 1996 is
no longer supported and should not be used any more. The current
utilities are in a file called ax25-2.1.42a.tgz available from
ftp://ftp.pspt.fi/pub/ham/packet/linux/ax25.
Grab them, compile them and install them in the default directories
using make install.
If you are using a 2.1 kernel, you could just go and use the new
utilities without patching the kernel. There is some information
regarding this subject in the AX25-HOWTO document, available, for
instance, from
http://sunsite.unc.edu/mdw/HOWTO/AX25-HOWTO.html.
Now we must configure ax25d. Go to the /dev directory and make a soft
link from the ttyS? where your TNC is connected to /dev/tnc:
# cd /dev
# ln -s ttyS0 tnc
Switch your TNC into KISS mode. With my TNC2 clone running WA8DED
firmware, I use the following command:
# echo -e "\015\015\033@K" > /dev/tnc
The TNC should signal the transition into KISS mode by flashing the
CON and STA LEDs three times. After that you should observe that the
CON LED keeps flickering very hectically. This is a good sign! If it
doesn't, your TNC is probably not in KISS more or it behaves
differently.
Now edit the file /etc/ax25/axports. You must specify your
``outgoing'' callsign for the different devices you have. Each TNC
device gets one line in that configuration file. I have just one TNC
connected so my file contains only a single active line:
# /etc/ax25/axports
#
# The format of this file is:
#
# name callsign speed paclen window description
#
kiss DL6RAI 9600 255 4 DB0AAB Link (438.300)
# end of /etc/ax25/axports
Now start kissattach to bind the TNC port to the kernel driver:
# /usr/sbin/kissattach /dev/tnc kiss
Note that ``kiss'' is the symbolic port name which is referred to in
the /etc/ax25/axports file. You may give it any name.
kissattach should say something like: ``AX.25 port kiss bound to
device ax0''. However, if you get the error message ``TIOCSETD:
Invalid argument'', you forgot to add the Serial Port KISS driver for
AX.25 to the kernel.
Now start listen and you should be able to monitor some traffic on the
channel:
# /usr/bin/listen
Port kiss: AX25: DC1SLM->DB0AAB v DK1KMR* <RR R R3>
Port kiss: AX25: DB0AAB->DC1SLM v DK1KMR <I C S3 R6> pid=Text
0000 The quick brown fox
Port kiss: AX25: DB6MK-1->DG7DAH-1 v DB0AAB <RR C P R6>
Port kiss: AX25: DG7DAH-1->DB6MK-1 v DB0AAB* <RR R F R6>
Port kiss: AX25: DB6MK-1->DG7DAH-1 v DB0AAB <I C P S7 R6> pid=IP
IP: len 44 44.130.56.134->44.130.56.21 ihl 20 ttl 64 prot TCP
TCP: 1489->119 Seq xe86f491d SYN Wnd 31744 Data 4
0000 ....
Port kiss: AX25: DG7DAH-1->DB6MK-1 v DB0AAB* <REJ R F R6>
^C
Interrupt it with ctrl-C.
We can now try to make a connect with the call program. my TX delay
parameter slightly to make the program work. At DB0AAB only very short
TXDs are accepted, otherwise one will receive a message saying: ``TX
Delay too long''. Adjusting the TX delay is done with the kissparms
program.
# /usr/sbin/kissparms -p kiss -t 150
Then give it a try:
# /usr/bin/call -r kiss db0aab
GW4PTS AX.25 Connect v1.11
Trying...
You should see your PTT LED go on and off and after a while you should
succeed to connect:
*** Connected to db0aab
Rawmode
PC/FlexNet V3.3e - Muenchen/Fachhochschule - PR56/RS36 - 9600Bd FSK
=>
Congratulations! You have now mastered step three of the CLX
installation! After having disconnected, you may kill the kissattach
program still running. We don't need it at this time.
2.5. Configuring TCP/IP
CLX needs TCP/IP to communicate. Theoretically, it would be possible
to have several modules of CLX running on different machines as they
are all using the same mechanism.
All what it needed now is that you can reach yourself by TCP/IP. This
is probably working already. Try the following command:
# ping localhost
If you receive the following, everything is in order and you can
continue with the next step. Use ctrl-C to abort ping.
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=255 time=1 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=255 time=1 ms
^C
--- localhost ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 1/1/1 ms
However, if you get the following answer, something is not yet set up
correctly.
PING localhost (127.0.0.1): 56 data bytes
ping: sendto: Network is unreachable
ping: wrote localhost 64 chars, ret=-1
^C
In one of the rc files in /etc or /etc/rc.d (depends on your Linux
installation) you must activate networking with the following
commands:
ifconfig lo 127.0.0.1
route add localhost
See your Linux documentation for details. Having mastered this, you
have now completed step four of the CLX installation.
2.6. Adding Shared Library Paths
With version 3.00 of the CLX software, we have introduced a shared
library image in the ~/lib directory. For shared libraries to work in
general, it is necessary to enable the dynamic linker ld.so to find
these images at runtime.
Generally under Linux there are several ways to get around the
problem:
1. setting the $LD_LIBRARY_PATH environment variable
2. make symbolic links to the default directories /lib or /usr/lib
3. Add the paths to /etc/ld.so.conf
4. Use statically linked programs
Option 3 is the recommended way because this gives flexibility and
should not be a problem. As root, edit the file /etc/ld.so.conf
# vi /etc/ld.so.conf
and add the following line
/usr/local/clx/lib
to the bottom of the list. Then save the file and inform ld.so to
update its cache:
# ldconfig -v
It should now list the new directorie. You have now completed step
five of the CLX installation.
By the way, you should remember that running this command after every
update of the libclxccl.so is mandatory to make the programs see the
new library.
2.7. Configuring Postgres
The Postgres package should be installed on your system but it needs
some configuration before it can be used for CLX.
With the current SuSE 6.2 distribution I had to install two packages,
namely postgres and pg_ifa. The second package contained interface
programs to Postgres like psql which is used in many CLX scripts. Be
sure to check this.
The next step is to initialize the database (if it has not been
initialized any time before). Become user postgres and run initdb.
# su - postgres
$ initdb
$ ^D
#
Now, as root, start up the postmaster process. This is done using a
startup script which should have been installed along with the
postgres package.
# /sbin/init.d/postgres start
Be sure that a program named postmaster has started up now.
# ps auxw | grep postmaster
root 661 0.0 0.6 1208 416 ? S 10:18 0:00 grep postmaster
postgres 235 0.0 1.5 4148 1000 ? S 08:34 0:00 /usr/lib/pgsql/bin/postmaster -i
Here is an important detail: Check the options by which postmaster was
started. The -o option allows passing options to the postgres program
which is later called from within CLX. Here, the -F option states that
fsync() is not called transaction. This parameter improves performance
and makes your disks run more quiet but carries the risk of data loss
in case of a power outage or system crash. You must decide if you want
one or the other.
Also note that Postgres keeps its data in a directory pointed to by
the $PGDATA environment variable. This directory should sit on a disk
with a lot of space since this is the place where all the CLX data
goes to.
Again, as user postgres, you must add user clx_us to the Postgres
users. For this, become user postgres and use the program createuser
to add a new user and allow it to create databases and new users.
clx_us must have Postgres superuser privileges in order to perform
some of the essential functions like importing/exporting tables from
and to files.
# su - postgres
$ createuser
Enter name of user to add ---> clx_us
Enter user's postgres ID or RETURN to use unix user ID: 101 ->
Is user "clx_us" allowed to create databases (y/n) y
Is user "clx_us" allowed to add users? (y/n) y
createuser: clx_us was successfully added
$
2.8. Create CLX database and tables
Now we are ready to create CLX's database tables. Become user clx_us
and run the clx_db script:
# su - clx_us
$ clx_db
This will bring up a number of messsages where you can see that tables
are being created.
If you have any old data to reload (when you are coming from a
previous installation of CLX), do so now using the bup_db script. If
this is a new CLX installation you can skip the following step.
$ cd backup
$ cp ../../clx.old/backup/* .
$ bup_db -r
This restore process may take a while, depending on how many records
are in your tables. If you have many users and lots of DX information,
this will take even an hour or two. To monitor the process, check out
the size of the database files in the directory $PGDATA/base/clx_db.
Create the index files on the database tables. This too might take
quite a while:
$ clx_idx
Now we are done with everything and ready to start up CLX for the
first time.
2.9. Starting CLX for the first time
We are now ready to start CLX for the first time. You might want to
edit the default config file in ~/config/clx_par but if you've
followed the instructions so far, you should not need to make any
changes. Leave the callsign string as it is now, the callsign will be
XX0XX.
Now as clx_us, start CLX with the following command:
$ clx -u
You should now see CLX coming up for the first time.
Reading /usr/local/clx/config/clx_par.
Decoding callsign.
*** CLX System Parameters ***
callsign: xx0xx
database: clx_db
interface: AX25
Checking directories and file permissions
Clearing shared memories.
Clx coming up...
clx_ctl Shared Memory manager ....up
int_com Internal Communications Manager .. up
snd_ctl Transmit Spooler .. up
usr_ctl User Administration .. up
iu_com Inter-User communication .. up
icl_com Inter-Node communication .. up
usr_req User Database Interface .. up
mb_ctl Mailbox Controller .. up
udt_mng User Data Table Manager .. up
usc_mng User Commands Manager .. up
usr_dlg User Dialog manager .. up
bbs_if BBS interface .. up
rm_disp Received messages Dispatcher .. up
rcv_ctl Received messages Spooler .. up
con_ctl AX.25 interface .. up
Clx is up.
$
When CLX is running, you will be returned to the $ prompt. You can
now log into CLX with the term_usr program. CLX should greet you with
a message and then display the clx > prompt.
$ term_usr
Hi om, Tere is XX0XX! a Linux-PacketCluster node running CLX...
xx0xx-16 de xx0xx 4-Dec-1999 1145Z clx >
Now you can try a few commands, like SH/US, DX, SH/DX, SET/NAME etc.
Logout with ``BYE''.
Shutdown CLX with the following commmand:
$ clx -s
Congratulations! You have successfully installed CLX on your system.
If you are now willing to run CLX on the air, continue with section
``Configuration'' further down below!
2.10. Migrating from an older CLX installation
If you are migrating from an older CLX installation you will probably
be interested in preserving some of the data you have acquired and
some of the configuration work you have made up to that point. Here is
a step-by-step description how you can save your previous work.
Basically the migration is easy as all user data is contained in
either the database tables or the ~/box directory. Additionally, your
configuration is stored in ~/config/clx_par and probably in
~/config/cluster_par. So these are the things to backup.
1. Shutdown CLX and backup the user data
$ cd
$ clx -s
$ bup_db -s
The bup_db script will dump all database tables from a previous ver-
sion and additionally store the mailbox messages in a .tgz file.
2. Login as root and rename CLX's home directory to clx.old. We will
need to read some files from there later. Now unpack the CLX
distribution from the archive.
# cd /usr/local
# mv clx clx.old
# cd /
# tar xvzf clx_XXX.tgz
3. If you want to replace the Postgres database system or if database
structures within CLX have changed, you must perform the steps for
initializing the CLX database as described in ``Configuring
Postgres''. You should consult the CLX release notes to decide if
this step is necessary or not.
When you are done, you should finish with the new postmaster
process running and the CLX tables newly created, data read back in
and index files created.
4. Go to the ~/config directory and copy the old configuration files
there. Edit the old one and add anything which you feel is
necessary.
$ cd ~/config
$ mv clx_par clx_par.sample
$ cp ../../clx.old/config/cluster_par .
$ cp ../../clx.old/config/clx_par .
$ diff clx_par clx_par.sample
Also, you might be interested to copy the old ~/.profile from the
~/../clx.old directory, but watch out for any changes before you
overwrite the default ~/.profile.
This completes the migration steps. Easy, no?
2.11. Migrating from a Pavillion PacketCluster installation
The original Pavillion PacketCluster software and CLX have very little
in common when it comes to programs. None of the original programs is
working with CLX, database structures are quite different so generally
installing CLX means starting from 0.
However, to make your and your users' lives a little easier we provide
a migration tool for data.
o The read_ak1a program to import the files DX.DAT, OPERNAM.DAT and
WWV.DAT into CLX tables. The DX.DAT at DB0BCC, for example,
contains over 300,000 records of DX spots ranging back into the
year 1992. This is quite a lot of useful DX information worth
saving. The same is true for the WWV.DAT file, which holds records
of solar activity over a number of years. OPERNAM.DAT contains
names and location data of your users. Save them to save your users
having to re-enter this information.
Also read_ak1a is used to read QSL information data into the
qsl_mng table and also general database files from Pavillion. In
CLX, data in the QSL database table is special in such as way as
the information is searchable in two ways, which makes it different
from other .ful tables. Firstly, you can search by DX call but
secondly, you can also search by QSL manager. This allows you to
retrieve a list of DX stations for which a QSL manager is
responsible.
Details for using the read_ak1a utility are described in ``read-
ak1a''.
3. Description of the CLX Configuration Files
The CLX configuration files reside in the ~/config directory. Here is
where you have to specify your configuration and make changes.
3.1. Obtaining a callsign string
Why an encrypted callsign? Well, we have taken this approach to keep
track of who is using our software. That is, if you want to use CLX on
the air you need to have a real callsign. This is when you have to
contact us. You can install the software, make tests etc. with the
default callsign ``XX0XX'' which is encrypted as ``WpbANhEOuh;''.
But then, when you need a real callsign, write an email message to
[email protected] sending a screen dump of the startup messages to us.
This will be accepted as a proof that you have put some work into the
project and are now to be rewarded with a callsign.
How do you do a screen dump? Many people seem to have difficulties
with that. So here is what we want:
$ clx -u > proof.txt
Then mail this file to us, noting which callsign you want encrypted.
Email is also the best way to report bugs and problems and receive
support. We use this means of communication because it is very fast
and reliable and pretty common in the mean time. Writing letters and
sending out disks is too much trouble for us.
As a good resource, you may also subscribe to the CLX mailing list.
Thanks to Heikki Hannikainen, OH7LZB, for running the list server for
us. If you wish to subscribe, simply send a message to
[email protected] with an empty subject. In the message body
put the following line:
subscribe clx
From then on you will be on the list and receive any mail addressed to
the mailing list address. Also you may send questions, proposals ideas
to
[email protected]. If you ever wish to unsubscribe from that
list, again send a message to
[email protected] with an empty
subject line. The message body should contain one line like this:
unsubscribe clx
Please read the documentation thoroughly before you start to ask
questions.
Thanks to Heikki for providing this service for free!
Another good resource is the World Wide Convers Channel 9000 which is
often populated with many Clusse or CLX sysops. Clusse is a DOS-based
software that was written by OH2LZB some years ago and is currently no
longer maintained. If you have a WW-Convers node near you, join
channel 9000, which is often entitled: CLX/Clusse SysOPs.
Arnold, PA4AB, makes available the CLX Home page at
http://clx.muc.de.
This page has links to all the interesting places, where to download
the latest CLX, additional sources for databases, beta releases and an
archive of the CLX Mailing List. Take a look!
3.2. CLX configuration files in ~/config
The following rules apply to both CLX configuration files clx_par and
cluster_par:
o Everything after a # in a line is treated as comment.
o Empty lines are OK.
o Every key word must start in column 1 and end with a colon.
o Parameters follow the key word. You can have any amount of white
space (tabs, blanks) to separate the parameters.
o If you continue in a new line, the first column must contain white
space.
o Maximum length for a configuration line (probably going over
several physical lines) is 256 bytes.
3.3. CLX parameters in clx_par
The parameter file is read at the start of CLX. It contains important
information about your system configuration like callsign, SSIDs,
communication interfaces etc. Please note that syntax checking for
this file is almost non-existant. So if you make an error, expect
strange things to happen. This hasn't been a problem in the past but
please be careful.
There are two types of parameters, that we call variant and invariant.
The variant type can be changed at runtime while invariant types
cannot. For them to take effect, CLX must be shut down and restarted.
Parameters are:
o call (invariant), the encrypted callsign code for your CLX system.
By default, you will have the demo callsign xx0xx as WpbANhEOuh; in
this place. Once you have received a code for your personal
callsign, you must put it in here. Beware, the ; character above is
not a comment! The callsign codes are always 11 characters long
independent of the length of encoded callsign. If CLX cannot
decode the callsign at startup (but if it sucessfully can decode
the default callsign xx0xx) you probably have mis-spelled the code.
It is best to use the cut&paste function to get the string into the
configuration file.
o sysop_info (variant). This parameter allows you to specify sysop
information (your callsign, phone number, E-Mail address or
whatever) to display when users do a SHOW/SYSOP command.
o ssid (invariant), to specify an SSID to be used. From version 2.05
on callsign strings are encoded without SSIDs so you can add your
own. The old encryption strings from pre-2.05 releases remain
intact and may also be used with this feature.
o prot (invariant), the protocol to be used. At this time, only the
PCxx protocol of the original PacketCluster software is available.
o hops (variant), which is used to specify hop information for
broadcast type messages. The five different types correspond with
the following PCxx protocol messages:
dx PC11
ann PC12
user PC16/PC17
node PC19/PC21
wwv PC23
wcy PC73
and are specified like this:
hops dx/99 ann/10 user/5 node/10 wwv/99 wcy/99
The hops are applied to:
1. locally generated DX spots
2. DX spots coming from user-mode links
They are definitely not applied to the spots you are receiving from
other nodes. These spots are just decremented by one and if the
counter is not zero, they will be forwarded as per the configuration.
The only exception is the hops_min value which can be specified on a
per link basis. See ``hops_min'' for further details.
When a negative number or zero is used here, this protocol message is
suppressed by CLX and never transmitted. This way, some messages can
be completely supressed, like limited protocol with PacketCluster.
The hops parameter can also be used in the ~/config/cluster_par file
on a link by link base.
o merge (variant), to specify how many DX and WWV spots should be
requested from the partner node to merge them into the database in
case a link failure has occurred and spots were lost for a while.
This will make CLX generate an appropriate PC25 (merge request)
message. The amount to be requested is specified like this:
merge dx/20 wwv/5 wcy/5
o ps_vers (variant), to specify which PacketCluster version
information is sent to the node being joined. Default is currently
5447. The performance of CLX is not affected with this switch, so
this is not to select a specific emulation mode.
o db_name (invariant), where the name of the CLX database must be
specified (no need to change it)
o db_port (invariant), port where Postgres is listening, default is
the Postgres port 5432
o db_host (invariant), specify, if Postgres is running on another
host, default localhost
o vacuum (variant), to specify (in minutes) how often vacuum will be
called from within CLX. If your machine is very slow or your
database is very large, you might wish to set this to a big value
so that it occurrs not so often. If you do not specify this
parameter, vacuum is never called (which is bad). A problem is that
when vacuum runs for a long time, the clx_watchdog (if you have it
on) will time out and shutdown clx. See ``CLX Watchdog'' for
further details. You could also leave this parameter out of clx_par
and call vacuum through cron as explained in ``Other regular
tasks''.
o wampes (invariant), to specify if WAMPES should be used as the
default interface for outgoing calls. By default, CLX uses the
AX.25 kernel driver by GW4PTS. This requires that WAMPES is
installed on your computer. See ``WAMPES and CLX''.
o w_host (invariant), to specify a WAMPES host to connect. If WAMPES
is running on another host, you should specify it here. If WAMPES
is running locally, you don't need this.
o ax25 (invariant), can have the parameters no or outgoing. no
prevents CLX from any activity on the AX.25 kernel socket.
outgoing makes CLX use the kernel socket only for outgoing calls
but leaves incoming calls to another application (in a standard
Linux AX.25 configuration, a program called ax25d is used to sort
this out).
Note: If your Linux kernel has no AX.25 support, you must specify
no here, otherwise con_ctl will hang at startup time.
o callb (invariant), to specify sub directories in the ~/callb
directory which contain callbook files. See ``Callbook CDROM data
with CLX'' for any details.
o cba_drive (variant), drive letter (DOSEMU) for accessing Flying
Horse Callbook data.
o dx_lim (variant), in minutes; DX spots older than dx_lim minutes
should be ignored. Default (if nothing is specified) is 70 minutes.
If dx_lim is not specified at all, no limit exists. From CLX
version 4.04, dx_lim also works into the future, so that spots
newer than dx_lim are canceled. DX spots are not sent to local
users. But they are still forwarded to other nodes, as we cannot
locally decide what are old spots for other systems. Some sysops
may argue that 15 minutes is enough, but when you are at the edge
of the Packet network, you may still be happy receiving 30 minutes
old spots.
o wwv_lim (variant), in minutes; analogous to dx_lim you can specify
after which time WWV spots should be ignored. The default is 720
minutes (12 hours). If wwv_lim is not specified at all, no limit
exists.
o wcy_lim (variant), in minutes; analogous to wwv_lim you can specify
after which time WCY spots should be ignored. The default is 720
minutes (12 hours). If wcy_lim is not specified at all, no limit
exists.
o wwv_auth (variant): A callsign which will be the assigned
"authority" for WWV spots. If several spots arrive for a specific
3-hour time frame, only one such WWV message is saved and
broadcasted to the local users.
The reason here is that with nowaday's network situation, WWV spots
tend to show up three- to fourfold at 18 minutes past the hour
regularly. When you do a SHOW/WWV you will find four spots for the
last period and only one for the next to last period.
If wwv_auth is given, the spot from this callsign is selected, else
the first WWV spot received for this time frame is selected.
o dx_comm (invariant): Setting this parameter to no means that the
comment field in DX spots is ignored for duplicate DX spot
checking. This comes in handy for European installations where
often spots including specific national characters tended to be
repeated over and again. Setting the parameter to no allows
suppressing these spots with a slight chance that some additional
spots may be lost too.
Setting the parameter to yes or not specifying dx_comm at all makes
CLX include the comment field in the dupe checking.
o shm_dxel (invariant): This config parameter allows setting the
search depth for checking duplicate DX spots. The default depth is
500 spots, this parameter can be increased up to 99999 spots. An
appropriate shared memory block will be reserved for this.
o shm_annel (invariant): This config parameter allows setting the
search depth for checking duplicate announce spots. The default
depth is 400 spots, this parameter can be increased up to 99999
spots. The size is currently 214 bytes per record.
o pw (variant), to specify a password for the set/priv command. The
password must be between 8 and 255 long. In order for your users to
be able to gain CLX admin status, they will need the password and
also a private copy of the get_pwd program. See also ``Achieving
Admin Status''.
o baycom_pw (variant), to specify a password for the pw command. The
password must be 5 to 255 characters long. The first character of
the password is position 1 (not 0 like some C programmers might
suppose). See also ``Achieving Admin Status''.
o filter (variant) allows designing DX filters for users to specify.
This command allows to set up a line of notch filters for the users
to chose from. The filters have numbers from 0..31 and may be
cascaded by the user. The users' filter setup is permanently stored
in the users' us_data record.
Filters in clx_par may be specified as follows:
o by a frequency range
o by a frequency limit
o by mode
o by an entry from ~/config/ar_band.cd
The syntax is as follows:
(filter_number>name)specification
The maximum length for a filter name is 12 characters. A maximum of
32 filters may be defined by the administrator. Frequencies have to
be stated in kHz. Using a "/" in the specification is a logical and.
"20"/cw means take the definition of "20" from ar_band.cd and use only
the "cw" band. The double quotes are necessary to let the parser know
that "20" is to be treated as a string and not as the number 20.
Here are a few examples:
(1>VHF)144000-
(2>HF)3500-30000
(3>TOP)1800-2000
(4>SIX)50000-52000
(5>CW)/cw
(6>20CW)"20"/cw
A filter may also consist of several specifications like this:
(7>WARC)"30"
(7>WARC)"17"
(7>WARC)"12"
The WARC filter now contains all three WARC bands.
The most important thing about filters is that you must understand
that they are used to reject specific DX spots. An example: Specify-
ing VHF, WARC, SSB and RTTY filters means, you will only get CW spots
on the classic HF bands 160, 80, 40, 20, 15 and 10. This is probably
what users want when the are in the contest. Or - when the CW filter
is set, you will get anything but CW spots. Specifying SSB and VHF
you will only receive HF CW and RTTY spots.
o mk_fwd (variant), allows specifying which addresses should be
bulletin addresses. Normally ALL and international variations like
ALLE, TODOS, TOUS, TUTTI are placed here.
o waz_ddd (variant), allows the sysop to specify a list of up to 40
WAZ zones which are to be treated as "DX". DX spots originating
from these zones may be filtered out by users using the
SET/NODXDEDX command. Also, these spots are not forwarded to other
nodes which are specially marked in the ~/config/cluster_par file.
See there for more details.
Please keep in mind that using this functionality, some database
traffic is being generated as each spot must be analysed and the
WAZ zone of the author must be fount out.
Also keep in mind that this feature works only for outgoing (ie.
transmitted) spots at your end. It does not filter incoming
(received) spots. So if you are receiving those spots and don't
want to receive them, ask your internet link partner to set up a
filter for you that prevents him from sending unwanted spots to
you.
o syslog_lev (variant) allows specifying a default syslog level for
all CLX programs. The default is now defined as 6 (all except
DEBUG), it used to be 7 previously. One can use any value between 0
(EMERG) and 7 (DEBUG).
When a program is suspicious, you can dynamically change the debug
level with the -l switch. For example
$ icl_com -l 7
would turn on the DEBUG level for the program icl_com.
o maillimit controls the maximum age (in days) a mail message can
have before it will be deleted by db_maint. If nothing is
specified, the mail limit is 90 days be default. This is used with
db_maint's 6 option. See ``db_maint'' for further details.
o loglimit (variant) specifies for how long log records are kept in
the database before they get deleted by db_maint. The default value
is 20 days. This is used with db_maint's 6 option. See
``db_maint'' for further details.
o uslimit (variant) specifies for how long user records are kept in
the database before they get deleted by db_maint. The default value
is 120 days. Entries with special rights (us_perm != 0) like
digipeater call signs or sysops are never removed automatically.
This is used with db_maint's 5a option. See ``db_maint'' for
further details.
o dxlimit (variant) specifies for how long DX records are kept in the
database before they get deleted by db_maint. The default value is
100 days. This is used with db_maint's 1e option. See
``db_maint'' for further details.
o annlimit (variant) specifies for how long announcements are kept in
the database before they get deleted by db_maint. The default value
is 100 days. This is used with db_maint's 1g option. See
``db_maint'' for further details.
o qslfile (variant) specifies the file name to be used with db_maint
for reading in QSL information into the QSL database table. This
is used with db_maint's 7c option. See ``db_maint'' for further
details.
o batchcommands (variant) specifies db_maint command options to be
executed when db_maint is run with the ``batch'' argument. This is
a handy way to automate database maintenance jobs via cron. See
``db_maint'' for further details.
o bbs_lst (invariant) is the list of callsigns to be treated as
Packet BBS systems for personal mail forwarding. The callsigns must
be separated by white space. Mailbox systems are expected to
actively connect CLX to initiate the forwarding. They are then
greeted with the typical BBS forwarding prompt. CLX itself does not
start up a connection to a PBBS system. CLX currently understands
the W0RLI forwarding protocol only.
As a side node, you must be sure of the callsign which is used by
the BBS system for outgoing calls. For example, the Baycom Mailbox
DB0AAB-8 uses the callsigns DB0AAB-4 and DB0AAB-5 (alternatively)
for its forwarding traffic. These are the callsigns that must be
stated with the bbs_lst parameter.
o qsl_rr (variant) is used to specify a remote database for QSL
requests (SHOW/QSL and SHOW/MANAGER) when the result is not found
in the local database. The syntax is qsl_rr: <node>/<dbq>/<dbm>.
The fields dbq and dbm may be left empty as the default is QSL and
MANAGER. So it is enough to specify the remote node like this:
qsl_rr: <node>. A remote database request (PC44) will be generated
and sent to the remote node (which can be a Pavillion PacketCluster
systen or CLX).
o language (invariant) specifies the default language to be used on
this system. At clx startup time, appropriate symbolic links will
be created in the config and help directories.
o clust_loc (variant), a list of nodes to be treated as local nodes
for announcements.
Here is a simple clx_par file:
call: WpbANhEOuh; # Encrypted callsign
db_name: clx_db # name of the clx database
prot: pc # protocol type (pc, clx or aut)
hops: dx/99 ann/10
user/5 node/10
ssid: 8 # SSID to be used
mk_fwd: all alle dx dxnews
dx_lim: 60 # no DX spots older than 60 minutes
wwv_lim: 180 # no WWV spots older than 3 hours
wcy_lim: 60 # no WCY spots older than 1 hour
waz_ddd: 3 4 5 25 # ignode spots from these WAZ areas
bbs_lst: db0aab-4 db0aab-5 # BBS systems for mail forwarding
qsl_rr: db0sdx/qsl # remote QSL database fallback
language: german # default language used on this system
3.4. Cluster network configuration in cluster_par
The file ~/config/cluster_par contains information on which callsigns
are nodes, which ones have to be actively connected and which ones
build up the connect themselves. Additionally, the file contains
routing information and of what type of node the system is. Moreover,
there is a parameter to denote a link either ``active'' or
``passive''.
This file is similar to the NODES.DAT of the traditional PacketCluster
software but it contains a little more information.
The format of this file has changed dramatically in version 4.00 of
the CLX software. The name was changed too from ~/config/cluster to
~/config/cluster_par. We tried to make it a bit simpler and get away
from the hard-readable link characteristic flags. We hope you
appreciate that.
These are the syntax rules for this file:
o Empty lines are ignored.
o You can specify comment lines with ``#''.
o Data fields may be separated by any number of blanks and/or tabs.
Use them to make the configuration file look pretty.
o Every node has its own SECTION: paragraph. A section ends with a
new section or at the end of the file.
There are a number of parameters for every single connection described
below.
o section Starts a new section and specifies the callsign of the link
partner on the other side.
o conn_act This parameter specifies, if the connection is active or
passive. For a discussion of active and passive, please see below.
o conn_call If the link is an outgoing connection, this optional
parameter specifies, which callsign is going to be used. By
default, the default callsign is used. If it is an incoming link,
you may specify, under which callsign the remote node connects.
This is like an alias callsign.
o conn_int This option is used to specify the type of connection.
Four types are available:
a ax25 kernel socket connection
w WAMPES port
x script from ~/exec/connect
i incoming connection
o conn_lock Specifies if the connection is locked - i.e. disabled.
It may be temporarily unlocked using the clx_adm program.
o conn_path
1. Connection type a or w: One or several alternate connect paths
may be specified here. Simply specify the callsigns of the
digipeaters to be connected. With %-characters added to the
call, the timeout period is specified:
% = 1 minute
%% = 2 minutes
%%% = 4 minutes
%%%% = 8 minutes
Default time out is 1 minute. The time out for the last hop (to the
final destination) can be specified on a new line.
Additionally, the connect string to be expected must be specified.
1 = "*** connected to"
2 = "> Connected to"
3 = "} Connected to"
Or you can specify it literally by adding it in quotation marks:
db0fsg%%"#LINKED_TO" hererby replacing spaces with the underscore
character.
Here is an example:
db0bcc: db0uni%2 db0fsg%1
%%
DB0BCC will be connected via DB0UNI and DB0FSG. The timeout for the
connection to DB0UNI is 2 minutes, and the string "> Connected to"
must be received within this period. In the next step, DB0FSG must
be reached within 1 minute waiting for the string "*** connected
to". Finally the hop to DB0BCC must be reached within two minutes.
The trigger for the final destination is the PC18 frame received
or, in user mode, any string.
2. Connection type x: Name of the program or script to be called
including up to 10 tab- or space delimited parameters.
Alternate routes must be separated with the ``|'' character.
o conn_ping This parameter specifies if the connection is being
checked at regular intervals. Acceptable values are yes and no.
If the protocol type is pc then a PC51 telegram is generated. In
user mode (protocol type u), the CLX software only sends the string
ping 1 and expects an answer (any string) from the other side.
o conn_port This command is for AX.25 outgoing connections only. It
defines which port will be used for the outgoing call. State the
symbolic name of the port from /etc/ax25/axports here.
o conn_prot Protocol type. CLX knows two:
pc The PCxx protocol known from Pavillion Software
u the user mode
In user mode this mode, CLX makes a connection like a normal Packet-
Cluster user, and reads the DX spots which are received in the tradi-
tional user format:
DX de DL1SV: 7012.0 PJ5AA listening zero beat 0426Z
This extension makes it possible to establish link connections without
the link partner having to treat your callsign specially (i.e. putting
your callsign into his NODES.DAT file). If you wish to send spots to
your link partner, you must ask him to configure your side as a node.
It is no longer possible to transmit any spots as it used to be in
pre-4.01 versions. Too much trouble with badly configured setups have
led to this decision. In fact, a user mode link is always defined as a
non-clx passive link connection ignoring whatever the configuration
file says.
The version reported by CLX for user mode links is 0000 so do not
worry when a PC19 frame is recevied looking like this:
PC19^0^R3ARES^0^0000^H2^
A user mode link is reported here with R3ARES.
o conn_type With this parameter, you specify if the partner node is a
CLX node or not. Available types are:
clx A CLX node
non-clx not a CLX node
CLX can have one active and multiple passive connections into any iso-
lated network. In Pavillion terminology, you can replace your existing
link connections with active connections and additionally introduce
additional passive backup links for any case. The difference is that
on a passive link, CLX does not transmit broadcast type information
(DX spots, announcements) to non-CLX systems and so no duplicate spots
are being generated.
For a list of broadcast type PCxx messages see ``Broadcast type PCxx
telegrams''. Be careful when designing your network connections here
because when you are doing it wrong, you will see the good old cluster
loop in full swing!
Look at the following matrix to understand which messages are relayed
by CLX if the partner node is a CLX node or non-CLX system and if the
link is active or passive:
+-------------------------------+
| outgoing partner is a.. |
| |
| A-CLX | P-CLX | A-PCL | P-PCL |
+-----------------------+-------+-------+-------+-------+
|Incoming A-CLX | ABC | A | BCE | - |
|message is ------+-------+-------+-------+-------+
|from a.. P-CLX | A | A | - | - |
| ------+-------+-------+-------+-------+
| A-PCL | ABC | A | BCE | - |
| ------+-------+-------+-------+-------+
| P-PCL | A | A | - | - |
+-----------------------+-------+-------+-------+-------+
Legend:
A-CLX = Active CLX node
P-CLX = Passive CLX node
A-PCL = Active PacketCluster node
P-PCL = Passive PacketCluster node
A = DX, Announce and WWV (PC11, PC12 and PC23), no duplicates
B = other broadcast-type messages besides A:
User add/delete (PC16/PC17)
Node add/delete (PC19/PC21)
here status (PC24)
User info (PC41)
Local User Count (PC50)
C = directed messages:
Mail forward (PC28-33)
Remote Database requests (PC34-36)
Talk messages (PC10)
Remote commands (PC34-36)
File forwarding (PC40)
Remote Database requests (PC44-48)
Ping (PC51)
D = Initialisation commands (PC18, PC20 and PC22)
E = type-A messages previously received from a passive link
connection and now being again received from an active link.
Generally, PCL nodes do not receive spots from passive links,
but these spots can be safely delivered to them.
Locally generated messages (DX spots entered at the local node)
are treated like if they came from an A-CLX node. D-type messages
are exchanged with all partners but never passed on to others.
o hops (variant), see description above in ``Hops''.
o hops_min (variant), allows specifying a minimum hop counter value
for frames going to that link. This parameter is the only one which
affects foreign frames (i.e. not self-produced frames). The hop
count can only be increased not decreased. The format is identical
to the hops parameter. However, hops_min is specified on a per link
basis (in cluster_par while hops is a general parameter (in
clx_par).
o init_wait Specifies the number of seconds CLX waits after the
connection is established, before sending the PC18 initialisation
frame.
o mail_fwd Enable or disable mail forwarding to a specific node.
o merge Number of DX and WWV spots requested for merging when re-
connecting this partner.
o ping_to This variable decides the link check mode for the
connection. There are three cases:
If it is not specified, the link check to the remote system is
based on either data or a ping answer received from the remote
system.
If ping_to is set to 0, a ping is sent every 300 seconds. Also,
every 300 seconds a check is made if the previous ping was answered
within 300 seconds or if any other message was received from the
other end - else the link will be disconnected.
If ping_to is set to a value greater 0, this value will be taken as
the maximum allowed response time (in seconds) for a ping frame. A
ping is sent 300 seconds and at the same time a check is made if
the ping_to timer has been exceeded.
conn_ping overrides these settings. If conn_ping is off, no link
checking is active.
To resume: there are two modes of link checking available. One
that is triggered by normal PC telegrams (any data activity on the
link) and one which takes care of the ping time only (how much time
does it take for the answer to arrive). Both modes can be used at
the same time to reliably check the link connection. With the
first mode you would make sure that some activity still exists,
with the second you could automatically cut the link and restart it
when the response time has become too large.
o waz_ddd A list of WAZ zone entries treated as DX zones. Spots
originating from there (probably transported by Internet
connections) are not forwarded to this partner. If the waz_ddd: tag
is not speciefied, the default from the clx_par file is taken.
3.5. System messages in ~/config/adv_txt. language
This is the system messages file which may be used in its original
form or it can be adapted to your local language. Its function is
similar to MESSAGES.DAT of the original PacketCluster software.
The maximum length of the strings contained in every message is 512
characters. This may include \n and other printf-style symbols. You
must put this into a single line, however, the message may be
structured with additional \n's so the user will receive several lines
in a single message.
The following macros are available:
\call = User's callsign
\ccntr = Number of links currently established
\fulldate = Full Date
\hcall = User's callsign with here/nohere status showing
\n = Newline
\ncntr = Number of nodes reported in the network
\nodecall = Your CLX callsign
\ring = Bell character (ctrl-G)
\shrtdate = Short Date
\since = Time when CLX was started
\t = Tabulator
\time = Current time
\ualm = The current alarm string (if any)
\ualv = The current alive character
\uann = Show if user has ANNOUNCEMENTS ON or OFF
\uansi = Show if user has ANSI on
\ubeep = Show if user has BEEP turned on
\uchs = The character set selected
\ucntr = Number of users logged in locally
\udxd = Show if user has DXDEDX activated
\udxf = list of filters currently active
\udx = Show if user has DX spots on
\uex = The current exit string
\ulog = Show if user has Login/Logout messages on
\umax = Maximum number of users logged in since last start
\uptime = Uptime in days, hours, minutes and seconds - format
string in adv_txt message 011.
\version = CLX version number
Some message numbers have flags. These have the following meaning:
* This message only goes to the error log. It is always
taken from adv_txt so there is no reason to translate it.
? This message will not be displayed if there is no
text.
The translated adv_txt files must be located in the ~/config directory
and be named adv_txt.language. We have included several language
files in this directory. adv_txt is a fallback file, which is used in
case no specific language file is available or if the message number
is marked with an asterisk. When the user has not specified any
language, the file adv_txt.default is used. This should be a symbolic
link to the language normally used on your system. If the user has
specified a different language with the set/language command, then the
file adv_txt.language is used.
Please check the files for completeness and send any corrections of it
back to us to be included with future releases of CLX! Again, note
that the messages having an asterisk are internal messages only and
are always taken directly from adv_txt.
When you are translating or adapting a message file, it is convenient
to have both the original and the translated messages near each other
so that you can make a comparison. For this, we have included a tool
called check_adv_txt in the ~/tools directory. Use this tools as
follows:
$ cd ~/config
$ check_adv_txt adv_txt.italian
With the command line switch -m you can force it to show only messages
which are missing in the translated file.
3.6. Location data in ~/config/wpxloc.raw
The file ~/config/wpxloc.raw originates from the PacketCluster
software and contains a huge number of detailed location information
for different DXCC countries, islands states and regions of the earth.
The synax of this file is as follows:
---------+-----------------------------------
Column | Meaning
---------+-----------------------------------
1 | Prefix or Prefixes
2 | Full Country Name
3 | DXCC country number
4 | ITU zone
5 | CQ zone
7 | Time zone (negative means east)
7-10 | Latitude (South is negative)
11-14 | Longitude (East is negative)
15 | Follow up flag (* - optional)
16 | DXCC country flag (@ - optional)
---------+-----------------------------------
Comment lines are starting with !.
So the file looks like this:
!Updated many times by DJ3IW, DK2OY, DB0SPC 1991,1992,1993,1994,1995
!
1A S.M.O.M.-1A 268 28 15 -1.0 41 54 0 N 12 24 0 E @
1B NoDXCC-(illegal) 288 39 20 -2.0 35 0 0 N 33 0 0 E
1S Spratly-Is-1S 269 50 26 -8.0 8 48 0 N 111 54 0 E @
3A Monaco-3A 270 27 14 -1.0 43 42 0 N 7 23 0 E @
As many grown-up PacketCluster Sysops have put considerable work into
maintaining this file, CLX continues to use this data in the SHOW/SUN
and SHOW/HEADING commands. However, the data is converted into a
slightly different form and then called ~/config/location.dat at the
startup of CLX. ~/config/location.dat has the following format:
---------+-----------------------------------
Column | Meaning
---------+-----------------------------------
1 | Prefix
2 | Full Country Name
3-5 | Latitude
6-8 | Longitude
9 | Time zone
---------+-----------------------------------
Whenever ~/config/wpxloc.raw is changed, however,
~/config/location.dat will be created anew. There is nothing you need
to do about this, excepct adding new countries and regions from time
to time if you so desire. Do not touch ~/config/location.dat as this
will is generated automatically.
3.7. Special Characters in System messages and Help Files
CLX understands national characters and is able to transmit them
depending on your character set. You must code the special characters
according to the ISO 8559 conventions, that is ä for the letter
ae etc. This should be familiar to everyone writing HTML code.
The special characters CLX understands are defined in the file
~/config/char_set. In that file the corresponding character codes for
the different character sets available must also be specifed.
Currently we have four, the Latin-ISO (used by Linux and MS-Windows),
IBM (used by MS-DOS), DIN (which is using the rare characters {, }, |,
[,],\ and ~ for national character encoding --- Baycom used this
convention) and one with uses ASCII transcription.
Currently, the system messages in ~/config/adv_txt.default (which is a
link to your default language file), the output of external programs
and the help files will be transposed.
To switch languages, users may use the SET/LANGUAGE command, to switch
character sets use SET/CHARSET. For more help take a look at the user
help files.
3.8. Message of the day or ``notice''
CLX allows setting of a so-called "Message of the Day". This message
is displayed to every user logging into the system. This feature makes
it possible to announce meetings or special events to the users in a
convenient way.
To enter a new message of the day, you should use the following
commands:
set/motd
Now enter the new message
/exit
A new file motd gets created in the ~/box/info/etc directory.
It is possible to automatically set the MOTD with a program which is
being called through cron every day at 00:01 UTC. An example of such a
program is in the mk_motd script in the ~/tools directory. This script
calculates the date of the regular DX meetings of the B.C.C. in both
Nuernberg and Muenchen and sets the appropriate message. This way,
club members are reminded well before the meeting happens. Feel free
to expand this script to make it useful for you. Some time in the
future, I will make a more general tool - currently all is pretty
hard-coded in that file.
New users, who have not logged in any time before optionally are
displayed the file motd_new in the directory ~/box/info/etc if it
exists. A new user is a user without a record in the database.
3.9. CLX unavailable
To inform your users of the node being temporarily unavailable, there
is a file which is displayed when net_usr does not find CLX running.
First, net_usr tries to find $HOME/config/clx_etxt, then
/usr/local/etc/clx_etxt. If both fails, it will display the message
clx unreachable.
Also users coming in via the clx daemon clxd (TCP/IP) will be sent
this message when CLX is down.
3.10. Multiple Connects
A word about multiple connects: CLX accepts multiple connects from the
same callsign using different SSID's. In a CLX Cluster you may connect
each of the single nodes using the same callsign (even the same SSID).
However, connecting the same node twice with the same callsign is not
possible. CLX is using the callsign as a communication channel
identifier. What will happen, whenn you're connected as, let's say
DL6RAI, and start up another session as DL6RAI? The old DL6RAI will
receive the greeting message, the new DL6RAI will receive nothing. All
commands he enters are answered to his first connection. And when he
tries to log out, the nr. 1 connection is terminated.
3.11. Amateur Band Boundaries
Amateur band boundaries are defined in the ar_band database table.
This information may change or may be different in your country. Make
the appropriate corrections to the file ~/config/ar_band.cd and then
issue the following command (as clx_us, with postmaster running):
$ db_maint a
You may also add new modes and frequency boundaries. You must then
follows these rules:
o Every distinct band must have a single b_symb attribute. The
SHOW/DXSTATISTICS command uses b_symb.
o It can have multiple b_syn attributes. For example the 15-m-band
can be addressed as 15 or as 21 in a SHOW/DX command. SHOW/DX uses
b_syn
3.12. Configuring the AX.25 software
With the AX.25 utils after version 2.0.12, some changes were necessary
from previous versions. Where CLX used to communicate directly with
the kernel drivers, we have now ax25d as a super daemon launching
applications such as axspawn, a personal messages system or --- in our
case --- net_usr to connect to CLX. Please follow the instructions
coming with the AX.25 utils package.
3.12.1. Using a KISS serial port
For a simple and plain CLX installation the following steps should be
necessary:
1. edit /etc/ax25/axports and put your callsign for outgoing connects
there. Give the interface a name which you will refer to later. I
called mine ``kiss''.
2. edit /etc/ax25/ax25d.conf and put the following lines in it:
[kiss]
parameters 1 10 * * * 0
default 7 10 2 900 * 15 - clx_us /usr/local/clx/bin/net_usr net_usr -x %s
This boils down to: Whenever someone calls DL6RAI-7 on interface
[kiss], start the program /usr/local/clx/bin/net_usr with the switch
``-x'' (which converts CR/LF) and his callsign including SSID as a
parameter. The process is started under the UID of clx_us.
3. Make a startup script in /etc/ax25 which is called when your system
boots. My ax25startup looks as follows:
#! /bin/sh
set -x
echo -e "\015\015\033@K" > /dev/tnc
/usr/sbin/kissattach /dev/tnc kiss
/usr/sbin/ax25d -l
sleep 3
/usr/sbin/kissparms -p kiss -t 150
The echo command switches my TNC into KISS mode. Then kissattach is
being started on the TNC device. Then ax25d is started with the ``-l''
option which makes the AX.25 daemon send log messages to syslog. Then
we must wait a little before changing KISS parameters with kissparms
as was necessary here (TX delay).
Also I have a script for shutting down the AX.25 programs:
#! /bin/sh
set -x
kill `/bin/ps aux | awk '/n\/ax25d/ {print $2}'`
kill `/bin/ps aux | awk '/n\/kissattach/ {print $2}'`
echo -e "\300\377\377\377\300" > /dev/tnc
3.12.2. Using AX.25 over Ethernet
Another way to use the AX.25 software is with the BPQ encapsulation.
This allows us to send AX.25 packets via Ethernet and is compatible to
Flexnet's ETHER.EXE module from DK7WJ (which additionally requires a
packet driver) and probably software from G8BPQ. For this to work on
the Linux side, you just add another line in the /etc/ax25/axports
file looking like this:
[ether]
ether DB0CLX-1 19200 255 4 ethernet
Additionally, you must configure the ethernet port, in most cases
eth0:
# /usr/sbin/axparms -dev eth0 ether
And in the /etc/ax25/ax25d.conf file we should add the port ether to
the configuration:
[ether]
NOCALL * * * * * * L
default * * * * * * - clx_us /usr/local/clx/bin/net_usr net_usr -x %s
Now we can connect the CLX port DB0CLX-1 via ethernet.
3.13. WAMPES and CLX
3.13.1. Installing real WAMPES
At this point in previous releases of the CLX software, we had a
chapter on how to get, compile and install WAMPES. We felt that this
information was slightly outdated now. So we left it out. If you
really have to use WAMPES for one reason or another, you will probably
know better how to install it.
To make CLX run with WAMPES, you only specify one key word in the
clx_par file, that is:
wampes:
You may, if desirable, specify a port number after the colon. This
will allow you to change the port number which CLX uses for
communicating with WAMPES. The default WAMPES port is 4718 and need
not to be specified.
It is also possible to specify a WAMPES host if your WAMPES
installation is running elsewhere. For this use the keyword
w_host:
in the clx_par file.
Due to WAMPES' philosophy, SSIDs are not reported down (or up?) to the
application running on it. Due to this, when using WAMPES, node
callsigns must be unique, there is no way to have DJ0ZY be a normal
user and DJ0ZY-7 a CLX node. This is true only for incoming connects.
When going out through WAMPES, you can chose any SSID you like.
This also leads to the problem that users' SSIDs are generally ignored
and you cannot be connected to two adjacent nodes which have a link
between them using the same root callsign.
This is a WAMPES ``feature'' and cannot be changed by CLX.
3.13.2. Using TNT's WAMPES socket feature
TNT, written by DL4YBG, is a very convenient packet hostmode program
for Linux. New versions are available from
http://www.snafu.de/~wahlm
TNT runs on the Linux console as well as in an xterm under X11. One of
the features of TNT is its ability to provide a WAMPES compatible
socket interface for outgoing connects. This feature is also known as
TNT's NETCMD interface. Along with the autostart feature, which makes
TNT automatically start an application when a specific SSID is being
connected from outside, TNT can be used as both an interface and a
control terminal for CLX.
To enable CLX operation via TNT, you must specify the following two
lines in the tnt.up file which is executed when TNT starts up:
socket netcmd *:4718 dl6rai-7
autostrt on
The first line makes TNT listen on port 4718. If a connection is made,
the application may use the command ``connect ax25 db0aab'' for
example to establish a connection to DB0AAB. You can check this out
yourself by simply doing a ``telnet localhost 4718''.
The second line enables the autostart feature for incoming connects.
If --- for example --- the channel with the callsign DL6RAI-7 is being
connected by DK2OY, TNT will set the environment variable $CALLSSID to
dk2oy and spawn a shell running the script clx_sh. For this you
create a file called autostrt.tnt in the TNT directory and add the
line:
dl6rai-7 run clx_sh
to it.
The file clx_sh is a shell script located in .../tnt/bin (or whichever
is defined as the TNT run_dir) which should contain the following two
lines:
#!/bin/bash
exec /usr/local/clx/bin/net_usr ${CALLSSID}
Also you must have some channels programmed with that very callsign
you like to use. You can do that by putting several lines like
channel 1
mycall dl6rai-6
channel 2
mycall dl6rai-6
...
into your tnt.up file.
All of this is a little confusing. Again, these are the steps you have
to do:
1. Make TNT listen on a socket port
2. enable the autostart feature
3. Create autostrt.tnt
4. Create a script called clx_sh in TNT run_dir (default: .../tnt/bin)
5. Have some packet TNT channels programmed with the callsign you want
to be connectible under
When using the w_host variable in clx_par and setting the $CLX_HOST
shell variable or calling net_usr with the ``-h'' switch on the remote
host, you might even have CLX and TNT running on different machines.
DG4MMI reports that he got TNT and CLX running this way very nicely.
DL1RF reported good success with TNT 1.1a3, DPBOX and CLX 2.07 all
running on the same machine. net_usr is a statically linked program,
it only needs libc.so.5. So the program may be used on a different
computer.
The advantage of TNT+CLX is that you get control over each
communication channel as you can see what's going on by switching TNT
channels. You may watch the PC-PC communication going on or you can
see how and why routing scripts work or fail. Generally it gives you
more control over your CLX installation and makes it more transparent.
Thanks to DL4YBG for making this feature available!
DL4YBG has slightly extended the WAMPES socket interface so that after
the target callsign, one can specify the source callsign to be used on
an outgoing connect through TNT.
The new syntax is as follows:
CONNECT <transport mode> <destination callsign> [source callsign]
If no source callsign is specified, the default callsign is taken from
the NETCMD interface.
Additionally, when starting an outgoing connect via this interface,
TNT uses its own routing table and after establishing the connection
activates the socket interface. As a side note, this also
automatically changes the source callsign of a AX.25-connection with
this callsign already exists to the destination. So you just need not
care about it at all.
The setup of the routing file (routes.tnt) is a little tricky. You
must make sure that the destination callsign again shows up with a T>
tag at the end, like in the following example:
T>DB0SUE-7 CLX; F>db0aab N>db0bro N>db0il T>db0sue-7
If it doesn't, then CLX will never receive the final connect message
and the connection will not be established. When setting this up
first, try making a connect manually using :XCONNECT and watch the
upper status line switching to the destination callsign when that is
reached. In the above case it should look like this:
Ch:05 Stat: IXF wid DB0SUE-7
3.14. Making CLX access available through telnet
With version 2.03 a new program clxd was included with the CLX
software. This perl script allows you to connect directly to CLX via
telnet (without first having to log in). This is achieved by putting
the following entry into /etc/inetd.conf:
clx stream tcp nowait root /usr/sbin/tcpd /usr/local/clx/bin/clxd clx
Also you must add to your /etc/services file something like this:
clx 41112/tcp # CLX Login
To make it really work, you must create an emtpy file called passwd in
the directory ~/config:
$ touch ~clx_us/config/passwd
This is all what you have to do. Now you must kick inetd to make it
read its configuration file:
# ps aux | grep inet
root 109 0.0 0.4 832 68 ? S 12:27 0:00 (inetd)
# kill -1 109
Users can now log in via port 41112 with the command:
$ telnet <your hostname> 41112
This is what will happen:
Trying 192.0.0.2...
Connected to al7nj.
Escape character is '^]'.
Welcome at the clx gateway - you logged in from 192.0.0.1/1028.
Now you must enter your callsign. If you log in for the first time
(i.e. ~/config/passwd contains nothing), a new password will be asked
for.
Enter new password:
Reenter password:
So a new entry is created in the passwd file. Otherwise you must
enter the password which was used previously.
Password:
The echo will not be suppressed so be careful when someone is watching
you. I did not figure out how to do this in a clean way. However, the
program tries to make sure that a valid amateur callsign is being used
for login:
Your callsign: wrdfl
Callsign invalid.
Your callsign:
The passwd file contains four fields, separated by colons. It contains
callsign, password (encrypted), the IP address from where the connect
was made and date/time of the first login.
dl6rai:wroX0dhQ.42t:192.0.0.2/1044:27-Feb-96 2023z
df2rg:wr9y/v96xsF9:192.0.0.1/1029:29-Feb-96 1640z
This is a very rudimentary security check and we do not recommended
that you put this on the Internet right away.
After successfully logging in, you will be treated like any other
normal user. You can talk, you receive DX spots etc. There is no
difference between normal users and users coming in via telnet.
In fact, you can also use this feature to provide an incoming node
connection. You would need some interface to get over the login
mechanism however. This could be done by a connect script described
in section ``Connect Scripts''.
As a special rule, clxd turns off the telnet echo when a known node
callsign connects. This avoids problems due to reflected PC10 frames
(looping talk messages) and circulating mail.
3.15. Using CLX with TNOS
CLX can be used with TNOS. The following information was received from
Joni Baecklund, OH2NJR and Andrea Fiorentino, N5KME/I0:
OH2NJR: ``I just don't see any reason to use TNOS with ax25 kernelcode
anymore. With the latest ax25 kernel (2.0.30 with module13 and latest
ax25 utils) I can do everything that TNOS does and save about 1.5MB of
memory at the same time.''
The thing was done by attaching an ax25 kernelport to a pseudo
ax25port on TNOS and then connecting the real TNC into another port in
TNOS. Then we only had to use the rxecho command with TNOS to copy
pakets from Linux's TNOS port to the TNC-TNOS port and vice versa.
This was the way I used TNOS and Linux/CLX.''
+-----------------------------------+
| linux kernel |
| ax25 kernel port (CLX ax25 port) +--------------+ /dev/ttypf
+-----------------------------------+ |
| pseudo serial
| connection
+-----------------------------+ |
| | TNOS port 1 |
| TNOS with 2 ports +--------------------+ /dev/ptypf
| "rxecho" used |
| for kissbridge +--------------------O TNC port
| | TNOS port 2
+-----------------------------+
It is done by using pseudo TTYs as ``wired serialports''. The kernel
uses /dev/ttypf, TNOS uses /dev/ptypf to connect the kernel and after
that TNOS uses another port for the KISS TNC etc. Take a look at
OH2RBJ's current setup at
http://www.clinet.fi/~njr/rbj.html
Here is some information frm I0/N5KME:
1. attach a pseudo kiss device with kissattach:
kissattach /dev/ptypf link
link is defined in /etc/ax25/axports as:
# <port name> <call> <speed> <paclen> <window size> <description>
link N5KME-6 38400 255 7 clx <-> tnos
Note that the call must be the same as in CLX
2. configure clx for the correct device and speed in
~/clx_us/config/clx_par:
tnc_dev: /dev/ptypf
tnc_baud: 38400
3. configure in TNOS the link with CLX in the file autoexec.nos add:
attach asy ptypf - ax25 clx 2048 1024 38400
4. Make the CLX port see everything a real radio port sees. My radio
port for the PacketCluster link is named uhf.
ifconfig clx rxecho uhf
ifconfig uhf rxecho clx
Note: Only one radio port can be rxechoed or the CLX link will see a
tremendous confusion.
3.16. Connect Scripts
To make establishing node connections under CLX very flexible, we
included a connect script feature as a means to improve outgoing links
to other nodes and sources of DX information. The concept is built
around a program (written in any language) which establishes a
connection to a remote node and then, when the connection is
established, switches into transparent mode. CLX uses pseudo TTYs as
an interface to the scripts.
Note that in some Linux distributions today, the /dev/pty* and
/dev/tty* device files belong to user root and group tty. To allow CLX
accessing the pseudo-ttys you must either make clx_us member of group
tty (best solution) or change the ownership of the device files.
We have found the Expect package from Don Libes (available on the
Internet on any Sunsite mirror in the directory /devel/lang/tcl) to be
an ideal platform for such scripts as it already contains a great
number of pattern matching functions and through its interact command
is able to keep the connection alive after the script is done.
I downloaded the Expect package from
ftp://ftp.leo.org/pub/comp/os/linux/sunsite/devel/lang/tcl/expect-5.18bin.tgz.
Nowadays, Expect is usually available as part of the Linux
distrubition and normally installs under /usr/bin.
Mike Sims, KA9KIM, who installed Slackware 3.5 in October 1998
reported that the version mentioned above is kind of old. Presently,
the expect package is located at the expect.nist.gov web site.
However, the newest version also needs Tcl version 7.4 which is also
not included with that distribution so he had to get the Tcl 7.4
sources too and then recompile the expect package.
The conditions for the external programs building up the connection
are simple and straightforward: After being called from CLX the
program must either exit if the connection cannot be established, or
the first line of text coming back through is understood as a
successful connect.
Let's look at some examples which we have tested.
3.16.1. Shell Scripts as Connect Scripts
The first approach is a two-liner Bourne shell script. It uses the
program call from the AX.25 utilities to establish the connection to
F6KNL-3. This example was worked out together with Lucien Serrano,
F1TE, to connect to F6KNL-3 via F6KNL-9 and a Rose node. The script is
very simple, it does not even require Expect as there are just two
commands:
#!/bin/sh
read $something
/usr/bin/call -r ax0 f6knl-3 f6knl-9 833501
This script is a plain shell script as you an see in the first line
(the #!/bin/sh means to the shell: start the program /bin/sh and then
feed it with the rest of this script). The read command is necessary
because CLX will send the string ``connect ax25 f6knl-3'' to the
script after its start and this should simply be dropped and not screw
up the next program or the remote node.
However, in a more general script you could make use of this
information. With CLX version 4.00, the script receives command line
parameters so now it is possible to provide you with a connect script
for all occasions:
# These parameters are taken from the command line
PROG=`basename $0`
MYCALL=$1; shift
PORT=$1 ; shift
DIGILIST="$*"
# Now we go process the 3rd parameter from STDIN
read conn
set -- $conn
logger -p local5.info "$PROG: /usr/sbin/ax25_call $PORT $MYCALL $3 $DIGILIST"
stty -echo raw
exec /usr/sbin/ax25_call $PORT $4 $3 $DIGILIST
The script is called with the outgoing callsign as the first
parameter, followed by any additional parameters in the conn_path:
entry for that destination. Note that ax25_call does not handle end of
line characters and so it may not be working for you unless you modify
the source code and compile your own ax25_call.
After the script has started, it receives a line from con_ctl
specifying the destination call as the third and optionally the
outgoing callsign as the fourth parameter. So if the file
~/config/cluster_par contains these lines
SECTION: db0bcc
conn_call: dl6rai-7
then con_ctl will in fact send the string
connect ax25 db0bcc dl6rai-7
to the connect script.
These scripts work well in reality and are pretty straightforward and
simple to understand. They have some disadvantages though:
o There is no internal timeout
o It will make CLX believe that the connection is established before
it really is. CLX understands that if anything is received from the
script, the connection has been established and any watchdog timers
are started.
3.16.2. Using TCP/IP for a connect
A rather elegant usage of net_usr allows linking CLX nodes via TCP/IP.
net_usr has the -h option to allow specifying a CLX host. So net_usr
-h al7nj dl6rai-7 will start a connection to CLX running on al7nj. So
taking the same configuration as above, a simple script to connect
another CLX node via TCP/IP would look like this:
#!/bin/sh
read conn
set -- $conn
net_usr -h $3 $4
This assumes that the callsign you are connecting to (al7nj) is also a
known IP hostname (by having it in your /etc/hosts for example).
3.16.3. A simple Expect Script
Here is another example, a little more complicated as it involves
several steps. As a first step it connects DB0AAB and then tells
DB0AAB to setup a link to DB0BCC. Finally the program goes into
transparent mode with the command ``interact''. If either the first L2
or the L3 connect fail, the program aborts (``exit 1'' in the code).
In the first line again you can see that an interpreter is called,
this time the program /usr/bin/expect with the flag ``-f''.
#!/usr/bin/expect -f
#
# Routing through Kernel AX.25
#
# --------------------- User configurable ---------------------
set digi db0aab
set port kiss
set destination db0bcc
set l2_timeout 10
set l3_timeout 30
# --------------------- User configurable ---------------------
set timeout 0
log_user 0
set timeout $l2_timeout
spawn /usr/bin/call -r $port $digi
expect "***Connected"
expect timeout {
send_user "\n### timed out waiting for '=>'\n"
exit 1
} "=>"
send "c $destination\n"
set timeout $l3_timeout
expect timeout {
send_user "\n### timed out waiting for '*** connected to'\n"
exit 1
} "*** connected to"
send_user "*** connected to $destination\n"
interact
Of course, the parameters in this file can be left out as you can
specify them in the configuration file. Let's look at another more
complicated script.
3.16.4. A more sophisticated Script
Here we dial up an Internet connection through cu, login, telnet
across the Internet and login at the remote clxd port. We have not
tested this script, so it may or may not run. But we hope you get the
idea behind it.
#!/usr/bin/expect -f
#
# Routing through cu, telnet
#
set timeout 60
log_user 0
# Use cu to dial up my Internet Service Provider
spawn /usr/bin/cu isp
expect timeout {
send_user "\n### timed out waiting for 'Connected.'\n"
exit 1
} "Connected."
# Unix Login
send "\n\n"
expect timeout {
exit 1
} "ogin:"
send "name\n"
expect timeout {
exit 1
} "sword:"
# Wait for shell prompt
send "MyPaSsWoRd\n"
expect timeout {
exit 1
} "\$"
# Now telnet to my partner's clxd port
send "telnet 193.0.23.245 41112\n"
expect timeout {
exit 1
} "Your callsign: "
# Login at the remote clxd
send "xx0xx\n"
expect timeout {
exit 1
} "Password:"
send "my_login_passwd\n"
expect timeout {
exit 1
} "*** connected to clx"
# OK, we're done
send_user "*** connected to $destination\n"
# Transparent mode
interact
3.16.5. A virtual one-way connection
As a last example, think of a program which does nothing else but
listen to an AX.25 channel where PacketCluster spots are being
transmitted. On a busy channel, some DXers are always maintaining a
connection to some PacketCluster system. Or you could have a listen on
14.096 MHz where some PacketCluster activity is going on. Just
imagine such a program as an interface to CLX. From within CLX you
would simply configure this as a ``virtual'' connection to another
node.
The program /usr/bin/listen from the AX.25 utils package allows us to
listen to the different ax25 ports. With the ``-r'' option it outputs
the monitored frames in a readable form which can then be scanned for
any DX spots. Note that the program listen can only be started with
root rights, so either you will have to set the suid bit on the
/usr/bin/listen binary or become root.
Here is the script:
#!/usr/bin/expect -f
#
# Listening on my radio port for spots
#
log_user 0
set timeout -1
spawn /usr/bin/listen -r
while (1) {
expect -re "\[^\n]*DX de .*\[^\n\r]" {
send_user "$expect_out(0,string)\n"
}
}
This simply starts the program /usr/bin/listen and goes into filter
mode. The complicated looking expression
\[^\n]*DX de .*\[^\n\r]
is nothing else but a definition for a DX spot in expect's regular
expression form.
For more information about expect, I recommend reading the book
``Exploring Expect'' from Don Libes, O'Reilly & Associates, Inc., ISBN
1-56592-090-2 available at any good computer book store.
Think of other ideas like this:
o use a packet program and write all DX spots into a file. Then use
tail -f to read from this file. We have included a script called
file_monitor in the ~/exec/connect directory.
o use TNT's :logmon command to log anything to a pty as follows:
:logmon /dev/ptyqf
Secondly use a script containing
cat < /dev/ttyqf
so it will read anything which comes in from the monitor.
3.17. CLX and Callbook Data
Several interesting address sources are available on CDROM as well as
on-line on the internet. Buckmaster Publishing was first to provide
access for the Pavillion software to their address database. CLX does
support the QRZ! Hamradio CDROM, the International (Flying Horse)
Callbook CDROM and also a free data format into which you can
configure your data.
3.17.1. The QRZ! Hamradio CDROM and other callbook data
From version 2.00 CLX allows you to use any callbook data available on
your system. This feature enables you to directly access the QRZ!
Hamradio CDROM from Walnut Creek (AA7BQ) and also your own data files
if they are supplied in one of two data formats.
A new directory ~/callb must be created. This directory may contain
any further subdirectories with callbook data. The data in this
directory must comply with one of these formats:
1. Sorted by suffix:
AA0A ,Name...,,,,
AB0A ,Name...,,,,
AC0A ,Name...,,,,
AD0A ,Name...,,,,
...
AA1A ,Name...,,,,
AB1A ,Name...,,,,
...
AA0AA ,Name...,,,,
AB0AA ,Name...,,,,
AC0AA ,Name...,,,,
...
K 0AA ,Name...,,,,
K 1AA ,Name...,,,,
K 2AA ,Name...,,,,
...
2. Sorted alpha-numerically:
AA0A ,Name...,,,,
AA0B ,Name...,,,,
AA0C ,Name...,,,,
AA0D ,Name...,,,,
...
AA1A ,Name...,,,,
AA1B ,Name...,,,,
AA1C ,Name...,,,,
...
AA0AA ,Name...,,,,
AA0AB ,Name...,,,,
AA0AC ,Name...,,,,
...
Missing characters are replaced by blanks. Fields are separated by
commas. The sort type is indicated by file name.
<name>.s sorted by suffix
<name>.c sorted alpha-numerically
No other formats are available at this time. More to be done in the
future.
Any available sources are supplied in the clx_par file. With the callb
parameter you may specify any number of directories to search for
callbook address information. The software searches each directory
until the requested address is found. Then it stops. This way you may
have directories with descending priority, for example a local
directory where you put in very reliable information and as a second
source the CDROM information. If the information is found in the local
directory, the (probably wrong) information on the CDROM is not shown
to the user.
There may be any number of files in the ~/callb/* subdirectories. The
information must be mutually exclusive, i.e. you cannot have two files
with Italian addresses in the same directory. This must either be in a
single file or in two different directories.
CLX creates two index files in each subdirectory, one for the suffix
oriented files and another for the alpha-numerically sorted files.
These index files are being created when starting CLX. The indexing
runs in the background so it might take a few minutes before you can
access the data after the first start.
Whenever information is changed in these directories, CLX will realize
that something has changed and rebuild the index files. The index
files are named clx_idx.s and clx_idx.c. Their size is approx. 200 kB
each.
The files may not be in that directory physically. It is OK to make
symbolic links to the physical files, thus allowing you to keep your
CDROM mounted under /cdrom or whatever.
Example:
You have two directories under callb:
local
qrz_dx
local contains any local addresses, probably gained and converted from
a club's roster, your private address database or something. So there
is only a single file in local, named address.c. This file must be
sorted alpha-numerically.
The qrz_dx directory contains a link to the QRZ! Hamradio CDROM
mounted under /cdrom:
all.s -> /cdrom/callbk/callbkc.dat
You can even keep the files on a different machine and mount them via
NFS. We have put a sample file under ~/callb/local which is named
bcc.c. It contains some entries from the BCC's club roster. This file
will be used by CLX if you specify the directory
callb: local
in the clx_par file.
The user command to access the information is show/callbook. This is
an internal command and it cannot be changed. The show/address command
which was used here before is now free for your own database, probably
importing from a PacketCluster .ful file (see also ``read-ak1a'').
3.17.2. The Flying Horse CDROM Callbook
The data on the Flying Horse CDROM Callbook is provided through the
use of a DOS program named calldos.exe. This program and a little
Expect script is used to gather the data from the CDROM. To get this
working, you must first get the DOS emulator going, preferrably by
reading the supplied documentation and the DOSEMU-HOWTO document,
available, for instance, from
http://sunsite.unc.edu/mdw/HOWTO/DOSEMU-
HOWTO.html.
You must be able to start the DOS Emulator and access the Callbook
data from a drive letter. This drive letter must be defined in the CLX
configuration file clx_par. Additionally, no printer must be defined
in DOSEMU, as the program supports only LPT1: and we need to send its
data to a file.
If all is working well, you could try running the program first from
the clx_us shell prompt:
$ ~/exec/command/show/cba dl6rai dk2oy
and you should get:
Manfred Petersen, DK2OY
Hardtstr. 83
D-40629 Duesseldorf
Germany
The user command to access the Flying Horse callbook data is SHOW/CBA.
3.17.3. Using online address data from the Internet
Thanks for Matthew George and Erik Olson there another script is
provided in the ~/exec/command/show directory allowing online access
to Internet address data directly from www.qrz.com. You must have a
continous Internet connection. The script is provided ``as is'', I
have not tried it here but it is used in a production mode at NC7J.
The script is named cba.internet and to make it easy for your users,
you should rename cba to cba.cdrom and cba.internet to cba.
4. CLX Programs, directories and database tables
4.1. Files and Directories of CLX
CLX uses a specific file structure under its home directory ~clx_us:
ax25/ some binaries and AX.25 .tgz files
backup/ where tools/bup_db writes and reads ASCII backups
bin/ CLX binaries and clx startup/shutdown script
box/batch/start/ user startup files (profiles)
box/iclb/ mail to be forwarded
box/mail/ user mail directory
box/bulletin/ DX bulletin directory
callb/ callbook files, links to QRZ-DX CDROM
exec/command/ command extensions for all users
exec/connect/ connect scripts for CLX
exec/interpr/ command extensions for all, with message interpreter
exec/privileg/ command extensions for admin users
exec/checks/ directory for mail checking
config/ configuration files
db/ command files to create database tables
box/info/help -> Link to default language help files
box/info/help.german/ German user help files
box/info/help.english/ English user help files
box/info/help.french/ French user help files (tnx HB9BZA)
box/info/help.italian/ Italian user help files (tnx IK3HUK)
box/info/help.portuguese/ Portuguese user help files (tnx PP5AQ)
log/ directory for log files (specify in /etc/syslog.conf)
tools/ system and user administration tools
4.2. Programs
The CLX software consists of several programs which are linked via
shared memories and database entries. The server software is being
started and shutdown by the clx script, which starts and stops the
processes.
4.2.1. Server programs
Here is a definition for each particular module
con_ctl
is the communication interface (AX.25, telnet sockets)
rcv_ctl
manages receive spooling.
snd_ctl
manages transmit spooling. At a later time, this process may
handle priorities. Currently all messages are in one single
processing queue.
rm_disp
receive message dispatcher, forwards messages to other
processes.
usr_req
manages all user commands, user database requests, forks a
process for every database task to make it run in the
background. The background process later sends the results
directly to send_ctl.
mb_ctl
mailbox control. The mailbox keeps messages in a file system,
header information is stored in the database.
usr_ctl
user administration (logins, logouts, logbook).
usc_mng
manages external user commands and command extensions.
usr_dlg
manages user dialogs like the set/priv sequence.
bbs_if
Packet Radio Bulletin Board System (PBBS) interface implementing
the W0RLI mail forwarding protocol.
iu_com
inter user communication (talk, conference).
icl_com
inter node communication (processing and generating PCxx
messages).
clx_ctl
system administration, installing shared memory pages. It also
controls cyclic jobs like building up link connections, testing
with ping etc.
int_com
manages internal program communications.
udt_mng
manages private data tables (udt's).
db_*
special program started for special access to database. This
program will be terminated when the transaction is finished.
clb_sad
Manages the index files in the callbook directory ~/callb. This
program will be started at the start of CLX and then finishes,
after the update of these files. When a user accesses the
callbook, this program handles the interaction between user and
callbook data.
bbs_if
a program which is started up for each incoming PBBS connection.
PBBS systems are identified using the bbs_lst configuration
command in clx_par. See ``bbs_lst'' for further details.
4.2.2. User Programs
The following programs may be run from the console:
net_usr
A login program for clx from the console or when started via
ax25d. net_usr is a statically linked program (except that it
needs libc.so.5). It can be run from another computer and does
not need any of the specific CLX shared libraries.
net_usr has a number of command line switches, enabling
different features:
-h <host> connect to CLX on a different host
-i necessary for batch programming. Makes net_usr read from STDIN
only when the connection to the running CLX is established.
This should make it possible to run net_usr from a shell
script reading commands from a file (like this):.
net_usr -i dl6rai <<NNNN
sh/dx/10
bye
NNNN
Unfortunately, due to CLX's multiple processes, the second
command goes through faster and so the output of the first
command never gets out. We have not found a solution to this
problem at the moment but it did not seem very important
anyway. The general problem is that CLX does not serialize
the commands but tries to work them down as soon as possible.
-r similar to the -i option above with the difference that the
program only terminates after having received a response from
CLX. It is working for an announce command like this:
echo "ann DB0BCC will be shut down now" | net_usr -r
-x Makes net_usr convert all <CR> characters to <LF> on input.
This is necessary for net_usr to run correctly under ax25d.
-m MS mode: Makes net_usr convert all <LF> to <CR><LF> on output.
This is necessary to make telnet access under MS-Windows look
nice.
term_usr
Another login program with readline support, basically providing
the same functionality as net_usr but with GNU readline support.
term_usr supports exactly the same command line options as
net_usr.
Press ``ctrl-P''/``ctrl-N'' for previous/next commands, goto
begin or end of line with ``ctrl-A''/``ctrl-E'' and move the
cursor back and forth with ``ctrl-B''/``ctrl-F''. The standard
cursor control keys may also be used.
Vi fans may also permanently switch to Vi mode by creating a
file ~/.inputrc containing the line:
set editing-mode vi
Then command history and recall are available with the standard Vi
functions like <ESC>-k, <ESC>-j, etc.
term_usr supports a number of so-called inline commands for
uploading or downloading of files. This way it is easy to start
writing to a log file to document a CLX bug or you may use it for
uploading files and data to the CLX system. Commands currently
supported are:
~p print working directory
~l list current directory
~c <path> change working directory to <path>
~> <file> upload <file>
~< <file> download to <file> (appends, never overwrites)
~. finish download
~? shows a short command description
When logging to a file, all input lines are logged with leading
>>'s.
clx_adm
Administration tool which is being described in section
``Administration Tools'' further below.
4.3. Database tables
CLX runs uses a number of tables in the Postgres database. The tables
are accessed through the CLX programs so the user normally doesn't
even know that there are databases, tables, indexes etc. For the Sysop
however, it may be interesting to know that there are in fact a number
of tables which are read from and written to by several CLX programs.
Table Content write read
access access
----------------------------------------------------------
ann_data Announce icl_com db_san
ar_band Band Boundaries <setup> usr_req
distr_li Distribution Lists usr_req usr_req,icl_com
dx_data DX-Data icl_com db_sdx
dxcc_pfx DXCC Prefix List clx_ctl usr_req
dxcc_dat DXCC Countries List clx_ctl usr_req
ml_dir Mailbox Directory mb_ctl mb_ctl
ml_file Mailbox Files mb_ctl mb_ctl
qsl_mng QSL Information usr_req db_sqsl
sys_dat System Information clx_ctl clx_ctl
us_data User Data usr_ctl usr_ctl
us_log Logbook usr_ctl db_slog
us_uhn Homenode Table icl_com,usr_ctl usr_req
wwv_data WWV Propagation Data icl_com db_swwv
wcy_data WCY Propagation Data icl_com db_swcy
-----------------------------------------------------------
The QSL database is currently empty. read_ak1a, a tool to import QSL
information from PacketCluster files is in the ~/tools directory.
Look at section ``read_ak1a'' to find out more about this tool.
You can import a full-blown PacketCluster QSL-Database, like the one
available from DB0SDX/DL1SBF which is available on the Internet,
currently at
ftp://ftp.grossmann.com/pub/db. This database is
maintained by DL1SBF, who has been working on the data for several
years - probably a good start for you.
The VHF Group DL-West has produced a fine database of VHF station
information for central European VHF/UHF enthusiasts. Several
interesting information from active callsigns are registered there
like QTH locator, Packet and E-Mail address, Name, type of activity
etc. This database can also be imported using the read_ak1a utility.
See ``read_ak1a'' for an exact description of the details. The
command to read in the database goes like this:
$ read_ak1a -c -t vhf vhf_150.dbf
The database is available directly from Guido, please mail him at
[email protected].
DL3KDV has taken the IOTA list and made it available for use with CLX.
The read_ak1a utility can also import this type of data, automatically
creating a table which shows entries by IOTA designators (like
EU-001), Prefixes (like G) and continents (like EU).
The DXCC table is read from the file ~/config/cty.dat. This file is a
standard list of DXCC and WAE countries very popular and kept up to
date world wide by CT (copyright K1EA) users. A recent version is
always available from
http://www.contesting.com/ct/files/#cty.
Whenever this file changes, clx_ctl, which is the first program
started when launching CLX, will reread the table in the background.
The home node table of CLX remembers user's home nodes and sends mail
messages that way. The user may either explicitly select a home node
location. If he does, the information is saved permanently, regardless
of logins at other places. If no home node information is entered by
the user, the system takes the first login it gets to know about this
user, as his home node. If the user later connects to another node,
CLX waits until it has received this information five times
consecutively, before it does to change the home node information
accordingly.
Some of the tables have indexes:
Table Index file(s)
-----------------------------------------------------------
ann_data idx_and
distr_li idx_dli
dx_data idx_dxc, idx_dxl, idx_dxf, idx_dxd
ml_dir idx_mdd, idx_mdn
ml_file idx_mfn, idx_mfd
qsl_mng idx_qsl, idx_mng
us_data idx_usd, idx_uld
us_log idx_usl, idx_ulc
us_uhn idx_uhn
wwv_data idx_wwd
wcy_data idx_wcd
-----------------------------------------------------------
All files of the CLX database are stored in the directory
$PGDATA/base/clx_db.
It may be of interest to you that the hardest part for the database is
retrieving ``the last n'' spots from the dx_data table. The reason
behind this is that a query is built step by step. So when you query
the last 5 records from the dx_data table, the following happens:
o Postgres would select all records, convert them to ASCII and write
them into an intermediate file.
o then CLX would filter out the last five
The same is true for the last 5 records of 20 meters:
o Postgres would select all 20 m records, convert them to ASCII and
write them into an intermediate file
o then CLX would filter out the last five
The more specific the query is, the less overhead. So when you look up
the last KL7 station on 40 meters RTTY this job will be handled very
quickly and efficiently. This is a general problem and has nothing to
do with Postgres but with the use of a database in this way.
To get around this problem, we have taken two approaches:
o The last 100 spots are always kept in memory. This is where your
``sh/dx/5'' command is taken from and this explains why it is so
much faster than ``sh/dx 2''. fed from.
o When querying the dx_data table, we first try to find a result in a
small time interval going back from ``now''. If this fails the
interval is made longer and longer until the query really looks
through all data. Currently we have implemented 6 different
intervals:
2 days back
8 days back
31 days back
125 days back
500 days back
all
When the query gets into the third level (31 days) it writes a message
to the user saying ``Patience. This query needs time'' (message #205
in adv_txt).
4.3.1. User defined database tables (UDTs)
With version 2.04 and later of CLX, it is now possible to install your
own database tables in the Postgres database. For this, a conversion
program called read_ak1a is provided in the ~/tools directory and a
set of CLX commands for the installation and administration of these
tables exists (see ``udtadmin'').
4.3.2. Administration commands
This is the command set for administering the UDTs:
4.3.3. Remote database access
As a very esoteric feature, a database may be defined as follows:
create/!udt <tablename>/<flags> <clx command>
The ``!''-character denotes that the record is not being looked up but
a CLX command is called when the database is being accessed. This
way, CLX can make its database tables accessible to other nodes. They
can access the database table through a PC44 (remote database
request).
Also, this provides a way to make an alias for a database table.
Let's say, you with to export your QSL database to another node (be
it CLX or Pavillion PacketCluster).
create/!udt clx_qsl/+- sh/qsl <?>
This command creates a new table called clx_qsl which turns any
request into the clx command sh/qsl. Note that the argument to the
command is passed in the <?>. This must be specified, otherwise sh/qsl
would be called without an argument.
Not only can you make an executable table but also records in your
table may contain executable statements. This allows you to collect
different programs and utilities under a common command interface. The
syntax here is similar:
update/<tablename> !<key> <clx command> <?>
The <?> argument is optional and if stated will contain the command
line parameter.
4.4. Files under the ~/box directory
The ~/box directory contains a number of subdirectories where the part
of the user data is kept, which is not stored in the Postgres
database. These are mail messages, mails in the forwardig queue, user
startup files, DX bulletins and the user help files. This portion of
the file system is administered internally and you should use the Unix
commands only in special cases where you know what you are doing.
Generally, each file in this hierarchy also has a corresponding
database entry and it's always a bad idea to get the two out of sync
by manually fiddling around here. CLX provides a command interface to
this area with the privileged CLX commands PUT, GET, LS and RM
commands.
The consistency of the ~/box directory hierachy is checked with the
script mbx_chk (see ``mbx_chk''), normally at CLX startup. However,
can also be called from the commandline.
4.4.1. The batch subdirectory
This directory contains another subdirectory called start. Below
this, files are stored named after users' callsigns containing the
startup procedure they have defined using the CLX command
UPDATE/PROFILE.
4.4.2. The bulletin subdirectory
This directory contains a subdirectory for every year. These are
generated automatically when an upload ocurs in a new year or if a
user explicitly specifies the year with the UPLOAD command. The files
are then stored one level below. There is no strict convention on how
users may name the uploaded bulletin files.
The bulletin subdirectory is never changed by mbx_chk - but mbx_chk
picks up any new files in this directory and includes them in the
database. Knowing this, you may add bulletin files at the shell prompt
to these directories by directly copying them into place and then
running mbx_chk.
4.4.3. The iclb subdirectory
The iclb directory contains subdirectories for every partner node it
forwards mail to. Under these directories you will find files named by
a number ranging from 1 to 9999. These are files to be forwarded and
the to be deleted after sucessful completion. The destination address
and other message-relevant information is kept in the database.
Files in this directory are checked both ways by mbx_chk. Whenever
the file or the database entry is missing, the corresponding part will
be deleted. With the command rm_fwd you may remove mail forwarding
queues directed to specific nodes. For more information on this
command, see section ``rm_fwd''.
4.4.4. The info subdirectory
The info subdirectory contains both a place for the help files
(different languages) and for changible system files (like the motd
file) in ~/box/info/etc.
mbx_chk does not check this directory at all.
User help files are to be found under ~/box/info. The old place
~/doc/user is now used for the CLX user manual which was compiled by
Ian, G0VGS, with a lot of effort. There is a printable version and
also a HTML version of the user manual available.
The file structure in that directory is as follows:
The directory help should always be a symbolic link to the English
version of the on line help files. These are the most current files.
Secondly, a link should be made from the language used in your country
to help.default. This link is automatically created when you have
defined a language parameter in the clx_par file. You should see that
the help files in that directory are well up to date with respect to
the English versions too. Additionally, there are a number of language
directories like French, Italian, German and Portuguese. Leave them in
place, if a user choses to switch languages, these directories will be
used.
If you put some work into the help files, please be sure to mail us a
copy to include in a future distribution of CLX. If you are
translating the help files, please be sure to take a look at section
``special characters''.
4.4.5. The mail subdirectory
The mail directory contains subdirectories for every user and for
standard bulletin addresses. These subdirectories then contain files
numbered from 1 to 9999 which are the true message files without and
additional information (no headers). That information is only kept in
the database.
Files in this directory are checked both ways by mbx_chk. Whenever
the file or the database entry is missing, the corresponding part will
be deleted.
5. System Administration Tasks
5.1. Time
CLX needs time in UTC. If you run CLX on the air, you should get this
correct. Otherwise, your node will send out DX spots with wrong times.
Look for information regarding local time settings in a file sometimes
called /usr/lib/zoneinfo/time.doc.
Generally, your CMOS clock should run on UTC, also your system clock
should be on UTC. If your machine runs completely on UTC, you need not
change anything. However, if you like to have clocks display local
time on your computer, you must read on.
First, in the /usr/lib/zoneinfo you should make a link from your local
timezone to localtime. Additionally, you must make a link to
posixrules, as this is needed to interpret the TZ environment
variable.
Second, in both clx_us's and postgres's ~/.profile you should set the
TZ variable as follows:
TZ=GMT
export TZ
To change the CMOS clock from within Linux, you must use the command
/sbin/clock -w. At boot time, to set the system clock from the CMOS
clock, you should put /sbin/clock -au in your start files.
Also you should see that your computer' clock is not lagging or
leading in time. There is a nice trick of keeping your clock accurate
without the need for an external time base. This is done by first
measuring the deviation over a certain period (say one week) and then
specifying this deviation in the file /etc/adjtime. After that, the
command /sbin/clock -au will automatically correct the hardware clock
at regular intervals. The more exact the deviation is known, the
better. Look into the man page for /sbin/clock (try man 8 clock) for
exact details.
5.2. Log files and Syslogd
CLX makes extensive use of the syslog facility. This requires syslogd
to run. You may redirect CLX's output to different log files. This is
done in the /etc/syslog.conf file. There are several levels of
logging output. Here is part of DB0CLX's /etc/syslog.conf file. The
debug option generates lots of output, beware! Also with lots of
traffic, the debug option generates so much traffic that the system
may lock up. This is something we have observed at DB0BCC some time
ago. When we discontinued the debug log, all was OK again.
local1,local2,local3,local4,local5.err -/usr/local/clx/log/err.log
local1,local2,local3,local4,local5.crit -/usr/local/clx/log/crit.log
local1,local2,local3,local4,local5.info -/usr/local/clx/log/io.log
# local1,local2,local3,local4,local5.debug -/usr/local/clx/log/debug.log
There is an important detail when specifying the file name: Normally,
the syslogd syncs the file system (fsync) with every single message.
This produces a very high system load especially when a lot of log
messages ocur. With ``-'' in front of the filename, no fsyncs are
triggered and the default Unix behaviour is used. This information is
described in the syslog.conf manual page (try man 5 syslog.conf). We
recommend to use ``-'', otherwise your system may become very slow.
When you make changes to /etc/syslog.conf, you will have to restart
syslogd with kill -1 to make it read the new version of the file. You
can deactivate entries in the config file by putting a ``#'' in front
of the commands.
Carl Makin, VK1KCM, writes that he feeds all log output into a single
file with the following configuration:
local1,local2,local3,local4,local5.* /usr/local/clx/log/all.log
5.3. Keeping track of CLX's Status
The CLX startup and shutdown script ~/bin/clx also allows to check
CLX's running status, i.e. if all is well. For this, you must call clx
with the ``-c'' option.
$ clx -c
Checking clx processes...
Shared Memory manager clx_ctl: rc = OK
Internal Communications Manager int_com: rc = OK
Transmit Spooler snd_ctl: rc = OK
User Administration usr_ctl: rc = OK
Inter-User communication iu_com: rc = OK
Inter-Node communication icl_com: rc = OK
User Database Interface usr_req: rc = OK
User Data Table Manager udt_mng: rc = OK
Mailbox Controller mb_ctl: rc = OK
User Commands Manager usc_mng: rc = OK
User Dialog manager usr_dlg: rc = OK
BBS interface bbs_if: rc = OK
Received messages Dispatcher rm_disp: rc = OK
Received messages Spooler rcv_ctl: rc = OK
AX.25 interface con_ctl: rc = OK
$
Normally, all processes should return OK as their status. If one of
the processes is missing, you should shutdown CLX and restart.
If this happens often, there maybe a problem with CLX, with the
database or else. Please read the bugs chapter for known problems and
errors.
Also clx's return status can be used to determine a problem. CLX's own
watchdog feature uses an internal function to check its status. For
more information see ``CLX Watchdog''.
5.4. Automatically starting CLX
For automatic startup you should make a link from /sbin/init.d/rc3.d
or /sbin/init.d/rc2.d (what ever your default runlevel) to
/usr/local/clx/tools/startup. This will then run the appropriate
startup script when Unix is starting up.
# cd /sbin/init.d/rc{2|3}.d
# ln -s ~clx_us/tools/startup S99clx
The startup file will remove any lock files and then start up CLX.
5.5. Shutting down CLX
Contrary to the original DOS-based Pavillion software, CLX does not
need to be restarted at regular intervals due to memory leakage etc.
Of course there may also be bugs in the software and memory leaks, but
the impact is not so dramatic and so, in general, CLX can run for a
long period without a restart.
If you still decide to shut down CLX regularly or even reboot your
computer, you could use the following lines for root's crontab entry:
# crontab -l
1 0 * * * /usr/local/bin/adjtime
0 2 * * * /usr/local/clx/tools/clean_log
30 2 * * * /usr/local/clx/bin/clx -s
35 2 * * * /sbin/init.d/postgres stop
45 2 * * * /sbin/reboot
Read this as follows:
o CMOS clock is adjusted at 00:01 every day.
o At 02:00 the log files are cleaned up.
o At 02:30 CLX shuts down
o At 02:35 Postgres shuts down
o after a grace period of 10 minutes, the computer will be rebooted.
5.6. The CLX watchdog
As CLX may be instable or flakey at times, you may wish to control its
status at regular times. With release 3.03, a watchdog concept was
implemented into the core CLX software in that all the processes
update a time stamp in the shared memory area once every sixty
seconds. If all processes have timestamped that memory location, a
file named clx_stat in the ~/log directory is being updated. A script
called clx_watchdog is called by crontab every 10 minutes and checks
the status of this file. If the file has changed in the last five
minutes all is left alone. However, if it hasn't, clx_watchdog shuts
down CLX and restarts it.
To use the watchdog utility, put a line like this into your root's
crontab file:
0,10,20,30,40,50 * * * * /usr/local/clx/tools/clx_watchdog
The watchdog script has undergone several changes and enhancements in
the past. There is now a feature to turn off or turn back on the
watchdog from the shell prompt and from inside the CLX program (as a
privileged user only). The commands to control this are:
| Shell as clx_us | From within CLX (sysop mode)
---------------------------------------------------------------
Turn on | clx_watchdog on | enable/watchdog
Turn off | clx_watchdog off | disable/watchdog
Show status | clx_watchdog show | show/watchdog
---------------------------------------------------------------
This feature comes in handy when updating the CLX software or doing
other time-consuming jobs when watchdog could interfere and shut down
CLX when it was not really necessary.
5.7. Kernel Panic
A hint regarding this rare kernel feature. This portion is an excerpt
from the Linux BootPrompt-HOWTO:
In the unlikely event of a kernel panic (i.e. an internal error that
has been detected by the kernel, and which the kernel decides is
serious enough to moan loudly and then halt everything), the default
behaviour is to just sit there until someone comes along and notices
the panic message on the screen and reboots the machine. However if a
machine is running unattended in an isolated location it may be
desirable for it to automatically reset itself so that the machine
comes back on line. For example, using `panic=30' at boot would cause
the kernel to try and reboot itself 30 seconds after the kernel panic
happened. A value of zero gives the default behaviour, which is to
wait forever.
Note that this timeout value can also be read and set via the
/proc/sys/kernel/panic sysctl interface.
5.8. Other regular Tasks
There are some other things which should be started regularly. For
this, we have added sample file crontab.clx_us file in the ~/config
directory which looks like this:
# At 00:02 UTC every day, create a new MOTD file
# ---> This one must be adapted to your local needs
# ---> 2 0 * * * /usr/local/clx/tools/mk_motd
# At 00:11 UTC every day start database maintenance
11 0 * * * /usr/local/clx/tools/db_maint batch
This file can be activated with the following command:
$ crontab ~/config/crontab.clx_us
Whenever you make changes to this file, you must re-read it with the
crontab command or you may directly edit the crontab entry with
crontab -e.
5.9. The ~/tools directory
There are several scripts in the ~/tools directory which may be used
by the system administrator.
5.9.1. Database administration
bup_db backup or restore all CLX databases.
When called with ``-s'' the utility will make an ASCII backup of all
CLX database tables to the directory ~/backup plus tar all files in
the ~/box directory, which represent any mail and bulletin files.
With ``-r'' this program will read back the ASCII data into an empty,
newly created database and unpack the tar file. bup_db will also back
up user defined tables and additionally send a warning message if the
formats of the old and new tables don't match. The strategy is as
follows:
When backing up, bup_db saves any CLX table which is found in Postgres
table pg_class except ar_data and sys_dat as these may change in a
future version of CLX. When restoring data, bup_db restores everything
from the ~/backup directory except files ending in *.tmpl. This way it
is possible to also restore user defined tables.
clx_db destroy and create CLX Postgres tables
clx_idx create indexes for the CLX Postgres tables
These programs are used to either restart the database in case it has
become corrupt or for other reasons. You should not use them in a
normal situation.
The db_maint program is used for many routine maintenance jobs. It can
be called from within CLX (as a privileged user), from the command
line or via cron in batch mode. For example, to cleanup the DX
database, purge the user log, delete old user records from the
database, delete old mail messages and finally run vacuum you could
use the following crontab entry:
# at 03:08 every day, cleanup CLX database and run vacuum
8 3 * * * /usr/local/clx/tools/db_maint batch
For more details on how to use this program, see ``db_maint''.
5.9.2. CLX Maintenance, Startup and Shutdown
startup startup CLX with correct environment (.profile)
clean_log compress yesterday's logs and start a new log today
clx_watchdog check if all CLX processes are still alive and if
not, shutdown and reboot
mk_motd generate a new "Message of the Day"
You may have read about these programs before.
5.9.3. Other programs
mk_th create some directories for mailbox (used within the clx script)
log_monitor display excerpts from the syslog
us_adm user administration tool (modify permission flags)
shmd display shared memory contents
mbx_chk a tool to check the consistency of entities under ~/box
rm_fwd a script for cleaning up mail forwarding queues
check_adv_txt a utility to help you translate the <tt/adv_txt/ file
read_ak1a a program to import PacketCluster WWV/DX/OPERNAM/QSL/FUL files
filesend program to send a file as a CLX mail message
d2asc Converts dumps of the DX table to nicely formatted ASCII
do_fwd cleaning up mail in the local mailbox and in the forward queues
A few more details about these tools:
us_adm
see section ``User Commands'' for more details.
mbx_chk
A tool was created to keep CLX's database of files in sync with
the entries under ~/box. mbx_chk checks if all files have
corresponding entries in the ml_file table and if all entries in
the table have corresponding files under ~/box. The remaining
files/entries will be deleted. Also files with a negative size
in the database (this is when the files are listed with ``#'' as
the size symbol) will be deleted. When do negative file sizes
ocur? This is when CLX is shut down during message forwarding.
mbx_chk may be run at any time, with CLX up or down.
rm_fwd
This script is useful when you wish to clean up your mail
forwarding queue to a specific node. Let's say, node yy0yy has
ceased to exist but there is still a bunch of mail to be
forwarded to him in your iclb directory. To remove these mails
(which can never be sucessfully forwarded anyway), use the
command rm_fwd yy0yy. You may also use this command from within
the db_maint utility.
do_fwd
do_fwd is used to clean up the local mailbox and the forwarding
queue. The strategy is basically to honour any changes in the
user home node table and apply these changes accordingly:
o if a user has changed his home node to a different node, his
unread mail is removed from the local mailbox and being put on
the forward queue for that system. If he was a remote user and
has changed to an yet other node, his mail from the forwarding
queue for the previous node is now put on the new node.
o if a user has changed his home node to our system, any mail
that's still stuck in the forwarding queue for his old home node
is moved to the local mailbox.
shmd
A utililty to dump shared memory contents. This program is
mainly for debugging purposes so that we can ask you to mail us
a shared memory dump in case you are observing a strange error.
log_monitor
A little program to follow the log messages which are kind of
hard to read. This script can filter out specific callsigns. Use
log_monitor -h to find out its options. Basically they are:
-f to focus on a specific callsign. Only messages to and
from that call are being shown.
-x to exclude messages to or from a specific callsign.
-w to adjust screen width of the messages. Your screen looks
bad when the messages shown are wrapping around the right
end of the terminal and continue on the next. To change this,
you can limit the number of characters shown to let's say
80 and so any longer lines will be truncated.
-s Starting time. The time must be given in a format like
``Jul 19 08:20:30''. This is for off-line monitoring of
old log files. See decription below.
Here is a sample session to show you what's possible:
$ log_monitor -f dl6rai
CLX log monitor v1.0 -- Focus: "dl6rai"
dl6rai->: Connect.
dl6rai->: *** connected to dl6rai
dl6rai<-: Hi Ben, here is "clx"! Experimental cluster-software on linux.
dl6rai<-: clx >
dl6rai->:
dl6rai->:
dl6rai<-: clx >
dl6rai->: sh/us
dl6rai->:
dl6rai<-: User:
dl6rai<-: dl6rai
dl6rai<-: clx >
dl6rai->: sh/dx/2 1
dl6rai->:
dl6rai<-: 1835.7 TI4CF 6-Oct-1996 0641Z <dl8ui>
dl6rai<-: 1842.9 D44BC 6-Oct-1996 0528Z <dl1yd>
dl6rai<-: clx >
dl6rai->: bye
dl6rai->:
dl6rai<-: Bye...
dl6rai<-: Disconnect.
This tool may also be called via the privileged command monitor
when you are logged in as a CLX admin or superuser. You just
specify the callsign to be monitored on the command line:
monitor dl6rai
Using command f you can direct the focus to another callsign, and
with q you can leave the monitor. By default, the window size shown
is limited to 65 characters to make it look nice on a 80x24
terminal. This parameter can be changed with the w command from
inside the monitor.
When specifying a file name, you can trace an existing log file
(off-line monitoring). The log file will then be traced from the
begining unless you specify a starting time using the ``-s''option.
This allows you to watch a specific situation to find problems or
misbehaviours. When ``-s'' was specified, the log is printed in
quasi-realtime, and the time given in square brackets shows when
the net log entry is to be expected. Try this out if it interests
you and you will quickly understand what's going on.
check_adv_txt
a tool to check translated adv_txt files for completeness and
generally helping you with translation. Please refer to section
``check_adv_txt'' for further details.
read_ak1a
This utility is provided to import data from the original
PacketCluster files DX.DAT, OPERNAM.DAT and WWV.DAT and QSL
information from a PacketCluster .ful file. Additionally,
DL8EBW's VHF database can be read using the VHF type.
The program has several flags and options:
-f Output to a file named "postgres.input". Normally
read_ak1a directly connects to the postmaster and
feeds the data into the table.
-v Be verbose
-p Generate PSQL statements instead of "COPY from"
-c Create a new table. Normally, read_ak1a appends data
to an existing table.
-t <type> Here you must specify the type of data you are
reading in. This is either DX or OPERNAM, WWV, QSL,
FUL, VHF or IOTA.
-r <comment> Add a comment to the table being created. This feature
is only available when type=FUL and is being used for
creating new Udt-tables.
-k <rights> Defines with which access rights the Udt table is being
created. Default is "+-" (read-only). This feature
is only available when type=FUL.
read_ak1a transfers AK1A PacketCluster data to the following CLX
tables:
DX.DAT dx_data
OPERNAM.DAT us_data and us_uhn
WWV.DAT wwv_data
QSL.FUL qsl_mng
*.FUL any other Udt table
Using the program is very straightforward. Let's say, you wish to
import your old PacketCluster files one by one into clx. Here are
the steps you have to do.
1. copy the files DX.DAT, OPERNAM.DAT and WWV.DAT and some *.ful
files from PacketCluster into a temporary directory, say
~clx_us/tmp:
2. run the following import commands:
$ read_ak1a -t dx dx.dat
$ read_ak1a -t opernam opernam.dat
$ read_ak1a -t wwv wwv.dat
$ read_ak1a -t qsl qsl.ful
$ read_ak1a -t ful address.ful address
With the last two commands you must also specify which Udt table
this data is to be applied to.
If you wish to create a new table you must also specify the -c
flag and you may optionally add more flags for the Udt tables
being created:
$ read_ak1a -c -t dx dx.dat
$ read_ak1a -c -t opernam opernam.dat
$ read_ak1a -c -t wwv wwv.dat
$ read_ak1a -c -t qsl qsl.ful
$ read_ak1a -c -r "Address Database" -k "++" -t ful address.ful address
If you encounter any trouble and see syntax error messages, this
indicates a problem with the original data. The files I got from
DB0BCC were partly corrupted, especially the OPERNAM.DAT contained
a lot of trash and I could only use a small part of it. To find out
where the trouble is, first create an intermediate file from the
data and take a look at it. This is what I did with my OPERNAM.DAT:
$ read_ak1a -f -t opernam opernam.dat
$ vi postgres.input
$ dd if=opernam.dat bs=196 count=121 of=opernam.new
$ read_ak1a -c -t opernam opernam.new
First I converted the complete file into the intermediate file
postgres.input and had a look at it. I decided that only the first
121 records (who are 196 bytes long each) were useful. The rest of
the data was completely trashed. With the dd command, I extracted
the first 121 records and wrote them to a new file opernam.new.
Finally I imported this file into my data table.
Using this program is not a prerequisite to run CLX. It just
provides a way to save your long-time DX information to the new
system or import some available database files into CLX. If you
decide to completely start from scratch, just go ahead.
Here are a few benchmarks reading in DX.DAT files run on a 90 MHz
Pentium machine with 64 MB RAM:
Reading 10,000 DX spots: 46 seconds
Reading 100,000 DX spots: 648 seconds
Reading 486,333 DX spots: 7911 seconds
5.10. Admin Commands
There are a few commands which are reserved for the CLX admin. Any
user who has the ``admin'' bit set in his user data record is treated
as a CLX admin. Additionally, any user who has successfully passed the
set/privi or the pw dialog, does have admin privileges.
5.10.1. Achieving Admin Status
There are four ways to achieve admin status:
1. automatically by modifying the admin flag with us_adm. This way, a
specific callsign is always privileged. This is for relatively
private installations where there is no fear of radio pirates.
2. manually by using set/priv and supplying a password. This password
must be generated using the ~/bin/get_pwd program. It is a string
which is calculated from a random number and the pw: entry in the
~/config/clx_par file. The dialog that follows set/priv, CLX
presents you with a code:
set/priv
Get password for: 866992064
Now you must call the program ~/bin/get_pwd. This implies that you
have Linux running locally because ~/bin/get_pwd is a statically
linked ELF binary and cannot be run under MS-DOS or Windows.
$ ~/bin/get_pwd abcdefgh 866992064
^BTg]V>FUUF
$
Now return the password back to CLX.
set/priv
Get password for: 866992064
^BTg]V>FUUF
Tnx.
dl6rai-3 de xx0xx 17-Jul-1997 1752Z clx >
CLX will either respond with Tnx. or with Sri. depending on whether
you replied with the correct password or not. Un-setting the privi-
leges is done with the command set/nopriv. Users with a permanent
admin status in the user record cannot switch off their privileged
status in an way.
See ``CLX parameters in ~/config/clx_par'' how to specify the pw:
field in the CLX configuration file.
3. manually by using the pw command. This is compatible with THENET or
BAYCOM password generation. For this you must specify a password
in the ~/config/clx_par file using the baycom_pw command. The
minimum length of the baycom password is 5 characters.
dl6rai-3 de xx0xx 17-Jul-1997 1745Z clx >
pw
DB0CLX> 29 11 35 9 8
f5&94
dl6rai-3 de xx0xx 17-Jul-1997 1745Z clx >
You may also add digital noise to the password by putting a random
number of arbitrary characters in front and behind the password:
35g0al54w4zhagltkf5&94tr904w6zhtskarel94w
^^^^^
To get back to unprivileged status use the command pw off. Users with
a permanent admin status in the user record cannot switch off their
privileged status in an way.
See ``CLX parameters in ~/config/clx_par'' how to specify the bay-
com_pw: field in the CLX configuration file.
4. through authorization from a CLX super user. A super user may use
the command set/priv <call> to change the user status for <call> to
``admin''. This status is kept for the current connection only, it
is not permanent. Admin status can be removed again by using
set/nopriv <call>.
5.10.2. Admin shell commands
Generally, the CLX admin can use any program located under the
~/exec/privileg directory. By default, there are a few commands like
!, which allows executing Unix commands from the clx prompt:
! pwd
/usr/local/clx
dl6rai de db0clx 20-Jul-1997 0807Z clx >
These commands are executed with standard clx_us privileges.
Also there is an interactive shell command which allows you to spawn a
shell and interactively work with the command prompt. the shell and !
are in fact identical, the ! is just a Unix convention found in many
programs. However, note the blank which must go between the ! and the
command.
dl6rai de db0clx 20-Jul-1997 0808Z clx >
shell
$ cd config
$ ed cluster_par
301
/bcc
-db0bcc xa+ tnt-router
s/-db0bcc/db0bcc/
w
300
q
$ exit
exit
dl6rai de db0clx 20-Jul-1997 0810Z clx >
The above is an example how you can edit the ~/config/cluster_par file
from within CLX. You may even call the editor from the CLX command
line:
dl6rai-2 de db0clx 23-Nov-1997 1834Z clx >
! ed config/cluster
301
q
dl6rai-2 de db0clx 23-Nov-1997 1834Z clx >
You can use other programs this way too the like:
! clx -c
There are a few other programs/scripts in that directory like ps to
list process status from within the CLX shell, or a ping command to
generate a PC51, or mon which lets you call the log_monitor described
in ``Log Monitor''.
5.10.3. Admin commands for the ~/box directory
There are some basic commands for the CLX admin to modify any files
under the ~/box subdirectory:
ls to list a directory relative to the ~/box directory
get to read a file
put to write/create a file
rm to erase a file
mkdir to create a new directory under ~/box
These commands will basically do two things:
1. create/modify/delete a file in the specified directory or create a
new directory
2. modify the database accordingly
With this you may create a new file area or change the Message of the
day. With the following CLX command you can enter a new ``Message of
the Day'' message:
put info/help/motd
Please refer to the section ``MOTD'' describing how to set the message
of the day automatically.
Or with this command you can examine DJ0ZY's login script:
get batch/start/dj0zy
5.10.4. User Data Table Commands (Udt)
User Data Tables are general purpose database tables for storing
information like addresses, IOTA information etc. These are the
commands to administer these tables.
5.10.4.1. UDT Admin Commands
create/udt <tablename>/<flags> <cmnt> create a new table
destroy/udt <tablename> destroy an existing table
info/udt <tablename> show info about table
5.10.4.2. User commands
show/<tablename> <key> searches the key field and
outputs matching values
(exact match)
show/<tablename> ~<partial key> searches the key field and
outputs matching values
(partial match)
delete/<tablename> <key> delete a record
update/<tablename> <key> update a record
The names of the tables may use characters a-z, underscore ``_'' and
the minus sign ``-''. The length of the name is limited to 3-10
characters. Internally (i.e. in Postgres) the table is created with
the prefix ``Udt_''. The structure of the table is very simple and
essentially identical to PacketCluster's ``.ful'' style files. The
keyword must consist of characters a-z, underscore ``_'' and the minus
sign ``-'' and may be 1-16 characters in length. The search is case-
insensitive.
The content field may contain roughly 8000 characters, so it may be a
single line or several paragraphs long.
The information record, which is created automatically when the table
is created from within CLX, may contain a comment of up to 255
characters.
There are flags for user write and user read. These flags are
specified when the table is created with + and - characters. The
first, leftmost digit is the read symbol, the second one is the write
symbol.
++ User may read and write the table
+- User may read the table only (this is the default)
-+ User may write the table (but not read --- does this make sense?)
-- User may not read nor write the table
The information about the table (user rights, comment etc.) is
contained in the Clx_Udt_Info record. This record can not be accessed
directly by the user as all user supplied keywords are converted to
lower case before passing them on to Postgres.
The CLX admin may create or destroy Udt tables, as described in
section ``User Data Table Commands''. Please refer to this section
for further details.
5.10.5. Database Maintenance Tool
In order to maintain the CLX database, remove old or erroneous
entries, delete old mail messages and other such tasks, a little menu-
driven tool was put under the privileged path. Any user with sysop
status can call up this menu. The output of the program is very
limited:
db_maint
(db_maint:dl6rai) -->
The program stops and waits for your input. Using the h command, you
may list the available options:
db_maint
(db_maint:dl6rai) --> h
CLX Database maintenance program, main menu
1 -- DX Table related functions
2 -- WWV Table related functions
3 -- Statistical functions
4 -- Modify user records
5 -- User log related functions
6 -- Mailbox related functions
7 -- QSL table related functions
8 -- Other database table functions
9 -- General functions
q -- Exit
(db_maint:clx_us) --> _
The available options are pretty self-explaining. The db_maint program
is also available from the tools directory and can be run by cron to
do periodic maintenance jobs, like deleting old mail messages, purging
log records etc. For this to work well, db_maint silently turns off
the CLX watchdog and back on after it has finished.
Several parameters for db_maint can be specified in the clx_par file
like aging of user records or mail messages.
For running db_maint via cron, a special mode, the ``batch'' mode was
implemented which executes a number of commands which can be specified
in the clx_par file with the batchcommands: parameter. Other
parameters can also be set there like, for how many days log entries
should be kept, how long user records should be kept, how many days
back DX spots should be kept etc. etc.
For further details see ``CLX parameters in ~/config/clx_par''.
5.10.6. Managing Distribution Lists
With CLX version 3.03 and later, distribution lists are available.
These are a kind of symbolic addresses which can be used both with
mail and announce commands by the users. This is useful for sending
special interest bulletins to a group of people as a private mail.
Basically there are three commands to manage the distribution lists:
1. set/distro to add a user to a list - a new list will automatically
be created.
2. set/nodistro to remove a user from a distribution list - if the
iist is empty, it will automatically be deleted.
3. show/distro to find out who is on a specific distribution list or
which lists are available.
Here is an example: Let's say we wish to create a new distribution
list called SIX for the 6 meter enthusiasts. So here we go:
set/distro six dl7av
set/distro six dj5mn
set/distro six dj1oj
Now DL7AV, DJ5MN and DJ1OJ are on the list as we can see here:
sh/distro six
dj1oj dj5mn dl7av
dl6rai de xx0xx 31-Jan-1998 2051Z clx >
To see which other lists are available, we can use the following
command:
sh/distro
six ukw
dl6rai de xx0xx 31-Jan-1998 2051Z clx >
One other list named ukw is available too. To remove DJ5MN from the
SIX list, we use the following command:
set/nodistro ukw dj5mn
Thats all about distribution lists. Users can send messages to these
lists using the symbolic names instead of callsings with the send
command. Additionally, they may use the announce command to make
directed announcements to a specific distibution list.
5.10.7. Checking for bad words in mail
In some countries, like the U.K. the sysop is responsible for the
messages on his system. He is required to have a means to auomatically
check for mail messages containing evil words or expressions. To make
life easier, CLX allows creating a file where you can specify bad
words. A script in the special directory ~clx_us/exec/checks is called
for every incoming mail and if the message contains a bad word, it is
disregarded. Simply list the bad words one by one (each in a new line)
in the ~/config/bad_words file.
Sample bad words file:
milk
alcohol
This bad_words file will kill all incoming messages which contain the
words milk or alcohol.
5.11. Superuser Status
The difference between a CLX admin and superuser is that only the
superuser may give admin rights to other users. This is done with
``set/priv <call>''. (See also ``Achieving Admin Status''). To
become a superuser, you must use the procedures described in section
``User Administration''.
The first user who logs in after installing the CLX software (usually
from the console using the net_usr command) will automatically be
granted superuser rights. Note that logins with net_usr automatically
have SSID -16 if nothing else is specified.
5.12. Extending CLX -- the ~/exec/command directory
You may put your own command extensions into this directory. Anything
found here is executable by the user. CLX (in fact the program
usc_mng) calls the program with at least one parameter, namely the
user's callsign. If the user specifies anything on the command line,
these parameters are passed as $2, $3, etc.
As an example for extensions, we provide the program sun in that
directory which calculates sunrise and sunset times. When DL6RAI
enters
sh/sun kl7
on the command line, the program is called from usc_mng as follows:
~clx_us/exec/command/sh/sun dl6rai kl7
The sources of the program sun are available as an example
application. You may create your own and if you like, you may send
them to us for inclusion in future releases of the CLX software.
5.13. Extending CLX even further -- the ~/exec/interpr directory
After a while experimenting with the external commands, it became
clear that to seamlessly integrate external programs into CLX, one
would need to achieve national language support too. However, adding
this functionality into the external program seemed very complicated
and unwise, as CLX already provides this functionality. So we took
another approach.
A new directory was added to the list of command extension directories
under ~/exec, called interpr. Programs in this directory are bound to
produce a slightly different output in the form:
\<msg-nr>\tab<par1>\tab<par2>\tab .... \tab<parn>\n
The first parameter is the message number requested from adv_txt.
this is a number of 1-4 figures prefixed with a backslash. This may be
followed by one or more (max. 20) parameters which are filled into the
appropriate "%s" fields in the message. The parameters must be
separated by TABs and can only be strings, no binary data. The last
parameter must end with a linefeed. The message numbers must be
between 001 and 2000. Missing parameters are filled with the empty
string.
CLX now takes this output and interprets it in the appropriate
language and fills in the missing variables in the output string.
5.14. The interactive clx_adm tool
This tool gives you the ability to view the status of the node, and
start or stop connections to other nodes or users. In the future, some
of the features currently provided by external tools will be
integrated into clx_adm.
clx_adm comes up with an interactive surface:
#=== C L X ===#
[ Function: [
#=============#
You may now press <F2> to see the menu of available sub menus:
#=== C L X ===#
[ Function: [
#=========+-----------+
| b basics |
| c cluster |
| u user |
+-----------+
Ian Maude, G0VGS, reports that he had to set an environment variable
called TERMINFO to make this look correctly. What he did was
$ export TERMINFO=/usr/share/terminfo
before starting clx_adm.
Select a sub menu with the cursor-up/cursor-down keys or by pressing
the first characters. Then press <Enter>. Selecting the basics-Menu,
for example, gives you a status report of the system currently
running:
#=== C L X ===#
[ Function: b [
#=+-Basics--------------------------------------------------+
| |
| Version: 4.02 emulate: 5447 |
| |
| Call: xx0xx Last Start-Up: 20-Sep-1998 0734Z |
| |
| Data-Base: on Name: clx_db Host: |
| |
+---------------------------------------------------------+
Pressing <F4> will bring up a small list to select from:
#=== C L X ===#
[ Function: b [
#=+-Basics--------------------------------------------------+
| |
| Version: 4.02 emulate: 5447 |
| +-------------+ |
| Call: | clx_par |Last Start-Up: 20-Sep-1998 0734Z |
| | cluster_par | |
| Data-B| adv_txt |: clx_db Host: |
| +-------------+ |
+---------------------------------------------------------+
This is the select list to make CLX re-read one of the two
configuration files or the language dependend message files. If this
action is not triggered manually, CLX will automatically notice the
change of the configuration files within the next five minutes.
One can also use this feature from the command line:
$ clx_adm +b clx_par
This command will also make CLX re-read the configuration file
clx_par.
Returning to the previous menu level is possible by pressing <ESC>
twice. So <ESC><ESC> brings you back to the main menu.
The second sub menu cluster allows you to instantly lock/unlock,
connect and disconnect nodes in your ~/config/cluster_par file. You
cannot add any entries to the file here but you can force a connect.
This is a nice option for testing out new routes or connect scripts.
Press `c' or select the sub menu with the cursor-up/cursor-down keys.
#=== C L X ===#
[ Function: c [
#=+-Cluster----------+
| |
| Call: |
| |
+------------------+
You will then be prompted for a callsign. You may now either enter one
callsign from the cluster_par file directly or rather press <Enter>.
Now you will see the list of all currently known nodes for selection:
#=== C L X ===#
[ Function: c [
#=+-Cluster----------+
| |
| Call: |
| +----------------------------------------------------------+
+-----| db0clx [xx0xx ] >cl act clx PC a |
| monitor [xx0xx ] >cl ^ pass clx U |
| db0bcc [xx0xx ] >cl act clx PC a |
| |
| |
| |
| |
| |
| |
| |
+----------------------------------------------------------+
This screen is actually a status report of the current link situation.
It shows (in this order):
1. The link partner's callsign.
2. The callsign that is used for the AX.25 connection (incoming or
outgoing).
3. A flag showing if the link is locked. Either ``m'' (manual lock),
``f'' (locked by cluster_par), ``x'' (both locks) or `` '' (no
lock).
4. A flag showing if the link is outgoing (>) or incoming (<) and if
the partner is a cluster (cl). This later flag will be deleted in a
future version as it does not make much sense any more.
5. Link status like it is shown in SHOW/CONFIGURATION.
6. A flag showing the link status being active (act) or passive
(pass).
7. A flag showing if the partner is CLX or non-CLX (clx or -).
8. A flag showing which protocol is used: PCxx protocol (PC) or user
mode protocol (U).
9. A flag showing the interface type used (a/w/x/i).
10.
The ping timer.
11.
The ping timout limit.
You can now select one of them by pressing the <Enter> key. Now press
<F4>. A list of available commands is displayed:
#=== C L X ===#
[ Function: c [
#=+-Cluster----------+
| |
| Call: db0bcc |
| +------------+
+-------| lock |
| unlock |
| connect |
| disconnect |
| ping |
+------------+
Locking means that you can temporarily lock a node callsign from being
automatically connected. The unlock function temporarily also unlocks
a callsign from the locked list. No permanent changes are applied to
the cluster_par file, after a restart of CLX, all changes made by
lock/unlock are gone.
You can now select one of these options or simply go back with
<ESC><ESC> to the previous menu.
Finally, the third sub menu is designed for user callsigns. It looks
very similar to the previous one:
#=== C L X ===#
[ Function: u [
#=+-User-------------+
| |
| Call: |
| |
+------------------+
You may now either enter a user's callsign (who must be currently
connected) or simply press <Enter> to select one from the list of
users currently connected. Then, pressing <F4> brings up a choice of
options available.
#=== C L X ===#
[ Function: u [
#=+-User-------------+
| |
| Call: xx0xx |
| +------------+
+-------| disconnect |
| log |
+------------+
So this is it at the moment. You may also use clx_adm in a non-
interactive way by simply stating the commands on the command line.
For example:
$ clx_adm +c connect db0bcc
will make CLX instantly startup the connection to DB0BCC. Or,
$ clx_adm +u disconnect df2rg
will instantly disconnect DF2RG.
6. User Administration
6.1. User Commands
User commands are now available as a user manual contributed by Ian,
G0VGS. You will find it in the directory ~clx_us/doc/user.
6.2. User flags
Users can have different attributes and rights. These user flags are
stored together with other user specific information like name, QTH,
page length etc. in the user database. For every callsign there is
exactly one database entry.
As in AX.25 users can show up with up to 16 different SSIDs (-0...-15)
one set of flags is stored for every SSID. Additionally, there is one
more SSID (-16) for logging in from the system console.
The following flags exist for users. These flags may either be
specified for a specifiy SSID or (if the speicific SSID flag is -1) as
a default for all SSIDs.
flag attribute meaning
-1 default user has default permissions
1 login_denied user will be disconnected
2 priority_login user can login even if generally not permitted
4 login_ignored login is ignored (i.e. digipeater)
8 admin user is admin
16 superuser user is superuser
The login_denied attribute is equivalent to PacketCluster's
SET/LOCKOUT command. The user will be disconnected immediately after
his connect without any warning or informal message.
The priority_login flag is reserved for special cases, where login is
generally not permitted. Normal users are then graciously disconnected
after being informed with a message saying that the node is not
available at this time. Users with the priority_login flag set will
still be able to connect.
With the Flexnet type of net nodes making a connect every 10 minutes
or so, it was felt necessary to add the attribute login_ignored. The
station is logged in but --- as it is generally not interested in
receiving any information but rather checking the link connection and
measuring the time --- the login will be ignored, i.e. nothing will be
written to the user database and no greeting message is produced by
CLX for such users.
The admin flag is a permission for users who have special tasks to do.
see section ``admin'' for more details.
The superuser flag gives a user even more rights. see section
``superuser'' for more details.
The default flag has a special meaning giving the user the default
rights as defined in the default permission flag.
With these flags it is possible to easily administer users and give
special attributes to some. Normal users will have -1 as their SSID
permission flag and 0 as their default permission. That means, they
have no special rights.
Some examples: To exclude a ``N0CALL'' (an often-heard pirate call)
with any SSID, put the default permission to 1 and leave the ssid
permissions at -1. To give admin and priority_login rights to
DL6RAI-13, change the ssid permission to 10 for ``DL6RAI-13'' and
leave all others at -1. To set the name of ``DJ0ZY'' to ``Franta''
you would use the ``-n'' option. To ignore any logins from (RMNC,
Flexnet) digipeaters, let's say for DB0PV, put the default permission
to 4. This will make both Flexnet and CLX happy.
6.3. The us_adm tool
These flags and other attributes can be looked up and changed with the
us_adm program in the tools directory. To follow the examples above
you would issue the following commands:
$ us_adm -d 1 n0call
$ us_adm -p 10 dl6rai-13
$ us_adm -n Franta dj0zy
$ us_adm -n 4 db0pv
When you call us_adm with the -v flag and a callsign, the program
lists the user's entries in the database:
$ us_adm -v dl6rai
User Information for Station dl6rai
Name: Ben
Location: 48 34 n 012 12 e
QTH: Ergolding
First login: Sat Feb 03 09:14:08 1996 GMT
Last login: Thu Feb 29 16:47:32 1996 GMT
Pagelength: [default]
Language: german
Character Set:
Exit string: /exit
Address:
SSID-Permission Flags
------------------------------------------------------------
SSID: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Permissions: -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
------------------------------------------------------------
Default Permission: 0 Flag for dl6rai-0: -1 [default]
$
With CLX version 2.03 us_adm was reworked and can now also create new
users. So you it's not necessary to have a user log in before you can
change his entries. Also the output is slightly different. You can
also erase users with the ``-e'' switch (this was just added for
symmetry). Just call the us_adm program without any parameters to see
what you can do. When a field has blanks in it, you must surround it
with double quotes (``48 34 N 12 12 E'').
set/home_node allows the sysop updating a user's home node
information. set/home_node dl6rai db0bcc changes DL6RAI's home node
setting to DB0BCC.
6.4. Connecting, Disconnecting and Locking out
Privileged users may use the commands disconnect, set/lockout and
set/nolockout from within CLX to either force a disconnect or even
lock out the callsign completely. Disconnecting and locking out a
station is quite a drastic measure and should be used only in an
emergency. Both actions are logged to io.log for later investigation.
With set/nolockout the ban on the station previously locked out is
being removed.
There is also a utility called monitor which can be used to monitor
user input and output. This is described in section ``log_monitor''.
With the connect command you may trigger CLX to start up a link
connection and as such avoid lengthy idle times when the CLX timers
are running.
7. Appendix
7.1. Release Notes
The release notes are no longer in this manual. Please look for the
files called README_* in the ~/doc/sysop directory.
7.2. PacketCluster's PCxx protocol
The following list comes from the original PacketCluster
documentation. These are the messages used among PacketCluster and
CLX nodes. Thanks to OE1TKW for originally collecting this
information:
7.2.1. Excerpt the from PacketCluster sysop manual, Appendix C
Internode communication between PacketCluster nodes is performed by
sending Information packets that begin with the string ``PC'',
followed by an ACSII coded number between 10 and (currently) 51.
7.2.2. Overview
PC10 Talk mode
PC11 DX info
PC12 Announcement
PC13 Stn into CONF
PC14 Stn out of CONF
PC15 Conference mode
PC16 PC stn add
PC17 PC stn delete
PC18 Initialisation: RequestInit
PC19 Initialisation: NodeAdd
PC20 Initialisation: InitDone
PC21 Initialisation: NodeDelete
PC22 Initialisation: PCDone
PC23 WWV Info
PC24 Here status info
PC25 DX/WWV merge request
PC26 DX merge info
PC27 WWV merge info
PC28 mail: SendSubject
PC29 mail: SendText
PC30 mail: AckSubject
PC31 mail: AckText
PC32 mail: CompleteText
PC33 mail: AckCompleteText
PC34 Remote commands: Command *
PC35 Remote commands: Response *
PC36 Remote commands: Show command
PC37 Needs database update
PC38 Connected node list
PC39 NodeDelete w/disc
PC40 PC file forward
PC41 User info
PC42 Forwarding abort
PC43 PC-mail: External mail, Send subject
PC44 Remote DB request
PC45 Remote DB response
PC46 Remote DB complete
PC47 Remote DB update
PC48 Remote user DB update
PC49 Bulletin mail delete
PC50 Local user count
PC51 Ping request or answer
*) PC34 and PC35 are PC84 and PC85 for CLX-to-CLX remote commands.
7.2.3. CLX additions to the PCxx protocol
The following command extensions are being used within the CLX
network:
PC73 WCY Info
PC75 WCY merge request
PC77 WCY merge data
PC84 CLX remote command
PC85 CLX remote command response
7.2.4. Syntax description
PC10^from-stn^to-stn^msg^bell-flag^to-stn^from-pc^~
PC11^DXfreq^DXcall^DXmisc^Date^Time^logger^from-pc^hops^~
PC12^from-stn^to-PC^msg^sysop-flg^from-pc^wx-flg^hops^~
PC13^stn^hops^
PC14^stn^hops^
PC15^from-stn^msg^hops^
PC16^host^stn conf-mode here^stn conf-mode here^stn conf-mode here^...^...^hops^
PC17^stn^from-pc^hops^
PC18^cluster-info^ver^~
PC19^here^PC-stn^talk^version^hops^
PC20^
PC21^PC-stn^reason^hops^
PC22^
PC23^date^hour^SFI^A^K^forecast^logger^from-pc^hops^~
PC24^stn^here^hops^
PC25^merge-stn^from-stn^DX-cnt^WWV-cnt^
PC26^DXFreq^DXCall^date^time^info^logger^to-stn^~
PC27^date^hour^SFI^A^K^forecast^logger^to-stn^~
PC28^to-pc^from-pc^to-stn^from-stn^date^time^private-flag^subject^~
PC29^to-pc^from-pc^msg-#^text^~
PC30^to-pc^from-pc^msg-#^
PC31^to-pc^from-pc^msg-#^
PC32^to-pc^from-pc^msg-#^
PC33^to-pc^from-pc^msg-#^
PC34^to-pc^from-pc^cmd^~
PC35^to-pc^from-pc^cmd-resp^~
PC36^to-pc^from-pc^cmd^~
PC37^to-pc^from-pc^stream^command^~
PC38^node,node,node,...^~
PC39^stn^reason^
PC40^to-pc^from-pc^filename^bull-flag^line-cnt^
PC41^stn^type^info^hops^~
PC42^to-pc^from-pc^msg-#^
PC43^to-pc^from-pc^to-stn^date^time^private-flg^subject^line-cnt^~
PC44^to-pc^from-pc^stream^qualifier^key^user^
PC45^to-pc^from-pc^stream^info^~
PC46^to-pc^from-pc^stream^
PC47^to-pc^from-pc^user^qualifier^key^stream^type^
PC48^to-pc^from-pc^stream^qualifier^key^user^
PC49^stn^subject^hops^~
PC50^from-pc^usercnt^hops^
PC51^to-pc^from-pc^ping^
Legend
======
logger station that reports the info
bell-flag 1=bell, 0=no bell
merge-stn node that provides the info
DXCall DX station call
msg message text
DXFreq DX station frequency
PC-stn PacketCluster node
DXmisc DX misc text
stn Call of connected station
from-stn originating station
conf-mode *=conf, -= no conf
here 1=here, 0=no here
to-stn destination station
host Packet Cluster node call
ping 1=request, 0=answer
7.2.5. Protocol messages handled by the CLX software
This is a table of PCxx messages which are currently handled by the
CLX software.
Msg process generate forward note
----------------------------------------------------------
PC0 error - - dj6rx
PC10 + + +
PC11 + + +
PC12 + + +
PC13 - - -
PC14 - - -
PC15 - - -
PC16 + + + 1)
PC17 + + + 1)
PC18 + +
PC19 + + + 1)
PC20 + +
PC21 + + + 1)
PC22 + +
PC23 + + +
PC24 + + +
PC25 + + +
PC26 + + +
PC27 + + +
PC28 + + +
PC29 + + +
PC30 + + +
PC31 + + + after 9999 lines
PC32 + + +
PC33 + + +
PC34 - - -
PC35 - - -
PC36 - - -
PC37 - - -
PC38 - -
PC39 + + -
PC40 - - -
PC41 + + -
PC42 - - -
PC43 - - -
PC44 + + -
PC45 - + +
PC46 - + +
PC47 - - -
PC48 - - -
PC49 - - -
PC50 + + -
PC51 + + +
----------------------------------------------------------
Notes:
o + means CLX processes this request.
o - means CLX ignores this request.
o An empty field denotes meaningless fields.
The field forward has two meanings:
1. broadcast type messages (see ``Broadcast type PCxx telegrams'')
will be forwarded to other nodes according to CLX's forwarding
scheme (which knows active and passive link partners as well as CLX
and non-CLX partners). If the hop counter in the received telegram
is zero, the telegram will not be forwarded.
2. Telegrams with a destination (like mail forwarding or database
request) will be forwarded normally to the destination.
1) means: Due to compatibility issues with the Pavillion software,
this message is not being forwarded to a PacketCluster node.
7.3. Current Users of the CLX software
This list has grown too big. Please refer to the file
/usr/local/clx/doc/misc/user.db for information about current users of
the CLX software. Email addresses shown with an initial # did not
work, so they are probably out of date.
7.4. Thank You!
Numerous people have helped out with information, details, bug reports
and other useful things in the years of the CLX development. Most of
our communication was carried out via the Internet, some by Packet
Radio. Thanks to all of you for your help, especially to:
Alan Cox, GW4PTS for putting the AX.25 code into the kernel
Jonathan Naylor, G4KLX, for maintaining the AX.25 code
Harm, DG7DAH for helping us with WAMPES configuration
Joni Baecklund, OH2RBJ for lots of feedback, ideas and documentation
Christian Blattnik, DC0JI for providing a place for DB0CLX
Brigitte Blattnik, DH3MBJ for supporting DJ0ZY, DL6RAI and DC0JI
Robert Chalmas, HB9BZA, for a French version of adv_txt and help files
Diego Serafin, IK3HUK, for the first Italian version of adv_txt and help files
Jonny, DG4MMI, for the German version of adv_txt
Mark Wahl, DL4YBG, for putting special features into TNT
Andrea Fiorentino, I0/N5KME, for the second Italian version of adv_txt
Rich Schmelkin, AE4EJ for running the old CLX mailing list
Ian Maude, G0VGS for helping a lot with the user documentation
Jose Lopez, EA5SW, for a Spanish version of adv_txt
Ignacio Galiana, EA7FPE, for the new version of the Spanish adv_txt
Gerard Parat, F6FGZ for a French version of adv_txt and extensive user manual
Lutz Petschulat, DG0LP, for updating the CLX help files to version 3.02
Heikki Hannikainen, OH7LZB, for running the current CLX mailing list
Luca Palazzo, IW9EXL, for updating the Italian files
Luiz F. Catalan, PP5AQ, for a Portuguese version of adv_txt
Erwin Lemmers, PE1NMB, for a Dutch version of adv_txt and help files
Matthew (Max) George, NG7M, for picking up the FAQ maintenance
Peter Pfann, DL2NBU, for his work on the SHOW/SUN command family
Ulrich Mueller, DK4VW, for his work on the German user manual
Arnold Bosch, PE2AB, for running the CLX web page
Angel Claus, EA7WA, for his help on the Spanish adv_txt
Did I forget you? Please let me know! Want to show up in this list
too? Ask for the list of jobs to be done! Many details and small jobs
could be outsourced if we found the people to do it.
7.5. Frequently Asked Questions
The following is a collection of frequently asked questions by users
of the CLX software. The FAQ is now (as of September 1998) being
maintained by Matthew (Max) George, NG7M. It will probably be left out
from this document in the near future.
Q. What are the timings for CLX setting up connections to other CLX
and/or Pavillion-nodes?
A. CLX usually measures the time for how long nothing has been
received on a link connection. If this is longer than five minutes,
CLX sends a ping (PC51) to the node. Then it waits for another 5
minutes. If nothing is received in return to the ping, it explicitly
disconnects the link connection, waits one minute and starts to setup
the link again.
Initially, after CLX has been brought up, the software will start
making connections after a period of 60 seconds to allow all database
activities to finish before the first node-to-node connection is
established.
Q. Which services must be started on my system to run CLX?
A. Basically, you need syslogd, portmap and postmaster. postmaster
must be running under user postgres, all others as root. Additionally
you need one of the two communication packages, either Alan Cox's
AX.25 driver or WAMPES. These must be running when CLX is started.
Q. CLX has no monitor. How can I see what my users are doing?
A.
$ tail -f ~/logs/io.log
if you have configured syslogd correctly. You may also now use the
log_monitor as described in section ``Log Monitor''.
Q. What Linux versions has CLX been tested on?
A. We have started CLX with Linux 1.1.50 and we are currently using it
under 2.0.35.
Q. rpcinfo says:
rpcinfo: can't contact portmapper:
RPC: Remote system error - Connection refused
What's wrong?
A. portmap is not running. Start it from the rc.* script when booting
Linux.
Q. In the Postgres directory structure, many files have permissions
600 (``-rw------''). How can any program touch these files after all?
A. The Postgres database system does all its job via the postmaster
process who is handling the communication with any external processes
and programs. This is needed for serialisation so that every
transaction is finished before the next one starts. Due to this, only
the postgres user must have access to the database files. Any user
permits etc. are treated internally by the Postgres software.
Q. How come the kissinit command works without specifying a speed?
A. 9600 is the default. If you are using another speed on your line,
you must set this explicitly with the stty command.
Q. When starting up CLX everything comes up until con_ctl, which hangs
forever. What's wrong?
A. The two callsigns, the one you specify with kissattch and the one
which is encrypted in ~/config/clx_par must be identical. Otherwise
con_ctl will hang.
Q. SH/DX 20 no longer works, but SH/DX is still OK. What's happened?
A. Most probably your DX database table has gone wild. This is a bug
in Postgres which has not yet been cleared. We have observed a
destroyed DX table many times at DB0CLX. Your only chance to correct
the problem is destroying and building the table from scratch. Here is
how:
$ cd ~/db
$ psql clx_db
clx_db=> drop table dx_data;
clx_db=> \i dx_data.cl
clx_db=> \q
$
Q. CLX doesn't seem to delete the nodes (in sh/conf) after a
disconnect. Is it because I'm using an external script? If not can I
do something for this?
A. The Nodes listing is a programming problem. I will try to explain:
CLX allows loops and multiple connects within a PacketCluster/CLX
network. If a node connection is lost but another one still exists
into the network, which of the nodes in the list are then no longer
"members of the network"? We have tried to solve this question several
times without success. So I think CLX currently just follows the node
connect/node disconnect (PC19/PC21) spots and as long as it still has
a valid connection, displays all nodes in the network.
If you can provide us with a good solution to the problem we are ready
to implement it.
Q. CLX does not report its own node connection list to other Pavillion
PacketCluster nodes? This hides the network behind CLX to their users.
Why don't you report this information (through PC38/PC39, PC19/PC21)?
A. The problem you describe (PC38) has in fact nothing to do with
PC38. It is only a compatibility issue and for that reason, CLX is
not sending any such information to a PacketCluster node. Here is why:
About 9 months ago CLX would send a list of connected nodes out to
every active link. Due to CLX's special ability to make multiple
connects into a network, some distant nodes already showed up in CLX's
Node list. We had a configuration like this:
DB0ABH-15
|
DB0SPC +-----------DB0BCC--------------OE1XHB
| |
| +--DB0SDX------(A)-----DB0CLX
| | |
+-HB9W-8-----------(P)-------+
We found out that whenever DB0CLX reported that it had connected
HB9W-8, DB0SDX would no longer try to establish its own connection to
HB9W-8. Obviously, the PacketCluster software anticipated that the
connection already existed.
We had this same situation between DB0BCC, DB0SDX and DB0CLX so it is
certainly a bug/problem in the Pavillion software (which does not know
about multiple links).
For this reason we decided that CLX would not report any network
information to neighbouring Pavillion nodes. However, it does fully
report to adjacent CLX nodes.
Q. Is there a CLX mailing list?
A. Yes! Thanks to Heikki Hannikainen, OH7LZB, CLX has its own mailing
list. See ``CLX Mailing List'' for details on how to subscribe.
By the way, the current list of CLX users can be found elsewhere in
this document in ``CLX User List''.
Q. How can I restart CLX when a process has died? clx -s followed by
clx -u doesn't work.
A. The reason for this is that (a) one or more of the processes hung
and did not clear its rpc port address, or (b) some of the shared
memory areas is not free. What can you do?
There is now a -x to the CLX script which allows clearing resources.
Clearing rpc ports, however, requires root privileges.
$ clx -x
You must be root to clear rpc ports.
Password:
Now you should be able to restart CLX without rebooting the machine.
Q. I have only a DOS machine on the Internet. How can I get the big
CLX archive to my Linux box?
A. There are several ways. One that I have used often in the past is
by using PKZIP on the DOS and unzip on the Linux side.
Prerequisites: - PKZIP version 2.04 on DOS machine - unzip version
5.12 on Linux machine.
1. Download the file on your DOS machine
2. Copy the file on two disks.
C:\TMP>dir *.tgz
CLX_301 TGZ 2,564,043 07-20-97 9:06p
C:\TMP>pkzip -& a:clx.zip clx_301.tgz
Creating ZIP: A:CLX.ZIP
Adding: CLX_301.TGZ Deflating ( 2%)
Insert disk #2 - Press a key when ready
, done.
C:\TMP>
3. Go to your Linux machine and copy the two disks, rename the file
from disk 1 to clx1.zip and the file from disk 2 to clx2.zip:
$ mcopy a:clx.zip clx1.zip
Copying clx.zip
$ mcopy a:clx.zip clx2.zip
Copying clx.zip
4. Concatenate the two files into one big clx.zip file:
$ cat clx1.zip clx2.zip > clx.zip
5. Now unpack the clx.zip file, ignore the warnings.
$ unzip clx.zip
Archive: clx.zip
warning [clx.zip]:
zipfile claims to be last disk of a multi-part archive;
attempting to process anyway, assuming all parts have been
concatenated together in order. Expect "errors" and warnings...
true multi-part support
doesn't exist yet (coming soon).
warning [clx.zip]: extra 1457664 bytes at beginning or within zipfile
(attempting to process anyway)
file #0: bad zipfile offset (local header sig): 1457668
(attempting to re-compensate)
inflating: CLX_301.TGZ
$ ll CLX_301.TGZ
-rw-r--r-- 1 ben users 2564043 Jul 20 21:06 CLX_301.TGZ
You should now have clx_301.tgz on your Linux box.
Q. What do the occasional messages like
icl_com/us_ctrl.cc: Message is not correct "PC50"/
in my io.log mean?
A. PacketCluster knows a special type of external connections using
the -EXT switch in the node definition. Due to a bug in the AK1A
software, the PC50 will be sent in a different format which is not
understood by CLX.
Q. My system is crashing very often for unknown reasons. Other CLX
sysops report that the version I am using is generally stable. What
can I do?
A. We have found that once in a while, the Postgres database can
become slightly corrupted - probably due to previous crashes or other
reasons. That means, the data is available and all looks OK but some
datum deep in the database is broken and when CLX reads it (due to
some innocent user command), a string variable may be exhausted, a
float may be returned where an integer was expected etc. etc. As CLX
is never checking the input data received from the database, a program
may crash from this bad data.
What has cured the problem in the past several times was backing up
the database, destroying it completely, recreating it and re-reading
the data. How do you do it? First you need some time (maybe several
hours, depending on your data) and you need to shutdown CLX. Having
done that, issue the following commands (all as user clx_us):
$ bup_db -s
$ clx_db
$ bup_db -r
$ clx_idx
While backing up the files is normally pretty fast, re-reading the
data may take a while.
This treatment was successful for DB0BCC when CLX version 4.00b turned
out to be pretty stable elsewehere but not at DB0BCC. After re-reading
the data, the system would stay up for up to 16 days.
Q. How can I turn off the screen blanker?
A. Use /bin/setterm -blank 0 in your Linux startup scripts.
Q. What does the message "kernel: Unable to load interpreter" mean? I
find this in my log when CLX crashed.
A. This is a very definitive message from the operating system kernel
saying that it cannot execute a new program because it cannot load the
ELF interpreter. We have observed that with version 4.00 of CLX where
a bug in one of the programs ate up more and more file descriptors
(FDs) and in the end (after a few hours, sometimes days), there were
no more FDs available. Then all kinds of strange things would happen.
Fortunately this bug was found very quickly but when such a message
ocurs again, you should check for the number of FDs currently used
with the following command:
# echo /proc/[0-9]*/fd/* | wc -w
This command must be executed as root. When freshly started, CLX needs
about 300 FDs. The limit in the unmodified Linux kernel is 1024.
7.6. Known Bugs in the CLX software
Here is a list of known bugs in the current CLX software. If you
happen to find a bug not listed here, please let us know.
o Node callsigns do not disappear from the show/configuration display
even after they were disconnected. This is a problem which needs a
concept. Due to CLX's ability to support multiple links, it is
unclear when a node is no longer available if one link fails.
o When using REPLY to answer a mail message you received from a
station at a different node, your return message will not be
forwarded.
o Telnet link connections have an echo which produce problems within
CLX.
7.7. Bugs and Bug Reporting
Nobody is perfect. So is this software. We have put a lot of work and
energy into this project but yet some problems are left to be
unleashed. CLX has been on the air at DB0CLX for more than four years
now. In the mean time, many bugs were fixed, new ones introduced and
fixed again. At this time we have reached a point where we believe
there are no major bugs left (but you may prove us wrong).
If you find bugs, please try to describe them in a detailed way and
let us know. Please be as specific as possible and include screen
shots, logs etc. with your report. Send the report by email to
[email protected].
Sometimes one of the CLX processes dies silently. You will see that by
inspecting io.log or error.log and seeing a message like this:
snd_ctl/rpc_send.cc -> con_ctl, 0 - 1/dj0zy: Connection refused
This usually indicates that con_ctl has died and snd_ctl is not able
to deliver a telegram to this process.
In such a case it is very valuable for us to have a copy of the last
10-20 messages in the io.log. Please send this together with your
error report.
This software is developed by DJ0ZY and DL6RAI. DJ0ZY is doing the
C++ and Postgres core programming. So his activities are mainly in the
~/bin and ~/db directories. DL6RAI's job is maintaining the Perl
scripts in ~/bin, ~/tools, ~/exec and the documentation in ~/doc. This
information should help you to direct your bug reports either to
Franta or to me. If in doubt, send your message to
[email protected].
7.8. Wish List
A list of features currently missing in CLX which are going to be
implemented next.
o Making clx_watchdog send a warning message to users, one minute
before it's shutting down CLX.
o An extended DX spot line which gives country names, beam heading
etc.
o A SHOW/MUF or SHOW/PROPAGATION command (OE1TKW is working on it).