CONFIGURATION AND INSTALLATION OF NN ------------------------------------ RELEASE 6.4 This file describes the necessary steps to configure and install nn. You are advised to read this file before proceeding with the installation. NOTE: The configuration and installation has changed significantly ===== from previous releases, so read these instructions carefully even if you are familiar with previous releases of nn. If you want to use NNTP (accessing news from a remote host), you must also read the file NNTP. The files RELEASE_NOTES and PROBLEMS contains descriptions of problems previously seen when installing nn. If you run into a problem, consult that file before griping about it. The following command line prompts are used in the examples: `$' is used when no special privileges are required. `#' is used when SUPER USER privileges may be required. STEP 1 CONFIGURATION OF MAKEFILE ------------------------- Check the 'Makefile' file and supply the proper values for the following parameters: CC The command to invoke the C compiler CPP The command to invoke the C preprocessor with the result written to the standard output stream. CFLAGS Flags to the C compiler (e.g. -O or -g) LDFLAGS Additional flags to the C compiler when linking executeables Notice that mandatory system specific CFLAGS and LDFLAGS are usually defined in the s- file (see below). STEP 2 CREATE CONFIGURATION FILE config.h ---------------------------------- The configuration file is distributed in the file config.h-dist. You must COPY this to config.h before proceeding. Keep the original -dist file to allow patches to be applied to it if necessary. $ cp config.h-dist config.h STEP 3 EDIT config.h TO REFLECT YOUR SYSTEM ------------------------------------ For each required configuration parameter, the config.h file contains verbose comments explaining the meaning of each parameter in the file. Read and follow these instructions carefully. If you do that, nn should compile and run without problems. Further information about the parameters can be found below in case you are in doubt. Regarding the NNTP related definitions, consult the file named NNTP. Notice that every time you edit config.h, the file update.h is modified to make a new configuration level for the version in the source directory. The current configuration is showed in the version string as #number. STEP 3.1: SPECIFY NETWORK AND NNTP CONFIGURATION ------------------------------------------------ If you use nn on a single system with news on its local disks, you will not have to worry the least about networking, and you simply leave NETWORK_DATABASE and NNTP undefined. Otherwise, consult the file NNTP for further instructions on sharing the news file and/or the database via NFS and/or NNTP. STEP 3.2: SELECT SYSTEM FILE ---------------------------- Among the things you have to select are two system and machine dependent files (residing in the `conf' subdirectory). The following system files are delivered with nn: s-3b1g.h For 3b1 (unix-pc) with GCC. s-NeXT1-0.h For NeXT 1.0 s-aix221.h For AIX 2.2.1 s-aux1-1.h For A/UX 1.1 s-bsd4-2.h For 4.2 BSD and Ultrix systems s-bsd4-3.h For 4.3 BSD systems s-dnix5-2.h For dnix 5.2 on DIAB DS90. s-dnix5-3.h For dnix 5.3 on DIAB DS90. s-dynix3-0.h For Dynix 3.0 on Symmetry. s-fortune.h For Fortune 32:16 [read comments in the file] s-hpux.h For HPUX (series 300) s-hpux2-1.h For HPUX 2.1 (series 800) s-hpux3-0.h For HPUX 3.0 (series 800) s-hpux6-5.h For HPUX 6.5 or newer (series 300) s-hpux7-0.h For HPUX 7.0 s-ix386.h For Interactive UNIX on 386. s-ptx1-1.h For Dynix/PTX on symmetry. s-pyramid.h For Pyramid (and Targon 35). s-scoV386.h For SCO UNIX V on 386. s-sgi4D.h For IRIX 3.1/3.2 [read comments in the file] s-sinix.h For Siemens SINIX s-sunos3.h For SunOS 3 s-sunos4-0.h For SunOS 4.0 s-sunos4-v.h For SunOS 4.1 SysV environment s-sys5-tcap.h For system V using termcap rather than terminfo. s-sys5.h For most system V based systems. s-sysV88.h For Motorola System V/88 Release 3. s-texas1500.h For Texas Instruments System 1500. s-tower32.h For NCR tower s-ultrix.h For ULTRIX systems (4.2 based) s-umipsb.h For Mips running riscos 4.0 or greater s-umipsb4-5.h For Riscos 4.5 and later s-uport2-2.h For Microport UNIX V.2 s-usg3-1.h For most system V systems (obsolete) s-uts2-0.h For Amdahl UTS 2.0 s-xenix286.h For SCO Xenix 2.2.1 (286) -- terminfo s-xenix286b.h For SCO Xenix 286 -- termcap s-xenix386.h For xenix386 [termcap version]. s-xenix386ds.h For Xenix386 2.3.2 w/development system. s-xenix68k.h For Tandy 68000/Xenix 3.2 If none of these can be used on your system, create your own based on the file conf/s-template.h. STEP 3.3: SELECT MACHINE FILE ----------------------------- The following machine description files are delivered with nn: m-3b1g.h For 3b1 (unix-pc) with GCC [no networking]. m-amdahl.h For Amdahl 5890 (big iron) m-att3b.h For AT&T 3b2 (with s-usg3-1.h) m-convex.h For Convex. m-dec3100.h For DECstation 3100 (with s-bsd4-2.h) m-gould.h For Gould PN6000 (with s-bsd4-3.h) m-hp9000.h For HP9000 series 320 and 800 (at least) m-i80286.h For Intel 80286 processors [no network support] m-i80386.h For Intel 80386 processors [no network support] m-m680x0.h For Motorola 68000 family processors m-m88000.h For Motorola 88000 risc processors m-mips.h For MIPS processors m-mx300.h For Siemens MX300 m-pyramid.h For Pyramid (and Targon 35). m-rt6150.h For IBM 6150 m-sgi4D.h For Silicon Graphics 4D series. m-sparc.h For SPARC processors m-sun386i.h For 80386 based SUNs [have network support] m-symmetry.h For Sequent Symmetry. m-vax.h For VAX family If you cannot use one of these machine files create your own based on the file conf/m-template.h. STEP 3.4: LOCALIZE NN --------------------- You will have to specify a number of files and directories which nn has to know about to work properly. If you don't specify these, nn will in most cases use it own alternatives which will correspond to common practices on most installations. The following directories and files can be defined in config.h: BIN_DIRECTORY (mandatory) The directory where you want the user programs to be installed. The following programs will be installed in that directory: nn The news reader program nnacct Accounting, quota, and access management nnadmin The administration program (link to nn) nncheck Check for unread articles (link to nn) nngoback Mark older articles as unread (link to nn) nngrab Faster keyword search nngrep Grep for news groups (link to nn) nnpost Standalone posting program (link to nn). nnstats Collection and expiration statistics nntidy Cleans up the rc file (link to nn) nnusage Show usage statistics LIB_DIRECTORY The directory where nn's auxiliary programs and files will be installed unless another directory is specified by one of the following definitions. MASTER_DIRECTORY (optional, default = LIB_DIRECTORY) The directory containing the nnmaster daemon programs. It should not be shared in a networked environment! back_act Program to make daily copies of the active file to allow nngoback to work. nnmaster The program building and maintaining nn's database. nnspew Program to build a tertiary subject database for nngrab. MPID Exclusive lock file created by the currently running nnmaster daemon process. Accessed by nnadmin to get the daemon's process id. GATE Message file created by nnadmin and deleted by nnmaster. CLIENT_DIRECTORY (optional, default = LIB_DIRECTORY) Contains the auxiliary programs and files required by the nn program: aux The shell script used in connection with replies etc. It knows about common editors like vi and gnu emacs to have them position the cursor appropriately. To add support for your own favourite editor, you should edit the file aux.sh, not the compiled `aux' script! upgrade_rc Script used by nn to convert release 6.3 rc files to .newsrc format when first invoked after upgrade to 6.4. HELP_DIRECTORY (optional, default = CLIENT_DIRECTORY/help) The directory where the help files and online manual are stored. This directory is an obvious candidate for sharing in a network. CACHE_DIRECTORY (optional, default = each user's .nn directory) Only used with NNTP!! Directory to be used as a common storage for temporary cache files when nn is used with NNTP. Using a common directory for cache files allows you to clean these out on reboot with a single "rm" command in the rc file: (cd CACHE_DIRECTORY; rm -f *) But of course this requires that you use a separate directory for the cache! TMP_DIRECTORY (optional, default = /usr/tmp) The directory to be used as temporary storage for files used when editing responses etc. NEWS_DIRECTORY (optional, default = /usr/spool/news) The directory containing the news spool directories and files. It is not required when a remote NNTP server is used. NEWS_LIB_DIRECTORY (optional, default = /usr/lib/news) The directory containing the news system's active file and other related files. When a remote NNTP server is used, it is still needed as the location of the (mini-)inews program if posting is allowed (unless INEWS is explicitly defined to override the default location). LOG_FILE (optional, default = LIB_DIRECTORY/Log) The log file used by nnmaster and nn to store reports, error messages, usage statistics, etc. STEP 3.5: WHERE DO YOU WANT THE DATABASE? ----------------------------------------- The following definitions in config.h are used to control where the database maintained by nnmaster is stored. The database consists of a couple of files containing global information for all existing groups, and a pair of files for each non-empty group. The database requires some disk space to hold the necessary information. On average about 100 bytes per article in the system, or about 5% of the space allocated to the news articles. The database is intended to be shared together with the news spool directory in a networked environment provided that NETWORK_DATABASE is defined in config.h. If DB_DIRECTORY is not defined, the global database files will be located in a directory named NEWS_DIRECTORY/.nn, and the per-group files will be located in each individual news group's directory (named .nnd and .nnx). Using this strategy will normally require that nnmaster is owned "news" (OWNER in config.h). The location of the database can be changed via the following definitions in config.h: DB_DIRECTORY (optional, default = see above) The directory containing the global database information files. If you share /usr/spool/news via NFS or RFS, you can set DB to something like /usr/spool/news/.nn to share it automatically with /usr/spool/news. DB_DATA_DIRECTORY (optional, default = DB_DIRECTORY/DATA) When DB_DIRECTORY is defined, the per-group files will no longer be stored in the group directories, but in a single common directory specified by DB_DATA_DIRECTORY. The files in this directory will be named either by group number or by group name (if DB_LONG_NAMES is also defined). The files config.h and NNTP describes how to share the database between several machines (also when you don't use NNTP). STEP 4 COMPILE THE SOFTWARE -------------------- To compile the software, you just have to run one of the following make commands. If you are making a complete package with both master and client, do $ make all If you want to share a database which resides on another host (through NFS/RFS/rdist), you don't need a master on the local system, so you can do the following instead: $ make client STEP 5 INSTALLING THE SOFTWARE ----------------------- Installation of the nn software is handled entirely via a script "./inst" created during the compilation. The components of nn are split into five parts, which can be installed separately or in various combinations depending on whether you run a stand-alone system or networked systems sharing the database and other parts of the nn package. The five components are: 1) Master files and programs (machine dependent) Install the MASTER_DIRECTORY programs. 2) User files and programs (machince dependent, shareable) Install the BIN_DIRECTORY programs. 3) Auxiliary programs (configuration dependent, shareable) Install the CLIENT_DIRECTORY files and programs. 4) Documentation (shareable) Install the MAN pages in the proper directories. 5) Help files (shareable) Install the HELP_DIRECTORY files (except online manual). 6) Online manual (shareable with 5) Format and install the online manual in HELP_DIRECTORY. Unless you have defined yourself as the owner of the nn package and have write permission on all the necessary directories, you will need to be super-user to install nn, so start with $ su Now run the installation script: # ./inst The `inst' script will list a menu with the following choices: (1)-(6) Install individual parts of the package. (s) Install a complete server + client package (1-6). (c) Install a client which accesses all its support files and the database via a network (2). (h) Install a client with local auxiliary files, but shared documentation and help files (2-3). (n) Install a client accessing only the database via a network (2-6). (m) Install only the nnmaster (1). (c) Install only the client programs (2). (u) Update already installed parts of the package. This will check for the existence of the old programs, and only update programs and files already installed. You will typically use this after applying patches. You can also run the `inst' script with the choices as arguments, e.g. ./inst m c NOTICE: Since nnmaster runs setuid OWNER, all users can potentially kill the running master, initialize the database etc. if they have access to execute the master. So either restrict the permissions to execute nnmaster or the access to the directory containing it. The default installation puts modes -rwsr-s--- on nnmaster and leaves the directory "open" which may not be adequate for you. STEP 6 INITIALIZE THE DATABASE ----------------------- If you have installed the nnmaster on the current system, you now have to initialize the database: $ su -- also as superuser # ./inst INIT If something goes wrong in this step, e.g. problems with the active file, you must redo the initialization after fixing the other problems. When the INIT operation completes, a database with empty entries for all the currently existing groups will have been created. If you want some special actions to be performed for specific groups as described in the nnmaster manual, you must now edit the GROUPS file created by nnmaster in the DB_DIRECTORY. If you modify the GROUPS file, you must run the following command to register the changes to the GROUPS file. $ MASTER_DIRECTORY/nnmaster -G When you are ready, you must start nnmaster to enter all the existing articles into the database. If you use the following command, nnmaster will fork and return immediately; its background child will continue to update the database whenever new articles arrive: It will ignore articles which are more than 45 days old (-O). $ MASTER_DIRECTORY/nnmaster -r -O45 It may take quite a while before all existing articles have been entered into the database. You can use nnadmin's (U)pdate and (S)tat commands to trace the progress and the (L)og command to see if it has finished (a C entry will occur). You will see that many groups will be BLOCKED, but the number should decrease as nnmaster gets through more and more groups. You can also use the following command to do the initial collection of articles from a terminal and get a nice trace of the action: $ MASTER_DIRECTORY/nnmaster -D -O45 One or two numbers will be shown while a group is being collected. The first number is the number of the article currently being read. The (optional) second number will be the number of old (or bad) articles which nnmaster has ignored in the group so far. NOTICE: If the system file you have used does not specify how to detatch a process from its controlling terminal, the nnmaster may die when you log out. When nnmaster has finished the initial collection the articles, you can nnadmin's (V)alidate command to verify that the database build by nnmaster is consistent (restart nnadmin before verifying). STEP 7 UPDATE SYSTEM FILES ------------------- You will have to edit some of the scripts and files on your system to get the database and other support files updates automatically, also following system shutdown, crashes, etc. STEP 7.1: START NNMASTER WHEN SYSTEM IS BOOTED ---------------------------------------------- To have the database updated at all times, the nnmaster should be started when the system is booted. There will be a file named /etc/rc, a directory /etc/rc.d, or something similar on your system which contains commands that are executed when the system is booted. The following commands should be added to the boot scripts: rm -f MASTER_DIRECTORY/MPID MASTER_DIRECTORY/nnmaster -l -r -C Alternatively, you can arrange for cron to run the master regularly. In this case, you should not use the -r and -C options. Instead, you should let cron execute the command 'nnadmin Z' once a day to validate the database. For example: 0,10,20,30,40,50 * * * * MASTER/nnmaster -LM 0 0 * * * BIN/nnadmin Z WARNING: If you share the database via NFS or RFS, nnmaster should run only on the system where the database actually resides!! And preferably it should run on the host where the news spool directory is located as well. This will improve speed as well as reliability (NFS can suffer from time out problems). STEP 7.2: SETUP EXPIRE ON THE DATABASE -------------------------------------- To run expire on the database, you simply have to execute the following command (with sufficient privileges): BIN_DIRECTORY/nnadmin =EYW You should arrange for expire to be run on nn's database whenever you have run expire on the news directories. Supposing you run the expire from your crontab, you may simply add the above command to the crontab at an appropriate time when you are certain that news' expire is completed. If you run nnmaster from cron rather than in daemon mode, you can use the following command to run expire on the database. nnmaster -F -k "" This form allows you to run expire on selected groups rather than on all groups as initiated by the above nnadmin command. See the nnmaster manual for further details. STEP 7.3: SAVE A COPY OF THE ACTIVE FILE ONCE A DAY --------------------------------------------------- The `nngoback' program requires that the program `back_act' is executed once (and only once) every day to maintain suitable copies of the active files for the last 14 days. In a network environment, it should execute on the same host as the nnmaster. Simply arrange for back_act to be invoked by cron once a day (preferably just before the batch of news for `today' arrives). For example, assuming the news is received just before midnight (syntax and location of crontab entry may vary): In /usr/spool/cron/crontabs/news (System V): 00 23 * * * MASTER_DIRECTORY/back_act or in /usr/lib/crontab (BSD): 00 23 * * * su - news MASTER_DIRECTORY/back_act The default setup allows you to go 14 days back with nngoback, but if you don't keep news that long, there is no reason to keep that many copies of the active file either. In that case, you can supply the maximum number of days as an argument to back_act. Of course, you can also keep more than 14 copies of the active file to allow nngoback to go more than 14 days back by giving back_act an argument larger than 14. STEP 7.4: PREPARE FOR NNSPEW TO BE RUN REGULARLY ------------------------------------------------- The nngrab program will run faster if a dedicated subject database in addition to the normal database is available. To maintain this additional database, the program nnspew must be executed regularly, e.g. from cron. Every 3-6 hours should be sufficient to keep the database reasonably up-to-date, e.g. In /usr/spool/cron/crontabs/news (System V): 2 6,12,18 * * * MASTER_DIRECTORY/nnspew or in /usr/lib/crontab (BSD): 2 6,12,18 * * * su - news MASTER_DIRECTORY/nnspew STEP 8 INSTALL AND EDIT GLOBAL FILES ----------------------------- Depending on your needs, you should create the following files on each host running nn (you may also just share the files if you like): CLIENT_DIRECTORY/init The global init file for all users on the system. Users will be able to override the definitions in this file, but you can probably make some sensible decisions which will prevent novice users from getting into trouble, for example set the default distribution to "local" etc. You can also specify a global presentation sequence here. You may use init.sample as a starting point, but don't use it without careful examination. Especially, the sequence part is mainly an illustration of the possibilities. If you are in doubt, just delete the sequence part of the file (groups will then be presented in pure alphabetical order). CLIENT_DIRECTORY/routes You DO NOT NEED this file if you already run a domain based mailer, i.e. when HAVE_ROUTING is defined in config.h. Otherwise, you can use it as a configuration file for the domain address remapping done by nn in reply addresses and the nnmail program. You may use routes.sample as a starting point (it briefly describes how to build a routes file). Please notice that neither the routes functionality, nor nnmail is a supported part of nn - if you really want to run a domain-based mailer, get smail 2.5 or later. And if you ask me how to use it I will answer: "Get SMAIL instead". CLIENT_DIRECTORY/motd Every time you change this file, it will be shown to the nn users the next time they invoke nn. This can be used to inform the users about changes in the news environment or local policies. (motd = message of the day) NNTP_SERVER Must contain the host name of the NNTP-server when NNTP is used. If you already run NNTP with your other news readers, this file does not need to be modified. STEP 9 TEST THE BASIC FUNCTIONS ------------------------ If any of the following tests fails or you see other peculiar behaviour, you should consult the PROBLEMS file. You may not be the only one to have seen the problems, and there might even be a solution. First you should check that nnmaster does collect the articles it is supposed to. Here, nnadmin is a great help, since you can peek around in all the database files and see what nnmaster is doing. nnadmin takes a snap-shot of the database when it starts up, but you can take a new snap-shot anytime using the (U)pdate command. Also look at the (L)og to see that there were no problems while collecting the articles. There are a few things you should check to ensure the proper functioning of nn. 1) Backup your current .newsrc file if you have one. (Don't save it in .newsrc.bak or .newsrc.orig since nn may use these names). 2) Run `nn'. If you have upgraded from release 6.3, nn will convert your release 6.3 .nn/rc file into a .newsrc file. 3) Does nn find any news? If not, does nn -x find anything? 4) Can you send mail to yourself? Try the sequence: m (return) (return) testing (return) edit the letter s (return) If not, you should check the REC_MAIL program. 5) Can you post an article to the local test group? Try: :post (return) test (return) local (return) edit the article s (return) If not, you should check the INEWS program. ------------------------------------------- IF EVERYTHING WORKS YOU HAVE COMPLETED THE INSTALLATION ------------------------------------------- UPDATING THE SOFTWARE --------------------- Patches to this software will be distributes as context diff's which can be applied using Larry Wall's `patch' program. After applying the patches, you will need to redo the compilation and installation steps: $ patch -p0 < PATCH_FILE (or use nn's :patch command) $ make all $ su # ./inst u To be able to install a new nnmaster, the currently running master (if any) will be stopped automatically, and it has to be started manually when the installation is complete (unless it is setup to be run by cron). Notice that unless it is explicitly required in the patch, there is no need to reinitialize the database after applying the patch.