Servidor Subversion + https en OS X Lion

Vamos a configurar un servidor de versiones Subversion al que accederemos via https (secured http) en un Mac con OS X Lion (10.7).

En primera instancia hemos de descargar la ultima versión (1.6.17) de Subversion de su web oficial. Luego instala el paquete que descarges y por ultimo has de editar el archivo .bash_profile añadiendo la dirección de los binarios de subversión: /opt/subversion/bin al path, esto debe ser antes ya que si no siembre tomara el cliente que ya trae mac. A continuación mi .bash_profile

# aliases.

alias ls="ls -G"
alias ll="ls -Gl"
alias la="ls -Ga"
alias lp="ls -Gp"

alias kp="ps auxwww"

alias grep="grep --color"

# Java Development stuff
export JAVA_HOME=/Library/Java/Home
export JAVA_OPTS=" -Xms128m -Xmx612m"
export CATALINA_HOME=/Users/victor/local/apache/apache-tomcat-6.0.26
export M3_HOME=apache-maven-3.0.3
export M3=$M3_HOME/bin
export ANT_HOME=/Users/victor/local/apache/apache-ant-1.8.1
export PATH=$M2:$ANT_HOME/bin:$PATH:$HOME/bin

#svn stuff
export  SVN_EDITOR=vi
export SVN_HOME=/opt/subversion
export PATH=$SVN_HOME/bin:$PATH
# end

# para el prompt de modo multilinea
#PS1='\u@\h:$PWD
#\$ '
PS1="\n\[\e[0;36m\]┌─[\[\e[0m\]\[\e[1;31m\]\u\[\e[0m\]\[\e[1;36m\]@\[\e[0m\]\[\e[1;31m\]\h\[\e[0m\]\[\e[0;36m\]]─[\[\e[0m\]\[\e[1;34m\]\w\[\e[0m\]\[\e[0;36m\]]\[\e[0;36m\]─[\[\e[0m\]\[\e[0;35m\]\d - \!\[\e[0m\]\[\e[0;36m\]]\[\e[0m\]\n\[\e[0;36m\]└─›$ \[\e[0m\]"

Ahora vamos a crear un nuevo repositorio. en una terminal vamos ejecutar los siguiente:


macbookpro:~ linuxgros777$ cd /usr/local/
macbookpro:~ linuxgros777$ mkdir repositorio
macbookpro:~ linuxgros777$ cd repositorio/
macbookpro:~ linuxgros777$ svnadmin create devrepo
macbookpro:~ linuxgros777$ ls -la devrepo
total 16
drwxr-xr-x 8 linuxgros777 linuxgros777 272 Oct 15 14:36 .
drwxr-xrwx 5 linuxgros777 linuxgros777 170 Oct 15 14:36 ..
-rw-r--r-- 1 linuxgros777 linuxgros777 229 Oct 15 14:36 README.txt
drwxr-xr-x 5 linuxgros777 linuxgros777 170 Oct 15 14:36 conf
drwxr-xr-x 15 linuxgros777 linuxgros777 510 Oct 15 14:36 db
-r--r--r-- 1 linuxgros777 linuxgros777 2 Oct 15 14:36 format
drwxr-xr-x 11 linuxgros777 linuxgros777 374 Oct 15 14:36 hooks
drwxr-xr-x 4 linuxgros777 linuxgros777 136 Oct 15 14:36 locks

Probemos nuestra repositorio svn:


macbookpro:~ linuxgros777$ cd /tmp
macbookpro:~ linuxgros777$ svn co file:///usr/local/devrepo
Checked out revision 0.

La configuración de Apache: Esta se encuentra en /etc/apache2, y ahí mismo se encuentra un subdirectorio llamado extra, en el cual residen los archivos de configuración que se llaman desde la configuración general httpd.conf. Entonces vamos a crear un archivo de configuración para subversión y vamos a editarlo:


