Probably the most widely used and most popular method of distributing news on Linux systems is C News, designed for UUCP connections (although you can use C News with NNTP, too). Configuring C News to transfer newsgroups between your machine and others is not too difficult, although it can be time-consuming. This chapter walks through the steps necessary to configure C News and explains most of the files that C News uses.
When news is transferred in from a remote newsfeed, the rnews program accepts it and stores it in a spooling directory (usually /usr/spool/news/in.coming or /var/spool/news/in.coming). From the spool directory, the news messages are picked up and processed by the newsrun program. Outgoing news (such as from a local user) is usually sent from the users' newsreader to the inews program, which completes all the header details and stores it ready for transfer in the directory /usr/spool/news/out.going (or /var/spool/news/out.going).
Both incoming and outgoing messages pass through the relaynews program, which is responsible for checking whether the message has already been seen on the local site. To do this, relaynews checks the message ID against the history file (which contains a list of all processed messages). If the message has already been accepted at the local site, it is discarded.
If the message is new, relaynews checks the Newsgroups heading of the message to verify that the local site accepts articles for that newsgroup. If the newsgroup is not supported, relaynews discards the message. If the newsgroup exists in the active file, relaynews moves the message into the proper newsgroup spool directory. If the newsgroup is not listed in the active file, the article is moved to a miscellaneous group (often called junk).
The relaynews program also checks the header information of messages to verify that they are not stale. If a stale article is found, it is discarded. If a message is not processed for any other reason (such as incomplete header, improper date, and so on), it is moved to the directory /usr/spool/news/in.coming/bad or /var/spool/news/in.coming.bad) and an error message logged. After all these checks, the message ID is logged to the history file.
Messages that are to be sent further on through a news network are checked against the Path field in the header to make sure they haven't already received the article. If they haven't, the message can be forwarded on using UUCP (or in rarer cases, NNTP).
If batching of news articles is in effect, incoming and new articles are not forwarded on to other news machines in the UUCP network immediately but are held until the batch is transferred as a whole. This is usually controlled through a crontab entry.
Configuring the C News system is a matter of verifying that necessary directories are accessible by C News, and that configuration files have valid values in them. Finally, all the file ownerships and permissions have to be checked. The configuration is best done in steps.
To begin the configuration process for C News, obtain copies of the active and newsgroup files from your newsfeed. You can usually obtain the files with a UUCP command or an e-mail message to the postmaster at that site. Place the active and newsgroup files in the news directory (usually /usr/lib/news), and change the ownership to the user news. Next, change the file permissions to mode 644. You can do both these steps with the following commands:
chown news /usr/lib/news/active /usr/lib/news/newsgroup chmod 644 /usr/lib/news/active /usr/lib/news/newsgroup
Edit the active file with any ASCII editor. Remove any line from the file that has the line "to.*". Add two lines that add your machine name and newsfeed site names, so that you have lines like this:
to.merlin to.brutus
These lines assume that your local site is called merlin and your feed site is called brutus. The order of the entries doesn't matter. These entries are used with the news ihave/sendme message system, and they should exist in the active file even if you are not using the ihave/sendme system.
Next, add the following lines to the /usr/lib/news/active file:
junk control
These lines are used for handling unidentified newsgroup articles and other functions. Not all versions of C News let you access this file directly. Instead, two utilities called addgroup and rmgroup perform the same function. In this case, use the function addgroup to add the two lines.
Whenever you or C News create a new entry in the active file, an entry is made in the file /usr/lib/news/active.times that indicates the name of the newsgroup, when it was created, who created it, and how it was done. Newsreaders often use this file to detect new newsgroups, but it can also serve as a handy log of newsgroup creation for system administrators.
The /usr/lib/news/active file lists all groups that are known to exist (and are wanted) at your site, as well as the article numbers that are currently on the system. The format of each line in the active file is as follows:
newsgroup high low permission
In this format, newsgroup is the name of the newsgroup, high and low are the highest and lowest article numbers that are on your system, although C News doesn't update this field automatically. To update this field (which many newsreaders require to properly track article threads), you need to run the updatemin program that accompanies most recent versions of C News (older versions of C News have a program called upact instead). When the numbers are incorrect (high lower than low, or high missing), the default is to set high to low+1.
The permission field gives the access system users have for the group. The permission is one of the following values:
= | This value marks the newsgroup as having an alias, followed by the name of the local alias. For example, the entry =naughty_stuff would post any articles sent to the newsgroup to a local newsgroup alias named naughty_stuff. |
m | This value indicates a moderated newsgroup. Articles posted to a moderated newsgroup are e-mailed to the moderator. The moderator's address is in the file /usr/lib/news/moderators. |
n | With this value, users are not allowed to post to the group, but they can read articles can be read. |
x | The value means that the group is disabled (no reading allowed), although articles can still be forwarded to other machines. |
y | This value means that users can post to the newsgroup. |
Finally, you have to renumber all the article numbers in the second and third fields of the new /usr/lib/news/active files to 0 (starting article number) and 1 (ending article number), so that you will receive all the articles properly. This process requires a lot of manual editing, or you can perform the entire process with one sed command (which is best performed on a copy of the original active file):
cp active active.original sed 's/ [0-9]* [0-9]* / 0000000000 00001 /' active.original > active
Manually check the new active file to make sure that the format of the file is correct. The entire second column should be a set of zeros, and the third column should be the number one.
The newsgroups file is a list of all newsgroups with a one-line description of its purpose. The descriptions are used by many newsreader applications to display groups users subscribe to. You may have to update this file occasionally to ensure that it is accurate, especially as newsgroups change frequently. For an initial configuration, you can leave the file as it was sent from your news feed.
A number of configuration files are usually maintained in the C News directory, usually /usr/lib/news. Each file shown in the following list needs to be checked for the proper entries that work with your site. You can edit each file with any ASCII editor.
Check and modify the following C News configuration files:
explist | This file specifies expiration times of some newsgroups. |
mailname | This file is your machine's name as it should appear on outgoing mail, usually as your full domain name (such as tpci.com). |
organization | This file is your organization's name used to identify the originating site on outgoing articles. |
sys | For most installations, modify the ME line to contain all/all. The sys file is discussed in more detail in the section "The sys File" later in this chapter. |
whoami | This file is your machine's name in UUCP format (such as tpci). |
After you have made these configuration changes, you should check that the necessary C News directories exist, or create them if they do not. The in.coming and out.going directories should exist below the spool directory, which may be /usr/spool or /var/spool depending on your directory structure. To create these two directories, issue the command (assuming /usr/spool is the spool directory):
mkdir /usr/spool/news/in.coming /usr/spool/news/out.going
If the /usr/spool/news directory doesn't already exist when you issue these commands, you may have to create it first. More recent versions of C News also require a directory called /usr/spool/news/out.master (or the /var equivalent). You don't need to create separate spool directories for each of the newsgroups you intend to receive because C News will create directories when necessary.
Once these directories have been created, or you have checked for their existence, you should also check their ownerships. For security reasons, the directories should all be owned by the user news in the group news. The file permissions should be set to mode 755. You can set the ownerships and permissions with the commands:
cd /usr/spool chown -R news.news news chmod -R 755 news
These commands assume that your versions of chown and chmod accept the recursive -R option (which most Linux versions do). If not, issue the chown and chmod commands for each directory mentioned above.
As mentioned earlier, the /usr/lib/news/sys file is one of the configuration files that needs to be tailored for your system. Because the sys file has several important aspects, this section looks at the file in more detail. The sys file controls the hierarchies of newsgroups that are downloaded to your site and forwarded on to other sites, depending on the configuration.
The sys file is composed of a set of entries for each site that you forward news to. It also lists the newsgroups that you will accept from other sites. The sys file uses a particular format for each entry, which follows this general syntax:
site/exclusions:groups/distribution_list:flags:cmds
All of the parameters of the entry are optional except the sitename, although the colons must be left in place. The parameters have the following meaning:
When specifying remote machine names in the site field of a sys entry, make sure you account for possible variations in the Path header of articles. This usually means providing both the UUCP and full domain name formats for the site, as well as any aliases that may be used. Separate multiple entries in the site specification with a slash. For example, your entry for a machine called brutus may look like this:
brutus/brutus.bignet.com
The sys file entry for your own machine is important. Any newsgroups next to the ME name are handled as newsgroups you specifically want to keep track of, while all others are sent to the junk newsgroup.
You have to add a line for each site that connects to your machine for their news feed (if there are any). If you are at the end of a newsfeed, you can enter the name of your newsfeed (as all locally generated articles are sent back to that machine only).
The newsgroups that are to be transferred to and from the remote site are specified in the groups field. You can set this to transfer several specific newsgroups by separating them with commas. For example, the following entry transfers only the three newsgroups specified:
rec.audio.high-end,rec.video.laserdisk,rec.bicyles.tech
If you want to transfer all the newsgroups that are available, use the keyword all.
To specify a specific hierarchy to be transferred in the group field, use the prefix that you want followed by the keyword all (such as rec.audio.all to transfer all newsgroups starting with rec.audio).
To prevent a hierarchy from being transferred, precede the name with an exclamation mark. For example, !sci.biology rejects any newsgroups with the sci.biology prefix. You can use the formats interchangeably in the list, such as this entry:
!rec.audio,rec.audio.high-end,!sci,sci.biology.all,comp.os.all
This entry does not transfer any newsgroups starting with rec.audio except rec.audio.high-end. It also prevents all sci. newsgroups except those starting with sci.biology. In addition, all comp.os newsgroups are transferred.
You can use this field as a handy filter to suppress major hierarchies. For example, if you want to accept or transfer all newsgroups except those starting with alt (which can be the most amusing and controversial newsgroups on USENET), you would enter the following in the field:
all,!alt
This field is often used by sites to suppress not only the alt groups, but also all sex-oriented groups.
If you are forwarding newsgroups on to other machines, you can specify the newsgroups that are to be sent with the optional distribution list entry, which is separated from the groups list by a slash. Again, this is a command-separated list that uses the same format as the groups field. For example, this entry forwards all newsgroups to the remote machine except those starting with alt and those starting with tpci (which are local newsgroups specific to the tpci network):
all,!alt,!tpci
The flags that are allowed in the flag field of the sys file can be any combination of the following (or none at all):
F | Enables batching |
f | Enables batching (functions almost the same as the F flag) |
I | Forces C News to produce an article list for use by ihave/sendme |
L | Transmits only articles posted in your machine (or when followed by a number, limits transfers to articles posted within that number of hops of your machine, based on the Path field in the article header) |
m | Batches only articles from moderated newsgroups |
n | Creates batch files for NNTP transfer clients |
u | Batches only articles from unmoderated newsgroups |
The flags F, f, I, and n are mutually exclusive, meaning that you can only use one of them in a single entry.
The cmds field is usually used to force the transfer of the article to other machines in the news chain. The default value (if none other is specified) on non-batching news systems is as follows:
uux - -r -z remote_name!rnews
In this example, remote_name is the name of the machine the article is to be transferred to. The article is fed to rnews through standard input by this command. Several alternate commands are supplied with some C News versions in the directory /usr/lib/news/bin/batch, mostly starting with the filename via.
If batching is enabled (the flags field has one of F, f, I, or n), this field should specify a filename. The default value if none is specified is /usr/spool/news/out.going/remote_name/togo where remote_name is the name of the remote system. Any entry in this field that does not start with a slash is assumed to be relative to the directory /usr/spool/news/out.going (or the /var equivalent, depending on the Linux directory structure).
A few simple examples of sys files show their usage. If your machine is downloading only from a newssite, and uploading only articles generated at your site (you are a leaf node), then your sys file needs entries only for your machine and the news feed. For example, the following sys file sets up your site to receive all newsgroups from brutus and to send back to brutus all the newsgroups you get and new articles you generate:
# our site, accepting all newsgroups ME:all/all:: # newsfeed machine called brutus brutus/brutus.com:all/all::
This configuration does not impose batching, so connections are performed as required.
Suppose you have another machine on your news route to which you send the sci.biology newsgroups, using a batch routine. If the remote machine's name is chatton, you may have an entry like this in the sys file:
# send chatton the sci.biology groups by batch chatton:sci.biology/all:f:
Depending on how many machines you connect to, you may have many suc entries in your sys file.
If you want to use batching on your news system, you have to make some more changes to configuration files other than the batch indicators in the sys file. Each article in a news batch has a line that identifies the size of the file, such as:
#! rnews 3634
When compression is used, another line precedes this line to reflect the type of compression used to extract the article. The two schemes most often found use the UNIX compress utility and the GNU gzip utility (which is not supported by most versions of C News). The header lines look like this for each, respectively:
#!cunbatch #!zunbatch
Occasionally an article has a heading like the following to indicate that the batch uses c7 encoding, which removes the eighth bit from data:
#!c7unbatch
C News processes batches by executing the program /usr/lib/news/bin/batch/sendbatches. This uses the list of articles that are to be sent from /usr/lib/news/site/togo and packages them into one or more newsbatches. The size of the batches is determined by a variable in the file /usr/lib/news/batchparms. This file also gives the compression program to be used if the default is not desired, as well as the type of transport to use to connect to the remote site.
The format of each line in the batchparms file is as follows:
sitename size max batch_program muncher transport
In this format, sitename is the name of the remote site, size is the maximum size of a batch before compression (except when a single article is larger, in which case the article is processed as a batch by itself), and max is the maximum number of batches to be stored before this site is ignored (to prevent batches accumulating when a remote site doesn't connect). Also, batch_program is the command used for generating the batches (usually the default value of batcher is best), muncher is the compression system (the default value of compcun uses compress), and transport is the connection method (for UUCP it is often viauux). A sample entry in the batchparms file looks like this:
brutus 10000 20 batcher compcun viauux
You can have a default value for all sites except those specifically mentioned by embedding the word default in slashes:
/default/ 100000 20 batcher compcun viauux
This default line should come before the other site lines. Substitute whatever values you want for the sizes.
Usually, C News should use crontab to start the batch file transfers at regular intervals (depending on the frequency of posting to the newsgroups). You can instruct C News to process a batch at any time with the command:
news /usr/lib/news/bin/batch/sendbatches sitename
In this command, sitename is the name of the remote site you want to connect to. If you don't specify a remote site name, all sites are processed. Issue this command as root, or use su with the command.
Once all you have dealt with these configuration issues, you are ready to receive news. You should have your system poll your news site and wait for the results. The most common problem that occurs is a mistake in the configuration file information, which can usually be spotted by verifying each file in turn.
By default, C News sends error messages to the user "usenet," which may or may not exist on your system. It is useful to create an alias in the mail system that redirects C News error messages to a real system administrator's mailbox when a problem occurs. (An alternative to setting up a mail alias is to modify the C News; NEWSMASTER variable, but this must be done with every new session. The alias route is much easier.)
If a newsreader doesn't find any articles after you know a download has taken place, chances are that the newsreader is following the wrong path. Linux systems use /var/spool/news and /usr/spool/news, so your newsreader may be looking in the wrong place. Establish a symbolic link between the two directories with the following command:
ln -s /usr/spool/news /var/spool/news
See whether that corrects the problem.
The newsgroups' spool directories tend to get very large, especially newsgroups that appear even though you have not explicitly subscribed to them, as well as the junk newsgroup (or equivalent). On a regular basis, you should go into the spool directories and clean out unwanted newsgroup entries. You can erase the entire directory and contents with the -r option to rm (although you should be careful of this rather dangerous command!).
The C News system as found on most Linux distributions has a number of utility programs stored in the directory /usr/lib/news/bin/maint. The superuser can use these programs to control the behavior of the C News system. Some of these utilities and the files they operate on have already been mentioned. The usual utilities found with C News are the following:
addgroup local.stuff y
Most of the utilities are for use occasionally, except the newsdaily, which you can place in a crontab file. For extra safety regarding the news files, add the newswatch program to the crontab file , too.
This chapter has shown you how to get C News up and running for most installations. You should be able to use this information to start sending and receiving newsgroups from your newsfeed. This chapter didn't look at all the special files involved with C News in detail because most are seldom used. If you want more information on C News, check the documentation and help files that accompany most distributions.