[comp.sys.next] Cnews Installation

jiro@shaman.com (Jiro Nakamura) (05/31/91)

Hiya -
	Some people e-mailed concerning problems buildling Cnews as distributed from  
UUNET. The main problem is:

> Problem is building the executables... the doit.bin
> shell script issues warnings, errors [the compiler
> actually] and basically stops halfway through... "no
> arguments to the index macro" or something similar. 


The problem here is that NeXT has the function call index() defined as a macro in  
terms of strchr(). See string.h:

/usr/include/string.h:#define index(s,c) strchr(s,c)

What the problem usually is is that Cnews (or other software, BTW) is predeclaring  
the function index with something similar to:

extern char *index(const char *s, int c);

You have two solutions to this:
	1) Use the STRICT_ANSI flag, which will turn off making index() a macro. I  
don't use this so I'm not 100% sure.

	2) Just /* comment out */ the predeclaration in the source code. This is what I do.  
Objective-C style comments // come in handy here.

> Problem is, I'm not sure if
> I should enforce strict BSD compatibility etc... there
> are library routines defined which return different
> data types depending on whether the STRICT_BSD symbol is
> defined etc. etc. 


	I don't use strict BSD. My install script follows this message. Note that since  
I've already run it, my defaults will be different from yours. Use my defaults for  
function calls, cc commands, and libraries. You may not want to use the rest of them  
since they don't apply.
	This works for me. No guarrantees for other people. If you need some help,  
e-mail me.

	- Jiro Nakamura
	jiro@shaman.com

--- Begin Script of Cnews Install ----------
shaman> ./build
This interactive command will build shell files named doit.root,
doit.bin, doit.news, and again.root to do all the work.  It will not
actually do anything itself, so feel free to abort and start again.

You probably need your system manuals handy.

When a question is asked in the form `How are you [okay]? ', the
answer in brackets is what you will get if you just hit RETURN.
(If you want give an empty string as the answer, type a single
`-' instead.)

Do you want to use your previous answers as defaults [no]? yes

Picking up defaults, from last run...
done

C News wants to keep most of its files under a uid which preferably
should be all its own.  Its programs, however, can and probably should
be owned by another user, typically the same one who owns most of the
rest of the system.
What user id should be used for news files [news]? 

What group id should be used for news files [news]? 

What user id should be used for news programs [bin]? 

What group id should be used for news programs [bin]? 

Do the C News sources belong to bin [yes]? 


C News lives primarily under three directories:  one for articles (and
incoming and outgoing spooling), one for control files, and one for
programs.
Where should articles live [/usr/spool/news]? 

Where should control files live [/usr/lib/news]? 

Where should programs live [/usr/lib/newsbin]? 


Is   /bin:/usr/bin:/usr/ucb
the correct path to follow to find standard programs on your
system [yes]? 


C News normally uses a umask of 002, turning off only the others-write
bit in the permissions of files used.  (The correspondence between bits
and number is:  rwx = 421, so turning off group-write bits and all
others-access bits would be a mask of 027, for example.)  Usually
a umask of 002 or 022 is appropriate.
What umask should C News use [002]? 


C News wants to mail some forms of trouble reports to an administrator.
You probably want to make this a system mailbox, rather than that of a
specific user, so you won't have to change the software when you get a
new administrator.
Where should C News mail trouble reports [usenet]? 


The shell files that are everywhere in C News want to pick up their
configuration parameters (mostly, the last few questions you have
answered) from a file at a known location; this is very hard to avoid
unless you play tricks with environment variables (see documentation).
Where should the shell configuration file be
located [/usr/lib/news/bin/config]? 


What is the full pathname of the chown command [/etc/chown]? 

