Add another example that shows how to map a cvs server into your local

file system so that you can pull random files out of it easily.
This commit is contained in:
atatat 2001-10-11 18:41:11 +00:00
parent 031a62292d
commit 9305145646
5 changed files with 119 additions and 3 deletions
sbin/mount_portal/examples

@ -1,4 +1,4 @@
# $NetBSD: Makefile,v 1.1 1999/08/16 06:42:48 bgrayson Exp $
# $NetBSD: Makefile,v 1.2 2001/10/11 18:41:11 atatat Exp $
.include <bsd.own.mk>
@ -6,7 +6,8 @@
FILESDIR= /usr/share/examples/mount_portal
FILES= overview advanced.1 advanced.1.conf fing.c rfilter.1 \
rfilter.2 rfilter.2.conf tcp.1 tcp.1.conf fs.1 fs.1.conf
rfilter.2 rfilter.2.conf tcp.1 tcp.1.conf fs.1 fs.1.conf \
cvs.1 cvs.conf cvs.pl
.endif
.include <bsd.prog.mk>

@ -0,0 +1,78 @@
The cvs.conf portal configuration file maps the NetBSD anoncvs
respository into the local file system. This means you can cat(1)
or cp(1) copies of any arbitrary file or revision from the cvs
server using a local path. Start off like this:
# mkdir /p
# mount -t portal `pwd`/cvs.conf /p
# chmod +x cvs.pl
#
The next step is to set up the authentication. The NetBSD anoncvs
server uses ssh for authentication, so all you need to do is
# ssh anoncvs@anoncvs.netbsd.org
and answer 'yes' when it asks you if you want to accept the key.
Now the NetBSD source tree is close at hand.
First, some caveats. File name completion and globbing don't work,
and diff has difficulties with this since it stat()s the file names
it's given and gets back more or less meaningless information for
names under a portal file system. You also need to have perl
installed for the cvs.pl script that supports this configuration.
The script expects to find perl in /usr/pkg/bin, so change the
script if you have perl installed somewhere else.
Here's a list of things I've done with this:
1) diff one of my files (eg, /etc/security) against the repository
% grep NetBSD: /etc/security
# $NetBSD: security,v 1.52 ...
% diff -u -< /p/netbsd/basesrc/etc/security,1.52 /etc/security
[ diffs elided ]
%
Notice the use of the - file given to diff and the input redirection
so that it will read from stdin instead of opening the file itself.
This gets around the stat() problem.
2) Check out some (or all) versions of a file:
% grep NetBSD: /etc/security
# $NetBSD: security,v 1.52 ...
% foreach i (`jot 10 43`)
> cp /p/netbsd/basesrc/etc/security,1.$i /tmp
> end
%
Presto! Versions 1.43 through 1.52 (jot(1) prints 10 numbers
starting at 43) of /etc/security are copied into your /tmp directory
so that you can do arbitrary diffs between any version you like.
You can use tags instead of revision numbers if you like.
3) Instant upgrades. Since cvs always defaults to the head of the
trunk, you can do this:
# cp /p/netbsd/basesrc/etc/security /etc/security
#
to upgrade to the latest and greatest version any time you like,
or you can do this:
# uname -r
1.5.2
# cp /p/netbsd/basesrc/etc/security,netbsd-1-5-PATCH002 /etc/security
#
to get rid of any changes you might have made to /etc/security that
you no longer want.
Note that there's some support for the FreeBSD and OpenBSD anoncvs
service in there as well, but those might be tricky. The FreeBSD
anoncvs server only offers pserver access, so you'll need to manually
do a cvs login to make that work. The OpenBSD server seems to move
around a fair amount, so the CVSROOT value for it will need to be
updated if that happens again. You might also choose to use
different servers entirely.

@ -0,0 +1,3 @@
netbsd/ rfilter netbsd/ /usr/share/examples/mount_portal/cvs.pl netbsd %s
freebsd/ rfilter freebsd/ /usr/share/examples/mount_portal/cvs.pl freebsd %s
openbsd/ rfilter openbsd/ /usr/share/examples/mount_portal/cvs.pl openbsd %s

@ -0,0 +1,32 @@
#!/usr/pkg/bin/perl
# ensure that HOME is set for pserver modes
$ENV{'HOME'} = (getpwuid($<))[7] || "/";
# supplement path to include ssh and cvs
$ENV{'PATH'} = "/usr/pkg/bin:$ENV{'PATH'}";
# use ssh instead of rsh for cvs connections
$ENV{'CVS_RSH'} = "ssh";
if ($ARGV[0] eq "netbsd") {
$ENV{'CVSROOT'} = "anoncvs\@anoncvs.netbsd.org:/cvsroot";
shift(@ARGV);
}
elsif ($ARGV[0] eq "freebsd") {
$ENV{'CVSROOT'} = ":pserver:anoncvs\@anoncvs.freebsd.org:/home/ncvs";
shift(@ARGV);
}
elsif ($ARGV[0] eq "openbsd") {
$ENV{'CVSROOT'} = "anoncvs\@anoncvs.usa.openbsd.org:/cvs";
shift(@ARGV);
}
else {
print("configuration not supported\n");
exit(0);
}
foreach $file (@ARGV) {
($file, $rev) = ($1,$3) if ($file =~ /(.*),(-r)?([\d\.]+|[-a-zA-Z\d]+)$/);
$cmd = "co -p";
$rev = "-r $rev" if ($rev);
system("cvs $cmd $rev $file");
}

@ -1,4 +1,4 @@
$NetBSD: overview,v 1.1 1999/08/16 06:42:48 bgrayson Exp $
$NetBSD: overview,v 1.2 2001/10/11 18:41:12 atatat Exp $
Overall notes:
@ -26,6 +26,8 @@ Descriptions of files in this directory:
rfilter.1 Simple rfilter usage: bunzip2/bzcat
rfilter.2 Advanced rfilter usage
advanced.1 A tutorial
cvs.1 How to map a cvs server into your local file system
cvs.pl A perl script that does the work for the cvs configuration
In progress:
wfilter.1 Simple wfilter usage: bzip2