summaryrefslogtreecommitdiffstats
path: root/source/n/nn
diff options
context:
space:
mode:
author Patrick J Volkerding <volkerdi@slackware.com>2009-08-26 10:00:38 -0500
committer Eric Hameleers <alien@slackware.com>2018-05-31 22:41:17 +0200
commit5a12e7c134274dba706667107d10d231517d3e05 (patch)
tree55718d5acb710fde798d9f38d0bbaf594ed4b296 /source/n/nn
downloadcurrent-5a12e7c134274dba706667107d10d231517d3e05.tar.gz
current-5a12e7c134274dba706667107d10d231517d3e05.tar.xz
Slackware 13.0slackware-13.0
Wed Aug 26 10:00:38 CDT 2009 Slackware 13.0 x86_64 is released as stable! Thanks to everyone who helped make this release possible -- see the RELEASE_NOTES for the credits. The ISOs are off to the replicator. This time it will be a 6 CD-ROM 32-bit set and a dual-sided 32-bit/64-bit x86/x86_64 DVD. We're taking pre-orders now at store.slackware.com. Please consider picking up a copy to help support the project. Once again, thanks to the entire Slackware community for all the help testing and fixing things and offering suggestions during this development cycle. As always, have fun and enjoy! -P.
Diffstat (limited to 'source/n/nn')
-rw-r--r--source/n/nn/NNTP280
-rw-r--r--source/n/nn/doinst.sh16
-rwxr-xr-xsource/n/nn/nn.SlackBuild113
-rw-r--r--source/n/nn/nn.badnntphost.diff14
-rw-r--r--source/n/nn/nn.destdir.diff179
-rw-r--r--source/n/nn/nn.diff85
-rw-r--r--source/n/nn/nntpserver1
-rw-r--r--source/n/nn/slack-desc19
8 files changed, 707 insertions, 0 deletions
diff --git a/source/n/nn/NNTP b/source/n/nn/NNTP
new file mode 100644
index 000000000..08400bdcb
--- /dev/null
+++ b/source/n/nn/NNTP
@@ -0,0 +1,280 @@
+ NNTP SUPPORT
+ ------------
+
+This file describes the NNTP support available in nn release 6.5. The
+NNTP support was implemented by Rene' Seindal, seindal@diku.dk.
+
+
+ PREREQUISITES
+ -------------
+
+First of all, you need read-access to an NNTP-server, and if you want
+to post, the server must allow that.
+
+If you have news on one of your systems, and want to run an NNTP
+server on that system to feed other local systems, you need to get and
+install the nntp-1.5 distribution with at least patches 1-3 (I think
+patch 8 is the latest). It is available from several ftp-sites in the
+USA. It is also available on freja.diku.dk (ip 129.142.96.1).
+
+However, just to run nn on you local system with or without NNTP, you
+don't need anything besides the nn 6.5 distribution!!
+
+The necessary modules to access a remote NNTP server is an integrated
+part of nn, so if you specify to use NNTP, the necessary code is
+automatically included.
+
+ HOW IT WORKS
+ ------------
+
+NNTP is supported both in nn and nnmaster. When NNTP is used, the
+database with the header information used by nn is still maintained on
+the local system (because NNTP does not know about the nn database
+(yet?)).
+
+When the master is set up to use NNTP, it will connect to the NNTP-
+server in each iteration of the collection (the interval set with -r),
+get a copy of the active file, and incorporate the new articles into the
+database. To do this, the master will temporarily transfer one article
+at a time from the NNTP-server to the local system.
+
+When the articles are read with nn, it will use the local database to
+present the menus, and fetch the articles from the NNTP-server as they
+are requested by the user. It will connect to the NNTP server the first
+time it is necessary to fetch an article.
+
+Neither nnmaster, nor nn will use NNTP if they run on the NNTP-server
+itself (they will directly access the news files).
+
+Both nn and nnmaster access the server in reading mode. The master and
+all client MUST use the same server at all times, since the local
+database contains article numbers, that are only unique for each
+NNTP-server.
+
+
+ SHARING THE DATABASE
+ --------------------
+
+You must also decide whether you want to share the database between your
+local news clients, and how you are going to do it.
+
+The database will take up some disk space, normally about 1Mb per 10.000
+articles. There are several ways to manage this space.
+
+This simplest solution, is to let each client run it own master, i.e.,
+have its own database. This means, of course, no sharing.
+
+Alternatively, one host can run the master, and distribute the database
+to the others via e.g., rdist. This doesn't save disk space, but saves
+load on the NNTP-server.
+
+Last, the database can be shared with NFS/RFS (see the description of
+NETWORK_DATABASE in the config.h file).
+
+The possibility of making a `nndb-server' stands open. It could be
+realized either as a separate server, running under inetd, or it could
+be incorporated into nntpd. It has not been implemented, but might be
+part of a future release (any volunteers?).
+
+
+ CONFIGURATION
+ -------------
+
+To use NNTP in nn, you must edit the relevant parts of config.h:
+
+NNTP
+ You enable the use of NNTP by defining the macro NNTP.
+
+NNTP_SERVER
+ Both the master and the clients will look up their NNTP-server
+ in the file given by the macro NNTP_SERVER. If the name is not
+ an absolute path name, it is taken to be relative to
+ LIB_DIRECTORY.
+
+ The format of the file is compatible with the one used in
+ clientlib.c in the nntp-1.5 distribution, i.e., the first
+ non-blank line, not starting with '#' is taken to be the name of
+ the NNTP-server. This file MUST be present, and must contain a
+ valid host name.
+
+NEWS_LIB_DIRECTORY & INEWS
+ If either is defined, they specify the destination of the
+ mini-inews program when installed below with INEWS being used
+ if both are defined. If neither is defined, it will be
+ installed in /usr/lib/news/inews.
+
+
+ TUNING
+ ------
+
+Both the server and each client maintains a cache of recently accessed
+articles, to minimize communication with the server (mainly to avoid
+fetching large digests continuously). The master needs the cache when
+it splits digests, and the clients need it, because nn has a tendency to
+reopen the articles several times.
+
+The master's cache is kept in LIB_DIRECTORY, and each client's cache are
+kept in the users .nn directory. The constant NNTPCACHE (defined in
+nntp.c but can be redefined in config.h) defines the size of the cache,
+whose optimal size depends on the amount of news kept on line on the
+NNTP-server. Values of 5-10 gives reasonable results. The effect is
+most striking when reading digested news.
+
+The location and size of the cache can also be changed on a per-user
+basis via the related nntp- variables (see nn.1).
+
+
+ INSTALLATION
+ ------------
+
+Making and installing nn using NNTP does not differ from a non-NNTP nn
+installation, except for the differences in the configuration and the
+need to specify the NNTP server in the NNTP_SERVER file.
+
+Notice however, that the NNTP_SERVER file must be properly initialized
+before doing the 'make initdb'.
+
+If something goes wrong in the initialization of the database, you will
+have to run 'nnmaster -I' again by hand.
+
+
+ ERROR HANDLING
+ --------------
+
+The handling of errors have been improved since the initial release.
+
+The master will handle most errors by closing the connection, and
+returning to the main loop. All errors in the master are logged, with
+a code of `N,' so they can be inspected with the `n' command in
+nnadmin's Log menu.
+
+A few errors are considere fatal. If any of these occur operation will
+be discontinued. These errors are such as failure to find the NNTP
+server, failure to find the NNTP service, and responses from the NNTP
+server in the 500 range (ill-formed requests, access denied, ...)
+
+NNTP server timeouts are handled specially. If the NNTP server times
+out, both nn and the master will attempt to restart it (by connecting
+again). This shouldn't happen in the master (which won't leave sockets
+idle for that long), but it can easily happen in nn, if it is left
+suspended for too long. If the server responds with code 400 (Service
+discontinued), a reconnect is also tried.
+
+
+ PROBLEMS
+ --------
+
+I am not certain what should happen if the server sends back responses
+in the 1xx range. I do not know whether a NNTP server is allowed to
+return one of these responses on its own initiative. If it is, nn
+should probably ignore (or display) the messages. Currently, nothing is
+done to treat these responses in any way.
+
+I have seen a strange thing happen to the master, which I have not been
+able to reproduce. The master ran on a Sun-4 running SunOS 4.0, and the
+NNTP server was a VAX 785 running MORE/bsd. The NNTP software was
+version 1.5.3. The master was stuck in a read from the NNTP server. A
+netstat on the Sun show an established connection to nntpd on the Vax,
+but a netstat on the Vasx did not show any NNTP connections. There was
+no nntpd running, and no messages on the console indicating any
+failures.
+
+[ It is now known that this problem is related to the socket not
+ having the KEEP ALIVE flag set, but I have not got the necessary
+ patches to fix it, ++Kim ]
+
+
+ SPONTANEOUS NNTP ERROR 502
+ --------------------------
+
+Sometimes nn or nnmaster may stop with the following message:
+
+ NNTP 502 You only have permission to transfer, sorry.
+
+This particular case is probably the result of the NNTP server trying to
+turn your IP address into a fully qualified domain name (FQDN) so it can
+look you up in its access file.
+
+The NNTP server probably uses the domain name server (DNS) to map IP
+addresses into FQDNs. If the local DNS doesn't already know the answer, it
+has to go out over the network to find it. This can take a few seconds, and
+the library routine that does all this for the NNTP server might time out
+before the answer gets back to it. If this happens, the NNTP server doesn't
+know your FQDN, so it gives you the default access specified in the server's
+nntp_access file, which is usually "xfer" (article transfer only).
+
+In the time it takes for you to run nn again the DNS usuallu has its answer
+back, so things usually work the second time.
+
+One way to work around this problem is to specify the IP address of the
+client in the nntp server's access file; then it is not necessary to lookup
+the FQDN.
+
+Thanks to Tim Ramsey and Nick Sayer for this information.
+
+
+ DEBUGGING NNTP CONNECTIONS
+ --------------------------
+
+If you want to debug the nntp connection, you can run the nnmaster
+with the option -D2 (or -D3 which also turns on the normal -D verbose
+output). In the nn client, you can turn on the nntp-debug variable in
+the init file.
+
+The debug output from nnmaster will be placed in $TMP/nnmaster.log
+while the output in the client will appear on the message line.
+
+
+ POSSIBLE EXTENTIONS TO THE NNTP SERVER
+ --------------------------------------
+
+The new expire method used in release 6.5 is very efficient on local
+systems, because it will just read the spool directories to get a list
+of available articles in each group.
+
+However, with nntp, the only way I know of to get a list of available
+articles in a group with nntp is the XHDR request. However, this will
+open every article in the group to extract the desired field, but the
+only thing I am interested in is the article number itself.
+
+So I suggest to add a LISTGROUP request to the NNTP server to return
+the equivalent of
+ ls $GROUPDIR | sed -n '/^[0-9][0-9]*$/p'
+(in any order - nnmaster will sort the list itself).
+
+Currently nnmaster will test whether this request works before using
+the XHDR request, so no changes to nnmaster will be required to take
+advantage of such a fix.
+
+
+Another possible performance increase would be if there was a request
+to get the current modification time of the ACTIVE file. This is the
+check nnmaster will do to see if there might be work to do on a local
+system, but with NNTP it has to read the active file from the server
+and compare it to a local copy to determine whether there is work to
+do. A simple ACTIVESTAT request returning the active file's age and
+size would fix this.
+
+Currently nnmaster is not prepared to use such a request, but it would
+be easy to add.
+
+
+ ALTERNATIVES
+ ------------
+
+Alternative implementations can be conceived, especially in the master.
+The master normally collects articles by rereading the active file,
+looking for changed article numbers. For each group with new articles,
+it reads the new articles and adds them to the database. This scheme
+has been kept in the NNTP-based master, to keep the changes at a
+minimum.
+
+An alternative solution could be to use NEWNEWS to get a list of new
+articles since last collect, and fetch each article in sequence. The
+newsgroups and article numbers within each group could then be found in
+the Xref: field. This would probably improve efficiency, since the
+master would then generate fewer failing requests (for non-existent
+articles), and it would only read cross-posted articles once. This
+solution would, however, require some surgery on the current structure
+of the masters main loop.
+
diff --git a/source/n/nn/doinst.sh b/source/n/nn/doinst.sh
new file mode 100644
index 000000000..80f6fce0d
--- /dev/null
+++ b/source/n/nn/doinst.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+config() {
+ NEW="$1"
+ OLD="`dirname $NEW`/`basename $NEW .new`"
+ # If there's no config file by that name, mv it over:
+ if [ ! -r $OLD ]; then
+ mv $NEW $OLD
+ elif [ "`cat $OLD | md5sum`" = "`cat $NEW | md5sum`" ]; then # toss the redundant copy
+ rm $NEW
+ fi
+ # Otherwise, we leave the .new copy for the admin to consider...
+}
+config etc/nntpserver.new
+# If you already have a different etc/nntpserver then this one is useless:
+rm -f etc/nntpserver.new
+
diff --git a/source/n/nn/nn.SlackBuild b/source/n/nn/nn.SlackBuild
new file mode 100755
index 000000000..45b694375
--- /dev/null
+++ b/source/n/nn/nn.SlackBuild
@@ -0,0 +1,113 @@
+#!/bin/sh
+
+# Copyright 2002-2009 Patrick J. Volkerding, Sebeka, MN, USA
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+VERSION=6.7.3
+ARCH=${ARCH:-x86_64}
+BUILD=${BUILD:-2}
+
+if [ "$ARCH" = "i486" ]; then
+ SLKCFLAGS="-O2 -march=i486 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "s390" ]; then
+ SLKCFLAGS="-O2"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "x86_64" ]; then
+ SLKCFLAGS="-O2 -fPIC"
+ LIBDIRSUFFIX="64"
+fi
+
+CWD=$(pwd)
+TMP=${TMP:-/tmp}
+PKG=$TMP/package-nn
+
+rm -rf $PKG
+mkdir -p $TMP $PKG
+
+cd $TMP
+rm -rf nn-$VERSION
+tar xvf $CWD/nn-$VERSION.tar.bz2 || exit 1
+cd nn-$VERSION || exit 1
+chown -R root:root .
+find . \
+ \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
+ -exec chmod 755 {} \; -o \
+ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
+ -exec chmod 644 {} \;
+
+zcat $CWD/nn.diff.gz | sed -e "s#/usr/lib/nn#/usr/lib${LIBDIRSUFFIX}/nn#" \
+ | patch -p1 --verbose || exit 1
+zcat $CWD/nn.badnntphost.diff.gz | patch -p1 --verbose || exit 1
+# Taken from slamd64 (who adapted an old Ubuntu patch);
+# Besides adding DESTDIR support, it gets rid of the hardlinks that are created:
+zcat $CWD/nn.destdir.diff.gz | patch -p1 --verbose || exit 1
+
+cp config.h-dist config.h
+make all
+
+echo "*** USE install option 's'"
+sleep 5
+mkdir -p $PKG/etc $PKG/usr/bin $PKG/usr/lib${LIBDIRSUFFIX} $PKG/usr/man/man{1,8}
+DESTDIR=$PKG ./inst
+
+find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \
+ | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
+
+zcat $CWD/nntpserver.gz > $PKG/etc/nntpserver.new
+
+# Compress and link manpages, if any:
+if [ -d $PKG/usr/man ]; then
+ ( cd $PKG/usr/man
+ for manpagedir in $(find . -type d -name "man*") ; do
+ ( cd $manpagedir
+ for eachpage in $( find . -type l -maxdepth 1) ; do
+ ln -s $( readlink $eachpage ).gz $eachpage.gz
+ rm $eachpage
+ done
+ gzip -9 *.*
+ )
+ done
+ )
+fi
+
+mkdir -p $PKG/usr/doc/nn-$VERSION
+cp -a \
+ INSTALLATION README \
+ $PKG/usr/doc/nn-$VERSION
+# This might be useful, so we'll put it in the docs just in case:
+cp -a \
+ $CWD/NNTP.gz \
+ $PKG/usr/doc/nn-$VERSION
+ gzip -d $PKG/usr/doc/nn-$VERSION/NNTP.gz
+ chmod 644 $PKG/usr/doc/nn-$VERSION/NNTP
+mkdir -p $PKG/usr/doc/nn-$VERSION/contrib
+( cd contrib ; cp -a \
+ README aspell cn howto-metamail mail-alias \
+ nn_elm nn-use-mh nnsum recmail.c recmail.sh \
+ $PKG/usr/doc/nn-$VERSION/contrib )
+
+mkdir -p $PKG/install
+zcat $CWD/doinst.sh.gz > $PKG/install/doinst.sh
+cat $CWD/slack-desc > $PKG/install/slack-desc
+
+cd $PKG
+/sbin/makepkg -l y -c n $TMP/nn-$VERSION-$ARCH-$BUILD.txz
+
diff --git a/source/n/nn/nn.badnntphost.diff b/source/n/nn/nn.badnntphost.diff
new file mode 100644
index 000000000..919b7d42e
--- /dev/null
+++ b/source/n/nn/nn.badnntphost.diff
@@ -0,0 +1,14 @@
+--- ./nntp.c.orig 2005-04-19 18:06:51.000000000 -0500
++++ ./nntp.c 2006-06-27 17:14:32.000000000 -0500
+@@ -913,8 +913,9 @@
+
+ if ((hp = gethostbyname(nntp_server)) != NULL)
+ server_real_name = hp->h_name;
+- else
+- nn_exitmsg(1, "NNTPSERVER is invalid");
++ else {
++ nn_exitmsg(1, "NNTP host is invalid -- please edit /etc/nntpserver");
++ }
+ use_nntp = (strcmp(host_name, server_real_name) != 0);
+
+ if (use_nntp) {
diff --git a/source/n/nn/nn.destdir.diff b/source/n/nn/nn.destdir.diff
new file mode 100644
index 000000000..fe4bdf04b
--- /dev/null
+++ b/source/n/nn/nn.destdir.diff
@@ -0,0 +1,179 @@
+# Taken from the Slamd64 repository
+# Thanks Fred/Frank
+--- nn-6.7.3/inst.sh.orig 2006-08-14 00:19:40.000000000 +0100
++++ nn-6.7.3/inst.sh 2006-08-14 00:32:12.000000000 +0100
+@@ -60,11 +60,11 @@
+ fi
+ fi
+
+-set $RECMAIL
+-if [ ! -f "$1" ]
+-then
+- echo ERROR: Mailer program $RECMAIL not found.
+-fi
++#set $RECMAIL
++#if [ ! -f "$1" ]
++#then
++# echo ERROR: Mailer program $RECMAIL not found.
++#fi
+ ) > ErrorCheck
+
+ if [ -s ErrorCheck ]
+@@ -246,69 +246,69 @@
+
+ bin)
+ echo
+- if [ ! -d "$BIN"/. ]
++ if [ ! -d "$DESTDIR/$BIN"/. ]
+ then
+- echo Directory $BIN does not found!
++ echo Directory $DESTDIR/$BIN does not found!
+ exit 1
+ fi
+
+- echo Installing user programs in $BIN
++ echo Installing user programs in $DESTDIR/$BIN
+
+- if [ -f $BIN/nn ]
++ if [ -f $DESTDIR/$BIN/nn ]
+ then
+ (
+- cd $BIN
++ cd $DESTDIR/$BIN
+ mv nn nn.old
+- rm -f $BIN_PROG $BIN_LINK
++ rm -f $BIN_PROG $DESTDIR/$BIN_LINK
+ )
+ fi
+
+ for prog in $BIN_PROG
+ do
+- ./inst copy 755 $BIN $prog
++ ./inst copy 755 $DESTDIR/$BIN $prog
+ done
+
+ for link in $BIN_LINK
+ do
+- ln $BIN/nn $BIN/$link
++ ln -s nn $DESTDIR/$BIN/$link
+ echo $link linked to nn
+ done
+
+- if [ -f $BIN/nnacct ] ; then
+- chmod 4755 $BIN/nnacct
++ if [ -f $DESTDIR/$BIN/nnacct ] ; then
++ chmod 4755 $DESTDIR/$BIN/nnacct
+ echo nnacct is setuid ${OWNER}.
+ fi
+ ;;
+
+ aux)
+ echo
+- ./inst mkdir $LIB 755 || exit 1
++ ./inst mkdir $DESTDIR/$LIB 755 || exit 1
+
+ echo Installing auxiliary programs in $LIB
+
+ for prog in $LIB_PROG
+ do
+- ./inst copy 755 $LIB $prog
++ ./inst copy 755 $DESTDIR/$LIB $prog
+ done
+
+- ./mkprefix conf > ${LIB}/conf
++ ./mkprefix conf > $DESTDIR/${LIB}/conf
+ grep "^#" config.h |
+- sed -e '/_MAN_/d' -e 's/[ ]*\/\*.*$//' >> ${LIB}/conf
+- ./inst chmod 644 ${LIB}/conf
++ sed -e '/_MAN_/d' -e 's/[ ]*\/\*.*$//' >> $DESTDIR/${LIB}/conf
++ ./inst chmod 644 $DESTDIR/${LIB}/conf
+ ;;
+
+ help)
+- ./inst mkdir $HELP 755 || exit 1
++ ./inst mkdir $DESTDIR/$HELP 755 || exit 1
+
+ echo
+- echo Installing help files in $HELP
++ echo Installing help files in $DESTDIR/$HELP
+
+ cd help
+ for h in *
+ do
+ cd ..
+- ./cvt-help < help/$h > $HELP/$h
+- ./inst chmod 644 $HELP/$h
++ ./cvt-help < help/$h > $DESTDIR/$HELP/$h
++ ./inst chmod 644 $DESTDIR/$HELP/$h
+ echo $h
+ cd help
+ done
+@@ -327,32 +327,35 @@
+ } |
+ while read DIR SECT SRC
+ do
+- if [ -d "$DIR"/. ]
++ if [ -d "$DESTDIR/$DIR"/. ]
+ then
+ for i in man/*$SRC
+ do
+ MAN=`basename ${i} $SRC`
+- NEW=$DIR/${MAN}.$SECT
+- sed -e '/^\.TH /s/6.7/'${PL}'/' $i > $NEW
+- ./inst chmod 644 $NEW
+- echo $MAN in $NEW
++ if [ $MAN != 'nnmaster' ]
++ then
++ NEW=$DESTDIR/$DIR/${MAN}.$SECT
++ sed -e '/^\.TH /s/6.7/'${PL}'/' $i > $NEW
++ ./inst chmod 644 $NEW
++ echo $MAN in $NEW
++ fi
+ done
+ else
+- echo $DIR not found or not writeable
++ echo $DESTDIR/$DIR not found or not writeable
+ fi
+ done
+ ;;
+
+ online)
+- ./inst mkdir $HELP 755 || exit 1
++ ./inst mkdir $DESTDIR/$HELP 755 || exit 1
+
+ MAN=$HELP/Manual
+
+ echo
+- echo "Formatting online manual $MAN"
++ echo "Formatting online manual $DESTDIR/$MAN"
+ echo ".... (continues in background) ...."
+
+- rm -f $MAN
++ rm -f $DESTDIR/$MAN
+
+ (
+ sed -e 's/\\f[BPI]//g' \
+@@ -362,9 +365,9 @@
+ -e '/^\.if/d' -e '/^\.ta/d' -e '/^\.nr/d' \
+ -e '/^\.in/d' -e 's/^\.[BI] //' \
+ `ls -1 man/*.? man/*.??` |
+- ${AWK} -f format.awk - > $MAN
++ ${AWK} -f format.awk - > $DESTDIR/$MAN
+
+- ./inst chmod 644 $MAN
++ ./inst chmod 644 $DESTDIR/$MAN
+ ) &
+ ;;
+
+@@ -502,9 +505,9 @@
+
+ done
+
+-if [ -f $LOG ]
++if [ -f $DESTDIR/$LOG ]
+ then
+- chmod 666 $LOG
++ chmod 666 $DESTDIR/$LOG
+ fi
+
+ if $PAUSE
diff --git a/source/n/nn/nn.diff b/source/n/nn/nn.diff
new file mode 100644
index 000000000..04ec3c4c2
--- /dev/null
+++ b/source/n/nn/nn.diff
@@ -0,0 +1,85 @@
+--- ./config.h-dist.orig 2005-04-01 14:44:22.000000000 -0600
++++ ./config.h-dist 2006-06-27 16:33:00.000000000 -0500
+@@ -45,7 +45,7 @@
+ #define DO_NOV_DIGEST
+
+ /* Optional */
+-/* #define NOV_DIRECTORY "/usr/spool/news" */
++#define NOV_DIRECTORY "/var/spool/news/over.view"
+
+ /* Optional */
+ /* #define NOV_FILENAME ".overview" */
+@@ -68,7 +68,7 @@
+ * LIB_DIRECTORY defined below.
+ */
+
+-#define NNTP_SERVER "/usr/local/lib/nntp_server"
++#define NNTP_SERVER "/etc/nntpserver"
+
+ /*
+ * Define your local domain name. If you leave this undefined, nn will
+@@ -95,7 +95,7 @@
+ * conf/s-template.h as a starting point for writing you own.
+ */
+
+-#include "s-sunos5.h"
++#include "s-linux.h"
+
+ /*
+ * Define DEFAULT_PAGER as the initial value of the 'pager' variable.
+@@ -111,7 +111,7 @@
+ */
+
+ /* #define DEFAULT_PRINTER "lp -s" */ /* System V */
+-#define DEFAULT_PRINTER "lpr -p -JNEWS" /* bsd */
++#define DEFAULT_PRINTER "lpr -JNEWS" /* bsd */
+
+
+ /********************** MACHINE DEPENDENT DEFINITIONS **********************
+@@ -173,8 +173,8 @@
+ * (= LIB_DIRECTORY/Log if undefined).
+ */
+
+-#define BIN_DIRECTORY "/usr/local/bin"
+-#define LIB_DIRECTORY "/usr/local/lib/nn"
++#define BIN_DIRECTORY "/usr/bin"
++#define LIB_DIRECTORY "/usr/lib/nn"
+
+
+ /*************************** MAIL INTERFACE *************************
+@@ -189,7 +189,7 @@
+ */
+
+ /* #define REC_MAIL "/usr/lib/news/recmail" */ /* non-sendmail */
+-#define REC_MAIL "/usr/lib/sendmail -t" /* sendmail */
++#define REC_MAIL "/usr/sbin/sendmail -t" /* sendmail */
+
+ /*
+ * nn needs to know the name of your host.
+@@ -237,13 +237,13 @@
+ * DAEMON_MAN - nnmaster
+ */
+
+-#define USER_MAN_DIR "/usr/local/man/man1"
++#define USER_MAN_DIR "/usr/man/man1"
+ #define USER_MAN_SECTION "1"
+
+-#define SYS_MAN_DIR "/usr/local/man/man1"
++#define SYS_MAN_DIR "/usr/man/man1"
+ #define SYS_MAN_SECTION "1m"
+
+-#define DAEMON_MAN_DIR "/usr/local/man/man8"
++#define DAEMON_MAN_DIR "/usr/man/man8"
+ #define DAEMON_MAN_SECTION "8"
+
+
+@@ -425,7 +425,7 @@
+ * Default: NEWS_LIB_DIR/{rm,del}group
+ */
+
+-/* #define NEWS_DIRECTORY "/usr/spool/news" */
+-/* #define NEWS_LIB_DIRECTORY "/usr/lib/news" */
++/* #define NEWS_DIRECTORY "/var/spool/news" */
++/* #define NEWS_LIB_DIRECTORY "/var/lib/news" */
+
+ /************************ CONFIGURATION COMPLETED ************************/
diff --git a/source/n/nn/nntpserver b/source/n/nn/nntpserver
new file mode 100644
index 000000000..3fa9a61b1
--- /dev/null
+++ b/source/n/nn/nntpserver
@@ -0,0 +1 @@
+news.my_news_server.com
diff --git a/source/n/nn/slack-desc b/source/n/nn/slack-desc
new file mode 100644
index 000000000..8caf48da7
--- /dev/null
+++ b/source/n/nn/slack-desc
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description. Line
+# up the first '|' above the ':' following the base package name, and the '|'
+# on the right side marks the last column you can put a character in. You must
+# make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':'.
+
+ |-----handy-ruler------------------------------------------------------|
+nn: nn (the NN newsreader)
+nn:
+nn: nn is an easy to use menu driven newsreader by Kim F. Storm.
+nn:
+nn: nn stands for "No News is good news", and the nn newsreader is
+nn: designed to let you minimize the amount of time you spend reading news
+nn: (or, more realistically, to let you to read even more newsgroups :-).
+nn: This version of nn reads news from a news server via NNTP, and can
+nn: make use of your NNTP server's NOV database.
+nn:
+nn: