# $OpenBSD: README.chroot,v 1.8 2009/11/25 19:54:19 naddy Exp $
# Author: Jolan Luff <jolan@openbsd.org>

In order to make CVSweb operate in a chroot environment, it is
necessary to copy all of the relevant tools, libraries, and perl modules
that CVSweb employs into /var/www.

First, create the basic directory structure:

$ cd /var/www
# mkdir tmp usr
# chown www:www tmp	(needs to be writeable for the www user)

$ cd /var/www/usr
# mkdir -p {bin,lib,libdata/perl5,libexec}

$ cd /var/www/usr/libdata/perl5
# mkdir -p {File,IPC,Time,warnings,`machine`-openbsd/5.10.1}

The "annotate" function requires this empty file:

NOTE: You can create an actual null device instead, but that will
not work if the filesystem is mounted with the nodev option, and
it is not required for cvsweb.

$ cd /var/www/dev
# touch null

Now, the required binaries:

$ cd /var/www/usr/bin
# cp -p /usr/bin/{co,cvs,diff,perl,rcsdiff,rlog,uname} .

Next, the libraries that the binaries are linked to:

NOTE: Wildcards will, of course, copy any old, unused libraries that are
lurking around (for example, from an upgrade):

$ cd /var/www/usr/lib
# cp -p /usr/lib/lib{c,crypto,des,gssapi,krb5,m,perl,util,z}.so* .

Now, the run-time link-editor:

$ cd /var/www/usr/libexec
# cp -p /usr/libexec/ld.so .

And finally, the perl modules:

$ cd /var/www/usr/libdata/perl5
# cp -p /usr/libdata/perl5/{Carp,Exporter,Symbol,base,integer}.pm .
# cp -p /usr/libdata/perl5/{strict,warnings,vars,constant}.pm .
# cp -p /usr/libdata/perl5/File/Basename.pm ./File/
# cp -p /usr/libdata/perl5/IPC/Open{2,3}.pm ./IPC/
# cp -p /usr/libdata/perl5/Time/Local.pm ./Time/
# cp -p /usr/libdata/perl5/warnings/register.pm ./warnings/

$ cd /var/www/usr/libdata/perl5/`machine`-openbsd/5.10.1
# cp -p /usr/libdata/perl5/`machine`-openbsd/5.10.1/{Config,Cwd}.pm .
# cp -p /usr/libdata/perl5/`machine`-openbsd/5.10.1/Config_{git,heavy}.pl .

Editing cvsweb and cvsweb.conf
------------------------------

The cvsweb program itself and cvsweb.conf both assume Apache is not
running in a chroot environment, so we need to change some default paths
so they are relative to /var/www.

In /var/www/cgi-bin/cvsweb:

for ("$mydir/cvsweb.conf", '/var/www/conf/cvsweb/cvsweb.conf') {
for ("$mydir/cvsweb.conf", '/conf/cvsweb/cvsweb.conf') {

In /var/www/conf/cvsweb/cvsweb.conf:

Change CVSrepositories to reflect the location of the directories which
contain CVSROOT.  This example shows a local repository NFS mounted over
loopback into /var/www/cvs, since the directory must be relative to
/var/www, we use /cvs.

@CVSrepositories = (
	'local'   => ['Local Repository', '/home/cvs'],	      (default)
	'local'   => ['Local Repository', '/cvs'],	      (chroot)

And the same idea for $mimetypes:

$mime_types = '/var/www/conf/mime.types';		       (default)
$mime_types = '/conf/mime.types';			       (chroot)