Can I say `/etc/chown news.news file' to change both the user id
and group id of a file [yes]? 


building doit.root...
done

C News has libraries for several kinds of Unix:
        bsd42   4.2BSD and successors
        usg     AT&T System V
        v7      Version 7 (4.1BSD is pretty close, ditto Xenix)
        v8      Version 8, aka Eighth Edition
Which best describes your system [bsd42]? 


C News has libraries for small address spaces (16 bits) and big
ones (preferably 32 bits, but anything rather bigger than 16).
Which best describes your system [big]? 


Systems vary in whether certain library functions and system calls
are present.  C News contains reasonably-portable versions of the
possibly-missing library functions, and fake versions of the
possibly-missing system calls, but it needs to know which are missing.
Does your system have  fsync() [yes]? 

Does your system have  getopt() [yes]? 

Does your system have  memcpy() [yes]? 

Does your system have  memcmp() [yes]? 

Does your system have  memchr() [yes]? 

Does your system have  memset() [yes]? 

Does your system have  mkdir() [yes]? 

Does your system have  putenv() [no]? 

Does your system have  strchr() [yes]? 

Does your system have  strrchr() [yes]? 

Does your system have  strpbrk() [yes]? 

Does your system have  strspn() [yes]? 

Does your system have  strcspn() [yes]? 

Does your system have  strtok() [yes]? 

Does your system have  symlink() [yes]? 

Does your system have  strerror() [yes]? 


The news system uses a database package, typically the old "dbm"
library from Version 7 or a lookalike, as an indexing system.  We
supply a version of the "dbz" library, which is faster than "dbm",
uses much less disk space, and is program-compatible (although
it is *not* file-compatible, so anything else using the database
[notably NNTP, if applicable] has to be relinked with it).  Dbz
is usually preferable to dbm, barring major backward-compatibility
problems.  Do you want to use our "dbz" library [no]? 

Presumably you want to use the dbm library or some local
equivalent, then.  What is the compile option, or filename,
needed to get it [-ldbm]? 

Does your dbm/dbz have a dbmclose() function [yes]? 

Does the store() function in your dbm/dbz return a
value (some old dbms did not) [yes]? 


Many systems, notably older ones, have implementations of the Standard
I/O library ("stdio") in which fgets, fputs, fread, and fwrite are
quite slow.  We supply versions of these functions which are faster
than those in any stdio we know; they are compatible with most old
AT&T-derived stdios.  (They tend not to work on modern System V,
but the modern System V stdio is respectably fast.)  They can be a
major performance win for C News.  There is a fairly thorough
compatibility check run after the library is built; as far as we
know, if the test works, the functions do (even on SunOS 4.0).
Do you want to use our fast stdio library [no]? 


The strchr() function is usually slower than in-line C code
when small strings are involved, unless your compiler is very
clever and can generate in-line code for strchr().  Is your
compiler that good (okay to guess) [no]? 


Modern Unixes can generally use the setuid() system call to set the
real and effective user ids to the current effective user id.  In
old Unixes, only "root" can change the real user id.  This causes
various problems for C News.  C News provides a small program named
"setnewsids" to run setuserid-root; all it does is change user and
group ids and then execute C News "relaynews".  It is needed only on
uncooperative systems.  Relaynews invokes it automatically if needed
(and it then invokes relaynews in return).  Can this system do
setuid(geteuid()) to change the real uid/gid [yes]? 


Some systems have header files that others lack, and C News
is prepared to fake missing ones.
Does your system have an ANSI-C-conforming <string.h> [yes]? 

Does your system have <sys/timeb.h> [yes]? 


Very old Unix systems needed the order of object modules in a library
chosen very carefully.  V7 introduced "ranlib" which removes the need
for this.  Recent System Vs have had the same facility built into "ar"
(look for the "symdef" feature in the "ar" manual page) so "ranlib"
is not needed.  Does your system use ranlib [yes]? 


Historically the C compiler is named "cc", but this is not true on
some systems, and on others there are several different C compilers.
What is the name of the C compiler to be used [cc]? 


Historically the only normal compilation option needed for most
programs is -O, but again compilers, especially newer ones, differ.
What options should be given to the compiler [-O -fwritable-strings]? 


The final linking ("ld") step of compiling might need an option,
such as -n or -i, to produce the preferred form of executable file.
On most modern systems the default is right.  What options, if any,
should be given for linking []? 


On unusual systems it may be necessary to link C News programs with
libraries other than the usual C library.  These can be specified as
either full pathnames or -l... options.  What libraries, in addition
to the one(s) picked up automatically by the compiler, should be used
when linking C News [-lsys_s]? 


Does your system have a "hostname" command [yes]? 


C News tries to limit the backlog of news batches spooled up for
transmission to a site, to control use of disk space.  To do this,
it needs to be able to determine the length of the queue of news
batches for a particular site.  This is UUCP-version-dependent.
There is a good chance that you will have to customize the "queuelen"
program.  C News knows about several versions:
        hdb     Honey DanBer, aka Basic Networking Utilities
        sub     old uucp with subdirectories (e.g. /usr/spool/uucp/C.)
        old     very old uucp, no subdirectories
        pre     prehistoric uucp, no subdirectories, no -g option on uux
        null    don't run uucp or don't care about queue lengths
Which one is most appropriate [sub]? 

Beware -- test "queuelen" to make sure it works.

C News often wants to ask how much disk space is available.  The
format of output from the "df" command unfortunately varies a lot.
C News knows about several different versions:
        bsd     4.2BSD and later
        sysv    many System Vs
        xenix   some (all?) Xenixes; some System Vs, e.g. Microport, HP?
        sgi     Silicon Graphics Iris systems
        ultrix  DEC Ultrix 3.0 (and later) (and earlier??)
        v7      plain old style:  no headers or fluff, just name and number
        null    don't know or don't care how much space is available
Which one is most appropriate [bsd]? 


Some "df" commands, especially on old systems, must be given the
name of a device.  Modern ones can be given any directory name and
the system handles the details of figuring out what device is meant.
A few will take a directory only if it is the "top" of a filesystem.
Will "df" accept any directory name as an argument [yes]? 


Are you planning to use expire to archive news on disk [yes]? 

You probably want to customize the "archive" entry in
"spacefor" so it knows where your archiving is done and how
much space you want free there.

Are you particularly short of disk space [no]? 

You may want to inspect "spacefor" to make sure its defaults
for things like desired free space are appropriate for your
system, although the defaults are fairly conservative.

It is very difficult to do anything useful with incoming news when
there is no space for it.  Normally, C News simply discards it and
mails a trouble report.  On a single-user system, it may be better
to just have the news reception stall until more space becomes
available.  Warning:  this may stall processing of other incoming
traffic, e.g. mail, as well, and the queue of unprocessed traffic
may well grow until your disk fills up.  Should news reception
stall if space gets short [yes]? 


News processing is much more efficient when done in bulk, so C News
normally just saves incoming news and processes it once an hour.
If you have ample resources and are wildly impatient to make news
available the instant it arrives, that is expensive but possible.
Do you want immediate processing [yes]? 


Are you running C News on a group of machines hooked together with NFS,
with articles filed on one "server" machine [no]? 


Several programs need to know an overall name for the system news is
being run on, where "system" may include multiple machines if they
share a common set of control files and articles; this is used in
article headers and related places.  For uucp sites, this usually
should be the uucp name.  It is VITAL that you and your neighboring
sites agree on this name -- if their news systems know you by a
different name, or even a slightly-different variation of the same
overall name, there will be trouble.  What is the name of the
overall system for news purposes [shaman]? 


The "From:" lines of news postings, on the other hand, should carry
a mailing address, which in particular should be a domain address
for sites that have one.  What is the mailing-address name of this
system, preferably a domain address [shaman.com]? 


What is the name of the organization, for insertion into articles
posted from here [Shaman Consulting]? 


Manual pages are normally stored in a tree structure under /usr/man.
Local practices vary a great deal, however, and System V has also
introduced some bizarre distortions into this once-simple structure.
What is the top-level manual-page directory [/usr/man]? 


C News adds manual pages to chapters 1 (programs), 5 (files), and
8 (administrative programs).  These chapter numbers have changed
in some variants of Unix.  Also, originally pages from chapter 5 (for
example) were stored in /usr/man/man5.  This has also changed in
some variants.  Has your system made such changes [no]? 


The "rnews" and "cunbatch" commands (which are identical, the latter
being purely for backward compatibility with seriously-old systems)
have to be installed somewhere where uucp can find them to execute
them.  It is not normally necessary for users to be able to run
them, so they need not go in the directories searched for normal
commands... although uucp often searches only those directories.
What directory should "rnews" and "cunbatch" go in [/bin]? 


Our "postnews", "readnews", and "checknews" are included mostly for
completeness.  They are very simple and crude compared to the user
interface many users are accustomed to.  As far as we know, B News
(or other) versions should run fine with C News.  If you are already
running such user-interface software, you may not want to change.
Do you want to install our user-interface programs [yes]? 


The "inews", "postnews", "readnews", and "checknews" command(s) should
go in one of the directories searched for normal commands, so users
can run them without special arrangements.  What directory should
these commands go in [/usr/local/bin]? 


For replies to control messages, C News invokes "mail" (typically
/bin/mail unless you make special arrangements) with either an
Internet-style "@" address or a uucp-style "!" address.  Internet
style is probably better... if your mailer supports it at all.
Will "mail" handle "@" addresses [yes]? 


Postnews can supply a default newsgroup, to aid naive users in
getting this right for simple postings.  What should the default
newsgroup be [none]? 


Postnews can supply a default distribution, to limit news to a
local area unless the user specifically changes it.  This is
probably wise.  What should the default postnews distribution
be [world]? 


Readnews has a default subscription list, for users who have
not specified what newsgroups they wish to see.  What groups
should be in that list (comma-separated with no spaces, please,
as they would be in a .newsrc) [general]? 


For administrative use, readnews has one newsgroup that users
must subscribe to, even if they ask not to.  What group should
that be [general]? 


The ihave/sendme protocol, although marginally useful in some cases,
is a security hole -- it lets another site ask for any article by
Message-ID, and if your Message-IDs are predictable enough (which
C News's generally are not, mind you), that site can get any article
currently on your system.  Do you have any newsgroups containing
confidential or proprietary material [no]? 


building doit.bin...
done

building doit.news...
done

building again.root...
done


saving defaults...
done

You should now run doit.root as root, doit.bin as bin, doit.news
as news, and again.root as root, in that order.  (This assumes
that the source directories are owned by bin.  If you need to do
installation work by hand, run 'doit.bin -i' as the owner; this will
create the programs but won't install them.)  (It is not necessary
to log in as these users; use of 'su' suffices.)  Finally, you will
want to add the contents of 'cron', or something similar, to your
cron's work-to-be-done file(s), and the contents of 'rc', or something
similar, to /etc/rc or whatever your system executes when booting.

"make gclean" will clean up everything afterwards.  "make lclean"
does a less drastic cleanup affecting only the library directories.
"make spotless" does "make gclean" and also removes the doit files.

Good luck and happy news reading.
------------------ end script ---------------