<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V4.5-Based Extension//EN" "../../../share/xml/freebsd45.dtd"> <!-- The FreeBSD Spanish Documentation Project $FreeBSD$ $FreeBSDes$ --> <article lang='es'> <articleinfo> <title>Configurar un repositorio CVS - a la manera de FreeBSD</title> <author> <firstname>Stijn</firstname> <surname>Hoop</surname> <affiliation> <address><email>stijn@win.tue.nl</email></address> </affiliation> </author> <copyright> <year>2001</year> <year>2002</year> <year>2003</year> <holder role="mailto:stijn@win.tue.nl">Stijn Hoop</holder> </copyright> <pubdate>$FreeBSD$</pubdate> <releaseinfo>$FreeBSD$</releaseinfo> <legalnotice id="trademarks" role="trademarks"> &tm-attrib.freebsd; &tm-attrib.general; </legalnotice> <abstract> <para>Este artículo describe los pasos que dí para configurar un repositorio CVS con los mismos <quote>scripts</quote> usados por el proyecto &os; en su configuración. Tienen algunas ventajas frente a las demás configuraciones de CVS, por ejemplo una gestión más eficaz de los accesos a los árboles de código y la creación de mensajes de correo electrónico por cada commit.</para> &trans.es.jcamou; </abstract> </articleinfo> <sect1> <title>Introducción</title> <para>Muchos de los proyectos de software de código abierto usan <application>CVS</application> como su sistema de gestión de código. Aunque <application> CVS</application> es bastante bueno para esto tiene sus inconvenientes y sus flaquezas. Un ejemplo de esto es el compartir un árbol de código con otros desarrolladores, lo cual puede convertirse rápidamente en una pesadilla para la administración del sistema, especialmente si se desea proteger del acceso indiscriminado ciertas partes del árbol.</para> <para>&os; es uno de los proyectos que usan <application> CVS</application>. También cuenta con una gran cantidad de desarrolladores alrededor del mundo. Ellos mismos desarrollaron algunos <quote>scripts</quote> para hacer del manejo del repositorio una tarea más fácil. Recientemente estos <quote>scripts</quote> fueron revisados por &a.joe; para facilitar su uso en otros proyectos. Este artículo muestra uno de los métodos para usar estos nuevos <quote>scripts</quote>.</para> <para>Si quiere sacar verdadero partido de la información que se le brinda en este artículo debe tener familiaridad con métodos básicos para realizar operaciones <application>CVS</application>.</para> </sect1> <sect1> <title>Comienzo de la configuración</title> <warning> <para>Es preferible que realice estos procedimientos en un repositorio de prueba vacío y podamos asi asegurarnos de que entiende todas las consecuencias. Como siempre, asegúrese de tener respaldos recientes.</para> </warning> <sect2> <title>Inicio del repositorio</title> <para>Lo primero a hacer al configurar un nuevo repositorio es decirle a <application>CVS</application> que lo inicie: <screen>&prompt.user; <userinput>cvs -d <replaceable>ruta-al-repositorio </replaceable> init</userinput></screen> Esto le indica a <application>CVS</application> que cree el directorio administrativo <filename>CVSROOT</filename>, donde se albergarán todas las configuraciones.</para> </sect2> <sect2> <title>El grupo del repositorio</title> <para>Ahora vamos a crear al grupo dueño del repositorio. Todos los <quote>committers</quote> necesitan estar en este grupo, para de esta manera poder escribir en el repositorio. Asumiremos el grupo <literal>ncvs</literal> por defecto de &os;. <screen>&prompt.root; <userinput>pw groupadd <replaceable>ncvs </replaceable></userinput></screen> A continuación, es necesario usar &man.chown.8; en el directorio para ajustar los permisos al grupo reción agregado: <screen>&prompt.root; <userinput>chown -R :<replaceable>ncvs </replaceable> <replaceable>path-a-su-repositorio</replaceable></userinput></screen> Esto asegura que nadie podrá escribir en el repositorio sin los permisos de grupo adecuados.</para> </sect2> <sect2> <title>Obtención del código</title> <para>Ahora es necesario obtener el directorio <filename> CVSROOT</filename> del repositorio de &os;. Puede hacerse muy fácilmente desde una réplica del CVS anónimo de &os;. Para más información <!-- consulte <ulink url="&url.books.handbook;/anoncvs.html">el capítulo --> consulte <ulink url="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/anoncvs.html">el capítulo correspondiente del Handbook</ulink>. Asumiremos que el código está en <filename>CVSROOT-freebsd</filename> en el directorio actual.</para> </sect2> <sect2> <title>Copia de los <quote>scripts</quote> de &os;</title> <para>El siguiente paso consiste en copiar el código de &os; sito en <filename>CVSROOT</filename> a nuestro repositorio. Si está familiarizado con <application>CVS </application>, puede pensar que se puede realizar importando los <quote>scripts</quote>, lo que debería permitirle sincronizar posteriores versiones muy fácilmente. No es así, <application>CVS</application> tiene una deficiencia en este aspecto: al intentar importar código al directorio <filename>CVSROOT</filename> no se actualizarán los ficheros administrativos necesarios. Para hacer que esto suceda es necesario ejecutar <quote>checkin</quote> en cada uno de ellos después de importarlos, perdiendo asi el valor de <literal>cvs import</literal>. En consecuencia el método recomendado para este cometido es sencillamente copiar los <quote>scripts</quote>.</para> <para>No importa en realidad si no encuentra demasiado sentido al párrafo anterior, el resultado será el mismo. Simplemente haga <quote>check out</quote> de su <filename>CVSROOT </filename> y copie los ficheros de &os; a su copia local: <screen>&prompt.user; <userinput>cvs -d <replaceable> ruta-a-su-repositorio </replaceable> checkout CVSROOT</userinput> &prompt.user; <userinput>cd CVSROOT</userinput> &prompt.user; <userinput>cp ../CVSROOT-freebsd/* .</userinput> &prompt.user; <userinput>cvs add *</userinput></screen> Tenga en cuenta que probablemente recibirá advertencias acerca de directorios no copiados; es normal que suceda pero no debe usted preocuparse porque éstos no son necesarios.</para> </sect2> <sect2> <title>Los <quote>scripts</quote></title> <para>Ahora ya cuenta con una copia exacta en su directorio de trabajo de los <quote>scripts</quote> que &os; usa en la gestión de su repositorio. He aquí una descripción del cometido de cada uno de ellos.</para> <itemizedlist> <listitem> <para><filename>access</filename> - este fichero no se usa en la configuración por defecto. Se usa en <link linkend="freebsdspecific">la configuración del proyecto &os;</link>, el cual controla el acceso al repositorio. Puede borrar este fichero si no quiere usarlo en su configuración.</para> </listitem> <listitem> <para><filename>avail</filename> - este fichero controla el acceso al repositorio. Dentro del mismo es posible especificar grupos de personas autorizadas para el acceso al repositorio, asi como commits no autorizados en uno o más directorios dados. Deberá editarlo para que contenga los grupos y directorios que se usarán en su repositorio.</para> </listitem> <listitem> <para><filename>cfg.pm</filename> - este fichero se encarga de analizar su configuración y provee la configuración por defecto. <emphasis>No</emphasis> deberá usted cambiar nada en este fichero. Si va a hacer cambios su configuración deberán ir en <filename>cfg_local.pm</filename>. </para> </listitem> <listitem> <para><filename>cfg_local.pm</filename> - contiene todos los parámetros configurables del sistema. Deberá configurar todo tipo de cosas en este fichero, tales como el envío por correo electrónico de los mensajes de commit, desde qué <quote>hosts</quote> pueden hacer commits los usuarios, etc. Más información más adelante en el texto.</para> </listitem> <listitem> <para><filename>checkoutlist</filename> - este fichero lista todos los ficheros bajo control de <application> CVS</application> en este directorio, aparte de aquellos estándar creados por <literal>cvs init</literal>. Deberá editar éste para borrar algunos ficheros específicos del proyecto &os;.</para> </listitem> <listitem> <para><filename>commit_prep.pl</filename> - este <quote> script</quote> se encarga de realizar algunas comprobaciones previas a cada commit según las modificaciones hechas o o no en su versión de <filename>cfg_local.pm</filename>. No debería modificar este <quote>script</quote>.</para> </listitem> <listitem> <para><filename>commitcheck</filename> - este <quote>script</quote> es invocado directamente por <application>CVS</application>. En primer lugar comprueba que la <quote>committer</quote> tenga acceso a una parte específica del árbol usando <filename>cvs_acls.pl</filename>, para después ejecutar <filename>commit_prep.pl</filename>, mediante el que efectuará las comprobaciones de rigor previas a cada commit. Si todo ha ido bien <application>CVS</application> permitirá que el commit tenga lugar. No debería tocar este fichero.</para> </listitem> <listitem> <para><filename>commitinfo</filename> - este fichero es usado por <application>CVS</application> para determinar qué <quote>script</quote> se deberá ejecutar antes de hacer el commit, en este caso <filename>commitcheck</filename>. Tampoco debería tener que modificar este fichero.</para> </listitem> <listitem> <para><filename>config</filename> - el fichero de configuración del repositorio. Debería editarlo si es necesario aunque la mayoría de los administradores lo dejan tal y como viene por defecto. Dispone de más información sobre las opciones que pueden declararse en él en el manual de <application>CVS</application>.</para> </listitem> <listitem> <para><filename>cvs_acls.pl</filename> - este <quote>script</quote> determina la identidad de los <quote>committers</quote>, así como si tiene permitido acceder al árbol. Está basado en el fichero <filename>avail</filename>. No debería tener que modificar este fichero.</para> </listitem> <listitem> <para><filename>cvsignore</filename> - este fichero especifica los ficheros que <application>CVS</application> no debe incluir en el repositorio. Puede editarlo a su gusto. Para más información sobre fichero consulte el manual de <application>CVS</application>. </para> </listitem> <listitem> <para><filename>cvswrappers</filename> - <application>CVS</application> usa este fichero para activar o desactivar la expansión de la expansión de palabras clave o si el fichero debe ser considerado binario. Este fichero puede editarse según necesidades. Para más información sobre este fichero consulte el manual de <application>CVS</application>. Tenga en cuenta que las opciones <literal>-t</literal> y <literal> -f</literal> no funcionan correctamente con <application> CVS</application> cliente/servidor.</para> </listitem> <listitem> <para><filename>edithook</filename> - este fichero ya no se usa, aunque se mantenga por razones históricas. Este fichero puede borrarse con total tranquilidad sin miedo de perjudicar la configuración.</para> </listitem> <listitem> <para><filename>editinfo</filename> - <application>CVS </application> usa este fichero en las sobreescrituras de edición. &os; no usa esta función ya que el análisis de mensajes de <quote>log</quote> se hace mediante <filename>verifymsg</filename> y <filename>logcheck</filename>. Esto se debe a que <filename>editinfo</filename> no funciona correctamente con commits remotos ni con aquellos que usan las opciones <literal>-m</literal> o <literal>-F</literal>. No debería tener que modificar este fichero.</para> </listitem> <listitem> <para><filename>exclude</filename> - este fichero lista expresiones regulares usadas por <filename>commit_prep.pl</filename> para determinar ficheros que no puedan contener cabeceras de revisión. En la configuración que se usa en &os; todos los ficheros bajo control de revisión necesitan tener lo que se llama una cabecera de revisión ($FreeBSD$). Todos los ficheros que aparezcan en alguna de las líneas de <filename>exclude</filename> no pasan por dicha revisión. Incluya en este fichero entradas para aquellos ficheros que no puedan tener una cabecera de revisión. Si va a instalar los <quote>scripts</quote> <filename>CVSROOT/</filename> es un firme candidato para figurar en este fichero.</para> </listitem> <listitem> <para><filename>log_accum.pl</filename> - este es el <quote>script</quote> encargado de obtener el mensaje de <quote>log</quote> que genera <filename>logcheck</filename> y añadirlo a un fichero de <quote>log</quote> en el repositorio para que pueda disponerse de respaldos en caso de necesidad. También gestiona el envío de un correo electrónico a la dirección que el administrador declare (en <filename>cfg_local.pm</filename>). <filename>loginfo </filename> se encarga de conectar <filename>log_accum.pl </filename> con <application>CVS</application>. No debería tener que modificar este fichero.</para> </listitem> <listitem> <para><filename>logcheck</filename> - este fichero revisa el mensaje de commit proporcionado por el <quote>committer</quote> e intenta esterilizarlo, valga la expresión. Este fichero conecta con <application>CVS</application> via <filename>verifymsg </filename>. Tampoco debería tener que modificar este fichero.</para> <note><para>Este <quote>script</quote> depende de un hack de <application> CVS</application> propio de &os;: esta versión lee el mensaje de <quote>log</quote> después de que este <quote>script</quote> lo haya modificado. La versión estándar de <application>CVS</application> no hace esto, lo que hace a <filename> logcheck</filename> incapaz de limpiar los mensajes de <quote>log</quote>, aunque es capaz de comprobar que esté sintácticamente correcto. <application>CVS</application> 1.11.2 puede configurarse para tener el mismo comportamiento que la versión de &os; activando <literal> RereadLogAfterVerify=always</literal> en el fichero <filename>config</filename>.</para></note> </listitem> <listitem> <para><filename>loginfo</filename> - este fichero es usado por <application>CVS</application> para controlar dónde se envía la información de <quote>log</quote>; aquí es donde <filename>log_accum.pl</filename> entra en escena. No debería tener que modificar este fichero. </para> </listitem> <listitem> <para><filename>modules</filename> - este fichero mantiene su significado tradicional en <application>CVS</application>. Deberá borrar los módulos propios de &os; de la versión que vaya a usar. Puede editarlo a su gusto. Tiene más información acerca de este fichero en el manual de <application>CVS</application>.</para> </listitem> <listitem> <para><filename>notify</filename> - <application>CVS</application> usa este fichero en caso de que alguien ponga un fichero en modo <quote>watch</quote>. No se usa en el repositorio de &os; y puede editarse cuanto se desee. Tiene más información acerca de este fichero en el manual de <application>CVS</application>.</para> </listitem> <listitem> <para><filename>options</filename> - este fichero se usa específicamente en la versión de <application>CVS </application> de &os;, así como en la versión de Debian. Contiene una palabra clave para expander cabeceras de revisión. Tendrá que modificar este fichero y escribir la misma palabra que haya declarado en <filename>cfg_local.pm</filename> (si es que quiere usar esa característica, claro está; el valor por defecto es FreeBSD)</para> </listitem> <listitem> <para><filename>rcsinfo</filename> - este fichero mapea directorios en el repositorio para aplicar una plantilla como <filename>rcstemplate</filename>. Por defecto &os; usa una plantilla para el repositorio. Es posible añadir otras plantillas si se estima conveniente.</para> </listitem> <listitem> <para><filename>tagcheck</filename> - este fichero controla el acceso a marcar <quote>tags</quote> (etiquetas) en el repositorio. La versión por defecto en &os; no admite etiquetas con nombre RELENG* debido al proceso de ingeniería de releases. Puede editar este fichero según sus necesidades.</para> </listitem> <listitem> <para><filename>taginfo</filename> - este fichero mapea operaciones de etiquetado en los directorios del repositorio, cosa necesaria en el funcionamiento habitual de <quote>scripts</quote> de control como <filename>tagcheck</filename>. No debería tener que modificar este fichero.</para> </listitem> <listitem> <para><filename>unwrap</filename> - este <quote>script</quote> puede ser usado para alterar el estado de ficheros binarios en una forma opuesta a como lo hace <filename>cvswrappers</filename>, descrito al principio de esta lista. No se usa en la configuración que funciona hoy día en &os; porque no funciona correctamente con commits remotos. No debería tener que modificar este fichero.</para> </listitem> <listitem> <para><filename>verifymsg</filename> - este fichero mapea directorios del repositorio con <quote>scripts</quote> encargados del proceso posterior de mensajes de commit en ficheros de <quote>log</quote>, por ejemplo <filename>logcheck</filename>. No debería verse en la necesidad de modificar este fichero.</para> </listitem> <listitem> <para><filename>wrap</filename> - este script puede usarse para poner ficheros binarios bajo el efecto de <filename>cvswrappers</filename> (descrito al principio de esta lista) en cada <quote>checkin</quote>. No se usa en la configuración que mantiene el proyecto &os; porque no funciona correctamente con commits remotos. No debería tener que modificar este fichero. </para> </listitem> </itemizedlist> </sect2> <sect2> <title>Modificación de los <quote>scripts</quote></title> <para>El siguiente paso es configurar los <quote>scripts</quote> para que se adapten a sus necesidades. Tendrá que revisar todos y cada uno de los ficheros en el directorio y hacer sus propios cambios y configuraciones. Seguramente tendrá que editar los siguientes ficheros:</para> <procedure> <step> <para>Si no desea usar los <quote>scripts</quote> de la <link linkend="freebsdspecific"> configuración específica de &os;</link> puede borrar tranquilamente el fichero <filename> access</filename>: <screen>&prompt.user; <userinput>cvs rm -f access</userinput> </screen></para> </step> <step> <para>Editar <filename>avail</filename> para que contenga los diferentes directorios del repositorio en los cuales quiera controlar el acceso. Asegúrese de mantener la línea <literal>avail||CVSROOT</literal>, si no lo hace no podrí realizar el siguiente paso.</para> <para>Otra de las opciones que puede añadir a este fichero es el grupo de <quote>committers</quote>. Por defecto &os; usa el fichero <filename>access</filename> para listar todos sus <quote>committers</quote> pero se puede usar cualquier fichero que se desee. También es posible agregar grupos si se desea (la sintaxis está declarada en la primera parte de <filename>cvs_acls.pl </filename>).</para> </step> <step> <para>Edite <filename>cfg_local.pm</filename> para que contenga las opciones deseadas. Seguramente le serán de gran interés las siguientes configuraciones: <itemizedlist> <listitem> <para><literal>%TEMPLATE_HEADERS</literal> - éstos son procesados por los <quote>scripts</quote> de <quote>log</quote> y se insertan bajo el correo de commit si es que existen. Puede que quiera borrar las entradas <literal>PR</literal> y <literal>MFC after</literal>; y claro, puede agregar las suyas.</para> </listitem> <listitem> <para><literal>$MAIL_BRANCH_HDR</literal> - puede añadir una cabecera en cada correo de commit en la que se detalle la rama (<quote>branch</quote>) en la que se ha hecho el commit. Defina la cabecera según su configuración y necesidades o déjelo vacío si no desea usar dicha cabecera.</para> </listitem> <listitem> <para><literal>@COMMIT_HOSTS</literal> - defina éste valor si desea listar los <quote>hosts</quote> desde los que será posible hacer commits. </para> </listitem> <listitem> <para><literal>$MAILADDRS</literal> - defina éste como la dirección del administrador o de alguna lista donde reciban los correos de commit.</para> </listitem> <listitem> <para><literal>@LOG_FILE_MAP</literal> - cambie este valor como desee. Cada expresión regular (regexp) se compara en el directorio del commit, y el mensaje de log del commit se guarda en el subdirectorio <filename>commitlogs</filename> en el nombre de fichero mencionado.</para> </listitem> <listitem> <para><literal>$COMMITCHECK_EXTRA</literal> - si no desea usar las <link linkend="freebsdspecific">comprobaciones de acceso específicas de &os;</link> debería borrar la definición de <literal> $COMMITCHECK_EXTRA</literal> de este fichero.</para> </listitem> </itemizedlist> <note><para>Cambiar el parámetro <literal>$IDHEADER</literal> es algo que sólo puede asegurarse que funcionará en &os;; depende de las modificaciones específicas de <application>CVS</application> hechas por &os;.</para></note> Revise <filename>cfg.pm</filename> y compruebe si alguna de las opciones puede modificarse, aunque los cambios propuestos en los párrafos anteriores son bastante razonables.</para> </step> <step> <para>Seguramente quiera borrar las líneas del principio de <filename>exclude</filename> (las que contienen <literal>^ports/</literal>, entre otras), puesto que son específicas de &os;. Además de esto comente las líneas que empiecen con <literal>^CVSROOT/</literal> y agregue una línea sólo con <literal>^CVSROOT/</literal>. Después de que <quote>wrapper</quote> sea instalado puede añadir su cabecera a los ficheros en el directorio <filename> CVSROOT</filename> y restaurar estas líneas; por lo pronto sólo estarán estorbarán en el momento que quiera hacer un commit.</para> </step> <step> <para>Edite <filename>modules</filename> y borre todo lo relacionado con &os;. Añada sus propios módulos si lo cree necesario.</para> </step> <step> <note><para>Este paso es sólo necesario si usted ha declarado un valor a <literal>$IDHEADER</literal> en <filename>cfg_local.pm</filename> (que sólo funciona usando la versión de <application>CVS </application> modificada por &os;).</para></note> <para>Edite <filename>options</filename> y asegúrese de que la etiqueta declarada sea la misma que en <filename> cfg_local.pm</filename>. Simplemente cambie la etiqueta <literal>FreeBSD</literal> por la suya.</para> </step> <step> <para>Edite <filename>rcstemplate</filename> para que contenga las mismas palabras clave (o <quote>keywords</quote>) declaradas en <filename>cfg_local.pm</filename>.</para> </step> <step> <para>Puede borrar (este paso es opcional) las comprobaciones realizadas por <filename>tagcheck</filename>. Puede simplemente añadir <literal>exit 0</literal> al principio del fichero para deshabilitar todas las comprobaciones que hace sobre las etiquetas.</para> </step> <step> <para>El último paso antes de terminar es asegurarse de que sea posible guardar de modo seguro los mensajes de commit. Por defecto se guardan en el propio repositorio, en el subdirectorio <filename>commitlogs</filename> del directorio <filename>CVSROOT</filename>. Este directorio debe crearse del siguiente modo: <screen>&prompt.user; <userinput>mkdir commitlogs </userinput>&prompt.user; <userinput>cvs add commitlogs </userinput></screen></para> </step> </procedure> <para>Después de una revisión cuidadosa debe hacer los commits necesarios con sus cambios. Asegúrese de haber activado su acceso al directorio <filename> CVSROOT</filename> en su <filename>avail</filename> antes de intentarlo. Una vez haya comprobado que todo es correcto puede hacer lo siguiente: <screen>&prompt.user; <userinput>cvs commit -m '<replaceable>- Commit para iniciar los scripts de FreeBSD</replaceable>'</userinput> </screen></para> </sect2> <sect2> <title>Prueba de la configuración</title> <para>Ahora ya está listo para la primera prueba: un commit forzado al fichero <filename>avail</filename> para asegurarnos de que todo funciona como se espera. <screen>&prompt.user; <userinput>cvs commit -f -m'<replaceable>Commit forzado para probar los nuevos scripts en CVSROOT</replaceable>' avail</userinput></screen> Si todo ha funcionado ¡felicidades! Dispone de una configuración de los <quote>scripts</quote> de &os; en su repositorio. Si <application>CVS</application> le da algún tipo de error en algo revise todo de nuevo y asegúrese de que todos los pasos se hayan hecho correctamente.</para> </sect2> </sect1> <sect1 id="freebsdspecific"> <title>Configuración específica de &os;</title> <para>El proyecto &os; utliza una configuración ligeramente diferente de la descrita; se usan los ficheros de configuración del subdirectorio <filename>freebsd</filename> en <filename>CVSROOT</filename>. El proyecto lo hace de esta manera debido al gran número de committers y a que todos y todas han de estar en el mismo grupo. Un <quote>wrapper</quote> simple fué escrito para poder asegurar que los usuarios tengan permisos correctos para poder hacer hacer commits; este <quote>wrapper</quote> establece el id del grupo al que el repositorio tiene.</para> <para>Si su repositorio lo necesita también los pasos para hacerlo están documentados más adelante. Pero antes de nada veamos una descripción de los ficheros involucrados.</para> <sect2> <title>Ficheros usados en la configuración de &os;</title> <para> <itemizedlist> <listitem> <para><filename>access</filename> - este fichero controla la información de acceso. Se debe editar este fichero e incluir a todos los miembros del proyecto.</para> </listitem> <listitem> <para><filename>freebsd/cvswrap.c</filename> - este es el código de CVS wrapper que va a ser necesario instalar para hacer que todos los chequeos de acceso funcionen. Mas información sobre él más adelante en el texto. Debería editar las rutas de las macros <literal>ACCESS</literal> y <literal>REALCVS</literal> para que se correspondan con su configuración. </para> </listitem> <listitem> <para><filename>freebsd/mailsend.c</filename> - este fichero es necesario para la configuración de la lista de correo de &os;. No deberá tocar este fichero.</para> </listitem> </itemizedlist> </para> </sect2> <sect2> <title>El procedimiento</title> <procedure> <step> <para>Edite el fichero <filename>access</filename> para que sólo contenga su nombre de usuario.</para> </step> <step> <para>Edite el fichero <filename>cvswrap.c</filename> para que contenga la ruta correcta de su configuración. Se define con una macro llamada <literal>ACCESS</literal>. Deberá cambiar también el lugar del binario de <command>cvs</command> si no coincide con el de su sistema. <filename>cvswrap.c</filename> está pensado para sustituir al comando cvs del sistema, que pasará a ser <filename>/usr/bin/ncvs </filename>.</para> <para>Mi copia de <filename>cvswrap.c</filename> tiene lo siguiente:</para> <programlisting>#define ACCESS "/local/cvsroot/CVSROOT/access" #define REALCVS "/usr/bin/ncvs"</programlisting> </step> <step> <para>Instalaremos después wrapper para asegurarnos de que se haya convertido en el grupo correcto al hacer el commit. Tiene el código fuente en <filename>cvswrap.c</filename> en su <filename>CVSROOT</filename>.</para> <para>Tendrá que compilar el código una vez haya incluido en el las rutas correctas: <screen>&prompt.user; <userinput>cc -o cvs cvswrap.c </userinput></screen> E instálelos (necesitará ejecutar este paso como root): <screen>&prompt.root; <userinput>mv /usr/bin/cvs /usr/bin/ncvs </userinput> &prompt.root; <userinput>mv cvs /usr/bin/cvs</userinput> &prompt.root; <userinput>chown root:<replaceable>ncvs</replaceable> /usr/bin/cvs /usr/bin/ncvs</userinput> &prompt.root; <userinput>chmod o-rw /usr/bin/ncvs</userinput> &prompt.root; <userinput> chmod u-w,g+s /usr/bin/cvs</userinput> </screen> Esto instala wrapper como el comando <command>cvs</command> por defecto; así nos aseguramos de que cualquiera que quiera usar el repositorio necesita tener los niveles de acceso correctos.</para> </step> <step> <para>Ahora ya puede eliminar a todos los usuarios del grupo del repositorio. Todo control de acceso lo hará a partir de ahora wrapper y este wrapper establecerá el grupo de acceso correcto.</para> </step> </procedure> </sect2> <sect2> <title>Prueba de la configuración</title> <para>Su wrapper debería estar listo. Debería probarlo, claro está, haciendo un commit forzado al fichero <filename> access</filename>: <screen>&prompt.user; <userinput>cvs commit -f -m '<replaceable>Commit forzado para probar los nuevos scripts en CVSROOT</replaceable>' access</userinput></screen> Si algo falla asegúrese de que todos los pasos arriba descritos se han realizado correctamente.</para> </sect2> </sect1> </article>