Gnews maintains USENET News directories for use by a Gopher Server.  
In order to use it you first need: USENET News, a Gopher Server, and nn (v6.3).

Why nn:
nn maintains its own database of newsgroups and article subjects.  So, instead 
of traversing all of usenet and reading every article, we just need a program
to read nn's database.  Right now, updating all of USENET takes about 10 minutes
on a heavily loaded news server.

How Gnews deals with Gopher:
Gnews creates the same directory structure that USENET uses to store the 
groups.  However, rather than storing all of the articles, Gnews only creates
a link file that has pointers to the actual articles.  This is necessary to
prevent articles from appearing as article numbers (we could have used .cap
files but new articles would not have been renamed until our next update).

We have not removed the chroot() in gopher so we run two gophers on the 
newsserver.  This would allow us to permit access to subjects but deny access
to the articles the same way UMN handles UPI news.  It also allows us to log 
only retrieved files.

One gopher runs in news' root directory where articles are stored (gopher2).
The other gopher gets a hierarchy and links provided by gnews (gopher1).  
It looks something like this:

gopher1:                             gopher2:

/home/gopher/data/news/usenet/       /usr/spool/news/
    rec/                                 rec/
    comp/                                comp/
    alt/                                 alt/
        gopher/                              gopher/
               .link          --->                  23
                              --->                  24
                              --->                  25


I've made the source available for anonymous ftp from ftp.msu.edu.  Get the file
pub/unix/gnews.tar.  Let me know what you think of it and any problems you have
installing it.

Ed Symanzik
Michigan State University
zik@convex.cl.msu.edu

The code:
The distribution notice in nn doesn't say I have to pass on all of the source
so I have only included those files necessary to gnews.  If you already have
source to nn or if you are using version other than 6.3 you may want to 
compile with the source you have.  The code unique to gnews is contained 
entirely in the file gnews.c.  The only other stuff you need is a Makefile 
entry and a couple of lines in config.h.  If you are using different version 
of nn, you may need to modify gnews.c.  gnews.c began life as db.h so that is
where you will want to start.

Caveat Emptor:
This was a one day hack simply meant to be a proof of concept, not a production
service.  In my design I only considered our own configuration and functional
needs.  This code is provided as is and no support is planned in the future.

Ed Symanzik
Michigan State University
zik@convex.cl.msu.edu
