En un post anterior ya había explicado como instalar
Subversion desde los repositorios de
Debian y
Ubuntu, pero el día de hoy voy ha explicar como podemos instalar este software atravéz de su código fuente y además habilitaremos
Apache para que se puedan consultar nuestros repositorios desde la
Web.
Primeramente nos convertiremos en el usuario
root.
javoaxian@darthmaul:~$ su -
Instalaremos los paquetes:
zlib1g,
zlib1g-dev,
openssl,
libssl-dev,
libxml2,
libxml2-dev,
libexpat1 y
libexpat1-dev.
root@darthmaul:~# apt-get install zlib1g zlib1g-dev openssl libssl-dev libxml2 libxml2-dev libexpat1 libexpat1-dev
Ahora deberemos tener instalado nuestro servidor
Apache desde su código fuente.
Aquí dejo este artículo de cómo instalarlo, nada más deberemos agregar las siguientes opciones en el comando
./configure para que la línea del comando quede de la siguiente manera:
./configure --prefix=/usr/local/apache --enable-so --enable-mods-shared="most ssl dav"
Ya que contamos con nuestro servidor web instalado, vamos a crearle un certificado de prueba. Supondré que siguieron el
artículo que mencioné anteriormente (con la modificación del comando
./configure) e instalaron
apache en
/usr/local/apache.
root@darthmaul:~# cd /usr/local/apache/conf/
root@darthmaul:~# mkdir ssl.crt
root@darthmaul:~# mkdir ssl.key
Ahora generaremos el certificado:
root@darthmaul:~# openssl req -new -x509 -days 365 -keyout ./ssl.key/server.key -out ./ssl.crt/server.crt -subj '/CN=Certificado JavoAxian'
Este comando nos solicitará el
PEM pass Phrase y su confirmación. Este nos será solicitado cada vez que iniciemos nuestro servidor web, pero para efectos de este artículo, lo eliminaremos.
Generating a 1024 bit RSA private key
....................++++++
.......................++++++
writing new private key to './ssl.key/server.key'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
Ya que ingresamos los datos anteriores, eliminaremos el
PEM pass phrase que ingresamos de la siguiente manera:
root@darthmaul:~# cp ssl.key/server.key ssl.key/server.key.org
root@darthmaul:~# openssl rsa -in ssl.key/server.key.org -out ssl.key/server.key
Nos pedirá la
PEM pass phrase que ingresamos:
Enter pass phrase for ssl.key/server.key.org:
writing RSA key
Ahora le cambiaremos los permisos al archivo
server.key:
root@darthmaul:~# chmod 400 ssl.key/server.key
Con esto ya tenemos nuestro certificado. Ahora nos encargaremos de instalar
subversion, para esto, lo descargaremos de su
página. La versión vigente en el momento de hacer este post es la
1.4.6, por lo que bajaremos los siguientes archivos:
subversion-1.4.6.tar.bz2 y
subversion-deps-1.4.6.tar.bz2.
La instalación de
subversion la haré en el directorio
/usr/local.
Copiaremos los archivos de
subversion que descargamos al directorio
/usr/local/src.
root@darthmaul:~# cp /ruta/de/descarga/subversion-1.4.6.tar.bz2 /usr/local/src/
root@darthmaul:~# cp /ruta/de/descarga/subversion-deps-1.4.6.tar.bz2 /usr/local/src/
Hecho lo anterior, nos moveremos al directorio
/usr/local/src y descomprimiremos los 2 archivos.
root@darthmaul:~# cd /usr/local/src/
root@darthmaul:~# tar -jxvf subversion-1.4.6.tar.bz2
root@darthmaul:~# tar -jxvf subversion-deps-1.4.6.tar.bz2
Esto creará un directorio llamado
subversion-1.4.6 al cual ingresaremos.
root@darthmaul:~# cd subversion-1.4.6
Ahora ya tenemos todo listo para compilar el paquete de
subversion, el cual lo vamos a instalar en el directorio
/usr/local/subversion. Vamos a suponer, que si siguieron las
instrucciones para instalar apache de este post.
Apache deberá estar instalado en
/usr/local/apache y abremos creado el usuario
apache y el grupo
apache.
root@darthmaul:~# ./configure --prefix=/usr/local/subversion --with-apxs=/usr/local/apache/bin/apxs --with-apr=/usr/local/apache --with-apr-util=/usr/local/apache --with-ssl
El comando
configure nos mandará un
WARNING el cual dice lo siguiente:
You don't seem to have Berkeley DB version 4.0.14 or newer
installed and linked to APR-UTIL. We have created Makefiles which
will build without the Berkeley DB back-end; your repositories will
use FSFS as the default back-end. You can find the latest version of
Berkeley DB here:
http://www.sleepycat.com/download/index.shtml
Éste nos dice que no tenemos instalada la base de datos de
Berkeley, pero no la vamos a instalar, en su lugar vamos a usar la base de datos
fsfs.
Continuaremos con la instalación ejecutando los siguientes comandos:
root@darthmaul:~# make
root@darthmaul:~# make install
Si desean, pueden agregar las siguientes líneas en el archivo
/etc/profile para que los comandos de
subversion funcionen sin tener que especificar su ruta completa.
export SVN=/usr/local/subversion
export PATH=$PATH:$SVN/bin
Para que funcione este cambio, deberán reiniciar su ambiente gráfico o su máquina.
Con esto tenemos instalado
subversion. Ahora configuraremos un repositorio para que se pueda acceder por medio de nuestro servidor web.
Crearemos el repositorio especificando el tipo de base de datos
fsfs en el directorio
/usr/local/repositorio y le daremos permisos de escritura al usuario
apache para que pueda escribir sobre el repositorio:
root@darthmaul:~# mkdir /usr/local/repositorio
root@darthmaul:~# /usr/local/subversion/bin/svnadmin create --fs-type=fsfs /usr/local/repositorio/
root@darthmaul:~# chown -R apache.apache /usr/local/repositorio/
Creado el repositorio, procederemos a crear una cuenta (
javoaxian) para acceder a éste. Esto se hace usando el comando
htpasswd que se encuentra en el directorio
bin donde fue instalado
apache y crearemos el archivo que guarda los passwords y lo pondremos en el directorio
/usr/local/apache/svn.
root@darthmaul:~# mkdir /usr/local/apache/svn
root@darthmaul:~# /usr/local/apache/bin/htpasswd -cm /usr/local/apache/svn/svn_auth.txt javoaxian
La opción
"c" indica que deberá crear el archivo de las contraseña, cabe destacar que si van a agregar otro usuario omitan esta opción ya que borrará el archivo ya existente.
La opción
"m" indica que deberá generar las contraseña con el algoritmo
MD5.
Se nos pedirá el password del usuario y que lo volvamos a ingresar:
New password:
Re-type new password:
Adding password for user javoaxian
Por seguiridad cambiaremos el dueño al directorio
/usr/local/apache/svn y le cambiaremos los permisos:
root@darthmaul:~# chown -R apache.apache /usr/local/apache/svn/
root@darthmaul:~# chmod 700 /usr/local/apache/svn/
Ahora agregaremos las instrucciones necesarias en
apache para tener acceso al repositorio, para ello, deberemos editar el archivo
httpd.conf que se encuentra en el directorio
conf donde se instaló
apache, que en este caso está en
/usr/local/apache/conf/httpd.conf.
Primero buscaremos la línea siguiente del archivo:
Listen 80
Y agregaremos la línea
Listen 443 debajo de la que encontramos para que quede de la siguiente forma:
Listen 80
Listen 443
Ahora colocaremos las siguiente líneas al final del archivo:
NameVirtualHost *:443
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /usr/local/apache/conf/ssl.crt/server.crt
SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/server.key
<Location /repositorio>
DAV svn
SVNPath /usr/local/repositorio
AuthType Basic
AuthName "Repositorio de Subversion"
AuthUserFile /usr/local/apache/svn/svn_auth.txt
Require valid-user
SSLRequireSSL
</Location>
</VirtualHost>
Como podemos observar, estamos creando un Host virtual para el puerto 443.
SSLCertificateFile: Ruta donde colocamos el archivo
server.crt cuando creamos el certificado.
SSLCertificateKeyFile: Ruta donde colocamos el archivo
server.key cuando creamos el certificado.
Location: Alias que usaremos para dirigirnos al repositorio, en este caso sería
https://localhost/repositorio.
SVNPath: Ruta del repositorio.
AuthUserFile: Ruta del archivo de contraseñas que creamos.
Ahora deberemos reiniciar nuestro servidor de
apache.
root@darthmaul:~# /usr/local/apache/bin/apachectl stop
root@darthmaul:~# /usr/local/apache/bin/apachectl start
Podemos entrar con nuestro navegador a la dirección
https://localhost/repositorio/, nos aparecerá una pantalla para aceptar el certificado y una vez que aceptemos, nos mostrará una pantalla donde se nos pide el user name y password del usuario que creamos con el comando
htpasswd, y una vez introducidos estos datos, nos mostrará el contenido del repositorio.
Ahora si queremos permitir el acceso a más de un usuario al repositorio, deberemos crear nuestros nuevos usuarios de la siguiente manera:
root@darthmaul:~# /usr/local/apache/bin/htpasswd -m /usr/local/apache/svn/svn_auth.txt javoaxian2
Crearemos otro archivo que se encargará de llevar el control de acceso a los usuario. Se les puede dar permisos de lectura o lectura-escritura, además que pueden acomodarse en grupos.
Este es un ejemplo del nuevo archivo:
[groups]
javoaxianteam = javoaxian, javoaxian2
pruebas = prueba1, prueba2
[/]
@javoaxianteam = rw
@pruebas = r
javoaxian3 = r
[/trunk]
javoaxian4 = r
Este archivo nos indica que tenemos dos grupos:
javoaxianteam con los usuario
javoaxian y
javoaxian2 y el grupo
pruebas con los usuarios
prueba1 y
prueba2.
También nos indica que el grupo
javoaxianteam tiene permisos de lectura-escritura sobre el directorio
"/" del repositorio, el grupo
pruebas y el usuario
javoaxian3 sólo tienen permisos de lectura para el repositorio.
Por último, el usuario javoaxian4 tiene permisos de lectura dentro del directorio
/trunk del repositorio.
Este nuevo archivo lo crearé en
/usr/local/apache/svn/svn_control_acceso.txt.
Una vez que se tiene el archivo con la configuración que deseamos, deberemos configurar nuevamente
apache.
Deberemos editar el archivo /usr/local/apache/conf/httpd.conf y poner la línea:
AuthzSVNAccessFile /usr/local/apache/svn/svn_control_acceso.txt
Debajo de la línea:
Require valid-user
Por lo que nos quedaría de la siguiente manera esta sección de la configuración de
apache.
DAV svn
SVNPath /usr/local/repositorio
AuthType Basic
AuthName "Repositorio de Subversion"
AuthUserFile /usr/local/apache/svn/svn_auth.txt
Require valid-user
AuthzSVNAccessFile /usr/local/apache/svn/svn_control_acceso.txt
SSLRequireSSL
Y nuevamente deberemos reiniciar nuestro
apache.
root@darthmaul:~# /usr/local/apache/bin/apachectl stop
root@darthmaul:~# /usr/local/apache/bin/apachectl start
Pueden acceder al repositorio mediante su navegador a la dirección
https://localhost/repositorio/ e ingresar los datos de acceso de su usuario.
Espero que esto les pueda ser de utilidad.
Saludos.