home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 August / PCWorld_1999-08_cd.bin / doc / HOWTO / unmaintained / mini / Tiny-News < prev    next >
Text File  |  1997-10-13  |  8KB  |  207 lines

  1. [ 14 October 1997
  2.   The Linux Tiny News mini-HOWTO is not being maintained by 
  3.   the author any more.  If you are interested in maintaining the 
  4.   Tiny News mini-HOWTO, please get in touch with me at 
  5.   <gregh@sunsite.unc.edu>. ]
  6.  
  7. ******************submisson for "Tiny-News-HOWTO"**************************
  8. *********************NOTE UPDATED PERMISSION*******************************
  9.  
  10. Copyright (c) May 25, 1995 Kent Lewis (Kenneth M. Lewis, Jr.)
  11.  
  12. If this document is accepted by the Linux Documentation project, permission
  13. is granted to make it distributable in accordance with the LDP HOWTO 
  14. distribution policy, with the stipulation that the author would like to
  15. review it in its final form before LDP releases it.
  16.  
  17.                              ************
  18.  
  19. I am a Linux user whose net access consists of a ppp link which is not up
  20. all the time.  My internet service provider is in another town, so I have
  21. to pay phone tolls while I'm online.  This can quickly add up, so I've been
  22. working on ways to keep costs down but still make the most of my net access.
  23.  
  24. Until recently, I've had to stay online to read Usenet news remotely from
  25. the provider's NNTP server.  This burned up a lot of online time.  I went
  26. looking for a solution, and found one that suits me.  Hopefully it can help
  27. others, too.  I respectfully submit this "Tiny-News-HOWTO."  It describes
  28. how to use INN to make a small news spool that contains only the newsgroups
  29. you're interested in.  Articles are pulled and replies are posted in one
  30. compact online session via a simple perl script.  All this is of course
  31. "alpha."  If something comes up that's not covered here, you'll have
  32. to fix it yourself.
  33.  
  34. You need access to an NNTP server.  Telnet to port 119 of the machine you
  35. want to use, to make sure it allows reading and posting.  You should get
  36. a message which will indicate whether or not this is allowed.  If not,
  37. then iron out your access problems before going any further.  If you're
  38. already using the machine to read/post remotely, then you know you have
  39. the necessary access.
  40.  
  41. You need enough disk to hold your news spool.  I have a Linux partition that
  42. is about 300M, and two days' worth of news for about 15 newsgroups only takes
  43. up one or two percent of disk as listed by 'df'.  I recommend starting with a
  44. small number of newsgroups and working your way up, just to be safe.
  45.  
  46. You need perl and INN.  If you don't have them, you can get them by anonymous
  47. ftp from sunsite.unc.edu (or mirror sites).  Last time I checked, perl was
  48. in /pub/Linux/devel/perl and INN was in /pub/Linux/system/Mail/news. 
  49.  
  50. Install INN and perl, if you haven't done so already.  I got INN from the
  51. Slackware 2.2 distribution, and it included good documentation.  Follow the
  52. steps in the docs and you'll be fine.  As for perl, I'm using the precompiled
  53. perl 4.0pl36 that came with Slackware 2.2.  If you don't have access to an
  54. out-of-the-box perl binary, then you're on your own as far as compilation/
  55. installation goes.
  56.  
  57. Be sure you have the "junk" and "control" groups, or innd won't start.
  58. You'll have to put these in manually, before you ever start innd, since
  59. 'ctlinnd' assumes innd is already running.  After that, use INN's
  60. 'ctlinnd newgroup ... ... ' to make the empty news spool.  See the man
  61. page for 'ctlinnd.'
  62.  
  63. Set up a newsfeed to the NNTP server you will be using.  You won't actually
  64. be doing a newsfeed in the intended sense, but this will make INN create
  65. a file in /usr/spool/news/out.going that the perl script below uses to find
  66. and post articles you've composed offline.  Instructions for setting up the
  67. feed are in the INN docs.  See the man page for 'newsfeeds.'  IMPORTANT:
  68. You will need to set up your newsfeeds file so that the first field in the
  69. file /usr/spool/news/out.going contains the full pathnames of the articles
  70. you'll be sending out.  If the first field in the
  71. /usr/spool/news/out.going/xxx file does not contain the articles' full
  72. pathnames, then the perl script will attempt to post whatever appears in
  73. that first field, which will probably produce undesirable results.
  74.  
  75. Be sure to configure your control.ctl file to keep new newsgroups from
  76. automagically appearing in your spool and active file.  If you don't do
  77. this, when control messages for new newsgroups come in, the load on your
  78. system will go way up as the new groups are added, and things will slow down
  79. considerably, which is contrary to the whole point of this HOWTO.
  80.  
  81. Change to the directory of your choice, and do a 'touch -t $YESTERDAY lastget'.
  82. Replace $YESTERDAY with the time string for 24 hours ago.  See the man page
  83. for 'touch'.
  84.  
  85. Now put the following perl script in the same directory, and
  86. make it executable.  Replace $NEWSPATH with whatever directory the INN
  87. package resides in (/usr/lib/news on my box).  Replace $SCRIPTPATH with
  88. the path to the directory where the perl script will reside (the same one
  89. where 'lastget' is--- /usr/local/news on my box).  Replace $PROVIDER with
  90. the address of your NNTP server.  Replace $NEWSFEED with whatever you named
  91. your news feed when you installed INN.  See the man pages for 'nntpsend' and
  92. 'inews' to see what this script does.
  93.  
  94.  
  95. -----------------------------------------------------------------------------
  96.  
  97. #!/usr/bin/perl
  98.  
  99. ##
  100. ## retrieve new articles
  101. ##
  102.  
  103. open(LIST, "$NEWSPATH/active")
  104.     || die "could not open list of active newsgroups";
  105.  
  106. while (<LIST>) {
  107.   @newsgroup = split(' ', $_);  ## splits next line of the active file on
  108.                 ## whitespace, assigns pieces to array 
  109.                 ## @newsgroup. @newsgroup[0] now holds the
  110.                 ## holds the name of the newsgroup
  111.  
  112.   system "$NEWSPATH/bin/nntpget -f $SCRIPTPATH/lastget -n @newsgroup[0] -o -v $PROVIDER"
  113.     || print "could not pull articles for @newsgroup[0]\n";
  114.   }
  115.  
  116. close(LIST);
  117.  
  118. system "touch $SCRIPTPATH/lastget";
  119.  
  120.  
  121. ##
  122. ## strip the "NNTP-Posting-Host: " header out of my local posts, which are
  123. ## about to be sent
  124. ##
  125.  
  126. open(LIST, "/usr/spool/news/out.going/$NEWSFEED")
  127.     || die "could not open list of articles to be stripped";
  128.  
  129. while (<LIST>) {
  130.   if (@article = split(' ', $_)) {
  131.     $article = @article[0];    
  132.     rename("$article", "$article" . '.bak');
  133.     $backup = "$article.bak";
  134.     open(OUTPUT, ">> $article");
  135.     open(INPUT, "$backup");
  136.     select(OUTPUT);
  137.     while (<INPUT>) {
  138.       print unless ?^NNTP-Posting-Host.*\n?
  139.       }
  140.     close(OUTPUT);
  141.     close(INPUT);
  142.     unlink("$backup");
  143.     reset;
  144.   }
  145. }
  146. select(STDOUT);
  147.  
  148. close(LIST);
  149.  
  150. ##
  151. ## send the articles
  152. ##
  153.  
  154. $ENV{'NNTPSERVER'} = "$PROVIDER";
  155.  
  156. open(LIST, '/usr/spool/news/out.going/$NEWSFEED')
  157.     || die "could not open list of outgoing articles";
  158.  
  159. while (<LIST>) {
  160.   if (@article = split(' ', $_)) {
  161.     $article = @article[0];
  162.     system "inews -h $article";
  163.     }
  164.   }
  165.  
  166. close(LIST);
  167.  
  168. ------------------------------------------------------------------------------
  169.  
  170.  
  171. That should do it.  Assuming you've named the perl script 'foonews,' then
  172. next time you're online, type '$SCRIPTPATH/foonews' and hit return.  If
  173. you see message ID's start to march down your screen, then you're in
  174. business.  Note that things don't happen instantaneously.  You may have to
  175. wait a few seconds before the first message ID appears.  When you're done,
  176. you should have all the articles that have been posted since
  177. $SCRIPTPATH/lastget was last modified, and all your locally posted articles
  178. should have been posted to your NNTP server, which will pass them on
  179. downstream.  $SCRIPTPATH/lastget should now have today's timestamp, so that
  180. when you do 'foonews' tomorrow, you get all the articles that have been
  181. posted between now and tomorrow's newsrun.
  182.  
  183. You'll have to wipe the /usr/local/news/out.going/$NEWSFEED file manually.
  184. I purposely left this step out of the script for debugging reasons, and
  185. haven't gotten around to fixing it yet.  The first time I tried all this
  186. out, I verified that the articles had been posted to the remote server
  187. before I wiped their entries.  You might want to do the same.
  188.  
  189. If you've configured INN correctly, then $NEWSPATH/bin/news.daily takes care
  190. of maintenance quite nicely.  Right now I'm doing everything manually; you
  191. might want to automate things with some crontab entries.
  192.  
  193. One last note:  I don't pretend that my script is elegant, or that this
  194. method is foolproof or fail-safe.  But it is working for me, so I wanted
  195. to share it.
  196.  
  197.  
  198. Thanks to everyone who has made Linux the ton of fun that it is.
  199.  
  200.  
  201. ****************************************************************************
  202.  
  203. Kent Lewis
  204. kent@fiona.umsmed.edu
  205.  
  206.  
  207.