<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://www.guia-ubuntu.com/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>https://www.guia-ubuntu.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=DomdrOnlet</id>
		<title>Guía Ubuntu - Contribuciones del usuario [es]</title>
		<link rel="self" type="application/atom+xml" href="https://www.guia-ubuntu.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=DomdrOnlet"/>
		<link rel="alternate" type="text/html" href="https://www.guia-ubuntu.com/index.php/Especial:Contribuciones/DomdrOnlet"/>
		<updated>2026-04-30T14:27:48Z</updated>
		<subtitle>Contribuciones del usuario</subtitle>
		<generator>MediaWiki 1.22.7</generator>

	<entry>
		<id>https://www.guia-ubuntu.com/index.php/CVSTrac</id>
		<title>CVSTrac</title>
		<link rel="alternate" type="text/html" href="https://www.guia-ubuntu.com/index.php/CVSTrac"/>
				<updated>2009-01-08T15:50:21Z</updated>
		
		<summary type="html">&lt;p&gt;DomdrOnlet: http://golxando.0lx.net/1045318994.html&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://golxando.0lx.net/1045318994.html john f. kennedy assasination video] [http://fispruil.qsh.eu/sitemap.html top] [http://bukgetert.0lx.net/article-10.htm lightning movie white] [http://roladarh.strefa.pl/news-90.html los originales de san juan video] [http://acsitzar.0lx.net/news-koffee-with-karan-2008-11-20.html koffee with karan episode video] &lt;br /&gt;
[http://zelfibu.strefa.pl/ricmon-936.html links] [http://acsitzar.0lx.net/news-secretaires-video-2008-11-16.html secretaires video] [http://flheddin.qsh.eu/zarsaca-1425.html in series shoes video walk] [http://naceceli.qsh.eu/page232.html see free movies online] [http://faquafav.is-the-boss.com/text-841.htm kaspersky anti virus personal 5.0 license key] &lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
[[Imagen:Cvstrac-mainscn.jpg|thumb|right|CVSTrac es un gestor de repositorios CVS.]]&lt;br /&gt;
&lt;br /&gt;
CVSTrac es un sistema de gestiÃÂ³n de incidencias basado en web para [[:w:es:CVS|CVS]]. MÃÂ¡s informaciÃÂ³n sobre cÃÂ³mo montar un repositorio CVS en [[CVS|esta misma guÃÂ­a]]. Se trata de una aplicaciÃÂ³n sencilla y potente con las siguientes caracterÃÂ­sticas:&lt;br /&gt;
&lt;br /&gt;
* El interfaz web es simple y funcional.&lt;br /&gt;
* Tiene un visualizador de repositorios CVS y un wiki integrados con el sistema de incidencias.&lt;br /&gt;
* Ejecutable, puede funcionar en modo CGI o incluso de forma autÃÂ³noma ya que incluye un servidor web.&lt;br /&gt;
* Usa la base de datos SQLite, lo que permite escribir consultas complejas en SQL.&lt;br /&gt;
* Puede gestionar los usuarios y permisos del repositorio CVS.&lt;br /&gt;
&lt;br /&gt;
== Obtener el ejecutable ==&lt;br /&gt;
En la pÃÂ¡gina del proyecto [http://www.cvstrac.org/cvstrac/wiki?p=DownloadCvstrac http://www.cvstrac.org/] puedes bajar la ÃÂºltima versiÃÂ³n. A dÃÂ­a de hoy es la 2.0, la cual trae muchas mejoras sobre la 1.2.1 que es la que ha estado vigente durante bastante tiempo. Tienes la posibilidad de bajar las fuentes y compilarlas o bajar un binario compilado para SuSE que funcionarÃÂ¡ perfectamente en Dapper. DespuÃÂ©s de bajÃÂ¡rtelo, lo renombras y le das permisos de ejecuciÃÂ³n:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mv cvstrac-200-suse92-bin cvstrac&lt;br /&gt;
$ chmod +x cvstrac&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora copia el ejecutable a un lugar donde lo puedas encontrar cuando lo quieras ejecutar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo cp cvstrac /usr/bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Inicializando la base de datos ==&lt;br /&gt;
CVSTrac contiene su propio motor de base de datos SQL embebido, asÃÂ­ que no necesita ningÃÂºn sistema de RDBMS externo. La base de datos de un proyecto se almacena en un sÃÂ³lo fichero. El primer paso para usar CVSTrac es inicializar esta base de datos. Para ello ejecuta el siguiente comando, pero tiene que ser como un usuario que no sea ''root'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cvstrac init /home/cvs demo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O hacerlo asÃÂ­:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ su -c &amp;quot;cvstrac init /home/cvs demo&amp;quot; usuario&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cambia el argumento ''/home/cvs'' por el directorio donde quieras que estÃÂ© la base de datos. Cambia el argumento ''demo'' por el nombre del proyecto CVS que gestionarÃÂ¡ CVSTrac. Con los parÃÂ¡metros actuales se crearÃÂ­a la base de datos llamada ''/home/cvs/demo.db''.&lt;br /&gt;
&lt;br /&gt;
Si vamos a ejecutar la aplicaciÃÂ³n web en modo CGI tendrÃÂ¡s que darle los permisos correspondientes a esta base de datos para que el CGI pueda leerla y modificarla:&lt;br /&gt;
&lt;br /&gt;
 $ chown apache:apache /home/cvs/demo.db&lt;br /&gt;
&lt;br /&gt;
Esta base de datos contiene toda la informaciÃÂ³n del proyecto, por lo que es posible que la queramos consultar para hacer algÃÂºn tipo de informe. El motor que usa es SQLite, por lo que todo el contenido estÃÂ¡ en ese fichero que hemos inicializado previamente. Si has instalado la ÃÂºltima versiÃÂ³n de CVSTrac (actualmente la 2.0.0), verÃÂ¡s que usa como mÃÂ­nimo la versiÃÂ³n 3.3.2 de SQLite3. En Dapper la versiÃÂ³n de SQLite3 es la 3.2.8, de modo que no podrÃÂ¡s hacer consultas sobre este fichero. Lo mÃÂ¡s sencillo es bajarse una versiÃÂ³n compilada de http://www.sqlite.org/ y usar ÃÂ©sta. &lt;br /&gt;
&lt;br /&gt;
{{Nota|Si has bajado la versiÃÂ³n compilada de CVSTrac te funcionarÃÂ¡ perfectamente porque viene compilado estÃÂ¡ticamente con la versiÃÂ³n correcta de SQLite3. Lo de bajarte el binario de SQLite3 actualizado es sÃÂ³lo para poder hacer consultas desde fuera del CVSTrac.}}&lt;br /&gt;
&lt;br /&gt;
== Varias formas de instalaciÃÂ³n ==&lt;br /&gt;
Como hemos visto, tiene varias formas de funcionar. En todas las configuraciones vamos a suponer que el directorio del repositorio CVS se encuentra en ''/home/cvs'' y el programa estarÃÂ¡ accesible en el puerto 80 del servidor.&lt;br /&gt;
&lt;br /&gt;
=== Usando inetd ===&lt;br /&gt;
AÃÂ±ade la siguiente lÃÂ­nea al fichero ''/etc/inetd.conf'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
80 stream tcp nowait.1000 cvs /usr/bin/cvstrac cvstrac http /home/cvs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Usando xinetd ===&lt;br /&gt;
Crea el fichero '''/etc/xinetd.d/cvstrac''' con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   service cvstrac {&lt;br /&gt;
     socket_type = stream&lt;br /&gt;
     wait        = no&lt;br /&gt;
     user        = cvs&lt;br /&gt;
     server      = /usr/bin/cvstrac&lt;br /&gt;
     server_args = http /home/cvs&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Como un CGI ===&lt;br /&gt;
Para ejecutarlo como un CGI tiene que crear un script como ÃÂ©ste que encapsule la llamada:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
/usr/bin/cvstrac cgi /home/cvs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este script con extensiÃÂ³n '''.cgi''' lo debes poner en el directorio '''/var/www/cgi-bin'''. Para temas de localizaciÃÂ³n es mejor que el script sea asÃÂ­:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
LANG=es_ES.UTF-8 /usr/bin/cvstrac cgi /home/cvs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sea, que le antepones el establecimiento de la variable de entorno LANG para que el programa se ejecute usando los locales adecuados.&lt;br /&gt;
&lt;br /&gt;
=== Como un servidor web autÃÂ³nomo ===&lt;br /&gt;
Si quieres que use su propio servidor web, ejecuta la lÃÂ­nea de comando siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cvstrac server 8008 /home/cvs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
EstarÃÂ¡ a la escucha en el puerto TCP 8008. Ten en cuenta que tienes que ejecutar ''cvstrac'' en el '''CVSROOT''' del proyecto CVS, por ejemplo ''/home/cvs/CVSROOT''. Debe existir un directorio con el mismo nombre del proyecto en el mismo nivel.&lt;br /&gt;
&lt;br /&gt;
== ConfiguraciÃÂ³n ==&lt;br /&gt;
Una vez instalado el programa para poder acceder a ÃÂ©l vÃÂ­a web, entramos al sistema con el usuario y password ''setup''. TendrÃÂ¡s que cambiar el password del usuario ''setup'' por cuestiones de seguridad.&lt;br /&gt;
&lt;br /&gt;
Hay varias cosas a configurar para que se adapte a nuestro sistema de desarrollo. Muchas de ellas son opcionales y permiten hilar fino a la hora de poner todo a nuestro gusto. Sin embargo hay una que es obligatoria y es lo primero que tenemos que hacer: decirle donde se encuentra el repositorio que va a gestionar. Para hacer ÃÂ©sto vamos a '''Setup -&amp;gt; CVS Repository''' y ahÃÂ­ especificamos el directorio donde se encuentra el repositorio. En el caso de nuestro ejemplo serÃÂ­a ''/home/cvs''. La casilla que pone ''Module prefix:'' es por si tenemos muchos mÃÂ³dulos y sÃÂ³lo queremos mostrar algunos.&lt;br /&gt;
&lt;br /&gt;
Si al ir la opciÃÂ³n '''Browse''' no ves ningÃÂºn fichero ni directorio es que has metido los ficheros en el repositorio con un '''cvs import'''. CVSTrac sÃÂ³lo muestras los ficheros que se han incluido con un ''commit''. Vaya, ÃÂ¿y ahora quÃÂ©? Tampoco es tan grave. Puedes forzar un commit de todos los ficheros de un proyecto situÃÂ¡ndote en el directorio de nivel superior y haciendo ÃÂ©sto:&lt;br /&gt;
&lt;br /&gt;
 $ cvs commit -f -R -m &amp;quot;imported into cvstrac&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== GestiÃÂ³n de usuarios ==&lt;br /&gt;
Un usuario con permisos de administrador puede aÃÂ±adir y eliminar usuarios. Estos usuarios de CVSTrac tambiÃÂ©n serÃÂ¡n los usuarios de acceso al repositorio [[CVS]], de modo que podremos restringir de esta forma el acceso y acciones de los usuarios que acceden al repositorio. Hay muchos permisos que les podemos asignar a cada usuario, pero para un usuario normal que trabaje con el cÃÂ³digo del repositorio pondremos los siguientes '''ijknopqrw''', los cuales se detallan a continuaciÃÂ³n:&lt;br /&gt;
&lt;br /&gt;
* '''i (Check-in)''': AÃÂ±adir nuevo cÃÂ³digo al repositorio CVS.&lt;br /&gt;
* '''j (Read-Wiki)''': Ver las pÃÂ¡ginas del wiki.&lt;br /&gt;
* '''k (Wiki)''': Crear o modificar las pÃÂ¡ginas del wiki.&lt;br /&gt;
* '''n (New)''': Crear nuevos tickets de incidencias.&lt;br /&gt;
* '''o (Check-out)''': Leer el cÃÂ³digo del repositorio CVS.&lt;br /&gt;
* '''p (Password)''': Cambiar el password (el suyo, se entiende).&lt;br /&gt;
* '''q (Query)''': Crear o editar informes.&lt;br /&gt;
* '''r (Read)''': Ver tickets y cambiar histÃÂ³rico.&lt;br /&gt;
* '''w (Write)''': Editar tickets.&lt;br /&gt;
&lt;br /&gt;
== Notificaciones en los cambios en los tickets ==&lt;br /&gt;
CVSTrac admite gran cantidad de personalizaciones, como definir un programa externo que se ejecute cada vez que se crea o modifica un ticket. La opciÃÂ³n estÃÂ¡ accesible en ''Setup'' -&amp;gt; ''Change Notification''. El script que nos va a realizar esta tarea es uno tan simple como:&lt;br /&gt;
&lt;br /&gt;
 echo '%d %r'|mail -s '[cvstrac] %p/%s/%t' '%A'&lt;br /&gt;
&lt;br /&gt;
Buscando por ahÃÂ­ me he encontrado este otro mÃÂ¡s currado, pero no lo he probado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;perl&amp;gt;&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
use MIME::Lite;&lt;br /&gt;
use POSIX;&lt;br /&gt;
use Getopt::Long;&lt;br /&gt;
&lt;br /&gt;
Getopt::Long::Configure('bundling');&lt;br /&gt;
&lt;br /&gt;
if( @ARGV &amp;gt; 0 ) {&lt;br /&gt;
  GetOptions( 'a|assigned=s'    =&amp;gt; \$gszAssignedMail,&lt;br /&gt;
              'n|name=s'        =&amp;gt; \$gszAssignedName,&lt;br /&gt;
              'c|contact=s'     =&amp;gt; \$gszContact,&lt;br /&gt;
              'd|description=s' =&amp;gt; \$gszDescription,&lt;br /&gt;
              'i|ticket=s'      =&amp;gt; \$gszTicketNumber,&lt;br /&gt;
              'p|project=s'     =&amp;gt; \$gszProject,&lt;br /&gt;
              'r|remarks=s'     =&amp;gt; \$gszRemarks,&lt;br /&gt;
              's|status=s'      =&amp;gt; \$gszStatus,&lt;br /&gt;
              't|title=s'       =&amp;gt; \$gszTitle,&lt;br /&gt;
              'u|changed=s'     =&amp;gt; \$gszChanged,&lt;br /&gt;
              'o|originator=s'  =&amp;gt; \$gszOriginator,&lt;br /&gt;
              'y|type=s'        =&amp;gt; \$gszType );&lt;br /&gt;
$gszTime = POSIX::strftime(&amp;quot;%a, %m %d %H:%M&amp;quot;, localtime);&lt;br /&gt;
&lt;br /&gt;
  $szBuffer = &amp;lt;&amp;lt;EOT;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
BODY, P, TD, TH { background-color: white; font-size: 10px;&lt;br /&gt;
                  font-family: Arial, Helvetica, Sans-Serif; }&lt;br /&gt;
TH { text-align: left; font-size: 11px; background-color: #e0e0e0; }&lt;br /&gt;
PRE { font-family: Lucida Console, Monaco, Courier New, fixed; font-size: 10px; }&lt;br /&gt;
H1 { font-size: 18px; }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Ticket &amp;lt;a href=&amp;quot;http://cvstrac/tktview?tn=$gszTicketNumber&amp;quot;&amp;gt;#$gszTicketNumber&amp;lt;/a&amp;gt; was updated by $gszChanged.&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;table border=0 cellpadding=2 cellspacing=1 bgcolor=&amp;quot;black&amp;quot; width=&amp;quot;100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Title:&amp;lt;/th&amp;gt;&amp;lt;td width=&amp;quot;100%&amp;quot;&amp;gt;$gszTitle&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Type:&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;$gszType&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Assigned to:&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;mailto:$gszAssignedMail&amp;quot;&amp;gt;$gszAssignedName&amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Status:&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;$gszStatus&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th colspan=2&amp;gt;Description:&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=2&amp;gt;&amp;lt;pre&amp;gt;$gszDescription&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th colspan=2&amp;gt;Remarks:&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=2&amp;gt;&amp;lt;pre&amp;gt;$gszRemarks&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
Generated by notify.pl at $gszTime&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://cvstrac/tktview?tn=$gszTicketNumber&amp;quot;&amp;gt;View Ticket&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
EOT&lt;br /&gt;
&lt;br /&gt;
$msg = new MIME::Lite&lt;br /&gt;
  From     =&amp;gt; 'issue-tracker@my.domain.com.com',&lt;br /&gt;
  To       =&amp;gt; $gszContact,&lt;br /&gt;
  Cc       =&amp;gt; $gszAssignedMail,&lt;br /&gt;
  Subject  =&amp;gt; &amp;quot;[$gszProject tracker] Ticket $gszTicketNumber updated by $gszChanged&amp;quot;,&lt;br /&gt;
  Type     =&amp;gt; &amp;quot;text/html&amp;quot;,&lt;br /&gt;
  Data     =&amp;gt; $szBuffer;&lt;br /&gt;
$msg-&amp;gt;attr( 'content-type.charset' =&amp;gt; &amp;quot;ISO-8859-1&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
$msg-&amp;gt;send( 'smtp', 'smart.host.my.domain.com');&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/perl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso la invocaciÃÂ³n del script serÃÂ­a: &lt;br /&gt;
&lt;br /&gt;
 /usr/local/bin/notify.pl -n '%a' -a '%A' -c '%c' -d '%d' -i '%n' -p '%p' -r '%r' \&lt;br /&gt;
 -s '%s' -t '%t' -u '%u' -y '%y' -o '%w'&lt;br /&gt;
&lt;br /&gt;
La barra invertida ('''\''') es para poder ponerlo en dos lÃÂ­neas y mejorar la legibilidad. Cuando lo vaya a usar ponlo todo en una sola lÃÂ­nea.&lt;br /&gt;
&lt;br /&gt;
== Ver tambiÃÂ©n ==&lt;br /&gt;
* [[CVS]]&lt;br /&gt;
&lt;br /&gt;
== Enlaces externos ==&lt;br /&gt;
* http://www.cvstrac.org/&lt;br /&gt;
* [http://www.developingprogrammers.com/index.php/2005/12/15/cvstrac-and-trac-combined-tutorial/ CVSTrac and Trac Combined Tutorial]&lt;br /&gt;
&lt;br /&gt;
[[CategorÃÂ­a:ProgramaciÃÂ³n]]&lt;/div&gt;</summary>
		<author><name>DomdrOnlet</name></author>	</entry>

	<entry>
		<id>https://www.guia-ubuntu.com/index.php/CVSTrac</id>
		<title>CVSTrac</title>
		<link rel="alternate" type="text/html" href="https://www.guia-ubuntu.com/index.php/CVSTrac"/>
				<updated>2008-12-19T21:25:32Z</updated>
		
		<summary type="html">&lt;p&gt;DomdrOnlet: coc4tbova&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;acelca&lt;br /&gt;
acelorvid&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
[[Imagen:Cvstrac-mainscn.jpg|thumb|right|CVSTrac es un gestor de repositorios CVS.]]&lt;br /&gt;
&lt;br /&gt;
CVSTrac es un sistema de gestiÃÂ³n de incidencias basado en web para [[:w:es:CVS|CVS]]. MÃÂ¡s informaciÃÂ³n sobre cÃÂ³mo montar un repositorio CVS en [[CVS|esta misma guÃÂ­a]]. Se trata de una aplicaciÃÂ³n sencilla y potente con las siguientes caracterÃÂ­sticas:&lt;br /&gt;
&lt;br /&gt;
* El interfaz web es simple y funcional.&lt;br /&gt;
* Tiene un visualizador de repositorios CVS y un wiki integrados con el sistema de incidencias.&lt;br /&gt;
* Ejecutable, puede funcionar en modo CGI o incluso de forma autÃÂ³noma ya que incluye un servidor web.&lt;br /&gt;
* Usa la base de datos SQLite, lo que permite escribir consultas complejas en SQL.&lt;br /&gt;
* Puede gestionar los usuarios y permisos del repositorio CVS.&lt;br /&gt;
&lt;br /&gt;
== Obtener el ejecutable ==&lt;br /&gt;
En la pÃÂ¡gina del proyecto [http://www.cvstrac.org/cvstrac/wiki?p=DownloadCvstrac http://www.cvstrac.org/] puedes bajar la ÃÂºltima versiÃÂ³n. A dÃÂ­a de hoy es la 2.0, la cual trae muchas mejoras sobre la 1.2.1 que es la que ha estado vigente durante bastante tiempo. Tienes la posibilidad de bajar las fuentes y compilarlas o bajar un binario compilado para SuSE que funcionarÃÂ¡ perfectamente en Dapper. DespuÃÂ©s de bajÃÂ¡rtelo, lo renombras y le das permisos de ejecuciÃÂ³n:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mv cvstrac-200-suse92-bin cvstrac&lt;br /&gt;
$ chmod +x cvstrac&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora copia el ejecutable a un lugar donde lo puedas encontrar cuando lo quieras ejecutar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo cp cvstrac /usr/bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Inicializando la base de datos ==&lt;br /&gt;
CVSTrac contiene su propio motor de base de datos SQL embebido, asÃÂ­ que no necesita ningÃÂºn sistema de RDBMS externo. La base de datos de un proyecto se almacena en un sÃÂ³lo fichero. El primer paso para usar CVSTrac es inicializar esta base de datos. Para ello ejecuta el siguiente comando, pero tiene que ser como un usuario que no sea ''root'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cvstrac init /home/cvs demo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O hacerlo asÃÂ­:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ su -c &amp;quot;cvstrac init /home/cvs demo&amp;quot; usuario&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cambia el argumento ''/home/cvs'' por el directorio donde quieras que estÃÂ© la base de datos. Cambia el argumento ''demo'' por el nombre del proyecto CVS que gestionarÃÂ¡ CVSTrac. Con los parÃÂ¡metros actuales se crearÃÂ­a la base de datos llamada ''/home/cvs/demo.db''.&lt;br /&gt;
&lt;br /&gt;
Si vamos a ejecutar la aplicaciÃÂ³n web en modo CGI tendrÃÂ¡s que darle los permisos correspondientes a esta base de datos para que el CGI pueda leerla y modificarla:&lt;br /&gt;
&lt;br /&gt;
 $ chown apache:apache /home/cvs/demo.db&lt;br /&gt;
&lt;br /&gt;
Esta base de datos contiene toda la informaciÃÂ³n del proyecto, por lo que es posible que la queramos consultar para hacer algÃÂºn tipo de informe. El motor que usa es SQLite, por lo que todo el contenido estÃÂ¡ en ese fichero que hemos inicializado previamente. Si has instalado la ÃÂºltima versiÃÂ³n de CVSTrac (actualmente la 2.0.0), verÃÂ¡s que usa como mÃÂ­nimo la versiÃÂ³n 3.3.2 de SQLite3. En Dapper la versiÃÂ³n de SQLite3 es la 3.2.8, de modo que no podrÃÂ¡s hacer consultas sobre este fichero. Lo mÃÂ¡s sencillo es bajarse una versiÃÂ³n compilada de http://www.sqlite.org/ y usar ÃÂ©sta. &lt;br /&gt;
&lt;br /&gt;
{{Nota|Si has bajado la versiÃÂ³n compilada de CVSTrac te funcionarÃÂ¡ perfectamente porque viene compilado estÃÂ¡ticamente con la versiÃÂ³n correcta de SQLite3. Lo de bajarte el binario de SQLite3 actualizado es sÃÂ³lo para poder hacer consultas desde fuera del CVSTrac.}}&lt;br /&gt;
&lt;br /&gt;
== Varias formas de instalaciÃÂ³n ==&lt;br /&gt;
Como hemos visto, tiene varias formas de funcionar. En todas las configuraciones vamos a suponer que el directorio del repositorio CVS se encuentra en ''/home/cvs'' y el programa estarÃÂ¡ accesible en el puerto 80 del servidor.&lt;br /&gt;
&lt;br /&gt;
=== Usando inetd ===&lt;br /&gt;
AÃÂ±ade la siguiente lÃÂ­nea al fichero ''/etc/inetd.conf'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
80 stream tcp nowait.1000 cvs /usr/bin/cvstrac cvstrac http /home/cvs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Usando xinetd ===&lt;br /&gt;
Crea el fichero '''/etc/xinetd.d/cvstrac''' con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   service cvstrac {&lt;br /&gt;
     socket_type = stream&lt;br /&gt;
     wait        = no&lt;br /&gt;
     user        = cvs&lt;br /&gt;
     server      = /usr/bin/cvstrac&lt;br /&gt;
     server_args = http /home/cvs&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Como un CGI ===&lt;br /&gt;
Para ejecutarlo como un CGI tiene que crear un script como ÃÂ©ste que encapsule la llamada:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
/usr/bin/cvstrac cgi /home/cvs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este script con extensiÃÂ³n '''.cgi''' lo debes poner en el directorio '''/var/www/cgi-bin'''. Para temas de localizaciÃÂ³n es mejor que el script sea asÃÂ­:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
LANG=es_ES.UTF-8 /usr/bin/cvstrac cgi /home/cvs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O sea, que le antepones el establecimiento de la variable de entorno LANG para que el programa se ejecute usando los locales adecuados.&lt;br /&gt;
&lt;br /&gt;
=== Como un servidor web autÃÂ³nomo ===&lt;br /&gt;
Si quieres que use su propio servidor web, ejecuta la lÃÂ­nea de comando siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cvstrac server 8008 /home/cvs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
EstarÃÂ¡ a la escucha en el puerto TCP 8008. Ten en cuenta que tienes que ejecutar ''cvstrac'' en el '''CVSROOT''' del proyecto CVS, por ejemplo ''/home/cvs/CVSROOT''. Debe existir un directorio con el mismo nombre del proyecto en el mismo nivel.&lt;br /&gt;
&lt;br /&gt;
== ConfiguraciÃÂ³n ==&lt;br /&gt;
Una vez instalado el programa para poder acceder a ÃÂ©l vÃÂ­a web, entramos al sistema con el usuario y password ''setup''. TendrÃÂ¡s que cambiar el password del usuario ''setup'' por cuestiones de seguridad.&lt;br /&gt;
&lt;br /&gt;
Hay varias cosas a configurar para que se adapte a nuestro sistema de desarrollo. Muchas de ellas son opcionales y permiten hilar fino a la hora de poner todo a nuestro gusto. Sin embargo hay una que es obligatoria y es lo primero que tenemos que hacer: decirle donde se encuentra el repositorio que va a gestionar. Para hacer ÃÂ©sto vamos a '''Setup -&amp;gt; CVS Repository''' y ahÃÂ­ especificamos el directorio donde se encuentra el repositorio. En el caso de nuestro ejemplo serÃÂ­a ''/home/cvs''. La casilla que pone ''Module prefix:'' es por si tenemos muchos mÃÂ³dulos y sÃÂ³lo queremos mostrar algunos.&lt;br /&gt;
&lt;br /&gt;
Si al ir la opciÃÂ³n '''Browse''' no ves ningÃÂºn fichero ni directorio es que has metido los ficheros en el repositorio con un '''cvs import'''. CVSTrac sÃÂ³lo muestras los ficheros que se han incluido con un ''commit''. Vaya, ÃÂ¿y ahora quÃÂ©? Tampoco es tan grave. Puedes forzar un commit de todos los ficheros de un proyecto situÃÂ¡ndote en el directorio de nivel superior y haciendo ÃÂ©sto:&lt;br /&gt;
&lt;br /&gt;
 $ cvs commit -f -R -m &amp;quot;imported into cvstrac&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== GestiÃÂ³n de usuarios ==&lt;br /&gt;
Un usuario con permisos de administrador puede aÃÂ±adir y eliminar usuarios. Estos usuarios de CVSTrac tambiÃÂ©n serÃÂ¡n los usuarios de acceso al repositorio [[CVS]], de modo que podremos restringir de esta forma el acceso y acciones de los usuarios que acceden al repositorio. Hay muchos permisos que les podemos asignar a cada usuario, pero para un usuario normal que trabaje con el cÃÂ³digo del repositorio pondremos los siguientes '''ijknopqrw''', los cuales se detallan a continuaciÃÂ³n:&lt;br /&gt;
&lt;br /&gt;
* '''i (Check-in)''': AÃÂ±adir nuevo cÃÂ³digo al repositorio CVS.&lt;br /&gt;
* '''j (Read-Wiki)''': Ver las pÃÂ¡ginas del wiki.&lt;br /&gt;
* '''k (Wiki)''': Crear o modificar las pÃÂ¡ginas del wiki.&lt;br /&gt;
* '''n (New)''': Crear nuevos tickets de incidencias.&lt;br /&gt;
* '''o (Check-out)''': Leer el cÃÂ³digo del repositorio CVS.&lt;br /&gt;
* '''p (Password)''': Cambiar el password (el suyo, se entiende).&lt;br /&gt;
* '''q (Query)''': Crear o editar informes.&lt;br /&gt;
* '''r (Read)''': Ver tickets y cambiar histÃÂ³rico.&lt;br /&gt;
* '''w (Write)''': Editar tickets.&lt;br /&gt;
&lt;br /&gt;
== Notificaciones en los cambios en los tickets ==&lt;br /&gt;
CVSTrac admite gran cantidad de personalizaciones, como definir un programa externo que se ejecute cada vez que se crea o modifica un ticket. La opciÃÂ³n estÃÂ¡ accesible en ''Setup'' -&amp;gt; ''Change Notification''. El script que nos va a realizar esta tarea es uno tan simple como:&lt;br /&gt;
&lt;br /&gt;
 echo '%d %r'|mail -s '[cvstrac] %p/%s/%t' '%A'&lt;br /&gt;
&lt;br /&gt;
Buscando por ahÃÂ­ me he encontrado este otro mÃÂ¡s currado, pero no lo he probado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;perl&amp;gt;&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
use MIME::Lite;&lt;br /&gt;
use POSIX;&lt;br /&gt;
use Getopt::Long;&lt;br /&gt;
&lt;br /&gt;
Getopt::Long::Configure('bundling');&lt;br /&gt;
&lt;br /&gt;
if( @ARGV &amp;gt; 0 ) {&lt;br /&gt;
  GetOptions( 'a|assigned=s'    =&amp;gt; \$gszAssignedMail,&lt;br /&gt;
              'n|name=s'        =&amp;gt; \$gszAssignedName,&lt;br /&gt;
              'c|contact=s'     =&amp;gt; \$gszContact,&lt;br /&gt;
              'd|description=s' =&amp;gt; \$gszDescription,&lt;br /&gt;
              'i|ticket=s'      =&amp;gt; \$gszTicketNumber,&lt;br /&gt;
              'p|project=s'     =&amp;gt; \$gszProject,&lt;br /&gt;
              'r|remarks=s'     =&amp;gt; \$gszRemarks,&lt;br /&gt;
              's|status=s'      =&amp;gt; \$gszStatus,&lt;br /&gt;
              't|title=s'       =&amp;gt; \$gszTitle,&lt;br /&gt;
              'u|changed=s'     =&amp;gt; \$gszChanged,&lt;br /&gt;
              'o|originator=s'  =&amp;gt; \$gszOriginator,&lt;br /&gt;
              'y|type=s'        =&amp;gt; \$gszType );&lt;br /&gt;
$gszTime = POSIX::strftime(&amp;quot;%a, %m %d %H:%M&amp;quot;, localtime);&lt;br /&gt;
&lt;br /&gt;
  $szBuffer = &amp;lt;&amp;lt;EOT;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
BODY, P, TD, TH { background-color: white; font-size: 10px;&lt;br /&gt;
                  font-family: Arial, Helvetica, Sans-Serif; }&lt;br /&gt;
TH { text-align: left; font-size: 11px; background-color: #e0e0e0; }&lt;br /&gt;
PRE { font-family: Lucida Console, Monaco, Courier New, fixed; font-size: 10px; }&lt;br /&gt;
H1 { font-size: 18px; }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Ticket &amp;lt;a href=&amp;quot;http://cvstrac/tktview?tn=$gszTicketNumber&amp;quot;&amp;gt;#$gszTicketNumber&amp;lt;/a&amp;gt; was updated by $gszChanged.&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;table border=0 cellpadding=2 cellspacing=1 bgcolor=&amp;quot;black&amp;quot; width=&amp;quot;100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Title:&amp;lt;/th&amp;gt;&amp;lt;td width=&amp;quot;100%&amp;quot;&amp;gt;$gszTitle&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Type:&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;$gszType&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Assigned to:&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;mailto:$gszAssignedMail&amp;quot;&amp;gt;$gszAssignedName&amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Status:&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;$gszStatus&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th colspan=2&amp;gt;Description:&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=2&amp;gt;&amp;lt;pre&amp;gt;$gszDescription&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th colspan=2&amp;gt;Remarks:&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=2&amp;gt;&amp;lt;pre&amp;gt;$gszRemarks&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
Generated by notify.pl at $gszTime&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://cvstrac/tktview?tn=$gszTicketNumber&amp;quot;&amp;gt;View Ticket&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
EOT&lt;br /&gt;
&lt;br /&gt;
$msg = new MIME::Lite&lt;br /&gt;
  From     =&amp;gt; 'issue-tracker@my.domain.com.com',&lt;br /&gt;
  To       =&amp;gt; $gszContact,&lt;br /&gt;
  Cc       =&amp;gt; $gszAssignedMail,&lt;br /&gt;
  Subject  =&amp;gt; &amp;quot;[$gszProject tracker] Ticket $gszTicketNumber updated by $gszChanged&amp;quot;,&lt;br /&gt;
  Type     =&amp;gt; &amp;quot;text/html&amp;quot;,&lt;br /&gt;
  Data     =&amp;gt; $szBuffer;&lt;br /&gt;
$msg-&amp;gt;attr( 'content-type.charset' =&amp;gt; &amp;quot;ISO-8859-1&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
$msg-&amp;gt;send( 'smtp', 'smart.host.my.domain.com');&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/perl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este caso la invocaciÃÂ³n del script serÃÂ­a: &lt;br /&gt;
&lt;br /&gt;
 /usr/local/bin/notify.pl -n '%a' -a '%A' -c '%c' -d '%d' -i '%n' -p '%p' -r '%r' \&lt;br /&gt;
 -s '%s' -t '%t' -u '%u' -y '%y' -o '%w'&lt;br /&gt;
&lt;br /&gt;
La barra invertida ('''\''') es para poder ponerlo en dos lÃÂ­neas y mejorar la legibilidad. Cuando lo vaya a usar ponlo todo en una sola lÃÂ­nea.&lt;br /&gt;
&lt;br /&gt;
== Ver tambiÃÂ©n ==&lt;br /&gt;
* [[CVS]]&lt;br /&gt;
&lt;br /&gt;
== Enlaces externos ==&lt;br /&gt;
* http://www.cvstrac.org/&lt;br /&gt;
* [http://www.developingprogrammers.com/index.php/2005/12/15/cvstrac-and-trac-combined-tutorial/ CVSTrac and Trac Combined Tutorial]&lt;br /&gt;
&lt;br /&gt;
[[CategorÃÂ­a:ProgramaciÃÂ³n]]&lt;/div&gt;</summary>
		<author><name>DomdrOnlet</name></author>	</entry>

	</feed>