15 abr 2009

SVN server, Apache2 y SSL en DEBIAN

Contenido
0. Introducción
1. Instalacion
2. Configuración de Apache
3. SVN
4. Scripts
5. Notas y Referencias


0. Introducción
Subversion es un software de sistema de control de versiones diseñado específicamente para reemplazar al popular CVS, el cual posee varias deficiencias. Es software libre bajo una licencia de tipo Apache/BSD y se le conoce también como svn por ser ese el nombre de la herramienta de línea de comandos. Una característica importante de Subversion es que, a diferencia de CVS, los archivos versionados no tienen cada uno un número de revisión independiente. En cambio, todo el repositorio tiene un único número de versión que identifica un estado común de todos los archivos del repositorio en cierto punto del tiempo.

1. Instalacion
apt-get install subversion libapache2-svn libapache-mod-dav apache2 openssl gcc g++

2. Configuración de Apache

2.1 SSL
Para habilitar el Apache2 para que escuche en el puerto de SSL

a2enmod ssl
echo 'Listen 443' >> /etc/apache2/ports.conf

Si vemos que nos dice que está ocupado el puerto con:
netstat -pan | grep 443
revisamos quien está escuchando. Y cambiamos el puerto de escucha, o modificamos el servidor que estuviera escuchando en dicho puerto.

Generamos un Certificado SSL:

apache2-ssl-certificate

si el comando no existe, se lo puede descargar haciendo:

wget http://czarism.com/files/apache2-ssl.tar.gz

lo descomprimimos haciendo

tar zxvf apache2-ssl.tar.gz
mv apache2-ssl-certificate /usr/sbin
mv ssleay.cnf /usr/share/apache2
mkdir /etc/apache2/ssl

y luego generamos el certificado.

apache2-ssl-certificate

Por ejemplo se puede completar con:

Country Name (2 letter code) [GB]:ES
State or Province Name (full name) [Some-State]:Madrid
Locality Name (eg, city) []:Madrid
Organization Name (eg, company; recommended) []:Lamia
Organizational Unit Name (eg, section) []:lamia
server name (eg. ssl.domain.tld; required!!!) []:lamia.es
Email Address []:info@lamia.es


2.2. Configuración de SSL en Apache2
hacemos backup del por defecto

cp /etc/apache2/sites-enabled/000-default /etc/apache2/sites-enabled/ssl

Lo dejamos de la siguiente forma:

NameVirtualHost *:443

SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem
SSLProtocol all
SSLCipherSuite HIGH:MEDIUM


3. SVN

Lo que se va aexplicar aquí es la manera "manual" de hacerlo. Luego se postearán una serie de scripts que nos ayudarán en esta tarea.

Creamos el directorio
mkdir /home/svn
mkdir /home/svn/permisos
chown www-data:www-data /home/svn
chmod 750 /home/svn

Generamos el archivo con usuarios y contraseñas, cuando queramos dar permisos a otro usuario deberemos hacerlo aquí:

su www-data -c "htpasswd -c -m /home/svn/permisos/dav_svn.passwd root"

Creamos un repositorio

svnadmin create /home/svn/test
chown -R www-data:www-data /home/svn/test
chmod -R g+ws /home/svn/test

Copiamos el archivo authz de ejemplo y le agregamos el usuario root al repositorio test:

cp /home/svn/test/conf/authz /home/svn/permisos/dav_svn.authz
echo "[test:/]" >> home/svn/permisos/dav_svn.authz
echo "root = rw" >> home/svn/permisos/dav_svn.authz

NOTA: Es lo mismo usar htpasswd que htpasswd2

  • Archivos de Configuración

vim /home/svn/test/conf/svnserve.conf

### This file controls the configuration of the svnserve daemon, if you
### use it to allow access to this repository. (If you only allow
### access through http: and/or file: URLs, then this file is
### irrelevant.)
### Visit http://subversion.tigris.org/ for more information.
[general]
### These options control access to the repository for unauthenticated
### and authenticated users. Valid values are "write", "read",
### and "none". The sample settings below are the defaults.
anon-access = none
auth-access = read
auth-access = write
### The password-db option controls the location of the password
### database file. Unless you specify a path starting with a /,
### the file's location is relative to the conf directory.
### Uncomment the line below to use the default password file.
password-db = passwd
### The authz-db option controls the location of the authorization
### rules for path-based access control. Unless you specify a path
### starting with a /, the file's location is relative to the conf
### directory. If you don't specify an authz-db, no path-based access
### control is done.
### Uncomment the line below to use the default authorization file.
authz-db = authz
### This option specifies the authentication realm of the repository.
### If two repositories have the same authentication realm, they should
### have the same password database, and vice versa. The default realm
### is repository's uuid.
realm = lamia Repository


Modificar /home/svn/test/conf/authz agregándole las siguientes líneas:

[/]
root = rw

Copiar los dos archivos al directorio de permisos

cp /home/svn/test/conf/svnserve.conf /home/svn/permisos
cp /home/svn/test/conf/authz /home/svn/permisos


Finalizacion de Apache2

vim /etc/apache2/sites-enabled/ssl


DAV svn
SVNParentPath /home/svn
AuthType Basic
AuthName "Taringa Subversion Repository"
AuthUserFile /home/svn/permisos/dav_svn.passwd
AuthzSVNAccessFile /home/svn/permisos/dav_svn.authz
Require valid-user


Reiniciar Apache2

/etc/init.d/apache2 restart

4. Scripts
Estos scripts fueron hechos para simplificar la gestión del SVN, crearlos en /home/svn/permisos linkear contra /user/sbin

4.1. svnaddrep

#!/bin/sh
#
# svn projets creation
#
serv="https://127.0.0.1/"
cwd="/home/svn/"
if [ "$1" = "" ]; then
echo -n "Repository name: ";
read projet;
else
projet="$1";
fi
site="$serv$projet";
echo " svnadmin create $cwd$projet --fs-type fsfs";
svnadmin create $cwd$projet
echo " chown -R www-data:www-data $cwd$projet";
chown -R www-data:www-data $cwd$projet
cp /home/svn/permisos/authz $cwd$projet/conf
cp /home/svn/permisos/svnserve.conf $cwd$projet/conf
echo "[$projet:/]" >> /home/svn/permisos/dav_svn.authz;
echo "root = rw" >> /home/svn/permisos/dav_svn.authz;
echo -n "Add initial structure (root password requiered)?(y/n):";
while true; do
echo -n "Add initial structure (root password requiered)?(y/n):";
read yn;
case $yn in
[yY]* ) echo " svn mkdir $site/trunk $site/branches $site/tags -m
\"Subversion archive folder creation.\"";
svn mkdir $site/trunk $site/branches $site/tags -m "Subversion archive folder
creation.";break;;
[nN]* ) echo;exit;;
esac
done
echo "
##########################################
Finished!
Remember to add users...
##########################################";


4.2. svnadduser

#!/bin/sh
#
# svn user creation
#
if [ "$1" = "" ]; then
echo -n "Username:";
read user;
else
user="$1";
fi
su www-data -c "htpasswd -m /home/svn/permisos/dav_svn.passwd $user"


4.3. svndeluser

#!/bin/sh
#
# svn user creation
#
if [ "$1" = "" ]; then
echo -n "Username:";
read user;
else
user="$1";
fi
su www-data -c "htpasswd -D /home/svn/permisos/dav_svn.passwd $user"



5. Notas y Referencias

wiki
Taringa

Share This!



No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.