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 à
cvswebinstallé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