geoff@desint.UUCP (12/14/84)
From: geoff@desint.UUCP I have discovered some other problems with the lbgm stuff. Please hold off posting the stuff I sent yesterday. [ Oops - sorry, already posted - john] Geoff Kuenning ...!ihnp4!desint!geoff --------------------------------------------------------------------------- My problem with lbgm was directory permissions -- it hangs in an infinite loop if /usr/lbgm doesn't have world write permission. Following this message will be a shar of a fixed version of lbgm. This one features a check for the infinite loop (it will send you mail if it can't create the file after 100 tries) and an install script so people won't make the same stupid mistake I make. Both have been tested. -------------------------- cut here --------------------------------------- : This is a shar archive. Extract with sh, not csh. : The rest of this file will extract: : : README install lbgm zap.so lbgmX X : echo extracting - README sed 's/^-//' > README << '/*EOF' This directory contains a source-archiving system called "lbgm" (Little Bird Gave Me). Responsible parties are: lbgm Alan S. Watt lbgmX Jim Ziobro X " zap.so " csh protection Larry Wall I have cleaned it up a bit to be more flexible and robust, and added an installation script. To install: Run this shar archive to extract the programs. If your system doesn't take #! syntax, edit the scripts to force /bin/sh Define LBGMDIR and LBGMRM (see below) in your environment, or edit lbgmX to define them the way you want them. Run the install script. LBGMDIR should be the directory you save sources in: default is /usr/lbgm if nothing else is specified. LBGMRM is the program to remove unwanted sources; define this to X (or a similar script/program) if you have delayed-deletion facilities. It defaults to "/bin/rm -f" if unspecified. That's all. You should not have to edit anything else, no matter what your system is or where you keep news. News will be saved in the directory you specify, and cataloged (by the Usenet header) in 'save.log'. If garbage shows up on net.sources, simply type "s | zap.so" from readnews or rn. When you exit, run $HOME/tozap to actually delete the articles (this takes a while). Don't forget to remove tozap when you are done. Geoff Kuenning ...!ihnp4!trwrb!desint!geoff ====================================================================== Alan Watt's comments [edited to change the script name to lbgm]: I don't have space to save all news forever, but I decided some time ago that net.sources was worth keeping around, hence "lbgm". Usage is from you news "sys" file: SOURCES:net.sources:B:/usr/lib/news/lbgm [ srcdir ] where <srcdir> is where you want the stuff to go. In there will appear the file "save.log", which contains the news header of every news article saved, and files of the form: ${month}_${day}.${unique} (as in "Apr_8.4552"), each file containing an article. The log file will point to the saved article. There is a lockout against concurrent runnings of lbgm. You have to periodically go in by hand and delete obvious junk (discussions and requests for stuff), and also to weed out which version you want to keep if something is posted several times. I have everything posted on net.sources since August 15th of last year. - Alan S. Watt {decvax,duke,purdue,lbl-csam}!ittvax!swatt ====================================================================== Jim Ziobro's comments: For those who keep archives of stuff from net.sources using an Alan Watt lbgm (little bird gave me) style archive then you might want a convenient way to delete the junk that may get saved there. I have written some small scripts which make that job easier. When you come across junk simply pipe the offending article into zap.so and it creates a script which will remove the article from your lbgm archive. After your finished reading news just invoke tozap which was created by zap.so. I have include Alan Watt's original article. As always please keep me informed of enhancements or bugs. /*EOF chmod +x README echo extracting - install sed 's/^-//' > install << '/*EOF' : #! /bin/sh export PATH || (echo "OOPS, this isn't sh. Desperation time. I will feed myself to sh."; sh $0; kill $$) cat <<'EOF' Installation script for the lbgm package. You will have to provide the following information: (1) Name of directory to save news in (2) Name of news library directory (3) Name of your bin directory (4) Who to notify if problems occur EOF lbgmdir=${LBGMDIR:-/usr/lbgm} echo 'Enter name of the directory news will be saved in ['"$lbgmdir"']:' read lbgmdir case X$lbgmdir in X) lbgmdir=/usr/lbgm ;; *) ;; esac echo 'Enter name of the news library directory [/usr/lib/news]:' read libdir case X$libdir in X) libdir=/usr/lib/news ;; *) ;; esac echo 'Enter the name of your bin directory ['"$HOME/bin"']:' read bindir case X$bindir in X) bindir="$HOME/bin" ;; *) ;; esac NOTIFY=${USER:-"${LOGNAME:-root}"} echo 'Who should be notified in case of trouble ['"$NOTIFY"']?' read notify case X$notify in X) notify="$NOTIFY" ;; *) ;; esac echo 'End of questions. Installation begins.' if test ! -d $lbgmdir then mkdir $lbgmdir || (echo Trouble creating $lbgmdir 1>&2; kill $$) fi set X `ls -ld $lbgmdir` case $2 in drwxrwxrwx) ;; *) chmod a+rwx $lbgmdir || \ (echo "Couldn't set modes for $lbgmdir" 1>&2; kill $$) ;; esac touch $lbgmdir/save.log || chmod a+rw $lbgmdir/save.log || \ (echo "Couldn't create $lbgmdir/save.log" 1>&2; kill $$) (cp lbgm $libdir && chmod a+rx $libdir/lbgm) || \ (echo "Trouble installing lbgm in $libdir" 1>&2; kill $$) (cp lbgmX zap.so $bindir && chmod a+rx $bindir/lbgmX $bindir/zap.so) || \ (echo "Trouble installing utilities in $bindir" 1>&2; kill $$) grep '^SOURCES:' $libdir/sys >/tmp/ins$$ if test ! -s /tmp/ins$$ then cat >> $libdir/sys <<EOF # # Automatic archiving of sources # SOURCES:mod.sources,net.sources:B:$libdir/lbgm $lbgmdir $notify EOF fi echo 'Installation completed.' echo '' case $lbgmdir in /usr/lbgm) ;; *) case X$LBGMDIR in X) cat <<'EOF' You will have to add LBGMDIR to your environment before zap.so will work. Use the following line: EOF case X$SHELL in */csh) echo " setenv LBGMDIR $lbgmdir" ;; *) echo " LBGMDIR=$lbgmdir; export LBGMDIR" ;; esac ;; *) ;; esac ;; esac case X$LBGMRM in X) cat <<EOF If you have delayed-deletion facilities, you may also want to define LBGMRM in your environment to be the name of the delayed-deletion facility. If you do not have delayed deletion right now, but want it, put X into $bindir EOF cat <<'EOF' and define LBGMRM to be X in your environment, and add the following line to -/usr/lib/crontab: 45 4 * * * find / -name '#*' -atime +3 -print -exec rm -f {} \; EOF ;; *) ;; esac /*EOF chmod +x install echo extracting - lbgm sed 's/^-//' > lbgm << '/*EOF' #! /bin/sh export PATH || (echo "OOPS, this isn't sh. Desperation time. I will feed myself to sh."; sh $0; kill $$) : '/********************************************************************* lbgm Save sources sent over net.sources. Called as a news forwarding program from inews Alan S. Watt Slightly modified by Geoff Kuenning Sccsid="@(#)lbgm 1.1 8/15/82 (ITT) [hacked]" usage: lbgm [ savedir [ notify ] ] arguments: savedir Directory area to save sources (default is /usr/lbgm). notify User to notify in case of trouble (default is root). history: 08/15/82 original version 12/04/84 name changed 12/05/84 infinite loop check added, save.log set to a+w *********************************************************************/' : 'Public source directory (Little Bird Gave Me)' sourcedir=${1-"/usr/lbgm"} notify=${2-"root"} : 'format of date command: "Sun Aug 15 15:56:06 EDT 1982"' set `date` mon=$2 day=$3 uniq=$$ tmp=LBGM.$$.tmp logfile=save.log : 'Lock the save source file and dump standard input there' cd $sourcedir >$tmp limit=`expr $$ + 100` while savefile="${mon}_${day}.$uniq" do if ln $tmp $savefile 2>&- then break fi uniq=`expr $uniq + 1` if [ $uniq -gt $limit ] then (echo 'Trouble with lbgm - check directory permissions. File header of unsaved article follows: ' ; sed -n '1,/^$/s/^/ /p') \ | mail $notify exit 1 fi done cat >${savefile} rm -f $tmp : 'Dump the news header in a log file (up to a blank line)' header="$savefile: `sed -n '1,/^$/s/^/ /p' ${savefile}`" echo "${header}" >>$logfile chmod a+w $logfile /*EOF chmod +x lbgm echo extracting - zap.so sed 's/^-//' > zap.so << '/*EOF' #!/bin/sh export PATH || (echo "OOPS, this isn't sh. Desperation time. I will feed myself to sh."; sh $0; kill $$) : Extract a Message-Id from a news file and prepend an lbgmX : used to help keep lbgm archives clean : called from readnews or rn with "s | zap.so" : outputs a file $HOME/tozap : archive can then be cleaned by invoking tozap : "HISTORY" : " 06-Sep-84 z at XEROX Henrietta " : " Created by Jim Ziobro " : " 04-Dec-84 geoff " : " Add csh bulletproofing and protection against multiple message id's " : : extract Message-Id awk 'BEGIN { FS = ":" }\ \ -/^[Mm][eE][sS][sS][aA][gG][eE]-[Ii][Dd]/ {\ printf("lbgmX \"%s\"\n", $2) ;\ exit;\ }\ '\ >> $HOME/tozap chmod +x $HOME/tozap /*EOF chmod +x zap.so echo extracting - lbgmX sed 's/^-//' > lbgmX << '/*EOF' #!/bin/sh export PATH || (echo "OOPS, this isn't sh. Desperation time. I will feed myself to sh."; sh $0; kill $$) : "lbgmX - X (remove) file with a message-id of $1 from a lbgm archive" : "HISTORY" : " 06-Sep-84 z at XEROX Henrietta " : " Created by Jim Ziobro " : " 04-Dec-84 geoff " : " Made lbgmdir and RM overrideable from the environment, made " : " default RM be /bin/rm -f. " : " 05-Dec-84 geoff " : " Made sure save.log is world-writeable " : lbgmdir=${LBGMDIR:-/usr/lbgm} RM=${LBGMRM:-"/bin/rm -f"} : lbgmdir is archive location cd $lbgmdir : get filename from Message-Id filenam=`awk 'BEGIN { filid = "" ; FS = ":" }\ \ {\ if ( filid == "" ) filid = $1 ;\ if ( $0 ~ /^[ ]*$/ ) filid = "" ; # line following blank has filename }\ \ \ -/^ [Mm][eE][sS][sS][aA][gG][eE]-[Ii][Dd]:/ {\ if ( $2 == "'"$1"'" )\ print filid ;\ }\ ' < save.log ` : "$filenam is filename to be purged from lbgm archive" : remove the files $RM *save.log sed -e /$filenam"/,/^ $/d" < \#save.log > save.log chmod a+w save.log $RM $filenam /*EOF chmod +x lbgmX echo extracting - X sed 's/^-//' > X << '/*EOF' #!/bin/sh export PATH || (echo "OOPS, this isn't sh. Desperation time. I will feed myself to sh."; sh $0; kill $$) : : Simple delayed-deletion shell script : : Usage: : : X files : : You must also have a crontab entry of the form : : 45 4 * * * find / -name '#*' -atime +3 -print -exec rm -f {} \; : : to make sure the files get removed at a later date. : for i do mv $i \#$i; done /*EOF chmod +x X exit