macbookpro:~ linuxgros777$ cd /etc/apache2/extra
macbookpro:~ linuxgros777$ ls
httpd-autoindex.conf httpd-manual.conf
httpd-dav.conf httpd-mpm.conf
httpd-default.conf httpd-multilang-errordoc.conf httpd-userdir.conf
httpd-info.conf httpd-ssl.conf httpd-vhosts.conf
httpd-languages.conf
macbookpro:~ linuxgros777$ nano httpd-subversion.conf

y en el colocáramos lo siguiente:


#apache subversion config file
LoadModule dav_svn_module libexec/apache2/mod_dav_svn.so
LoadModule authz_svn_module libexec/apache2/mod_authz_svn.so
<Location /devrepo>
DAV svn
SVNPath /usr/local/svnrepos/devrep
</Location>

y en el archivo de configuración principal, httpd.conf agregamos lo siguiente:


# Subversion
Include /private/etc/apache2/extra/httpd-subversion.conf

Vamos con los permisos. Tenemos que darle permisos a apache para que pueda ver y actualizar el repositorio svn, para esto haremos suyo el repositorio que creamos

macbookpro:~ linuxgros777$ cd /usr/local/
macbookpro:~ linuxgros777$ sudo chown -R www:www svnrepos

Probemos nuestra nueva configuración.
Para probar nuestro repositorio vía web, debemos lanzar las Preferencias del Sistema, luego accedemos a Compartir y activamos Compartir Web, si el indicador se pone verde pues ya tenemos un paso ganado. ahora vamos a probar desde un navegador web, safari esta bien, y utilizamos la dirección: http://localhost/devrepo, y deberíamos obtener la siguiente respuesta:

si deseamos probar conectividad desde el cliente subversion tecleamos lo liguiente en Terminal:

macbookpro:~ linuxgros777$ svn info http://localhost/devrepo
Path: devrepo
URL: http://localhost/devrepo
Repository Root: http://localhost/devrepo
Repository UUID: b8a23ef4-c325-46c0-aa83-a4a8a235acd3
Revision: 0
Node Kind: directory
Last Changed Rev: 0
Last Changed Date: 2011-10-15 14:36:49 -0600 (Sat, 15 Oct 2011)

Configurando acceso seguro:

Hasta ahora hemos configurado nuestro servidor de versiones Subversion, y el repectivo acceso desde la red, sin embargo no tenemos ningún tipo de seguridad ni autenticación.

Existen varias formas de autenticarnos, la más básica en  la cual proporcionamos usuario y password pero este viaja sin encriptación alguna por la red; por Digest, en la cual existe una pequeña encriptación y la más segura SSL. Para las primeras dos basta con modificar el archivo de configuración de svn, para SSL debemos ademas generar el certificado digital. Si no tenemos necesidad de encriptar (estamos en una rede segura local) solo realizamos lo siguiente:

Configuración básica

Primero creamos nuestro usuario y contraseña


macbookpro:~ linuxgros777$ sudo htpasswd -cm /etc/svn-auth-file linuxgros
Password:
New password:
Re-type new password:
Adding password for user linuxgros

en el comando anterior el modificador c solo se utililza la primera vez que es ejecutado, ósea cuando el archivo no existe. Ahora modificamos nuestro archivo de configuración de Subversion para apache


#apache subversion config file
LoadModule dav_svn_module libexec/apache2/mod_dav_svn.so
LoadModule authz_svn_module libexec/apache2/mod_authz_svn.so
<Location /devrepo>
DAV svn
SVNPath /usr/local/svnrepos/devrepo
AuthType Basic
AuthName "Lerning Development svn repository"
AuthUserFile /etc/svn-auth-file
Require valid-user
</Location>

luego reincidamos el servidor web en las Preferencias del sistema – Compartir, desmarcamos Compartir Web y luego lo volvemos a marcar, cuando queramos acceder al sition http://localhost/devrepo nos pedirá usuario y password.

Configuración para utilizar Digest

para activar Digest únicamente debemos modificar unas lineas y agregar una linea:


