summaryrefslogtreecommitdiffstats
path: root/source/n/nn
diff options
context:
space:
mode:
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: