¿Porque?
El usar conexiones SSH para manejar repositorios de subversion, nos da seguridad al manejar la capa cifrada del SSH, ademas de que podremos hacer uso de los usuarios en el S.O. para el acceso a los repositorios en lugar de estar creando usuarios y contrasenias individuales solo para acceder a los repos.
Como se hace
- Instalar subversion
yum install subverison - Crear un grupo de usuarios para subversion
groupadd -g 800 svn - Crear el directorio donde estaran los repositorios
mkdir -p /usr/local/svn/repos - Dar pertenencia de grupo al directorio para que los usuarios puedan escribir en el
chown -R :svn /usr/local/svn
chmod -R 775 /usr/local/svn/repos - Crear un repositorio con svnadmin
svnadmin create /usr/local/svn/repos/mi_repo - Agregar al grupo a los usuarios que modificaran los repos
usermod -G svn fulanito - Crear un wrapper para evitar problemas de permisos al acceder por ssh.
Cuando se esta ejecutando el servidor de subversion y es accedido por ssh, el demonio crea una instancia de si mismo con nuestro propio usuario (por ejemplo svnserve ejecutado por fulanito) y por default los permisos de archivos creados seran de solo lectura y escritura para el usuario que los creo. Para evitar esto hay que colocar un script que sirva de wrapper, como el siguiente:
#!/bin/sh
# permite escritura al grupo
umask 002
# invocamos a svnserve, pasando como argumentos el directorio de los repos
exec /usr/bin/svnserve "$@" -r /usr/local/svn/repos - Guardamos este script como /usr/local/bin/svn
- Lanzamos svnserve como demonio
/usr/bin/svnserve -d -r /usr/local/svn/repos - Ahora los clientes se podran conectar a servidor/mi_repo
svn list svn+ssh://servidor/mi_repo
Troubleshooting
- Revisar que la creacion del repositorio y el directorio root de svnserve sea coherente, por ejemplo si se uso como root directory /usr/local/svn/ y se hizo svnadmin create /usr/local/svn/puppet entonces los clientes haran el checkout con svn co svn+ssh://noc2/puppet