Installer une interface CVSweb dans un chroot

Auteur : Olivier BOYER - oboyer () ajoute ! org

Mots clés

OpenBSD, cvs, cvsweb, web frontal, Perl, chroot

Introduction

Ce document présente l'installation du produit CVSweb sur un système OpenBSD 4.3. Le serveur web livré par défaut sur cette plateforme fonctionne dans un environnement à racine déplacé (chroot). La configuration décrite ici présente comment exécuter le CGI CSweb dans cet environnement.

Qu'est-ce CVSweb ?

CVSweb est une interface web pour les dépôts CVS avec laquelle il est possible d’éditer la hiérarchie de fichiers dans un navigateur pour suivre l’historique des versions.

CVSweb a été développé initialement par Bill Fenner pour le projet FreeBSD. Le produit est disponible sous licence BSD.

Présentation de la maquette

Les éléments suivants sont mis en oeuvre :

  • un système OpenBSD
  • un serveur web Apache livré par défaut avec OpenBSD
  • le CGI Perl cvsweb
  • l'interpréteur Perl installé dans la cage d'Apache (/var/www)
  • les modules Perl nécessaires à cvsweb installés dans la cage d'Apache

Note

Toutes les commandes présentées ici, sont à exécuter, sauf mention contraire, en tant qu'administrateur de la machine.

Pré-requis

  • Le serveur OpenBSD doit être installé et fonctionnel.
  • Le serveur web doit être configuré et fonctionnel.

cvsweb est un CGI écrit en Perl qui sert de frontal aux commandes CVS. Pour s'exécuter, il requière que le serveur Apache d'OpenBSD “chrooté” soit démarré, mais aussi que :

  • l'interpréteur Perl,
  • la commande cvs(1)
  • le dépôt CVS

soient accessibles dans l'espace du serveur Web, ici /var/www.

De plus, cvsweb utilise les commandes :

  • RCS (co(1), rcsdiff(1), rlog(1))
  • diff(1)
  • uname(1)

Dans un environnement “chrooté”, il faut que tous les binaires, les modules Perl, les bibliothèques dynamiques et l'éditeur de liens dynamique soient présents dans la cage.

Installer le produit

cvsweb est disponible dans les packages officiels d'OpenBSD. Pour installer le produit, exécutez les commandes suivantes :

# export PKG_PATH="ftp://ftp.irisa.fr/pub/OpenBSD/$(uname -r)/packages/i386/"
# pkg_add cvsweb
cvsweb-2.0.6p3: complete

Pour lister les fichiers installés, exécutez la commande suivante :

# pkg_info -L cvsweb
Information for cvsweb-2.0.6p3

Files:
/var/www/cgi-bin/cvsweb
/var/www/conf/cvsweb/README.chroot
/var/www/conf/cvsweb/cvsweb.conf-freebsd.dist
/var/www/conf/cvsweb/cvsweb.conf-netbsd.dist
/var/www/conf/cvsweb/cvsweb.conf-openbsd.dist
/var/www/conf/cvsweb/cvsweb.conf-ruby.dist
/var/www/conf/cvsweb/cvsweb.conf.dist
/var/www/icons/cvsweb/back.gif
/var/www/icons/cvsweb/dir.gif
/var/www/icons/cvsweb/miniback.gif
/var/www/icons/cvsweb/minidir.gif
/var/www/icons/cvsweb/minitext.gif
/var/www/icons/cvsweb/text.gif

Remplir le chroot

Une fois le produit installé, il faut copier ses dépendances externes (binaires, bibliothèques dynamiques, éditeur de liens) dans le répertoire de la cage.

Procédez comme suit :

Créer les répertoires

# cd /var/www
# mkdir {tmp,usr}
# chown www:www tmp
# chmod 700 tmp

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

# cd /var/www/usr/libdata/perl5
# mkdir -p {File,IPC,Time,warnings,`machine`-openbsd/5.8.8}
# chmod 555 *

Copier les binaires

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

Copier les bibliothèques nécessaires

# cd /var/www/usr/lib
# cp -p /usr/lib/lib{c,crypto,des,gssapi,krb5,m,perl,util,z}.so* .
# chmod 444 *
#
# cd /var/www/usr/libdata/perl5/`machine`-openbsd/5.8.8
# cp -p /usr/libdata/perl5/`machine`-openbsd/5.8.8/{Config,Cwd}.pm .
# chmod 444 *

Copier l'éditeur de liens dynamique

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

Copier les modules Perl

CVSweb utilise les modules Perl suivants :

  • File::Temp nécessaire (livré en standard à partir de perl5.8.0)
  • IPC::Run nécessaire
  • MIME::Types optionnel
  • String::Ediff optionnel
  • URI optionnel

Pour copier les modules, procédez comme suit :

# 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}.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.8.8
# cp -p /usr/libdata/perl5/`machine`-openbsd/5.8.8/{Config,Cwd}.pm .

Toutes les dépendances du produit ont été copiées à la racine d'exécution du serveur Web, donc de CVSweb.

Modifier cvsweb

Maintenant que la cage est prête, il faut apporter quelles que modifications au script cvsweb lui-même et à son fichier de configuration cvsweb.conf. En effet, la configuration de CVSweb par défaut n'est pas prévue pour fonctionner dans un environnement à racine déplacé.

Dans notre exemple, la racine d'Apache est /var/www. Ce répertoire est la racine d'exécution (/) dans l'environnement “chrooté”. Il faut donc remplacer les chemins /var/www par /.

Procédez comme suit :

Modifier /var/www/cgi-bin/cvsweb

Modifiez comme suit le script /var/www/cgi-bin/cvsweb :

# == EDIT this ==
# Locations to search for user configuration, in order:
for ("$mydir/cvsweb.conf", '/var/www/conf/cvsweb/cvsweb.conf') {

en :

# == EDIT this ==
# Locations to search for user configuration, in order:
#(#
#(# Change PATH for chroot env
#(# for ("$mydir/cvsweb.conf", '/var/www/conf/cvsweb/cvsweb.conf') {
for ("$mydir/cvsweb.conf", '/conf/cvsweb/cvsweb.conf') {

Modifier /var/www/conf/cvsweb/cvsweb.conf

Paramètre CVSrepositories

Changez le paramètre CVSrepositories pour qu'il reflète l'architecture dans la cage.

Note: Si vous voulez publier un dépôt CVS qui est en dehors du chroot, vous pouvez le monter via NFS sur l'interface loopback.

# 'symbolic_name' => ['name_to_display', 'path_to_the_actual_repository']
# Listed in the order specified:
@CVSrepositories = (
        'local'   => ['Local Repository', '/home/cvs'],

en

@CVSrepositories = (
        'local'   => ['Local Repository', '/cvs'],
#(#     'local'   => ['Local Repository', '/home/cvs'],

Paramètre mimetypes

# mapping to mimetypes to help
# cvsweb to guess the correct mime-type on
# checkout; you can use the mime.types from
# apache here:
$mime_types = '/var/www/conf/mime.types';

en

# mapping to mimetypes to help
# cvsweb to guess the correct mime-type on
# checkout; you can use the mime.types from
# apache here:
#(#$mime_types = '/var/www/conf/mime.types';
$mime_types = '/conf/mime.types';

Accéder à cvsweb

Pour accéder à l'interface web de visualisation, ouvrez votre navigateur préféré, et saisissez l'url suivante :

http://leaves.org/cgi-bin/cvsweb

Si vous voulez simplifier l'url, vous pouvez ajouter la ligne suivante au fichier de configuration d'Apache /var/www/conf/httpd.conf :

ScriptAlias /cvsweb "/var/www/cgi-bin/cvsweb"

Puis, redémarrez Apache pour prendre en compte les modifications.

Tracer les modifications des fichiers de configuration

OpenBSD offre la fonctionnalité de sauvegarde et de suivi des fichiers de configuration. Pour cela, le système s'appuie sur le fichier /etc/changelist, voir changelist(5), qui est lu par le script /etc/daily(8).

Pour suivre les fichiers créés dans ce document, ajoutez les lignes suivantes au fichier /etc/changelist :

# cvsweb
/var/www/conf/cvsweb/cvsweb.conf
/var/www/cgi-bin/cvsweb
 
doc/openbsd/cvsweb.txt · Dernière modification: 2009/12/23 22:36 (édition externe)     Haut de page