.ds h0 "USENET Version B Installation .ds h1 .ds h2 % .ds f0 "\*(vr .ds f1 .ds f2 "February 24, 1986 .mt USENET Version B Installation .au Matt Glickman .ai Computer Science Division Department of Electrical Engineering and Computer Sciences University of California Berkeley, California 94720 .au Revised by Mark Horton for version 2.10 Revised by Rick Adams for version 2.10.3 .hn Introduction .pg This document is intended to help a USENET site install and maintain the network news software. Please ask questions of Rick Adams\*(dg; .fn \*(dg ARPANET: rick@seismo.CSS.GOV, UUCP: seismo!rick .ef such questions will help to point out areas that need to be addressed here. .pg The overall order of things to do is: .lp (a) Find somebody to link up with. You need a network connection of some kind, for example, ARPANET or UUCP. If you must use UUCP and have no connections, you must have at least a dialup and preferably a dialer, and find someone willing to call your machine. The USENET directory may be helpful in finding some other site geographically near yours to hook up to. .lp (b) Create a .i localize.sh script to make local changes to the makefile and .i defs.h files. (Section 2 gives more details about creating .i localize.sh \&.) Once you're finished editing .i localize.sh , create a .i defs.h and .i Makefile tailored for your site with the command .ce sh localize.sh Inspect .i defs.h and .i Makefile to ensure that all your local customizations got into your final versions. If you saw a \*(lq?\*(rq when you ran .i localize.sh , one or both of the files is certainly wrong. It's a good idea to anchor the patterns in .i localize.sh \&'s .i ed (1) scripts, especially in its .i Makefile -editing lines. For instance, use .b /^UUXFLAGS/ instead of .b /UUXFLAGS/ . .lp (c) Compile the software using the .i make (1) command. .lp (d) .i Su (1) and type \*(lqmake install\*(rq. This will copy the files out to the right place and make directories containing most of the important files. It will configure you in with a connection to .cn oopsvax via UUCP links. This is undoubtedly wrong, so you will have to configure links as needed. If you are upgrading from a version older than 2.10.3, do \*(lqmake update\*(rq. This will cause various checks to be performed on important files in .b LIBDIR . The results will be reported to you. If you are not sure if you should do \*(lqmake update\*(rq, do it. It will not hurt anything if you have already done it. .lp (e) After editing the configuration table, get your contact at the other end of the link to add you to their netnews .i sys file. .lp (f) Post a message to the .bi sysname "" \f3to.\fP newsgroup which should be set up to go only to the site you are linked to, as a test. Have the other person send a message to your system using the same mechanism. If this doesn't work, find the problem and fix it. (Please don't use .ng net.test unless there is no alternative. It is almost always possible to use .ng test , or .bi sysname "" \f3to.\fP or some .bi local \f3.test\fP group, instead of .ng net.test .) .lp (g) Fill out a USENET directory form (the file .i dirform in the .i misc directory). Post a copy to the USENET newsgroup .ng net.news.newsite and mail a copy to .i cbosgd!uucpmap . .lp (h) Format the document .i "\*(lqHow to Read the Network News\*(rq" (the file .i howto.mn in the .i doc directory), the document .i "\*(lqHow to Use USENET Effectively\*(rq" (the file .i manner.mn in the .i doc directory) and the document .i "\*(lqCopyright Law\*(rq" (the file .i copyright.mn in the .i doc directory) and post them to your .ng general newsgroup with a long expiration date. You can use .i inews (1) or .i postnews (1) to do this. .lp (i) It will probably be necessary to fix your uucp commands to allow .i rnews and to support the .op \-z and .op \-n options (if you are lucky enought to have the source). .hn Installation .hn 2 Configuration .pg Local configuration of the USENET version B software requires you to edit a few files. Most importantly, the .i defs.h and .i Makefile files must be created from their templates .i defs.dist and .i Makefile.dst . You should create a shell script called .i localize.sh which copies the files and makes local changes to the copies. Even for a completely vanilla site, some changes will be necessary. For example, your script should start with .i localize.v7 or .i localize.usg . You should include the name of the local organization .b MYORG ) ( and the uid of the local news super user .b ROOTID ). ( You should also choose how your hostname will be determined. If you are a USG site, define .b UNAME in .i defs.h . If you are running 4.[23] BSD, define .b GHNAME in .i defs.h . If you have your UUCP name in .i /etc/uucpname , define .b UUNAME in .i defs.h . Otherwise, news will look in the file .i /usr/include/whoami.h for a line of the form .sd c #define sysname your-sysname .ed .pg If you are running System 3 or System 5, you are a USG site. Otherwise, unless you are in AT&T, you are probably a V7 site. The previously mentioned defines are the only modifications that are .i necessary to install news at your site. However, you will probably want to change some of the ones listed below. If your compiler does not accept \*(lq(void)\*(rq, the simplest thing to do is add \*(lq\-Dvoid=int\*(rq to the .b CFLAGS line in the .i Makefile . .pg A sample localize shell script can be found in .i localize.sample . The most important parameters are: .hn 3 ROOTID .pg The numerical uid of the person who is the news super user. This should not be set to 0. Normally it is set to the uid of the news contact person for the site. If it is not defined, the uid of .b NOTIFY will be looked up in .i /etc/passwd and used instead. .hn 3 N_UMASK .pg Mask for .i umask (2) system call. Set it to something like 022 for a secure system. Unsecure systems might want 002 or 000. This mask controls the mode of news files created by the software. Insecure modes would allow people to edit the files directly. .hn 3 DFLTEXP .pg The default number of seconds after which an article will expire. Two weeks (1,209,600 seconds) is the default choice. If you wish to expire articles faster than two weeks, it is recommended that you use the .op \-e flag to expire instead of decreasing .b DFLTEXP . .hn 3 HISTEXP .pg Articles which were posted more than .b HISTEXP ago are considered too old and are moved into the junk directory. This is because they are too old to be in the history file, so it is impossible to tell if they really should be accepted or are endlessly looping around the network. (This was theoretically possible before this feature was added.) The articles are removed after .b DFLTEXP seconds, but a copy of their .hf Message-ID is kept in the history file for .b HISTEXP seconds (the default is 4 weeks). .hn 3 DFLTSUB .pg The default subscription list. If a user does not specify any list of newsgroups, this will be used. Popular choices are .ng all and .ng general\f1,\fPall.general . .hn 3 TMAIL .pg This is the version of the Berkeley .i Mail (1) program that has the .op \-T option. If left undefined, the .op \-M option to .i readnews (1) will be disabled. .hn 3 ADMSUB .pg This newsgroup (or newsgroup list) will always be selected unless the user specifies a newsgroup list that doesn't include .b ADMSUB on the command line. That is, as long as the user doesn't use the .op \-n flag to .i readnews on the command line, .b ADMSUB will always be selected. This is usually set to .ng general . (The intent of this parameter is to have certain newsgroups which users are required to subscribe to. A typical site might require .op general .) .hn 3 PAGE .pg The default program to which articles should be piped for paging. This can be disabled or changed by the environment variable .b PAGER . If you have it, the Berkeley .i more (1) command should be used, since the .op + option allows the headers to be skipped. .hn 3 NOTIFY .pg If defined, this character string will be used as a user name to send mail to in the event of certain control messages of interest. (Currently these are .b newgroup , .b rmgroup , .b sendsys , .b checkgroups , and .b senduuname .) As distributed, mail will be sent to user .i usenet . It is recommended you create such a mailbox (have it forwarded to yourself) if possible, since this makes it easier for another site to contact the site administrator for your site. If you are unable to do this .i e\f1.\fPg ., ( you are not the super user) you should change this name to yourself. Also, messages about missing or extra newsgroups are mailed to this user by the .b checkgroups control message. .hn 3 DFTXMIT .pg This is the default command to use to transmit news if no explicit command is given in the fourth field of the .i sys file. It normally includes .i uux (1) with the .op \-z option. You should install this modification to UUCP at once; otherwise your users will start being bombarded with annoying .i uux completion messages. However, you can turn this off to get news installed. .hn 3 UXMIT .pg This is the default command used if the .b U flag is present in the flags portion of a .i sys file line. In this case, the second \*(lq%s\*(rq refers to the name of a file in the news spool area, not a temporary file. It can usually only be used when local modifications are made to the uucp system, such as the .op \-c option to .i uux . .hn 3 DFTEDITOR .pg This is the full path name of the default editor to use during followups and replies. It should be set to the most popular text editor on your system. As distributed, .i vi (1) is used. .hn 3 UUPROG .pg If this is defined, it will be used as a command to run when the .b senduuname control message is sent around. Otherwise the command .i uuname (1) will be run. Normally, this program should be placed in .b LIBDIR . .hn 3 MANUALLY .pg If this is defined, incoming .b rmgroup messages will not automatically remove the group. News will instead mail a message to .b NOTIFY advising that the group should be removed. If you define .b MANUALLY , you should have .b NOTIFY defined. .b MANUALLY is defined by default to protect you against accidental or malicious removal of an important newsgroup. .hn 3 NONEWGROUPS .pg If this is defined, incoming .b newgroup messages will not automatically create the group. News will instead mail a message to .b NOTIFY advising that the group should be created. If you define .b NONEWGROUPS , you should have .b NOTIFY defined. .b NONEWGROUPS is undefined by default to make it easier to automatically maintain the news system. .hn 3 BATCH .pg If set, this is the name of a program that will be used to unpack batched articles (those beginning with the character \*(lq#\*(rq.) Batched articles normally are files reading .sd c #! rnews 1234 article containing 1234 characters #! rnews 4321 article containing 4321 characters \\&. . . .ed Batching is .i strongly recommended for increased efficiency on both sides. .hn 3 LOCALNAME .pg Most systems have a full name database on line somewhere, showing for each user what their full name is. Most often this is in the gecos field of .i /etc/passwd . If your system has such a database, .b LOCALNAME should be left undefined. If not, define .b LOCALNAME , and articles posted will only receive full names from local user information specified in .i NAME or .bi $HOME \f2/.name\fP by the user. If you have a nonstandard gcos format (not .i finger (1) or RJE) it will be necessary to make local changes to .i fullname.c as appropriate on your system. .hn 3 INTERNET .pg If your system has a mailer that understands ARPA Internet syntax addresses .cf user@site.domain ) ( turn this on, and replies will use the .hf "From" or .hf "Reply-To" headers. Otherwise, leave it disabled and replies will use the .hf "Path" header. .hn 3 MYDOMAIN .pg When generating internet addresses, this domain will be appended to the local site name to form mailing address domains. For example, on system .cn ucbvax with user .i root , if .b MYDOMAIN is set to .cf .UUCP , addresses generated will read .cf root@ucbvax.UUCP . If .b MYDOMAIN is .cf .Berkeley.EDU , the address would be .cf root@ucbvax.Berkeley.EDU . If your site is in more than one domain, use your primary domain. The domain always begins with a period, unless the local site name contains the domain; in this case .b MYDOMAIN should be the null string. .hn 3 CHEAP .pg Do not .i chown (1) spool files to .i news . This will cause the owner of the file to be the person that started the .i inews process. This is used for obscure accounting reasons on some systems. .hn 3 OLD .pg Define this if any of your USENET neighbors run 2.9 or earlier versions of B news. It will cause all headers written to contain two extra lines, .hf Article-I.D. and .hf Posted , for downward compatibility. Once all your neighbors have converted, you can save disk space and transmission costs by turning this off. It is strongly encouraged that they convert. 2.10.3 is .i much faster than 2.9. The performance difference is dramatic. .hn 3 UNAME .pg Define this if the .i uname (2) system call is available locally, even though you are not a USG system. USG systems always have .i uname (2) available and ignore this setting. .hn 3 GHNAME .pg Define this if the 4.[23] BSD .i gethostname (2) system call is available. If neither .b UNAME or .b GHNAME is defined, .i inews will determine the name of the local system by reading .i /usr/include/whoami.h . .hn 3 UUNAME .pg Define this if you keep your UUCP name in .i /etc/uucpname . .hn 3 V7MAIL .pg Define this if your system uses V7 mail conventions. The V7 mail convention is that a mailbox contains several messages concatenated, each message beginning with a line reading .hf "From \f2user date\fP" and ending in a blank line. If this is defined, articles saved will have these lines added so that mail can be used to look at saved news. .hn 3 SORTACTIVE .pg Define this if you want the news groups presented in the order of each person's .i .newsrc (5) instead of the active file. .hn 3 ZAPNOTES .pg Define this if you want old style notesfile id's in the body of the article to be converted into .hf Nf-Id fields in the header. .hn 3 DIGPAGE .pg If this is defined, .i vnews (1) will attempt to process the subarticles of a digest instead of treating the article as one big file. .hn 3 DOXREFS .pg Define this if you are using .i rn (1). .i Rn uses this option to keep from showing the same article twice. .hn 3 MULTICAST .pg If your transport mechanism supports multi-casting of messages, define this. Currently ACSNET is the only network that can handle this. .hn 3 BSD4_2 .pg Define this if you are running 4.2 or 4.3 BSD .ux . .hn 3 BSD4_1C .pg Define this if you are running 4.1C BSD .ux . .hn 3 SENDMAIL .pg Use this program instead of .i recmail (8) for sending mail. .hn 3 MMDF .pg Use MMDF instead of .i recmail for sending mail. .hn 3 MYORG .pg This should be set to the name of your organization. Please keep the name short, because it will be printed, along with the electronic address and full name of the author of each message. Forty characters is probably a good upper bound on the length. If the city and state or country of your organization are not obvious, please try to include them. If the organization name begins with a \*(lq/\*(rq, it will be taken as the name of a file. The first line in that file will be used as the organization. This permits the same binary to be used on many different machines. A good file name would be .i /usr/lib/news/organization . For example, an organization might read .cf "AT&T Bell Labs, Murray Hill" , .cf "U.C. Berkeley" , .cf MIT , or .cf "Computer Corp. of America, Cambridge, Mass" . .pg .hn 3 HIDDENNET .pg If you want all your news to look like it came from a single machine instead of from every machine on your local network, define .b HIDDENNET to be the name of the machine you wish to pretend to be. Make sure that you have you own machine defined as .cn ME in the sysfile or you may get some unnecessary article retransmission. .hn 3 NICENESS .pg If .b NICENESS is defined, .i rnews does a .i nice (2) to priority .b NICENESS before processing news. .hn 3 FASCIST .pg If this is defined, .i inews checks to see if the posting user is allowed to post to the given newsgroup. If the username is not in the file .b LIBDIR \f2/authorized\fP then the default newsgroup pattern in the symbol .b FASCIST is used. .pg The format of the file .i authorized is: .br .si user:allowed groups .ei .pg For example: .si .sd root:net.all,mod.all naughty_person:junk,net.politics operator:!net.all,general,test,mod.unix .ed .ei .pg An open environment could have .b FASCIST set to .ng all and then individual entries could be made in the authorized file to prevent certain individuals from posting to such a wide area. .pg Note that a distribution of .ng all does .i not mean to allow postings only to local groups \- .ng all includes .ng all.all . Use .ng all\f1,!\fPall.all to get that behavior .hn 3 SMALL_ADDRESS_SPACE .pg Define this if your machine has 16 bit (or smaller) pointers. If you are on a .pd , this is automatically defined. .hn 2 Makefile .pg There are also a few parameters in the .i Makefile as well. These are: .hn 3 OSTYPE .pg This is the type of .ux system you are using. It should be either .b v7 or .b USG . Any BSD system is v7. Any System 3 or System 5 system is USG. This is normally set by .i localize.sh . .hn 3 NEWSUSR .pg This is the owner (user name) of .i inews . If you are a superuser, you should probably create a new user id (traditionally .i news ) and use this id. If you are not a superuser, you can use your own user id. If you are able to, you should create a mail alias .i usenet and have mail to this alias forwarded to you. This will make it easier for other sites to find the right person in the presence of changing jobs and out of date or nonexistent directory pages. .b NEWSUSR and .b ROOTID do not need to represent the same user. .hn 3 NEWSGRP .pg This is the group (name) to which .i inews belongs. The same considerations as .b NEWSUSR apply. .hn 3 SPOOLDIR .pg This directory contains subdirectories in which news articles will be stored. It is normally .i /usr/spool/news . .pg Briefly, for each newsgroup (say .ng net.general ) there will be a subdirectory .i /usr/spool/news/net/general containing articles, whose file names are sequential numbers, .i e\f1.\fPg ., .i /usr/spool/news/net/general/1 , etc. .pg Each article file is in a mail-compatible format. It begins with a number of header lines, followed by a blank line, followed by the body of the article. The format has deliberately been chosen to be compatible with the ARPANET standard for mail documented in RFC 822. .pg You should place news in an area of the disk with enough free space to hold the news you intend to keep on line. The total volume of news in .ng net.all currently runs about 1 Mbyte per day. If you expire news after the default 2 weeks, you will need about 14 Mbytes of disk space (plus some extra as a safety margin and to allow for increased traffic in the future.) If you only receive some of the newsgroups, or expire news after a different interval, these figures can be adjusted accordingly. .hn 3 BATCHDIR .pg This directory will contain the list of articles to send to each system. It is normally .i /usr/spool/batch . .hn 3 LIBDIR .pg This directory will contain various system files. It is normally .i /usr/lib/news . .hn 3 BINDIR .pg This is the directory in which .i readnews , .i postnews , .i vnews , and .i checknews (1) are to be installed. This is normally .i /usr/bin . If you decide to set .b BINDIR to a local binary directory, you should consider that the .i rnews and .i cunbatch commands must be in a directory that can be found by .i uuxqt , which normally only searches .i /bin and .i /usr/bin . .hn 3 UUXFLAGS .pg These are the flags .i uux will be called with. .hn 3 LNRNEWS .pg This is the program used to link .i rnews and .i inews . If you have symbolic links, you can replace the \*(lqln\*(rq with \*(lqln \-s\*(rq. .hn 3 SCCSID .pg If this is defined, sccs ids will be included in each file. If you are short on address space, don't define this. .hn FILES .pg This section lists the files in .b LIBDIR and comments briefly what they do. .hn 2 active .pg A list of active newsgroups. It is automatically updated as new newsgroups come in. The order here is the order news is initially presented by .i readnews , so you can edit this file to put important newsgroups first. If you have .b SORTACTIVE defined, after the first time the user invokes .i readnews , it will be presented in the order of his .i .newsrc . Each line of the active file contains four fields, separated by a space: the newsgroup name, the highest local article number (for the most recently received article), the lowest local article number that has not yet expired, and a single character used to determine if the user can post to that newsgroup. If the character is \&\*(lqy\*(rq the user is permitted to post articles to that group. If the character is \&\*(lqn\*(rq the user is not permitted to post articles to that groups. (This field takes the place of the .i ngfile in earlier versions of news. Local article numbers begin at 1 and count sequentially within the newsgroup as articles are received. They do not usually correspond to local article numbers on other sites. The article numbers are always stored as a five digit number (with leading zeros) to allow updating of the file in place. .pg The active file should contain .ng all active net-wide active newsgroups .ng net.all and ( .ng mod.all ). It is important that they all be present, as they are used as a check for valid newsgroup names and invalid newsgroup names are removed from any articles processed by .i inews . You should use the .i sys file to keep out unwanted newsgroups. .hn 2 aliases .pg This file is used to map bad newsgroup names to the correct ones. (For example, .ng net.unix.wizards is mapped into .ng net.unix-wizards ). Each line consists of two fields separated by a space. If the first field is found in the newsgroup list of the incoming article, it is changed to the second field. This change takes place in the article before it is passed on to other systems, not just locally. .hn 2 batch .pg This program reads a list of filenames of articles and outputs the articles themselves. It is typically used by the shell script .i sendbatch . .hn 2 c7unbatch .pg This is used to decompress news that has been .b encoded for transmission over a network that only supports 7-bit transfers (e.g X.25.) .hn 2 caesar .pg This is a program to do Caesar decoding of rotated text, on a line by line basis. The standard input is copied to the standard output, rotating each line according to a static single letter frequency table. If an integer argument is given .i e\f1.\fPg ., ( 13), every line is rotated by that argument, without regard to letter frequencies. This program is invoked by the .qp D .i readnews command. It is also used by .i postnews with the \*(lq13\*(rq argument to encode selected material for posting. .hn 2 checkgroups .pg .i Checkgroups is a shell file to aid in automatically checking the accuracy of your active file. It is executed by the .b checkgroups control message and mails a list of out of date newsgroups to the person defined by .b NOTIFY It also updates the .i newsgroups file that is used by .i postnews as a helpfile for newsgroup selection. .hn 2 compress .pg This program does a modified Lempel-Ziv data compression. It is used by the compressed batching scheme. It averages 50% compression on a typical batch of news. .hn 2 distributions .pg This is a list of distributions that are valid for your site. Each line has two fields separated by the first space on the line. The first field is the name of the distribution .i e\f1.\fPg ., ( .ng usa , .ng na , etc.). The second field is text describing the distribution. As distributed, this file is only correct for sites in the USA. You should examine this file and add or delete the appropriate distributions. .hn 2 encode .pg This program transforms an 8-bit binary file into a file suitable for sending over a link that only allows 7-bit characters. It is used by .b "sendbatch -c7." .hn 2 errlog .pg This file contains the \*(lqimportant\*(rq error messages found in the log file. These errors usually indicate that something was wrong with an article. This file should be watched closely. The .i log file contains much more verbose information and it is often difficult to detect errors in it. .hn 2 expire .pg This program expires old articles and archives them if archiving is selected. It is typically run once a day from .i cron (8). .hn 2 help .pg This contains a list of commands printed when an illegal command is typed to .i readnews . .hn 2 history .pg A list of every article that has come in to your system. It is used to reject articles that come in for the second time (presumably via a different path). This file will grow but is cleaned out by the .i expire (8) command. .hn 2 history.d .pg On USG systems, this directory contains 10 files (history.[0-9]) which are used as part of a simple hashing algorithm to speed up history searches. Since V7 systems have DBM, this is not used on V7 systems. .hn 2 history.dir,history.pag .pg These two files are used on V7 systems as a hashed version of .i history , containing the message id's of all articles in history. They are only used if .b \-DDBM and .b \-ldbm appear in .i Makefile . .hn 2 inews .pg This is the program that actually sends and receives news. All other programs interface eventually with it. It is not intended to be used directly by a human, so it is no longer in .i /usr/bin . .hn 2 log .pg If present, a log of articles processed and error conditions is kept here. This file grows without limit unless cleaned out periodically. The .i trimlib script in .i misc can be invoked from .i cron daily or weekly to keep the log short. .hn 2 moderators .pg This file contains a list of the moderators and their mailing addresses for each moderated newsgroup. Each line consists of two fields. the first is the name of the moderated group. The second is the mailing address of the group's moderator. As distributed, they are almost certainly wrong. You will need to modify the paths so they work from your site. .hn 2 newsgroups .pg This file is displayed by .i postnews when a user hits .qp ? in response to its request for newsgroups. It is also used by .i vnews when it displays the newsgroup name. It is updated automatically by the .b checkgroups control message. .hn 2 notify .pg If this file is present, its contents will be taken as the name of the user to notify in case of a problem. If the file is empty, nobody will be notified. (This overrides the .b NOTIFY option in .i defs.h ). Having a null file is useful if one person administers several systems and does not want multiple copies of control message notifications. .hn 2 oactive, ohistory, ohistory.dir, ohistory.pag .pg These are copies of the corresponding .i active , .i history , .i history.dir , and .i history.pag files before .i expire ran. They are kept in case something happens to the originals. .hn 2 recmail .pg This program can serve as a link between news and your local mailer. If you have .i sendmail (8), don't use .i recmail . .i Sendmail is much more useful. .hn 2 recnews .pg A program which allows you to send mail to get news posted. You usually need to run .i sendmail or .i delivermail (8) to be able to use this. .hn 2 recording .pg A list of newsgroup classes and filenames to display recordings for. The recording feature is analogous to the recordings played in some areas when you dial directory assistance, trying to be annoying and make you think twice. Recordings on certain newsgroups are intended to remind the user of the rules for the newsgroup, or, in the case of a company worried about letting proprietary information out, reminding authors that anything they say is seen outside the company and so proprietary information should not be included. .pg The file contains one line per recording. The line contains two fields, separated by a space. The first field is the newsgroup class .i e\f1.\fPg ., ( .ng net.all ), the second field is the name of the file containing the recorded message. If the file name does not begin with a slash, it will be searched for in .b LIBDIR . Sample recording files can be found in the .i misc directory. .hn 2 rmgroup .pg This shell file should be used to remove any groups that are no longer used. .hn 2 sendbatch .pg This shell file is used to send batched articles to other systems. It is typically run from .i cron . See the manual page for more details. .hn 2 sendnews .pg A program to send news internally from one computer to another. It is useful if you must use mail links to transmit articles. .hn 2 seq .pg This file contains the current sequence number for your system. It is used to generate unique article id's. .hn 2 sys .pg This file contains a list of all your neighbors, which newsgroups they get, and how to send news to them. The format is documented below. .hn 2 unbatch .pg This program is used to unbatch the incoming batched news and feed each article to .i inews . It's horrible and will go away in the future. .hn 2 users .pg A list of users that have read news on your system. .hn 2 uurec .pg A program to receive news sent by .i sendnews (8). .hn 2 vnews.help .pg This is the helpfile used by .i vnews . .hn 1 Setting Up Links .pg There are two basic types of links for exchanging news: those that use mail and those that don't. The ones that use mail are more indirect, yet more versatile, while the ones that don't are simpler. The default method does not use mail, so that is discussed first. .hn 2 Non-mail Links .pg The basic theory behind a non-mail link is that the .i rnews program is invoked on the remote system with the article being transmitted as the standard input. This is possible on several networks, but the most common implementation is via the UUCP network. Using the .i uux command, the command which is forked to the shell looks like: .sd c uux \- \-r \-z remotesys!rnews < article .ed This is the default transmission method. In order to set up such a link, obviously a UUCP link with the remote system must be in effect. In addition, .i rnews must be available and executable by .i uuxqt on the remote machine. In most cases, this means that .i rnews must be in .i /usr/bin so .i uux can find it. Also, the list of allowed UUCP commands (in .i /usr/src/usr.bin/uucp/uuxqt.c or .i /usr/lib/uucp/L.cmds , depending on the version of UUCP) should be checked to make sure that .i rnews is an allowed command. .pg Other networks that allow remote execution include the BERKNET, BLICN .i usend (1)), ( many Ethernets, and the NSC hyperchannel .i nusend (1)). ( It is important, however, that a spooling mechanism be available. Otherwise, if system .cn A tries to send an article to system .cn B via a remote execution command, and .cn B is down, the article could be lost. Spooling arranges that the system will try again when .cn B comes back up. .hn 2 Mail Links .pg When using mail to transmit articles, two intermediary programs are necessary. These are .i sendnews and .i uurec (8). The idea is that when system .cn A wants to send an article to system .cn B , the .i sys file on system .cn A has an entry for system .cn B such as: .sd c /usr/lib/news/sendnews \-a rnews@B .ed which runs .i sendnews on the article. The .op \-a option specifies that the mail should be formatted for the ARPANET. .i Sendnews packages the article and mails it to .cf rnews@B . Somehow, the B system is expected to make sure that all mail to user .cf rnews is fed as input to the program .i uurec . This program unpackages it and invokes .i rnews . .pg The best way to get mail to .cf rnews fed into .i uurec is to use .i sendmail or .i delivermail , if you are on a system running them. Create an alias in .i /usr/lib/aliases as follows: .sd c rnews: "|/usr/lib/news/uurec" .ed and .i sendmail will handle it. If you do not have a facility for forwarding mail to a program, you can gimmick your mailer to watch for it (using .i popen (3S), this is easy) or, if you don't want to do any programming, you can have .i cron invoke .i uurec every hour with .i /usr/spool/mail/rnews as standard input. This solution is messier because .i uurec must potentially deal with multiple messages, something that has never been tested. .hn 1 Format of the .bi sys file .pg To set up a link to another site, edit the .i sys file in .b LIBDIR . This file is similar to the .i L.sys file of UUCP. Each line contains four fields, separated by colons: .lp (1) The system name of a site to which you forward news. Normally all systems you have links to will be included. You should also have a line for your own system. If this field is .cn ME, it will be used as if it were your local system name. If the system name is followed by a \*(lq/\*(rq, the article will not be forwarded to this system if it has already passwd through any of the (comma separated) list of sites immediately following the \*(lq/\*(rq. For example, if the sysline was: .sd c yoursite/sitea,siteb,sitec:net,mod,na,usa,to.yoursite:: .ed the incoming article would only be forwarded to .i yoursite if it had not already been to any of .i sitea , .i siteb , or .i sitec . This is normally used to reduce the number of duplicate articles received at a site that has multiple main newsfeeds. .lp (2) The newsgroups to be forwarded to them. This is a pattern of the same kind as a subscription list. Generally, you will list classes of newsgroups, that is, using .ng all for everything. A typical forwarding list for a new site would be .sd c net,mod,na,usa,to.\f2sysname\fP .ed where .i sysname is the name of the remote system. (Of course, if you are not in the USA or North America, you would remove those distributions and replace them with the ones appropriate for you). In particular, you don't want to forward .ng all since local newsgroups (those without dots) should not be sent. For the line describing your own system, this field describes the newsgroups your site will accept from remote sites. Thus, if another site insists on sending you a newsgroup you don't want, for example .ng net.jokes , include .ng !net.jokes here. .lp (3) This field contains flags describing the connection. An .b A will indicate that the other site is running an A version of netnews. A .b B indicates a B version. Leaving it empty defaults to .b B . If you are reading this document, you have a B version. Some existing sites run A versions. If you aren't sure, ask your contact at the other site, with whom you should be talking to set this up anyway. The .b F flag indicates that the fourth field is the name of a file. The full path name of a file containing the article in .b SPOOL will be appended to this file. The .b L flag prevents transmission unless the article was created on this site. If a number follows the .b L .i e\f1.\fPg ., ( .b L3 ), sites less than that number of hops away will be considered local. (It is recommended that you feed an .b L link to a backbone site, to ensure that your submissions will be more likely to get to the entire network, even in the event of a local problem. Please make sure that a mail link exists too, so you can get replies.) The .b N flag can also be included here, indicating that mail should be sent using the .pa ihave/sendme protocol described below. The .b H flag can be used to interpolate the history file into the command. The .b S flags says to execute the transmission command directly instead of forking a shell. The .b U field arranges that the parameter to the optional \*(lq%s\*(rq in the command field to be filled in with a permanent file name from .b SPOOL instead of a temporary customized file name. The .b M flag says to use multi-casting. Multi-casting is described in an appendix. .lp (4) This field is the command to be run to send news to the remote site. The article will be on the standard input. Leaving this field blank means an ordinary UUCP link is being used, that is, the command defaults to .sd c uux \- \-r \-z sysname!rnews .ed The .op \- option tells .i uux to expect input from the standard input. The .op \-z option is nonstandard \- you should add it (see the .i minus.z* files in the uucp source directory.) It shuts off the annoying message you would otherwise get mailed to you telling you that your article was broadcast successfully. To avoid using the .op \-z option, change the source or put the .i uux command in the fourth field. The .op \-r option tells .i uux not to call the other system once the job is queued. This turns out to ease the load on the system, at the expense of making news be transmitted a bit slower. The news will be sent when the next call is made; usually this means the next time mail is sent to or from your system. If this turns out to be unreasonably long, put a line in .i crontab to run .sd c /usr/lib/uucp/uucico \-r1 \-s\f1system\fP .ed every hour or so. .pg Here is a sample .i sys file for a site .cn myvax with connections to .cn yourvax where .cn myvax also passes news on to .cn downstream . We assume that .cn myvax and .cn downstream exchange a local newsgroup class .ng lng.all as well as the network wide newsgroups. News to .cn downstream is batched. We also assume that .cn myvax and .cn yourvax are in the USA, while .cn downstream is in Canada. .sd myvax:net,mod,na,usa,lng,to:: yourvax:net,mod,na,usa,to.yourvax:: downstream:net,mod,na,lng,to.downstream:F:/usr/spool/batch/downstream .ed .hn Posting Methods .pg The basic method is .i postnews . This program will prompt you for the title, newsgroups, and distribution, then place you in the editor. (The system default .b EDITOR is used unless the environment variable .b EDITOR is set, overriding the system default.) The text should be typed after the blank line. The title and newsgroups are available for editing at the top of the buffer. Other header lines can be added, such as an expiration date or a distribution. When you write out the file and exit from the editor, you will be prompted for what to do next. Your choices are: .b w rite the message to a file, .b s end the message, .b l ist the message or .b e dit it again. .pg Another method is to use mail. This can only be done on systems that allow mail to a given name to be fed into an arbitrary program as input. This is easily done with the Berkeley .i delivermail or .i sendmail program, and not with any other mailer the author is familiar with. (It may be possible to painfully set this up with MMDF, provided the newsgroup name is no more than 8 characters long.) To use mail, set up an alias such as the following: .sd c net.general: "|/usr/lib/news/recnews net.general" .ed Whenever a user sends mail to .ng net.general , this starts up the given shell command which calls .ng recnews with one argument, the name of the newsgroup. You need to create one alias for each newsgroup, and to keep the list up to date as new newsgroups are created. .i Recnews (8) will in turn invoke .i inews . .pg Note that there are problems with .i recnews . There is no way to use it to post to multiple newsgroups without creating separate articles (something frowned upon because it forces people to read the same thing more than once.) Also, there is no way to make the recording feature (to remind people to not accidently divulge proprietary information) work when recnews is used. .hn Various considerations .hn 2 Setuid bits .pg The current intended state of affairs is that .i inews runs setuid to .b NEWSUSR . The .i readnews program does not need to be setuid. This makes it possible to write your own interface to read news instead of using .i readnews . (As distributed, .i inews is also setgid. I know of no good reason for this.) .hn 2 Modes of Spool Directories .pg All the files should be writable by .b NEWSUSR . However, due to a glitch, you will probably have to make the .b SPOOLDIR and its subdirectories mode 777. It could be 755 except for one problem. When a new newsgroup comes in, .i inews will attempt to .i mkdir (1) a new subdirectory of .b SPOOLDIR for the newsgroup. Since both .i inews and .i mkdir are setuid, .i mkdir will use the uid of the person who ran .i inews instead of .b NEWSUSR when checking for permissions. If the directory mode isn't 777 the check will fail. Here are several alternatives if you don't want a 777 directory around: .hn 3 Fix Real Uid .pg If .i inews is always run by .i cron or as .i root , the real uid can be arranged to be .i root or .b NEWSUSR . This is a poor solution since it makes the local creation of new newsgroups require super user permissions, and is a potential security hole. If this approach is taken, care must be taken to insure that the owner of the created directory is .b NEWSUSR . .hn 3 Change the Kernel .pg .i Inews will do: .b setuid(geteuid()) (see .i setuid (2) and .i geteuid (2)) before it forks the .i mkdir . If your system permits this call, there will be no problem. In particular, Berkeley 4.0 .ux and later systems allow this. An alternative change to the kernel is to automatically stack uids: when a setuid program is run, set the new real uid to the old effective uid. .hn 3 Groups .pg You could have .i inews be setgid to .b NEWSGRP and all files writable by the group. This approach has been tested and the problem turns out to be that the .i mkdir command uses the .i access (2) system call to check permissions. Since .i access uses the real gid, you run into the same problem. .hn 3 Another .bi Mkdir .pg You could create a version of .i mkdir that does less checking and put it in a directory that can only be accessed by .b NEWSUSR (mode 700, owned by .b NEWSUSR ). Have .i inews fork this .i mkdir . .hn 2 Expiration dates .pg To get articles to expire automatically, put a line in .i crontab to run .sd c /usr/lib/news/expire .ed every night. This command deletes all expired news. The .op \-a .i newsgroups option causes all expired news to be archived under .i /usr/spool/oldnews depending on which newsgroups are selected. (See .i expire (8) for details.) .pg Sometimes news is not expired when it should be. Be sure to check that .i expire has permissions to unlink files, and that it is properly setuid to .b NEWSUSR . You can manually invoke .i expire with the .op \-v (verbose) option to find out what it's doing. Adding levels of verbosity .i e\f1.\fPg ., ( .op \-v6 ) will get more and more output. .hn 2 Version to Version .pg Version B will understand incoming news in either version A or B format, automatically (presuming .b OLD is defined in defs.h.) Version B will generate either format, depending on the flag in the third field of the .i sys line. Version A will not understand version B format. Thus, it is possible for two version B sites to communicate using version A format. This will work but is not a good idea, since the translation from B to A loses information (such as the expiration date) which will not be there when translated back to version B. .pg News from versions A and 2.9 B do not conform to the USENET interchange standard. 2.10 B supports the standard and will communicate with either A or 2.9 B news. A news is written (losing other header information) if A is in the flags for the system. If .b OLD is defined, 2.10 will write out headers with both standard .hf Date "" ( .hf Message-ID ) and 2.9 .hf Posted "" ( .hf Article-I.D. ) lines so that either B system will properly handle the article. Incoming news is recognized by the first letter .qp A "" ( for A news), or the lack of an .cf @ in the .hf From line (2.9). Missing fields are constructed as well as possible from the available information. .hn 2 Presentation Order .pg The order of the newsgroups listed in .bi LIBDIR \f2/active\fP is the order the newsgroups will be presented in initially. If .b SORTACTIVE is defined in .i defs.h , after the first time news will be presented in the order of the person's .i .newsrc . Initially this will be directory order, but you can edit important newsgroups like .ng general to the top. .pg A recommended order to maintain your active file in is this: .sd net.announce.newusers general local.general net.announce local \fInewsgroups in alphabetical order\fP mod.all \fInewsgroups in alphabetical order\fP net.all \fInewsgroups in alphabetical order\fP test all.test to.all control junk .ed .hn Control Messages .pg Some news systems will send you articles that are not for human consumption. They are messages to your news system called .i "control messages" . Such messages contain the .hf Control header. Older systems use newsgroups matching .ng all.all.ctl , and this will still work, although the .hf Control header is preferred. Since the newsgroup name is used for distribution only, and is not checked to ensure it's in the active file, such newsgroup names can still be used. This makes it possible to post network wide control messages with .ng net.msg.ctl (or restricted broadcast such as .ng btl.msg.ctl ) or messages for a particular system: .ng to.ucbvax.ctl . Messages are canceled, however, with a .hf Control line in a message to the same newsgroup(s) as the original message. .pg A control message contains a command and zero or more arguments (much like a .ux program). The subject of the article contains the command and arguments. The body of the article is usually ignored, although some messages can use it for additional text information. Control messages are not stored in .b SPOOL ; rather, they are acted on and discarded at once. .hn 2 ihave/sendme .pg Two control messages are .b ihave and .b sendme . These messages allow two participating sites to set up a link so that one site will tell the other site it has a given article and wait for a request before it actually sends it. The normal case is to send an entire article to a system, which consults the history file to see if the article has already been seen, and then throws it away if it has been seen before. .pg Note that, since most messages are short anyway, experience has indicated that for ordinary UUCP unbatched communication, all .pa ihave/sendme does is triple the load and slow down forwarding. We hope future code will allow .b ihave 's with multiple message id's in the body, and existing code in 2.10 understands such messages, but does not generate them. So we advise that you don't use .pa ihave/sendme for now. .pg Use of these control messages can cut down on this wasted transmission, but if you have a polled UUCP connection, they can slow down receipt of news due to polling delays. It is up to each connected pair of sites whether they want to use this protocol. The choice is controlled by the .b N flag in the .i sys file. In the case of a leaf node (one with only one neighbor) there is no advantage to this protocol. Even if both sites are able to initiate a connection (have dialers or the link is hardwired) the .op \-r option on the .i uux can cause 2 hour or more delays in propagating news. Since this protocol can triple the number of messages generated, you should carefully evaluate your situation when deciding whether to use it. If transmission time and phone bills dominate your costs, and you are sending news to several sites, and large article bodies dominate the costs (rather than the headers and the time spent by UUCP negotiating transmission) it is probably worthwhile to use .pa ihave/sendme . If your costs are dominated by CPU load from UUCP, or if you send news to a site that cannot get it from anywhere else, you probably do not want to use this protocol. The decision can be made independently for each site in your .i sys file. .pg This pair works as follows: Site .cn mysite receives article .cf <123@abc.UUCP> . It enters it locally and then broadcasts it to its neighbors. One of its neighbors is site .cn yoursite which has the .b N flag in the .i sys file. So .cn mysite sends an article on newsgroup .bi yoursite \f3.ctl\fP \f3to.\fP with title .cf "ihave <123@abc.UUCP> mysite" . This control message has two arguments \- the first .cf <123@abc.UUCP> ) ( is the article id of the article in question, the second .cf mysite ) ( is the name of the site sending the article. The name of the newsgroup and the .i sys file control transmission of the article. Normally the .i sys file will read something like .sd c yoursite:net.all,fa.all,to.yoursite:BN: .ed which will cause an article on .b to.yoursite.ctl to be transmitted. .pg .cn Yoursite receives the message and looks to see if it has seen it before. If it has, it throws the message away and stops. If it hasn't, it sends a message on .bi mysite \f3.ctl\fP \f3to.\fP with title .cf "sendme <123@abc.UUCP> yoursite" which is transmitted to .cn mysite . (The two arguments to .i sendme are the article id requested and the site to send it to.) Then .cn mysite gets this message and actually transmits the article to .cn yoursite . .hn 2 newgroup .pg This message has one argument, the name of a newsgroup to be created. This allows special action to be taken locally when a new newsgroup is created. It is generated by the .op \-C option to .i inews . By default, the newsgroup is added to the active file, and mail is sent to the local contact advising that this has happened. The directory will be created when a message for that newsgroup arrives. See the routine \*(lqc_newgroup\*(rq in .i control.c if you want something different to happen. (Note that, although the body of the message contains a brief description of the purpose of the group, this body is usually thrown away by existing software.) .hn 2 rmgroup .pg This message has one argument, the name of a newsgroup to be removed. It is used for network-wide cancellation of a newsgroup. If .b MANUALLY is not defined, it will remove the articles, directory, and active file line for the group. There is a shell script .i rmgroup that does essentially the same thing as this message, but the shell script only removes the group locally. We recommend that you leave .b MANUALLY defined, and when you receive mail advising you of the demise of the newsgroup, you run .i rmgroup by hand. This will prevent accidental or malicious removal of a good newsgroup. .hn 2 cancel .pg This message cancels a given article. It takes one argument, the message id of the article to cancel. It should be broadcast to the same newsgroup as the original article. If the article to be canceled is not present, the control message will not be propagated to downstream sites. .hn 2 sendsys .pg The .i sys file is mailed to the originator of the message. There are no arguments. This is used for making maps. Since your .i sys file is public information, you should not remove or change this control message. .hn 2 senduuname .pg The .i uuname program is run and the output is mailed to the originator of the message. There are no arguments. This is used for making UUCP maps. If you do not run UUCP or have sites in your .i L.sys which are a secret, you may wish to edit this. Note that only the output of .i uuname is mailed, not the contents of .i L.sys (which news does not have access to anyway). If you do make a change, you should arrange that some mail still is sent out to the originator of the message, so he will know your site received it. See the code in routine \*(lqc_senduuname\*(rq in .i control.c . .hn 2 version .pg The local version name/number of the netnews software is mailed back to the author of the control message. .hn 2 checkgroups .pg This control message is an attempt at semi-automatic maintenance of the list of active news groups. This control messages takes the body of the article and pipes it into .bi LIB \f2/checkgroups\fP. As mentioned previously, .bi LIB \f2/checkgroups\fP will update the newsgroups file, add any missing newsgroups, and mail a message to .b NOTIFY about any old newsgroups that should be removed. It is expected that the person who maintains the list of active newsgroups will broadcast this control message on a regular basis. .hn 2 Other Messages .pg Any unrecognized message will cause an error message to be mailed to the local site administrator. Additional messages may be defined as time goes on, such as messages to automatically update directories or maps. You should be willing to go into the code .i control.c ) ( and add messages as they become standardized. .hn Maintenance .pg There are some things you should do periodically to keep your news system running smoothly. We hope to eventually automate all or most of this, but right now some of it must be done by hand. .pg The .i history and .i log files in your .b LIB directory will grow. You should make sure that they are cleaned up periodically. The .bi LIB \f2/expire\fP program will remove lines from history corresponding to deleted articles, but it is a good idea to check the file every few months to make sure it is not going wild. Be sure not to completely lose your history file when you clean it up, in case another neighbor tries to send you an article you recently got. (If you only get news from one site it is safe to clean it out completely.) .pg The log file is not automatically cleaned out by any netnews software, and will grow quickly. The .i misc/trimlib script can be installed in .bi LIB \f2/trimlib\fP, and invoked weekly by .i cron . .pg You should also clean out old newsgroups that are no longer active. To remove a newsgroup .ng net.foo , you should run the shell script .i rmgroup with .b net.foo as the argument. That is, .sd c /usr/lib/news/rmgroup net.foo .ed .pg Note that clearing up UUCP constipation is another thing you'll have to do if you have flaky hardware or phone lines. If you have more than one connection, chances are that UUCP will get clogged up when one of your neighbors goes down for more than a few hours. Various spooling schemes are being worked on to help make the news/uucp system more robust, but one thing you can and should do, if you find your .i /usr/spool/uucp directory getting too big, is to install a subdirectory fix to UUCP. A quick and dirty version of this is available from Duke, which traps the file-oriented system calls at the assembly language level and maps, for example, D.fooA1234 into D.foo/D.fooA1234. Since the C. and .i local "" D. directories still get big, in practice this can still create some big directories, but the directories tend to be a factor of 5 smaller, resulting in a factor of 25 improvement to speed (since a directory traversal for all files is quadratic on .ux ). Right now, UUCP is the weak link in netnews distribution, and you should certainly keep an eye on it. .hn Creating New Newsgroups .pg As system news administrator, you are able to create newsgroups. To create a newsgroup, first make sure this is the right thing to do. Normally a suggestion is first posted to .ng net.news.group\f1,\fPnet.relatedgroup for a net newsgroup .b net.relatedgroup ( should be the group which you are proposing to sub-divide. For instance, to propose creating .ng net.tv.soaps , post the original article to .ng net.tv\f1,\fPnet.news.group ). Followups are made to .ng net.news.group .i only . (You can force this by putting the line: .sd c Followup-To: net.news.group .ed in the headers of your original posting). If it is established that there is general interest in such a group, and a name is agreed on, then someone creates it by typing the command .sd c inews \-C \fInewsgroup\fP .ed This will create the active entry locally. The directory will be created automatically when the first article for that newsgroup is received. It will also prompt you for a paragraph describing the group and start up an .i inews to post a newgroup control message announcing the group. This control message will be sent out on .ng net.msg.ctl and other sites may have configured their systems to do something with these messages. A human readable announcement is not made \- you can post this to .ng net.news.group if necessary. .pg You must be the super user to use the .op \-C option to .i inews . (That is, your uid must match .b ROOTID . It is recommended that you change .b ROOTID to your own uid so you don't have to .i su to create newsgroups.) .hn Conversion from A to B .pg If you are currently running version A on your system, note that B is incompatible with A. The files are stored in a different format (headers have mail like field names now). The directory organization is different (each newsgroup has a subdirectory of its own, and the file names are numbers rather than .i site\f1.\fPid pairs). There are no .i bitmap , .i uindex , or .i nindex files to be trashed (which articles have been read is stored in each users .i .newsrc file). The user interface is slightly different .i netnews (1) (news/ is now called .i readnews , news is posted using .i inews , subscription is done by editing .i .newsrc , the sense of the .op \-c option is reversed, news is presented in newsgroup order, the .op \-a and .op \-t options now probably need .op \-x as well, and there are many minor changes). .pg We decided not to provide a program to convert from version A to version B. Rather, the following strategy was adopted for conversion: .lp (1) Install the new news in a different spool directory from the old one. For example, you can use .i /usr/spool/newnews . You can change to the standard name later if you want. Get it to work for local messages. .lp (2) Post an article to newsgroup .b general with the old news announcing the change. Make available documentation such as the accompanying paper .i "How to Read the Network News" to the users. This article will be the last one in the old news. .lp (3) .i Chmod the old news directory to 555 to prevent any more news from being posted. (Actually, this will prevent the bitfile from being updated, so it may not be a good idea.) .lp (4) Replace the old .i rnews program with the new .i rnews program. .lp (5) Test it by having your neighbor send you a message. .lp (6) Wait a reasonable period for everyone to have read the final article with the old news. Perhaps a few weeks is right. .lp (7) Uninstall the old news. .pg Users will have to invoke .i readnews instead of .i netnews to read news. Depending on your old method of posting, this could be changed too. (If you were using mail, it does not need to be changed.) They will also have to fix their subscriptions. In general, they can type .sd c netnews \-s .ed to see what they subscribe to on the old system, and then create a file in their home directory called .i .newsrc containing .sd c options \-n \f2their subscription\fP .ed The format of the subscription pattern matching is the same as in A except that .ng ALL is replaced by .ng all (change to lower case). Something along the lines of this could be used to automate this: .sd c (echo \-n "options \-s" ; netnews \-s | sed s/ALL/all/) > .newsrc .ed .hn Conversion from 2.9 to 2.10 .pg Conversion from 2.9 to 2.10 is not nearly as involved as an A to B conversion. The user interface does not change much, and the user .i .newsrc files are not affected. However, it is recommended that you do the conversion during a time when no news is received, so that incoming news will not get lost. One way to ensure this is to make .i /usr/bin/rnews be a shell script which saves the article in .bi $$ "" /usr/spool/innews/ .bi $$ "" ( is the process id of the particular shell and will be unique for each article). .pg The first step to conversion is to customize the sources. In the past, you had to take a fresh distribution and edit the .i defs.h file and .i Makefile to suit local preferences. If you had many local changes, or didn't record the local changes, upgrading could be annoying. 2.10 provides a mechanism to automate these changes. Create a shell script in the src directory called .i localize.sh . (You can use .i localize.sample as a template.) This shell script should copy .i defs.dist to .i defs.h , and copy either .i Makefile.v7 or .i Makefile.usg to .i Makefile . It should .i chmod any files that need to be changed (often .i Makefile and .i defs.h ) to a writable mode. Then it should invoke .i ed (1) on the files, making any necessary local changes. .pg The next step is to compile the software, with .i make (1). It may be necessary to update the .i localize.sh file until you are satisfied with the compilation. Note that after any change to the .i Makefile in .i localize.sh , you should run .i localize.sh by hand. Otherwise, although make will run it for you, it will then continue to do the make with the old .i Makefile . .pg When the software is compiled, you should run the .i cvt.active.sh shell script, with the .i lib and .i spool directories as parameters. This will create a new active file in .bi LIB \f2/active\fP. Then run .i cvt.links.sh with the .i lib and .i spool directories as parameters. Then run .i cvt.names.sh with the .i lib and .i spool directories as parameters. Old news will be linked into the new hierarchy while leaving links in the old hierarchy. If you were using the default library and spool directories, you would do the following: .sd sh cvt.active.sh /usr/lib/news /usr/spool/news sh cvt.links.sh /usr/lib/news /usr/spool/news sh cvt.names.sh /usr/lib/news /usr/spool/news .ed .pg The next step is to back up the old binaries: .sd mv /usr/bin/rnews /usr/bin/ornews \&... .ed and to install 2.10 with .sd c make install .ed Once it is installed, any incoming news will be placed into the new hierarchy but not the old one. The critical time window is between running the three shell files and installing the new software \- any incoming news between these two points will appear in only the old hierarchy and be lost to the new software. If any significant time elapses here, you should divert .i rnews into a separate spool directory as described above. .pg It is crucial that you run .i expire before any new news arrives. .i Expire will update several key files automatically. .pg Finally, test things by posting articles to .bi neighbor "" \f3to.\fP newsgroups and watching some incoming news, and announce the change to your users. .pg When you are satisfied that the conversion was successful, run the shell file .i cvt.clean.sh which will remove the old 2.9 news hierarchy. .bp .hu Appendix A: Setting up a Compressed, Batched Newsfeed .pg First, .b BATCH must have been .i #define 'd when you built the news system. To check, look in the file .i defs.h in the news source directory. .b BATCH should be defined as a program name (by default, .i unbatch ). If it's undefined or commented out, define it, re-make the news system, and install the new software. .pg You'll also need a working .i compress program. Use the one shipped with this news distribution, which is based on version 4.0. Your news neighbors should be running a compatible version of compress. Versions 3.0 and 4.0 are compatible with each other, but both are incompatible with versions 2.0 and before. .pg Update your .i sys file. First, add the .b F flag to the other news system's line. For instance, if your compressed-and-batched news feed is named .cn frobozz , and its .i sys file entry looks like: .si frobozz:net,mod,na,usa,ca,to.frobozz:: .ei then add the .b F flag as the third (colon-separated) field: .si frobozz:net,mod,na,usa,ca,to.frobozz:F: .ei Now the pathnames of articles to be sent will be stashed in a file. This file is named in the fourth field of the .i sys entry; add it now. Use an entry of the form .bi BATCHDIR \f2/system\fP, where .bi BATCHDIR is usually .i /usr/spool/batch (the actual value is defined in the news .i Makefile ), and .i system is the name of the remote system, in this example .cn frobozz . A name of that form is necessary: the .i sendbatch script, which sends the batched news, looks for a file name of this form to decide if there's news for the remote system. .pg Your completed .i sys file line should look something like: .si .sd frobozz:net,mod,na,usa,ca,to.frobozz:F:/usr/spool/batch/frobozz .ed .ei .pg In .i /usr/lib/crontab , find or create at least two news lines: one that runs nightly, and one that runs every hour or so. The nightly-run script should run .i expire , trim log files, and perhaps compile weekly statistics that you post to a local-area newsgroup one day a week. The hourly-run script should complete the transmitting task with a line like: .sd c sendbatch -c frobozz .ed Make sure the script knows how to get to the directory in which .i sendbatch lives. You can either mention the directory in the script's .b PATH -setting line, or replace .i sendbatch with its full pathname. .i Sendbatch reads the files mentioned in .i /usr/spool/batch/frobozz , batches them, optionally compresses them, sends them to the remote system, and arranges for remote processing. .pg This remote processing is directed by another file in .b BATCHDIR . Make a file with a name of the form .bi BATCHDIR \f2/system\fP.cmd (for this example, .i /usr/spool/batch/frobozz.cmd ). Put a line in it specifying the command that the remote system should execute to unpack the news batches that your system will send. An example .i frobozz.cmd would be: .sd c uux - -r -z -n -gd frobozz!rnews .ed .pg Now your system will transmit compressed batches. The receiving side of the business is handled largely by a program called .i rnews , which will call other programs in .b LIBDIR to do additional processing on the incoming batches. .pg Make sure there is an executable file called .i rnews in the .b BINDIR directory (check the .i Makefile for its actual location). It must be reachable by UUCP or by whatever transport you'll use to transfer the netnews. If you defined .b BINDIR as .i /usr/bin , you should have no problems because .i uuxqt can already get there. If you defined it as a different directory, you may have to teach .i uuxqt to look in that directory; accomplishing this varies from system to system. On 4.2BSD, add the directory to the .b PATH= line of your UUCP .i L.cmds file. On System V, on the .i rnews line of your .i L.cmds file, add a comma followed by the remote system's name on that line. If yours is in .i /usr/bin/news/rnews , your .i L.cmds file will look like: .si .sd [For 4.2BSD] PATH=/bin:/usr/bin:/usr/bin/news rnews .ed .sd [For System V] /usr/bin/news/rnews,frobozz .ed .ei Other systems have a similar file in the .i /usr/lib/uucp directory by which you can specify added programs and paths different from the defaults. HP-UX, for example, has a .i /usr/lib/uucp/COMMANDS file which expands .i uuxqt 's horizons. In more restrictive cases, paths are compiled into .i uuxqt . If you can't modify any UUCP files, just put .i rnews in .i /usr/bin. .pg You must also have a .i cunbatch in .b LIBDIR (wherever your .i Makefile defines it), because .i rnews will eventually try to exec that copy. .pg Tell the person at the other end of your newsfeed to use .i "sendbatch \-c" to send you news. Once that's in place, watch your UUCP .i LOGFILE and your news .i log and .i errlog files to ensure that news is being correctly received and unpacked on your system. .pg Older compressed batching systems will try to exec .i cunbatch instead of .i rnews . If you are still communicating with these, leave .i cunbatch in .b BINDIR until they have upgraded their software. .bp .hu Appendix B: MULTICAST .pg If this is defined (in .i defs.h ) then two new flag characters become defined in the .i sys file. The first, and most important, of these is the .b M flag. .pg If the .b M flag is set on some line in the .i sys file, then the fourth field (transfer command) is redefined to become a .i multicast name. That is simply another system name, expected to be found in the first field of some line in the .i sys file (textually following the line containing the .b M flag). .pg When a news item is being retransmitted, if it should (according to the subscription list) be sent to a system that has the .b M flag set, then instead of a command being run immediately to transmit the news, the news system remembers the system name, along with the multicast name (fourth field). .pg Eventually the multicast system name is found in first field of a sys file line. If its subscription list allows transmission of this news item, then its command will be executed. This command may have up to two \*(lq%s\*(rq substitutions in it. The second of those is replaced by the name of a file containing the news item (used with the .b U flag). The first is subjected to rather special treatment. The whole \*(lqword\*(rq (delimited by white space) containing that \*(lq%s\*(rq is duplicated as many times as there were systems with the .b M flag set that referenced this multicast name (which might be 0 times, causing that \*(lqword\*(rq to be omitted). In each of these duplicates, the \*(lq%s\*(rq is replaced by the name of a system. Note the multicast system name itself is not included in this process. Then the command is executed as usual. .pg The second flag available if the news system is built with .b MULTICAST defined is .b O . If this flag is set, then the sys file line will be ignored unless the system name is a multicast name from some earlier line with the .b M flag, and the news item is to be sent to that (earlier) system. This allows the subscription list for the multicast system name (which is likely to be a fake system name, invented just for this purpose) to be given a very wide subscription list (like .ng all ) without any unusual effects. .pg Here is an example. Assume that you wish to forward .ng net.unix to four people by mail. You could do this as ... .si .sd fred:net.unix::mail fred harry:net.unix::mail harry jane:net.unix::mail jane tony:net.unix::mail tony .ed .ei however this causes the mail program to be started 4 times, once for each recipient. On some systems starting the mail program is a very expensive operation. If .b MULTICAST is defined, an alternative method is .si .sd fred:net.unix:M:tony harry:net.unix:M:tony jane:net.unix:M:tony tony:net.unix::mail tony %s .ed .ei This would cause just one command to be run: \*(lqmail tony fred harry jane\*(rq. Note that \*(lqtony\*(rq must still be explicitly included in the argument list to the mail command; the \*(lq%s\*(rq does not expand to include the multicast \*(lqsystem name\*(rq itself. .pg A more useful way of doing this, which does not assume that all the mail readers will want to read the same newsgroups is as follows. .si .sd fred:net.unix:M:Mail harry:net.physics,net.astro:M:Mail jane:net.unix-wizards,net.women:M:Mail tony:net.unix,net.unix-wizards,net.jokes:M:Mail Mail:all:O:mail %s .ed .ei .pg Now, if a news item in group .ng net.unix was received, the command .sd c mail fred tony .ed would be executed. If the news were in both .ng net.unix and .ng net.unix-wizards then the command would be .sd c mail fred jane tony .ed .pg If a newsitem in .ng net.med (which no-one gets by mail) arrives, then the \*(lqMail\*(rq line will be ignored, because of the .b O flag. \*(lqMail\*(rq is a fake system invented just so its \*(lqtransfer command\*(rq can be used to send news to the other recipients. .pg The same kind of technique can be used for normal transfer of news to other systems if your transport network supports a facility to send to many other systems in one command. (That is, if it has a multicast facility.) SunIII (the network used in Australia) has this ability, so a typical Australian .i sys file looks like .sd emuvax:aus,net,mod,fa:M:FakeName kremlin:aus,net,mod:M:FakeName kanga:aus,net,!net.all,net.unix:M:FakeName FakeName:all:OUS:/bin/sendfile -NRSareporter -d%s -x%s .ed .pg A news item in .ng aus.general causes the following command .sd c /bin/sendfile -NRSareporter -demuvax -dkremlin -dkanga -x/usr/spool/... .ed to be executed. Just one command is run to send the news to three remote systems. .pg If a multicast system has the .b F flag set, then the name of a file containing the news is appended to the file whose name is in the fourth field, as usual. But on the same line, separated by spaces, will be appended the names of all the systems that referenced this multicast system. .pg For example, if the Australian site wanted to batch news, instead of sending it directly, it would simply change the last line of its .i sys file to .sd c FakeName:all:F:/usr/spool/batched/allsites .ed .pg Then a news item in .ng net.jobs would cause the following line to be appended to .i /usr/spool/batched/allsites .sd c /usr/spool/news/net/jobs/5542 emuvax kremlin .ed .pg This can then be processed later, in something like the normal manner. (Unfortunately no commands to do this processing are yet available). .pg Caution: when .b MULTICAST is defined, the first \*(lq%s\*(rq in all transfer commands is used for multicast, regardless of whether or not the system name is ever used as the last field of some line with the .b M flag set. To use the .b U flag in such a case, a dummy \*(lq%s\*(rq should be used, it will simply be omitted from the command that is executed. .pg As an example, if a .i sys file line were .sd c foovax:net,na,usa:U:uux - foovax!foonews <%s .ed without .b MULTICAST , it would need to be changed to .sd c foovax:net,na,usa:U:uux - foovax!foonews %s <%s .ed if .b MULTICAST were defined. .pg Additional caution: The numbers of system names that may be used in this way are quite severly restricted. Typically there may only be about 10 multicast system names, and each of those is restricted to sending to no more than about 20 systems. These limits are dynamic (that is, the numbers counted are the number of multicast systems receiving any single news item, and the number of systems that each of those will actually cause this particular news item to be sent to). These limits should easily suffice for real news sending to remote systems; however they are not likely to suffice if you want to mail news to everyone on your host.