#apache subversion config file
LoadModule dav_svn_module libexec/apache2/mod_dav_svn.so
LoadModule authz_svn_module libexec/apache2/mod_authz_svn.so
<Location /devrepo>
DAV svn
SVNPath /usr/local/svnrepos/devrepo
AuthType Digest
AuthName "Lerning Development svn repository"
AuthDigestDomain /devrepo/
AuthUserFile /etc/svn-auth.htdigest
Require valid-user
</Location>

Además debemos crear un nuevo archivo de autenticación ya que Digest no utiliza la misma forma de autenticar, para esto haremos:


macbookpro:~ linuxgros777$ htdigest -c /etc/svn-auth.htdigest "Lerning Development svn repository" linuxgros
Adding password for linuxgros in realm Lerning Development svn repository.
New password:
Re-type new password:

Utilizando SSL

Ahora para activar SSL se requiere más trabajo, y a menos que se piense comprar un certificado, debemos elaborar uno nosotros mismos, a continuación los pasos para realizar esto (todo es realizado en la Terminal):
1. Generamos el Certificate Authority (CA)


macbookpro:~ linuxgros777$ mkdir cert
macbookpro:~ linuxgros777$cd cert
macbookpro:~ linuxgros777$ sudo openssl genrsa -des3 -out ca.key 4096
enter password
macbookpro:~ linuxgros777$ sudo openssl req -new -x509 -days 365 -key ca.key -out ca.crt
(completamos los datos que nos requiere e ingresamos password que le asignamos a la llave cuando nos lo solicite.)

2. Ahora generamos la llave del servidor


macbookpro:~ linuxgros777$ sudo openssl genrsa -des3 -out server.key 4096
Enter pass phrase for server.key: ****

3. Luego creamos e certificado de petición de firma (CSR)


macbookpro:~ linuxgros777$ sudo openssl req -new -key server.key -out server.csr
(completamos los datos que nos requiere.)

Algo muy importante es que el CN para el servidor debe hacer match con el nombre de este en el DNS

4. Ahora firmamos el CSR con el CA


macbookpro:~ linuxgros777$ sudo openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt
Signature ok
subject=/C=US/ST=State/L=City/O=company/CN=server
Getting CA Private Key
Enter pass phrase for ca.key: *****

5. Creamos una versión insegura de la llave, esto es necesario para que apache no pregunte por el password cada vez que es iniciado.


macbookpro:~ linuxgros777$ sudo openssl rsa -in server.key -out server.key.insecure
macbookpro:~ linuxgros777$ sudo mv server.key server.key.secure
macbookpro:~ linuxgros777$ sudo mv server.key.insecure server.key
macbookpro:~ linuxgros777$ cp server.key server.crt /etc/apache2

6. ahora vamos a editar el http.conf, en cual descomentamos la directiva que incluye la configuración ssl y la inclusión del modulo ssl, buscamos:


# Secure (SSL/TLS) connections
#Include /private/etc/apache2/extra/httpd-ssl.conf

y debe verse así:


# Secure (SSL/TLS) connections
Include /private/etc/apache2/extra/httpd-ssl.conf

luego buscamos:

#LoadModule ssl_module libexec/apache2/mod_ssl.so

y debe verse así

LoadModule ssl_module libexec/apache2/mod_ssl.so

7. Por ultimo debemos modíficar el archivo de configuración de Subversion para apache en /etc/apache2/extension/httpd-subversion.conf y debe verse como sigue:


#apache subversion config file
LoadModule dav_svn_module libexec/apache2/mod_dav_svn.so
LoadModule authz_svn_module libexec/apache2/mod_authz_svn.so
<Location /devrepo>
DAV svn
SVNPath /usr/local/svnrepos/devrepo
SSLRequireSSL
AuthType Basic
AuthName "Lerning Development svn repository"
AuthUserFile /etc/svn-auth-file
Require valid-user
</Location>

Finalmente solo debemos reiniciar nuestro servidor web y probar, lo cual podemos hacer desde un navegador web.

Referencias:

subversion server on mac os x lion with apache

Installing a Subversion server on Leopard

SVN Book – http, the Apache HTTP Server

~ por victor en octubre 15, 2011.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: