From pa.dec.com!decwrl!uunet!sparky!kent Thu May 9 12:41:43 PDT 1991 Article: 2300 of comp.sources.misc Path: pa.dec.com!decwrl!uunet!sparky!kent From: kent@sparky.imd.sterling.com (Kent Landfield) Newsgroups: comp.sources.misc Subject: v19i019: rkive - Usenet sources archiver, Patch01a/3 Message-ID: <1991May9.175613.19441@sparky.IMD.Sterling.COM> Date: 9 May 91 17:56:13 GMT Sender: kent@sparky.IMD.Sterling.COM (Kent Landfield) Organization: Sterling Software, IMD Lines: 1574 Approved: kent@sparky.imd.sterling.com X-Md4-Signature: 57d65bd4c36b09931f9926d1d0374926 Submitted-by: Kent Landfield Posting-number: Volume 19, Issue 19 Archive-name: rkive/patch01a Patch-To: rkive: Volume 17, Issue 17-22 The following three parts make up the first patch to rkive and article release 2. The highlights of this patch are: Local configuration is like its done in B News with a localize.sh. An INSTALL file has been added describing how to make localize.sh scripts and discusses just what some of the configuration parameters are/mean. Supports the new X-Md4-Signature: header in use in comp.sources.misc. rkive can now accept articles on standard input... Yes, this time it is real... :-) A sys.cf configuration file is supplied as a sample configuration file for sys file usage. article now allows the user to specify articles without a compression suffix and it will determine if it deals with the article transparently. Fixed some NNTP usage bugs with external archiving. Fixed some Global External-Archiving usage bugs. Added support for a relative path filename from where the BASEDIR to the actual storage location. This is done with a %Z format character. Added the ability for external command archiving to use the NNTP temporary transfer file if they need to. Added the $F specification character to support this. Updated update_netdocs with some new FAQs. Also shut off "set -x" as the default. That was left over from debugging... :-) I would like to thank the following people for pointing me in the right direction and helping out with fixes and ideas! John Beaudin Chip Rosenthal Chet Wood Dean Brooks Patch Installation Instructions: - copy the three parts to the rkive sources directory, - cd to the rkive sources directory, - unshar the three parts to this patch, and - patch the sources by executing "patch < patch2.1". Please read the INSTALL file that describes how to create a localize.sh script for making local configuration changes to rkive sources. ----------- For those who do not know what rkive is ... ----------- rkive - archive USENET source groups rkive is used to archive USENET sources groups, as well as general newsgroups, to an alternate location as specified in an rkive configuration file. Archives can be maintained in different ways: Archive-Name, Volume-Issue, Comp-Archives, Chronological, Article-Number, Only-Archive-Name, and External-Command. Archive-Name and Volume-Issue methods are for use in archiving the moderated sources groups specificially. Comp-Archives is used to archive the newsgroup comp.archives. Chronological and Article-Number can be used for general newsgroups. The Only-Archive-Name: method of archiving works well for groups such as alt.sources. It only archives files that have Archive-name: lines. The External-Command allows rkive to use a script/program specified by the archive administrator to do the actual storage of the packages (unshar in a script, script to maintain periodic postings) while rkive writes the log and index file entries, etc. There is an example of an External-Command script included. update_netdocs maintains a set of periodic postings in a common area for all to access. This is an example of a good usage of external command archiving but it is only an example. If someone wants to do and contribute a real implementation in perl I'll gladly include it in future releases. By means of a configuration file, the archive administrator is able to control how archiving is performed. The administrator can specify on a per newsgroup basis: o The type of the archiving, such as Volume-Issue Archive-Name, Article Number archiving, etc, o Where the newsgroup archive is to be stored on disk, o The location of log file for the newsgroup, o The format of the logfile records, o The location of index file for the newsgroup, o The format of the index file records, o A list of users to be sent mail when an article is archived, o The owner/group and modes of each archived member, o Only archive articles whose header lines match a pattern, o The method for archiving patches, whether with the package or inline, o An external program to deal with the located articles, o Whether the article is to be verified by some checksum mechanism, o Whether the archived members should be compressed or not and o Whether the news spool directory is local or accessed via NNTP article - print formatted news article header information article allows the user to display information contained in news article headers. This information includes the auxiliary headers added by the moderators of the source newsgroups. article takes the names of article files from standard input or as specified on the command line. The user can select almost any information contained within a news article header and can then specify the way in which the information should be displayed. The format that the user specifies is much like that of a C printf statement. article selects, formats, and prints its output under control of the format. The format is a character string that contains two types of objects: plain characters, which are copied directly to the output stream, and selection specifications. Specifying a selection results in fetching the selected items from the news article. This tool is extremely useful when dealing with the news system in general as well as dealing with archives. article knows about compression facilities and can deal directly with a compressed set of archive files instead of having to "zcat filename | article". Please see the README in the rkive version 2 release posted to the newsgroup comp.sources.misc for more information on rkive and article's capabilities. -Kent+ ---- #!/bin/sh # This is a shell archive (produced by shar 3.49) # To extract the files from this archive, save it to a file, remove # everything above the "!/bin/sh" line above, and type "sh file_name". # # made 05/09/1991 15:44 UTC by kent@sparky.IMD.Sterling.COM # Source directory /s/zoro/home/kent/projects/archive/patch # # existing files will NOT be overwritten unless -c is specified # # This is part 1 of a multipart archive # do not concatenate these parts, unpack them in order with /bin/sh # # This shar contains: # length mode name # ------ ---------- ------------------------------------------ # 11561 -rw-rw-r-- INSTALL # 7882 -rw-rw-r-- Makefile.dst # 2596 -rw-r--r-- localize.smpl # 991 -r--r--r-- sys.cf # 10930 -r--r--r-- rkive.h.dst # 91391 -rw-rw-r-- patch2.1 # if test -r _shar_seq_.tmp; then echo 'Must unpack archives in sequence!' echo Please unpack part `cat _shar_seq_.tmp` next exit 1 fi # ============= INSTALL ============== if test -f 'INSTALL' -a X"$1" != X"-c"; then echo 'x - skipping INSTALL (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting INSTALL (Text)' sed 's/^X//' << 'SHAR_EOF' > 'INSTALL' && @(#)INSTALL 1.1 5/9/91 The first step to installing rkive is to customize the configuration to suit your local needs. In the past, you had to take a fresh distribution and edit the rkive.h file and Makefile to suit local preferences. If you had many local changes, or didn't record the local changes, upgrading could be a pain... X Nearly every site will need to make changes to the rkive configuration as distributed. Local configuration of the rkive software requires you to edit a couple files. The rkive.h and Makefile files must be created from their templates rkive.h.dst and Makefile.dst. You should create a shell script called localize.sh which copies the files and makes local changes to the copies. A sample localize shell script can be found in localize.smpl. X The localize.sh shell script you create should copy rkive.h.dst to rkive.h, and copy Makefile.dst to Makefile. It should chmod the files so that your script can make changes and write the changes out. It should then invoke ed(1) on the files, making any necessary local changes. Use localize.smpl as a reference if you need to. The easiest thing to do is just copy the localize.smpl to localize.sh and make your local changes to that. It contains just about every configurable parameter specified in rkive.h and the Makefile. Just delete the entries that you don't want to change and modify the ones you do... X Once you're finished editing localize.sh, create a rkive.h and Makefile tailored for your site with the command X X sh ./localize.sh X Inspect rkive.h and Makefile to ensure that all your local customizations got into your final versions. If you saw a "?" when you ran localize.sh, one or both of the files is certainly wrong. It's a good idea to anchor the patterns in localize.sh's ed(1) scripts. For instance, use /^BINDIR/ instead of /BINDIR/. X Now that you know how to do it, just what things do you need to consider when customizing rkive ? X RKIVE.H: X Ownership: (OWNER, GROUP) X Who will the default owner of the archives be ? You might want to X consider setting up a user and group just to support the archives for X a little added security... Values specified in rkive.h are overridden X by values specified in the rkive.cf configuration file. X X File Modes: (MODES, DIR_MODE) X What will the default modes of the files be when created. What will X the default directory modes be on creation ? I personally like to keep X the archives as just that. Let the others copy the files to another location X to unpack. For that reason, I keep file creation as readable by all, X writable by none... Values specified in rkive.h are overridden by X values specified in the rkive.cf configuration file. X X Mailer: (SUBJECT_LINE, MAIL) X If you have a smart mailer that supports a "-s subject" command X and you wish to have the subject line added when archived mail X is sent, define SUBJECT_LINE. Specify which mail program to use X to send the mail by setting MAIL. X X Problem Article Storage: (PROBLEMS_DIR) X The PROBLEMS_DIR is the default directory to use in the event X problems are encountered such as duplicate article names and the X execution flags do not specify overwriting. The new, inbound article X is stored in the PROBLEMS_DIR in problems_dir/newsgroup/volume/filename X so that the administrator can review and fix the problem whenever time X becomes available... The PROBLEMS_DIR define is used only if the X administrator has not specified the PROBLEMS path variable inside of X the LOCATION (rkive.cf config) file. X X News Spool Directory: (SPOOLDIR) X I am sure you can figure this one out... X X Location of the Rkive Configuration file: (LOCATION) X This specifies the location of the default rkive configuration X file, rkive.cf. X X Dealing With Repostings: (ADD_REPOST_SUFFIX, REPOST_SUFFIX, MV_ORIGINAL) X If ADD_REPOST_SUFFIX is defined, all reposts will have the X string specified in REPOST_SUFFIX appended to the archive X filename so that a repost of elm/part07 would appear in X the archive as elm/part07-repost prior to any compression. X *** CAUTION *** X This should *not* be used on a filesystem with 14 X character file name limits. If you are going to be X making your archive available to the general community X do *not* use this. The portability of filenames is X greatly reduced. This has been added with much hesitation. X The rational was that there was no reason to punish/limit X the functionality just because of limitations of a specific X "brand" of unix and since that "brand" was correcting its X "error" in the future, why not put it in now ? This is *NOT* X a configuration item on a per newsgroup basis. It might be X useful for Historical archiving using only Volume/Issue X archiving with no COMPRESSION. X X If MV_ORIGINAL is defined, the original article is placed into an X "original" directory within the problems directory (if duplicated). X The inbound reposted article is placed into the archive in the correct X position. X X If No Reposting Defines are specified, the inbound article is placed X into the archive in the correct position only if the initial article X is not in the archive. Otherwise the reposted article is placed in X the problems directory as a normal duplicate article is now. X X Volume Directory Basename: (VOLUME) X If you wish your volume directories to be Volume, VOL, vOLuMe X or any other such nonsense, change the VOLUME define. X X Zero Pad Volume Directory Names: (ZEROFILL) X A very small change to construct change the volume directory names X from "volume1" to "volume01". In this manner all of the archive X volume directories appear in lexical order instead of jumbled X together in directory listings. X X Removing Unnecessary Article Headers: (REDUCE_HEADERS) X If you wish to have the headers "trimmed" when the file is archived, X assure that REDUCE_HEADERS is defined. Currently all header lines that X are not either; X From:, Newsgroups:, Subject:, Message-ID: Approved:, and Date: X will be removed. See news_arc.c if you wish to add or subtract header X lines to keep. This can produce a savings of between 200 to 500 bytes X per archived article. X X Default Record Formats: (DEFAULT_INDEX_FORMAT, DEFAULT_LOG_FORMAT) X These two defines specify a default format for generating either X index or log file records in the event that there is no index or X log file format specified for either the newsgroup or for the global X default. See article.1 for a discussion of the different types of X selection characters available for use in the format specifications. X X How Many Newsgroups Are To Be Archived?: (NUM_NEWSGROUPS) X The size of the group array. If you are archiving the world X you might need to bump this up... X X Chronological Archiving Storage: (NO_MONTH_DIR) X The ifdef NO_MONTH_DIR is used to decide which way Chronological X archives are to be stored. By default for format is something like X X /usenet/alt/sources/volume89/Jun/890629.01 X X If you wish not to have the month directory, define NO_MONTH_DIR X and the archives will be stored as X X /usenet/alt/sources/volume89/890629.01 X X Which mkdir function do you want to use ?: (MKDIR, USE_SYSMKDIR) X Define MKDIR if there is a mkdir() function in your X system library (AT&T 5.2 or earlier systems are probably X out of luck..) X Define USE_SYSMKDIR if you wish to system off /bin/mkdir. X If you do not define either, the function makedir will X create the directory itself. PLEASE ASSURE THAT IT WILL X WORK FOR YOUR SYSTEM PRIOR TO USING IT... (Should work on X System 5.3 and prior SYSV systems.) X X MAKEFILE: X Do you wish to have this built with NNTP capabilities ? X This requires that you have networking libraries and the X NNTP source code available to you during compilation. X You will need to specify the base directory location of X the nntp sources using NNTPSRCDIR. If you wish debugging X turned on in NNTP, specify that using NNTPDEBUG. You should X not have to touch the NNTPFLAGS, NNTPSRCS and NNTPOBJS. X If you need EXCELAN networking support defined for nntp, X uncomment EXOSFLAGS and EXOSLIBS. X X Are you on a Sequent ? X If so, uncomment SFLAGS and since there is not getopt() function X available, uncomment GETOPTO and GETOPTC. X X X Is your system missing the getopt() function ? X Uncomment GETOPTO and GETOPTC. X X Which Compiler to use ? X Define your favorite C compiler using CC. X X Special Compilation Flags needed ? X Use FLAGS to set special flags like -g or -O or -Wall... X The list goes on... X X YACC Compilation support: X Set yacc flags using YFLAGS. Specify which yacc to use with YACC. X X Directory Access Routines Location: X rkive needs to have POSIX Compatible directory access routines. X If you do not have it builtin to your system libraries then specify X the -l option. If you use Doug Gwyn's routines, (or other compatible X routines) define the library in which they appear such as -lndir or X -lposix. X NOTE THE FOLLOWING PLEASE ... X I really need to make it clear that I do not want to cobble up X the sources with directory access methods for every different X flavor of unix. I did that with lc and it is truly ugly... :-( X If you don't believe me, look for yourself. I have adopted a policy X of using only the dirent directory access routines. Most vendors X are moving towards the POSIX directory access library compatibility X so it seemed like a good idea then and now. For the systems that do X not have that capability, I use Doug Gwyn's POSIX compatible directory X access library that was posted to c.s.unix. Its well worth installing X and its availability can help you out in more than just rkive. X I encourage you to send me patches for all you enhancements and fixes X but do not send me patches to add support for your directory routines. X X Additional Libraries: X If your system requires additional libraries or if you wish to X use shared libraries, add the -l declarations to LIBS below such X as -lc_s X X General Items: X LP, PR, and NROFF let you configure those items as local taste X suits you. X X Where To Put Rkive Executables: X Specify where you want to install the rkive executables by setting X BINDIR. X X Where To Put Rkive Support Files: X Rkive has a couple of support files such as the rkive.cf and X update_netdocs. You may want to put other rkive local external X commands somewhere are well. Use RKIVEDIR to specify where they X should go. X X **** NOTE **** X rkive can be called from the command line using the default rkive.cf or you can specify a different one to use. If you rkive both from the sys file and from cron or a command line you will most assuredly need more than one .cf file. You can use different configuration files to logically group operations by the time you want it run. An example might be that you want to use the update_netdocs script (or some other external command) to archive the monthly postings so that they are not checked each night. The point here is that you have a lot of flexibility here and it is worth you while to spend a little time deciding how you want to use rkive to best suit your individual site needs. X SHAR_EOF chmod 0664 INSTALL || echo 'restore of INSTALL failed' Wc_c="`wc -c < 'INSTALL'`" test 11561 -eq "$Wc_c" || echo 'INSTALL: original size 11561, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= Makefile.dst ============== if test -f 'Makefile.dst' -a X"$1" != X"-c"; then echo 'x - skipping Makefile.dst (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting Makefile.dst (Text)' sed 's/^X//' << 'SHAR_EOF' > 'Makefile.dst' && ########################################################## # # @(#)Makefile.dst 2.3 5/9/91 - USENET Source Archiver # # This software is Copyright (c) 1989, 1990, 1991 by Kent Landfield. # # Permission is hereby granted to copy, distribute or otherwise # use any part of this package as long as you do not try to make # money from it or pretend that you wrote it. This copyright # notice must be maintained in any copy made. # # Use of this software constitutes acceptance for use in an AS IS # condition. There are NO warranties with regard to this software. # In no event shall the author be liable for any damages whatsoever # arising out of or in connection with the use or performance of this # software. Any use of this software is at the user's own risk. # # If you make modifications to this software that you feel # increases it usefulness for the rest of the community, please # email the changes, enhancements, bug fixes as well as any and # all ideas to me. This software is going to be maintained and # enhanced as deemed necessary by the community. # # Kent Landfield # uunet!sparky!kent # kent@sparky.imd.sterling.com # ########################################################## X # # Do you wish to have this built with NNTP capabilities ? # This requires that you have networking libraries and the # NNTP source code available to you during compilation. # # Excelan support needed for nntp # Uncomment if needed... # #EXOSFLAGS= -I/usr/include/EXOS -DUSG -DEXCELAN #EXOSLIBS= -lsocket # # Specify the base directory location of the nntp sources # if you wish to give rkive the ability to use nntp to archive. # #NNTPSRCDIR=/usr/src/local/cmd/nntp #NNTPDEBUG=-DDEBUG #NNTPFLAGS=$(EXOSFLAGS) -I$(NNTPSRCDIR)/common -DNNTP $(NNTPDEBUG) #NNTPSRCS= $(NNTPSRCDIR)/common/clientlib.c nntpart.c #NNTPOBJS= clientlib.o nntpart.o X # # Sequent's Compilation flags.. # #SFLAGS=-Iport # # If your system does not have getopt, # uncomment the next two lines. # #GETOPTO=getopt.o #GETOPTC=./port/getopt.c X # # Define your favorite C compiler here... # CC=cc X # # Compilation flags.. # FLAGS=-g CFLAGS=$(SFLAGS) $(FLAGS) $(NNTPFLAGS) X # # Yacc flags for compilation of match.y # YFLAGS= YACC=yacc X # # Define flags to be passed to lint. # LINTFLAGS=$(NNTPFLAGS) X # rkive needs to have POSIX Compatible directory access routines. # If you do not have it builtin to your system libraries then specify # the -l option. If you use Doug Gwyn's routines, (or other compatible # routines) define the library in which they appear such as -lndir or # -lposix. # ACCESSLIB= X LDFLAGS=$(EXOSLIBS) $(ACCESSLIB) X # # If your system requires additional libraries or if you wish to # use shared libraries, add the -l declarations to LIBS below such # as -lc_s # LIBS= X I = /usr/include LP=lpr PR=nl -n NROFF=nroff BINDIR=/usr/local/bin RKIVEDIR=/usr/local/lib/rkive MAN1=/usr/man/man1 MAN5=/usr/man/man5 X MANS= $(MAN1)/article.1 \ X $(MAN1)/rkive.1 \ X $(MAN1)/ckconfig.1 \ X $(MAN5)/rkive.5 X CONFIG= $(RKIVEDIR)/rkive.cf X SCRIPTS= $(RKIVEDIR)/update_netdocs X SUPPORT = Makefile README IDEAS MANIFEST INCLUDES = rkive.h article.h cfg.h patchlevel.h suffix.h X ARTICLE_SRCS = article.c format.c header.c str.c version.c zfopen.c $(GETOPTC) ARTICLE_OBJS = article.o afmt.o header.o str.o version.o zfopen.o $(GETOPTO) X CKCONFIG_SRCS= ckconfig.c disp_grp.c efopen.c setup.c str.c version.c $(GETOPTC) CKCONFIG_OBJS= ckconfig.o disp_grp.o efopen.o setup.o str.o version.o $(GETOPTO) X ARCHIVE_SRCS = ck_name.c disp_grp.c efopen.c format.c header.c \ X makedir.c news_arc.c $(NNTPSRCS) record_arc.c retrieve.c \ X rkive.c setup.c str.c suffix.c version.c $(GETOPTC) ARCHIVE_OBJS = ck_name.o disp_grp.o efopen.o rfmt.o header.o \ X makedir.o news_arc.o $(NNTPOBJS) record_arc.o retrieve.o \ X match.o rkive.o setup.o str.o suffix.o version.o $(GETOPTO) X SRCS = article.c ckconfig.c ck_name.c disp_grp.c efopen.c format.c \ X header.c makedir.c news_arc.c nntpart.c retrieve.c rkive.c \ X match.y record_arc.c setup.c str.c suffix.c version.c zfopen.c \ X $(GETOPTC) X INSTALLED_PROGS=\ X $(BINDIR)/article \ X $(BINDIR)/ckconfig \ X $(BINDIR)/rkive X PROGS = article ckconfig rkive X #all: $(PROGS) $(MANS) $(SCRIPTS) all: $(PROGS) X $(MANS): X cp `basename $@` $@ X chmod 444 $@ X install: $(MANS) $(SCRIPTS) $(CONFIG) $(INSTALLED_PROGS) #install: $(INSTALLED_PROGS) X $(INSTALLED_PROGS): X @strip $@ > /dev/null 2>&1 X cp `basename $@` $@ X $(CONFIG): X cp `basename $@` $@ X chmod 444 $@ X $(SCRIPTS): X cp `basename $@` $@ X chmod 755 $@ X $(RKIVEDIR) $(MAN1) $(MAN5): X mkdir $(MKDIRFLAGS) $@ X chmod 775 $@ X cf: $(CONFIG) X ckconfig: $(CKCONFIG_OBJS) X $(CC) $(CFLAGS) -o ckconfig $(CKCONFIG_OBJS) $(LIBS) X article: $(ARTICLE_OBJS) X $(CC) $(CFLAGS) -o article $(ARTICLE_OBJS) $(LIBS) X rkive: $(ARCHIVE_OBJS) X $(CC) $(CFLAGS) -o rkive $(ARCHIVE_OBJS) $(LDFLAGS) $(LIBS) X $(BINDIR)/article: article $(BINDIR)/ckconfig: ckconfig $(BINDIR)/rkive: rkive X $(CKCONFIG_OBJS): $(INCLUDES) $(ARTICLE_OBJS): $(INCLUDES) $(ARCHIVE_OBJS): $(INCLUDES) ################################ # Print ################################ X print: print_docs print_support print_include X $(LP) $(SRCS) X print_support: X $(PR) $(SUPPORT) | $(LP) X print_include: X $(LP) $(INCLUDES) X print_article: X $(LP) $(ARTICLE_SRCS) X print_ckconfig: X $(LP) $(CKCONFIG_SRCS) X print_rkive: X $(LP) $(ARCHIVE_SRCS) X print_docs: X $(NROFF) -man $(DOCS) | $(LP) X ################################ # LINT ################################ X lint: X @echo "linting Article sources: " > Lint.out X lint $(LINTFLAGS) $(ARTICLE_SRCS) | tee -a Lint.out X @echo "linting Ckconfig sources: " >> Lint.out X lint $(LINTFLAGS) $(CKCONFIG_SRCS) | tee -a Lint.out X @echo "linting Archiver sources: " >> Lint.out X lint $(LINTFLAGS) $(ARCHIVE_SRCS) | tee -a Lint.out X lint_article: X @echo "linting Article sources: " > Lint.out X lint $(LINTFLAGS) $(ARTICLE_SRCS) 2>&1 | tee -a Lint.out X lint_ckconfig: X @echo "linting Ckconfig sources: " > Lint.out X lint $(LINTFLAGS) $(CKCONFIG_SRCS) | tee -a Lint.out X lint_rkive: X @echo "linting Archiver sources: " > Lint.out X lint $(LINTFLAGS) $(ARCHIVE_SRCS) | tee -a Lint.out X ################################ # General ################################ X clean: X rm -f *.o Lint.out *.bak X clobber: clean X rm -f $(PROGS) X rm -f Makefile.old rkive.h.old X rm -f y.output y.tab.h y.tab.c X inspection: X -inspect -abv $(ARTICLE_SRCS) X -inspect -abv $(CKCONFIG_SRCS) X -inspect -abv $(ARCHIVE_SRCS) X inspect_rkive: X -inspect -abv $(ARCHIVE_SRCS) X saber_article_src: X #load $(CFLAGS) $(ARTICLE_SRCS) $(LIBS) X saber_article_obj: X #load $(ARTICLE_OBJS) $(LIBS) X saber_ckconfig_src: X #load $(CFLAGS) $(CKCONFIG_SRCS) $(LIBS) X saber_ckconfig_obj: X #load $(CKCONFIG_OBJS) $(LIBS) X saber_rkive_src: X #load $(CFLAGS) $(ARCHIVE_SRCS) $(LIBS) X saber_rkive_obj: X #load $(ARCHIVE_OBJS) $(LIBS) X man: X $(NROFF) -man $(MANS) X depend: X makedepend -- $(CFLAGS) -- $(SRCS) X ################################ # Dependencies ################################ X getopt.o: ./port/getopt.c X $(CC) $(CFLAGS) $(TARGET_ARCH) -c ./port/getopt.c X clientlib.o: $(NNTPSRCDIR)/common/clientlib.c X $(CC) $(CFLAGS) $(TARGET_ARCH) -c $(NNTPSRCDIR)/common/clientlib.c X match.o: match.y article.h X # # The format junk here could be cleaned up with -o if all # versions of make had it... I could reorg the code but that's # work... :-) # rfmt.o: format.c X $(CC) -DRKIVE $(CFLAGS) $(TARGET_ARCH) -c format.c X mv format.o rfmt.o X afmt.o: format.c X $(CC) $(CFLAGS) $(TARGET_ARCH) -c format.c X mv format.o afmt.o X $(RKIVEDIR)/rkive.cf: rkive.cf $(RKIVEDIR) $(RKIVEDIR)/update_netdocs: update_netdocs $(RKIVEDIR) $(MAN1)/article.1: article.1 $(MAN1) $(MAN1)/rkive.1: rkive.1 $(MAN1) $(MAN1)/ckconfig.1: ckconfig.1 $(MAN1) $(MAN5)/rkive.5: rkive.5 $(MAN5) X # DO NOT DELETE THIS LINE -- make depend depends on it. SHAR_EOF chmod 0664 Makefile.dst || echo 'restore of Makefile.dst failed' Wc_c="`wc -c < 'Makefile.dst'`" test 7882 -eq "$Wc_c" || echo 'Makefile.dst: original size 7882, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= localize.smpl ============== if test -f 'localize.smpl' -a X"$1" != X"-c"; then echo 'x - skipping localize.smpl (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting localize.smpl (Text)' sed 's/^X//' << 'SHAR_EOF' > 'localize.smpl' && #!/bin/sh # # @(#)localize.smpl 1.1 5/9/91 # # The purpose of this file is to make changes to # rkive's Makefile and rkive.h. This allows for # local configuration modifications to be isolated # to this file. #set -x if [ -f Makefile ] then X mv Makefile Makefile.old X echo "Storing original Makefile in Makefile.old" fi X echo "Extracting Makefile" cp Makefile.dst Makefile chmod u+w Makefile echo "Performing substitutions on Makefile" ed - Makefile <<'EOF' /^#EXOSFLAGS/s;^#;; /^#EXOSLIBS/s;^#;; /^#NNTPSRCDIR/s;^#;; /^#NNTPDEBUG/s;^#;; /^#NNTPFLAGS/s;^#;; /^#NNTPSRCS/s;^#;; /^#NNTPOBJS/s;^#;; /^#SFLAGS/s;^#;; /^#GETOPTO/s;^#;; /^#GETOPTC/s;^#;; /^CC/s;cc;gcc; /^FLAGS/s;-g;-O; /^YFLAGS/s;=;=-v; /^YACC/s;yacc;bison; /^ACCESSLIB/s;=;=-lndir; /^LIBS/s;=;=-lc_s; /^LP/s;lpr;lp; /^PR/s;nl -n;pr; /^NROFF/s;nroff;troff; /^BINDIR/s;/usr/local/bin;/home/kent/bin; /^RKIVEDIR/s;/usr/local/lib;/home/kent/rkive; /^MAN1/s;/usr/man/man1;/usr/man/local/man1; /^MAN5/s;/usr/man/man5;/usr/man/local/man5; w q EOF X echo X if [ -f rkive.h ] then X mv rkive.h rkive.h.old X echo "Storing original rkive.h in rkive.h.old" fi X echo "Extracting rkive.h" cp rkive.h.dst rkive.h chmod u+w rkive.h echo "Performing substitutions on rkive.h" ed - rkive.h <<'EOF' /OWNER/s;0;78; /GROUP/s;3;21; /MODES/s;0444;0644; /DIR_MODE/s;0755;0775; /^#define SUBJECT_LINE/s;define;undef; /^#define MAIL/s;/usr/ucb/Mail;/usr/local/bin/elm; /^#define SPOOLDIR/s;/usr/spool/news;/var/spool/news; /^#define PROBLEMS_DIR/s;/usenet/problems;/home/kent/rkive/problems; /^#define LOCATION/s;/usr/local/lib/rkive/rkive.cf;/home/kent/rkive/rkive.cf; /^#undef ADD_REPOST_SUFFIX/s;undef;define; /^#define MV_ORIGINAL/s;define;undef; /^#define REPOST_SUFFIX/s;-repost;.rp; /^#define VOLUME/s;volume;vol; /^#undef ZEROFILL/s;undef;define; /^#define REDUCE_HEADERS/s;define;undef; /^#define NUM_NEWSGROUPS/s;64;128; /^#undef NO_MONTH_DIR/s;undef;define; /^#undef USE_SYSMKDIR/s;undef;define; /^#define MKDIR/s;define;undef; /^#define DEFAULT_INDEX_FORMAT/s;%B\\t%S;%O\\t%T; /^#define DEFAULT_LOG_FORMAT/s;%O\\t%T;%B\\t%S; w q EOF cat << 'EOM' X Done. Did you see a '?' appear while running this ? If so you need to do a little more work to get it working right. If not... X Check over the Makefile and rkive.h to assure that things are the way that you want them. If they are not, make the appropriate changes to this script and rerun it. When things are correct, type X $ make X This will build the three executables, article, ckconfig and rkive. When you feel brave enough, install the software in place by typing X $ make install X EOM SHAR_EOF chmod 0644 localize.smpl || echo 'restore of localize.smpl failed' Wc_c="`wc -c < 'localize.smpl'`" test 2596 -eq "$Wc_c" || echo 'localize.smpl: original size 2596, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= sys.cf ============== if test -f 'sys.cf' -a X"$1" != X"-c"; then echo 'x - skipping sys.cf (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting sys.cf (Text)' sed 's/^X//' << 'SHAR_EOF' > 'sys.cf' && # # @(#)sys.cf 1.1 5/9/91 # - Used to contain newsgroup # archive specifications for # newsgroups processed through # the /usr/lib/news/sys file. # # typical line for rkive in the Cnews sys file. # csd:world,usa,local,comp.sources.d::/usr/local/bin/rkive -A comp.sources.d -f /usr/local/lib/rkive/sys.cf # ##################### GLOBAL SPECIFICATIONS ########################## # SPOOLDIR=/usr/spool/news PROBLEMS=/usenet/problems TYPE=Chronological # # If you turn on mail here you will get a mail message for # each article processed through /usr/lib/news/sys. YOU HAVE # BEEN WARNED... :-) :-) # #MAIL=kent OWNER=news GROUP=news MODE=0444 COMPRESS=/usr/ucb/compress # ###################### NEWSGROUP SPECIFICS ########################### # $$comp.sources.d X BASEDIR: /usenet/comp.sources.d X INDEX: /tmp/usenet/comp.sources.d/index X INDEX_FORMAT: "%B %a %T" X SHAR_EOF chmod 0444 sys.cf || echo 'restore of sys.cf failed' Wc_c="`wc -c < 'sys.cf'`" test 991 -eq "$Wc_c" || echo 'sys.cf: original size 991, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= rkive.h.dst ============== if test -f 'rkive.h.dst' -a X"$1" != X"-c"; then echo 'x - skipping rkive.h.dst (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting rkive.h.dst (Text)' sed 's/^X//' << 'SHAR_EOF' > 'rkive.h.dst' && /* ** @(#)rkive.h.dst 2.3 5/9/91 ** ** This is the rkive source configuration header file. ** Please examine and change to suite your own site's needs.. ** */ X /* ** The default owner, group and modes of the archived files ** need to be stated below. The values are only used if the ** appropriate values are not in the configuration file. */ X #define OWNER 0 #define GROUP 3 #define MODES 0444 #define DIR_MODE 0755 /* directory creation modes */ X /* ** If you have a smart mailer that supports a "-s subject" command ** and you wish to have the subject line added when archived mail ** is sent, define SUBJECT_LINE. */ X #define SUBJECT_LINE X #ifdef SUBJECT_LINE #define MAIL "/usr/ucb/Mail" /* mail program to use */ # ifdef NOTDEF # define MAIL "/usr/local/bin/elm" # define MAIL "/usr/bin/mailx" /* mail program to use */ # define MAIL "/usr/local/bin/mush" # endif /*NOTDEF*/ #else #define MAIL "/bin/mail" /* mail program to use */ #endif X /* ** The PROBLEMS_DIR is the default directory to use in the event ** problems are encountered such as duplicate article names and ** the execution flags do not specify overwriting. ** ** The new, inbound article is stored in the PROBLEMS_DIR in the ** problems_dir/newsgroup/volume/filename so that the administrator ** can review and fix the problem whenever time becomes available... ** ** The PROBLEMS_DIR define is used only if the administrator has not ** specified the PROBLEMS path variable inside of the LOCATION ** (config) file. */ X #define PROBLEMS_DIR "/usenet/problems" X /* ** Home directory for news */ X #define SPOOLDIR "/usr/spool/news" X /* ** Location of the default rkive configuration file. */ X #define LOCATION "/usr/local/lib/rkive/rkive.cf" X /* ** Defines to control the handling of repostings. ** ** ADD_REPOST_SUFFIX && REPOST_SUFFIX ** ** If ADD_REPOST_SUFFIX is defined, all reposts will have the ** string specified in REPOST_SUFFIX appended to the archive ** filename so that a repost of elm/part07 would appear in ** the archive as elm/part07-repost prior to any compression. ** ** CAUTION: This should *not* be used on a filesystem with ** 14 character file name limits. If you are going ** to be making your archive available to the general ** community do *not* use this. The portability of ** filenames is greatly reduced. This has been added ** with much hesitation. The rational was that there ** was no reason to punish/limit the functionality ** just because of limitations of a specific "brand" ** of unix and since that "brand" was correcting its ** "error" in the future, why not put it in now ? ** This is not a configuration item on a per newsgroup ** basis. It might be useful for Historical archiving ** using only Volume/Issue archiving with no COMPRESSION. ** ** MV_ORIGINAL ** The original article is placed into a "original" directory in ** the problems directory (if duplicated). The inbound reposted ** article is placed into the archive in the correct position. ** ** No Reposting Defines specified: ** The inbound article would be placed into the archive in the ** correct position only if the initial article is not in the archive. ** Otherwise the reposted article is placed in the problems directory ** as a normal duplicate article is now. */ X #undef ADD_REPOST_SUFFIX #define MV_ORIGINAL X #ifdef ADD_REPOST_SUFFIX #define REPOST_SUFFIX "-repost" #endif X /* ** If you wish your volume directories to be Volume, VOL, vOLuMe ** or any other such nonsense, change the VOLUME define below. */ X #define VOLUME "volume" X /* ** Very small change to construct change the volume directory names ** from "volume1" to "volume01". In this manner all of the archive ** volume directories appear in lexical order instead of jumbled ** together in directory listings. This option was "requested"... */ X #undef ZEROFILL X /* ** If you wish to have the headers "trimmed" when the file is archived, ** assure that REDUCE_HEADERS is defined. Currenlty all header lines that ** are not either; ** From:, Newsgroups:, Subject:, Message-ID: Approved:, and Date: ** will be removed. See news_arc.c if you wish to add or subtract header ** lines to keep. This can produce a savings of between 200 to 500 bytes ** per archived article. */ X #define REDUCE_HEADERS X /* ** The following define specifies a default format for generating ** index file records in the event that there is no index format ** specified for either the newsgroup or for the global default. ** See article.1 for a discussion of the different types of selection ** characters available for use in the format specifications. */ X #define DEFAULT_INDEX_FORMAT "%B\t%S" X /* ** The following define specifies a default format for generating ** log file records in the event that there is no log format ** specified for either the newsgroup or for the global default. */ #define DEFAULT_LOG_FORMAT "%O\t%T" X /* ** The size of the group array. If you are archiving the world ** you might need to bump this up... */ X #define NUM_NEWSGROUPS 64 X /* ** The ifdef NO_MONTH_DIR is used to decide which way Chronological ** archives are to be stored. By default for format is something like ** ** /usenet/alt/sources/volume89/Jun/890629.01 ** ** If you wish not to have the month directory, define NO_MONTH_DIR ** and the archives will be stored as ** ** /usenet/alt/sources/volume89/890629.01 */ #undef NO_MONTH_DIR X /* ** Which mkdir function do you want to use ? ** ** Define MKDIR if there is a mkdir() function in your ** system library (AT&T 5.2 or earlier systems are probably ** out of luck..) ** ** Define USE_SYSMKDIR if you wish to system off /bin/mkdir. ** ** If you do not define either, the function makedir will ** create the directory itself. PLEASE ASSURE THAT IT WILL ** WORK FOR YOUR SYSTEM PRIOR TO USING IT... (Should work on ** System 5.3 and prior SYSV systems.) */ #undef USE_SYSMKDIR /**/ #define MKDIR /**/ X /********************************************************************** ******************* NO CHANGES REQUIRED PAST HERE ******************* **********************************************************************/ X /* ** check to assure repost defines are in order... */ #if defined(ADD_REPOST_SUFFIX) + defined(MV_ORIGINAL) > 1 #include "ERROR - Can only specify a maximum of one way to handle reposts!" #endif X /* ** check to assure mkdir defines are in order... */ #if defined(MKDIR) + defined(USE_SYSMKDIR) > 1 #include "ERROR - Can only specify a maximum of one way to make directories!" #endif X #include X int fprintf(); X /* ** Standard stuff */ X #ifndef TRUE #define TRUE 1 #endif X #ifndef FALSE #define FALSE 0 #endif X /* ** The MAXNAMLEN define is here for systems such as SCO ** that have MAXNAMLEN in other then dirent.h ** Samuel Lam */ #ifndef MAXNAMLEN #define MAXNAMLEN 255 #endif X /* ** retrieve_article() return values */ #define ERROR_ENCOUNTERED -1 #define DONE 0 #define RETRIEVED 1 X /* ** retrieve_article() from defines */ #define FROM_DISK 0 #define FROM_NAME 1 #define FROM_BATCHFILE 2 #define FROM_STDIN 3 #ifdef NNTP # define FROM_NNTP 4 #endif /*NNTP*/ X /* ** archive type defines ** ** These defines are used to determine which type of archiving ** methods the administrator has requested for the newsgroup. ** */ X #define ARCHIVE_NAME 0 /* Archive as "elm/part03" */ X /* and moderator info also. */ #define VOLUME_ISSUE 1 /* Archive as "v16i003" */ #define ARTICLE_NUMBER 2 /* Archive with same name */ X /* as the file to archive */ #define CHRONOLOGICAL 3 /* Archive as "890619002" */ X /* or YYMMDDIII format */ #define COMP_ARCHIVES 4 /* Archive for comp.archives*/ #define EXTERNAL_COMMAND 5 /* Archive by piping the */ X /* articles to the external */ X /* command specified int the*/ X /* rkive.cf file. */ #define ONLY_ARCHIVE_NAME 6 /* Archive as "elm/part03" */ X #define MAXMATCHLEN 10000 /* Length for Match-expression. */ X X /* ** patch handling type defines ** ** These defines are used to determine which type of ** method the administrator has requested for the the ** handling of patches received in the newsgroup. ** */ X #define HISTORICAL 0 /* Archive as normally done. */ #define PACKAGE 1 /* Archive patches in the directory */ X /* containing the initial posting. */ X struct group_archive { X int owner; /* owner id of the archive files */ X int group; /* group id of the archive files */ X int modes; /* modes of the stored archive files */ X int type; /* Type of archiving to be used. */ X /* 0 = Archive-Name */ X /* 1 = Volume-Issue */ X /* 2 = Article-Number */ X /* 3 = Chronological */ X /* 4 = Comp-Archives */ X /* 5 = External-Command */ X int patch_type; /* Method of handling patches. */ X /* 0 = Historical */ X /* 1 = Package */ X char ng_name[MAXNAMLEN]; /* Newsgroup to be archived. */ X char ng_path[MAXNAMLEN]; /* Path to archive's base directory. */ X char location[MAXNAMLEN]; /* Path to archive's base directory. */ X char arc_done[MAXNAMLEN]; /* Archive's .archived already file */ X char mail_list[BUFSIZ]; /* List of users to mail when new */ X /* members are added to the archive. */ X char logfile[MAXNAMLEN]; /* Path to archive specific log file */ X char index[MAXNAMLEN]; /* Path to archive specific index. */ X char patchlog[MAXNAMLEN]; /* Path to archive's patches log. */ X char logformat[BUFSIZ]; /* Format of the logfile entry. */ X char indformat[BUFSIZ]; /* Format of the index entry. */ X char compress[MAXNAMLEN]; /* Command line to use to compress */ X /* new archive members, optional. */ X char arch_command[MAXNAMLEN]; /* Command line to use to archive */ X /* the articles in the newsgroup. */ X char checkhash[MAXNAMLEN]; /* Command line to use to test */ X /* articles for transit damage. */ X char match[MAXMATCHLEN]; /* Match-expression */ #ifdef NNTP X char nntp[MAXNAMLEN]; /* Name of system with nntp server */ #endif /*NNTP*/ }; SHAR_EOF chmod 0444 rkive.h.dst || echo 'restore of rkive.h.dst failed' Wc_c="`wc -c < 'rkive.h.dst'`" test 10930 -eq "$Wc_c" || echo 'rkive.h.dst: original size 10930, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= patch2.1 ============== if test -f 'patch2.1' -a X"$1" != X"-c"; then echo 'x - skipping patch2.1 (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting patch2.1 (Text)' sed 's/^X//' << 'SHAR_EOF' > 'patch2.1' && diff -cr ../usenet/Changes ./Changes *** ../usenet/Changes Wed May 8 21:31:55 1991 --- ./Changes Thu May 9 01:14:37 1991 *************** *** 1,101 **** ! @(#)Changes 2.1 2/21/91 ! WARNING **** WARNING **** WARNING **** WARNING **** WARNING **** WARNING **** X ! The .archived files now store the message id of the article instead of the ! article number. This is done so that NNTP support could be added. The news ! article numbering on one system may not be the same on another system and ! worse yet, they might collide resulting in lost articles. For this reason, ! the message-id is stored in the .archived file. This complicates the maintance ! of the .archived files greatly. Currently they are growing without bounds... ! Ideas please. A separate process run from cron to trim the files... ?? Help... X ! WARNING **** WARNING **** WARNING **** WARNING **** WARNING **** WARNING **** X ! What follows is a list of changes that have occured during this release... ! ------------------------------------------------------------------------------ X ! general: X ! Modified the Makefile handle dependencies better. X ! Moved the rkive.cf file into /usr/local/lib/rkive. This new directory ! is being used to store all the external applications such as update_netdocs ! as well. X ! Added the decompression routines to the compression suffix table. X ! rename.c used in the 1.x versions but is not used anymore... X - Removed alot of duplicated code and added some more. X - Removed the History lines from the files. Little, if any informational - content. Just bulks up the source files unnecessarily. History is in - the sccs files... If you really want it, send me email and I will send - you prs output... :-) X ! article: X - Added support for comp.archives auxiliary headers X ! Added support for comp.sources.apple2 extended auxiliary headers X ! Added compression recognition to article so that it can deal ! transparently with compressed/packed files. There is no longer ! a need to "zcat filename | article". X X ! rkive: X - Added the ability to use the X-Checksun-Snefru: auxiliary header line - used in c.s.unix and comp.sources.misc. X ! Added the ability to archive comp.archives using the auxiliary headers ! supplied by the moderator's posting software. X ! Added the ability to archive comp.sources.apple2 using the extended ! auxiliary headers. X ! Added the ability to pass parameter flags to the Compression utility ! specified in rkive.cf X ! Added NNTP support so that the archives can be maintained on a remote ! system(s) In this manner as well, an archive site can use multiple ! spool directories locatated on multiple systems to assure timely ! update and better news access reliability. ! ! Added the ability to support globbing. rkive now allows the user to ! specify a match string to search for in the newsgroup. When a match is ! found, that article is archive. Only articles that match the specific ! patterns are archived. This mechanism works for all the different types ! of archiving. ! ! Added the ability for archive to execute external applications as ! if it was done internally. It logs and writes index files for these ! as specified in the rkive.cf configuration file. ! ! Added the update_netdocs script and the appropriate entries in the ! supplied rkive.cf. This script provides an example of how the ! external archive mechanism works. It also allows a site to maintain ! the set of periodic postings that are specified in the rkive.cf and ! the update_netdocs. This script was a QUICK AND DIRTY EXAMPLE. It ! needs rewriting to be really used. ! ! Rkive can now accept articles on stdin. ! ! Rkive can now accept articles to be archived from a batch file ! This allows the rkive use a batch file generated by the news system ! in order to determine which articles need to be archived. ! ! #ifdef added to allow the volumes to be zero-padded so that volume1 ! now becomes volume01 ! ! Added aditional format specifications to format.c so that the information ! contained in the rkive.cf file could be supplied to external commands ! for their specific use. ! ! Does a better job going through saber and lint now.. :-) ! ! Added the ability for the person configuring the rkive.cf to specify ! where the .patchlog and .archived files are to reside. This was needed ! for maintaining uunet's c.s.misc archives. X --- 1,85 ---- ! @(#)Changes 2.2 5/9/91 X ! A different configuration method is being used. A localize.sh script ! is created at the local site that allows you to isolate changes to ! a single file. This makes upgrades and patches easier and local configuration ! is easier to manage. Local configuration is like its done in B News. X ! An INSTALL file has been added describing how to make localize.sh scripts ! and discusses just what some of the configuration parameters are/mean. X ! The rkive.h and Makefiles are distributed as the rkive.h.dst and ! Makefile.dst and are a template of the target rkive.h and Makefile ! that will be created by localize.sh. X ! Moved the mkdir() defines into rkive.h instead of the Makefile. ! Changed defines from HAVE_MKDIR to MKDIR... Don't ask... X ! Added support for the new X-Md4-Signature: header in use in comp.sources.misc. X ! Added the ability for rkive to accept articles on standard input... Yes, this ! time it is real... :-) A sys.cf configuration file is supplied as a sample ! configuration file for sys file usage. X ! Corrected a problem locating the next higest problem article number to ! use in the event of problem storage. This was encountered when two systems ! had problems with an article that had the same news article number. One ! of the articles was from a local news system, one was via NNTP, same group ! from two different sources... X ! In 2.0 I added the support for article to deal directly with compressed ! articles when the user specified the filename with the commpression suffix ! attached. ("article *.Z") This time I added the ability for article to deal ! with compressed articles better by allowing the user to specify the files ! without the compression suffix. This means that if I say "article v17i016" ! it will find v17i016.Z. If you have two files, one compressed, one ! uncompressed, article will find the one you specify. X X X ! uunet!utai!mnetor!tmsoft!beaudin!john (John Beaudin) pointed out two ! problems with global external archiving. Global External archiving ! works now.. I think.. :-) X X ! Chip Rosenthal alerted me to: X ! A matching problem in the suffix() routine was fixed. It was not stripping ! the options correctly, X + NO_MONTH_DIR was missing from rkive.h, and X ! When using the "Chronological" mode, with the "NO_MONTH_DIR" defined, ! a "%v" in the index format yielded a "v-1" rather than a "v91". Incorrect ! initialization, fixed. X X ! Chet Wood for directing me to the following five ! problems/ideas and gave me a couple more to ponder... :-) X ! Corrected write_archived so that it assures that the directories exist ! prior to attempting to write a record to the newsgroup's .archived file. ! Boundary condition :-) If the first article in a newsgroup was a problem ! article, rkive could not write the .archived record since the directory ! did not exist. ! ! Assured that the filename specified within the INDEX_FORMAT contained the ! final path name which may or may not have a compression suffix attached. ! ! Added support for a relative path filename from where the BASEDIR to the ! actual storage location. This is done with a %Z format character. ! ! Added the ability for external command archiving to use the NNTP temporary ! transfer file if they need to. Added the $F specification character to ! support this. ! ! Updated update_netdocs with some new FAQs. Also shut off "set -x" as the ! default. That was left over from debugging... :-) ! ! *** THANKS ALL! *** X ! Updated article.1 and rkive.5 to reflect the format specification character ! changes. X ! Various other minor fixes as well... X diff -cr ../usenet/IDEAS ./IDEAS *** ../usenet/IDEAS Wed May 8 21:31:59 1991 --- ./IDEAS Thu May 9 01:16:32 1991 *************** *** 1,4 **** ! @(#)IDEAS 2.1 2/21/91 X What follows is my ideas file. It gives you a glimse into some enhancements, X ideas, problems and work in progress for rkive. This is a minimal list but X it will grow after you send me your good ideas. :-) --- 1,4 ---- ! @(#)IDEAS 2.2 5/9/91 X What follows is my ideas file. It gives you a glimse into some enhancements, X ideas, problems and work in progress for rkive. This is a minimal list but X it will grow after you send me your good ideas. :-) *************** *** 13,60 **** X All articles should be storable in *as many* of the user-requested X formats as possible. X ! 3. Add a Configure.sh to handle configuration of default parameters ! and to setup the software. ! ! 4. Better and more extensive documentation as well as documentation X that explains archiving in general. X ! 6. An application that would allow retrieval requests from the archives X by reading the rkive.cf file to determine the location of the X newsgroup's archive and to retrieve packages by any of the archive X methods. This may end up using software like narc to actually do X the unpacking for the requester. This too is just an idea now... X ! 7. An application that would allow retrieval requests from the archives X for patches or entire packages including all posted patches. This is X still currently in progress... :-) The mythical "random downloader" :-) X ! 8. Have rkive be able to handle crosspostings intelligently instead of ! making to copies of the article as it does now. X ! 9. Changes needed to prevent the attempted compression of articles ! whose basenames are longer than 12 characters on systems that support ! only 14 character file names. X ! 10. Why not make the archive types specified by a table then it would be easy ! to add extra types. Surely the more the merry. X ! 11. Ta-rkive - have rkive feed the articles to be archived into tar ! by printing the article on stdout so that rkive -T | tar cvf - > date.tar ! could be used for putting the articles on to tape. tarkive would be ! an application that does only the article reading and taring. X ! 12. Allow for directory modes in the .cf file. X ! 13. Program to clean up the INDEX file and move the sources to tape. ! ! 14. Use the posted date for chronological archiving instead of the ! archived date. ! ! 15. Mail on error only. ! ! 16. Add a selection control-character which gives the local system article X number to put in 'log' and 'index'. Would help if one runs into trouble. X X Well that's the direction I am heading... If you have *any* additional X ideas that are constructive, positive or negative (flames to /nev/dull) --- 13,51 ---- X All articles should be storable in *as many* of the user-requested X formats as possible. X ! 3. Better and more extensive documentation as well as documentation X that explains archiving in general. X ! 4. An application that would allow retrieval requests from the archives X by reading the rkive.cf file to determine the location of the X newsgroup's archive and to retrieve packages by any of the archive X methods. This may end up using software like narc to actually do X the unpacking for the requester. This too is just an idea now... X ! 5. An application that would allow retrieval requests from the archives X for patches or entire packages including all posted patches. This is X still currently in progress... :-) The mythical "random downloader" :-) X ! 6. Changes needed to prevent the attempted compression of articles ! whose basenames are longer than 12 characters on systems that support ! only 14 character file names. X ! 7. Why not make the archive types specified by a table then it would be easy ! to add extra types. Surely the more the merry. X ! 8. Allow for directory modes in the .cf file. SHAR_EOF true || echo 'restore of patch2.1 failed' fi echo 'End of part 1' echo 'File patch2.1 is continued in part 2' echo 2 > _shar_seq_.tmp exit 0 exit 0 # Just in case... -- Kent Landfield INTERNET: kent@sparky.IMD.Sterling.COM Sterling Software, IMD UUCP: uunet!sparky!kent Phone: (402) 291-8300 FAX: (402) 291-4362 Please send comp.sources.misc-related mail to kent@uunet.uu.net.