Este pequeño artículo trata de cubrir precisamente este problema, y aunque el material expuesto es fiel reflejo de los que se encuentran en Internet, he tratado de complementarlo con un ejemplo concreto, más los correspondientes comandos Unix/Linux que facilitan la tarea.
Nota: Dependiendo de la distribución de Linux que usemos algunos archivos de configuración pueden variar. En mi caso particular la distribución que uso es Mandrake Linux 9.1
Habilitando el servicio para tener acceso vía pserver
CVS prosee principalmente cuatro métodos de acceso remoto:
- rsh: En la cual la seguridad en nula. Pero donde no es necesario modificar el archivo inetd.conf (o xinetd.conf dependiendo de la distribución de Linux)
- ssh: Aquí el tema de la seguridad es mucho mayor, pero obliga a que los usuarios del repositorio tengan una cuenta local en el sistema y aunque tampoco debemos configurar el archivo inetd.conf, lamentablemente posee el inconveniente de tener que ingresar nuestra password cada vez que operamos sobre nuestros módulos, a menos claro que usemos una herramienta visual que guarde nuestra password al menos durante la sesión. (Recomiendo TortoiseCVS para Windows y Cervisia para Linux)
- pserver: Este tipo de acceso permite un acceso genérico al repositorio sin necesidad de crear una cuenta de sistema por cada usuario. Mejor en seguridad que rsh, pero más débil que ssh. Sin embargo, se debe configurar el archivo inetd.conf.
- Kerberos: Bueno, no tengo mucho que decir al respecto, sé que es muy superior en seguridad, pero la verdad es que hasta ahora nunca he visto el tema de Kerberos, ni siquiera en forma remota.
El caso inetd.conf
Este archivo se encuentra en /etc en la mayoria de los sistemas Linux, y las líneas que debemos agregar son las siguientes:
cvspserver stream tcp nowait root /usr/sbin/tcpd /usr/bin/cvs -b /usr/bin -f --allow-root=/var/lib/cvs pserver
Todo en una sóla línea y donde /var/lib/cvs es el directorio donde crearemos nuestro repositorio. En algunos casos es necesario modificar el archivo /etc/hosts.allow y agregar la línea cvs: ALL para garantizar la conexión.
El caso xinetd.conf
En realidad el archivo a configurar en la distribución que uso es /etc/xinetd.d/cvs. En donde sólo se debe cambiar el valor del parámetro disable a no.
Adicionalmente se debe editar /etc/cvs/cvs.conf y modificar el contenido de la variable CVS_REPOS por el directorio en donde vamos a crear nuestro repositorio, esto es: CVS_REPOS="/var/lib/cvs" .
Una vez hecho esto ya estamos en condiciones de crear el repositorio como tal, pero no sin antes crear un par de cuentas para darle un poco más de seguridad al tema.
Y si no existe el archivo /etc/xinetd.d/cvs?
Bueno, en este caso debemos crearlo (tal como me pasó con un RedHat9 recien instalado, previo rpm -ivh cvs*). Aquí las lineas que debe tener este archivo son:
# default: on
#
# service cvspserver
#
service cvspserver
{
disable = no
id = cvspserver
env = HOME=/var/lib/cvs
socket_type = stream
protocol = tcp
port = 2401
wait = no
user = root
passenv = PATH
server = /usr/bin/cvs
server_args = -f --allow-root=/var/lib/cvs pserver
}
Y después de ello, reiniciar el servicio xinetd: /etc/init.d/xinetd restart
Creando las cuentas de usuarios y administración.
Con el fin de designar a un único administrador de nuestro repositorio, el cual tendrá permisos para crear nuevos módulos ( cvs import ....) y restringir al resto de los usuarios, se deben crear cuentas y grupos asociados. En mi caso:
- Crear el grupo cvs ( grpadd cvs )
- Crear la cuenta cvsadm ( adduser cvsadm ). Podemos crear o usar otra cuenta si así lo queremos.
- Agregar el administrador del repositorio al grupo cvs ( usermod -G cvsadm )
- Agregar a todos los usuarios que estime necesario al grupo cvs ( usermod -G username )
Creando el directorio para el repositorio.
Una vez creados los grupos y cuentas correspondientes creamos el directorio en donde residirá nuestro repositorio: "mkdir /var/lib/cvs", en caso de usar otro directorio distinto debemos modificar los correpondientes archivos inetd.conf o xinetd.conf según corresponda.
Antes de inicializar el repositorio debemos volver al tema de la seguridad, ejecutando los siguientes comandos (situados ya en el directorio /var/lib):
chmod o-rx cvs: Con esto eliminamos los accesos de terceros a nuestro repositorio.
chown cvsadm:cvs cvs: Aquí cambiamos el dueño y grupo del directorio.
chmod g+s: Con esto nos aseguramos que todos los archivos creados por los usuarios (en este caso el administrador) queden a nombre del grupo cvs.
Creando el repositorio.
Por fin... ahora ya estamos en condiciones de crear nuestro repositorio, asegurando que los accesos y permisos serán los correctos.
Este tema es la principal causa de dolores de cabeza al momento de crear un CVS, sobre todo para aquellos usuarios inexpertos en Unix/Linux como yo, y que lamentablemente la documentación CVS no nos ayuda mucho.
Bueno... una vez hechos los descargos... la creación del repositorio:
export CVSROOT=/var/lib/cvs
cvs init
Con estas dos últimas instrucciones hemos creado nuestro repositorio, pero aún nos falta crear/agregar nuestros módulos:
export CVSROOT=:pserver:cvsadm@localhost:/var/lib/cvs
cambiar al directorio que queremos agregar como nuevo módulo, ejemplo: cd $HOME/cvstest
cvs login
ingresar la password, obvio!
cvs import nombre-módulo etiqueta-vendedor etiqueta-versión
Donde:
nombre-módulo: es el nombre que le queremos dar al nuevo módulo.
etiqueta-vendedor: es el nombre que usa CVS para etiquetar la rama que crea con la importación. Puede ser una cadena cualquiera de letras, números y subrayados.
etiqueta-versión: es el nombre que usa CVS para etiquetar la versión concreta que se crea con esta importación.Puede ser una cadena cualquiera de letras, números y subrayados.
Ahora a obtener copias de trabajo (cvs checkout), actualizar cambios (cvs update) y a subir las modificaciones (cvs commit)...
Basado en el documento creado por Ismael Olea y Ignacio Arenaza. (ver documento original en html o pdf)
2 comentarios:
Excelente articulo, ahora una consulta, no soy experto en linux, como instalo el cvs? Gracias!!!!
A estas alturas, este post es bastante viejo, y dependiendo de la distribución de Linux que uses dependerá el cómo agregues nuevos paquetes, en RedHat, Fedora y sucedáneos debes usar RMP (man rpm) y las nuevas interfáces gráficas para administrar paquetes, en otras distribuciones del tipo Debina, deberás usar apt (man apt)
Publicar un comentario