tags/trac StyXman's glob http://grulicueva.homelinux.net/~mdione/glob//tags/trac/ StyXman's glob ikiwiki 2009-01-22T04:24:04Z trac-me-tiene-los-eggs-llenos-toma-2 http://grulicueva.homelinux.net/~mdione/glob//posts/trac-me-tiene-los-eggs-llenos-toma-2/ 2009-01-22T04:24:04Z 2008-09-09T00:17:05Z <p>¿Se acuerdan de <a href= "http://grulicueva.homelinux.net/~mdione/glob/posts/trac-me-tiene-los-eggs-llenos/"> la primera parte</a>? Bueno, venía aplicando esto varias veces últimamente (nuevamente tracs y nuevamente plugins). Sé que <a href="http://john.lenton.com.ar/2008/05/26/easy-install-without-virtualenv-implies-hard-maintenance/"> mi jefe me va a retar</a>, pero la verdad es que lo prefiero así. Generalizé esa idea y lo hice un script, y para marcar su diferencia con el <code>easy_install</code>, lo llamé <code>useful_install</code>:</p> <pre> <code>#! /usr/bin/python __requires__ = 'setuptools==0.6c3' import sys path= sys.argv.pop (1) sys.path.append (path) sys.argv= [sys.argv[0], '--install-dir', path, '--site-dirs', path ]+sys.argv[1:] from pkg_resources import load_entry_point sys.exit( load_entry_point('setuptools==0.6c3', 'console_scripts', 'easy_install')() ) </code> </pre> <p>Como verán es idéntico al <code>easy_install</code>, salvo que el primer parámetro es el directorio donde vamos a instalar las cosas y que hace la magia necesaria de agregarlo al <code>sys.path</code> y armar los argumentos para <code>e_i</code>. Además, le podemos pasar más parámetros a voluntad y pasan derecho al <code>load_entry_point</code> del <code>e_i</code>. Que lo disfruten.</p> <p><span class="selflink">trac</span> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/trac/../python/">python</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/trac/../sysadmin/">sysadmin</a></p> trac-con-mercurial-en-etch http://grulicueva.homelinux.net/~mdione/glob//posts/trac-con-mercurial-en-etch/ 2009-01-22T04:24:04Z 2008-07-18T01:09:46Z <p>Desde hace como dos semanas que vengo esporádicamente peleando con un problema: Tenía que poner a andar el plugin de Mercurial para Trac. Según <a href= "http://trac.edgewall.org/wiki/TracMercurial">las instrucciones de la página</a>, sólo es cuestión de generar un <code>.egg</code> (<a href="http://grulicueva.homelinux.net/~mdione/glob//tags/trac/posts/trac-me-tiene-los-eggs-llenos/">¿se acuerdan?</a>), ponerlo en el directorio <code>plugins</code> del environment y ya. Pero corriendo <code>tracd</code> y entrando con un browser me daba:</p> <pre> <code>TracError: Unsupported version control system "hg" </code> </pre> <p>Mi primer sospechoso era el <code>.egg</code>; creía que no lo estaba encontrando. Prendiendo el logging en el <code>trac.ini</code> descubrí que en realidad si lo levantaba. Siguiendo un par de links encontré una sugerencia de correr todos los imports que corre el <code>backend.py</code> del plugin. Finalmente descubrí que la línea:</p> <pre> <code>from mercurial.revlog import LookupError </code> </pre> <p><a href= "http://trac.edgewall.org/ticket/7346#comment:6">fallaba</a>. Se vé que el Mercurial que viene en Etch (0.9.1-1+etch1) no es del todo compatible, a pesar que la página del plugin dice que lo es, inclusive hasta con 0.8. Para "repararlo" simplemente saué las (1) referencias a <code>LookupError</code>.</p> <p><span class="selflink">trac</span> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/trac/../mercurial/">mercurial</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/trac/../sysadmin/">sysadmin</a></p> luchando-contra-el-spam-en-trac http://grulicueva.homelinux.net/~mdione/glob//posts/luchando-contra-el-spam-en-trac/ 2009-01-22T04:24:04Z 2008-07-04T23:29:16Z <p>Como habrán notado en mi post anterior, estuve agregando un plugin anti spam en un Trac que tiene submit de tickets anómimo. Una vez que TracSpamFilter está instalado como mencioné en tal post y habiendo instalado WebAdmin también, queda andando de una.</p> <p>Un comentario antes de pasar al punto de este post. El plugin funciona con un sistema de karma. Un post arranca con karma 0 y luego se le va cambiando a medida que los distintos filtros se disparan o no. El tema es que algunos suman y otros restan karma. Pero esto no se deduce fácilmente de la página de configuración, pues todos los valores son positivos. Bueno, les comento: el único positivo es el SessionFilterStrategy y el resto son negativos.</p> <p>Esto quiere decir por ejemplo que por default, un usuario con login (SessionFilterStrategy, +9) puede mandar muchos links externos (ExternalLinksFilterStrategy, -2) y que además matcheen contra BadContent (ése es el RegexFilterStrategy, -5) sin que lo marque como spam.</p> <p>Volviendo al punto, el problema es que una vez instalado sólo filtra spam entrante, pero no lo que ya hay. Cómo sacárselo de encima? No encontré mejor solución que hackear la base de datos. En mi caso particular, que creo que es el que está afectando a muchos, encontré que los summaries eran muy cortos, por lo que con esto alcanzó:</p> <pre> <code>delete from ticket where length(summary)&lt;11; </code> </pre> <p>También es posible que les hayan llenado comentarios de tickets con spam. No es mi caso directo, sino más bien la forma en que testeaba el plugin. Habiendo hecho lo anterior, los comentarios (y en realidad, cualquier cambio sobre los mismos) de esos tickets quedaron huérfanos. Se los puede borrar con:</p> <pre> <code>delete from ticket_change where ticket not in (select id from ticket); </code> </pre> <p><code>delete</code>s similares deberían poderse aplicar a otras partes del trac que estén abiertas.</p> <p><a href="http://grulicueva.homelinux.net/~mdione/glob//tags/trac/../sysadmin/">sysadmin</a> <span class= "selflink">trac</span> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/trac/../spam/">spam</a></p> trac-me-tiene-los-eggs-llenos http://grulicueva.homelinux.net/~mdione/glob//posts/trac-me-tiene-los-eggs-llenos/ 2009-01-22T04:24:04Z 2008-07-04T23:29:16Z <p><a href="http://trac.edgewall.org/wiki/">Trac</a> es fantástico. Tiene todo lo que quiero y más. Amo Trac...</p> <p>... hasta que se me ocurre la inefable idea de ponerle plugins. Resulta que Trac es plugineable desde la versión 0.9, y que en la versdion 0.10 más aún, con más plugineabilidad que antes! Y además, existen usas cosas llamadas <code>.egg</code> que simplifican todo: sólo ponés un <code>.egg</code> en el <code>tracenv/plugins</code> y ya.</p> <p>... y ya? I wish. Resulta que no, mirá vos, que si no hacés la danza del <code>easy_install</code> no anda. Esto es porque éste se las arregla para que un <code>.egg</code> (que a todo esto es un <code>.zip</code> con el paquete) se pueda cargar. Ok, tons nos proponemos a hacer dicha danza. El tema es que uno quiere ser ordenadito y en vez de ensuciar el sistema (<code>e_i</code> por defecto pone todo en el <code>site-packages</code> del python por defecto) espero que los <code>.egg</code>s terminen en el mencionado directorio. Así, intentamos con esto:</p> <pre> <code>sudo -u www-data easy_install --install-dir /var/lib/trac/xarope/plugins/ \ --site-dirs /var/lib/trac/xarope/plugins/ TracSpamFilter error: /var/lib/trac/xarope/plugins/ (in --site-dirs) is not on sys.path </code> </pre> <p>Lindo error. Resulta que no hay forma de coercer a <code>e_i</code> que lo haga, por más que no esté en el <code>PYTHONPATH</code> (bah, en el <code>sys.path</code>). Y hablando de dicha envvar, no anda ni con <code>PYTHONPATH=path comando</code> ni con un <code>export</code> previo.</p> <p>Comienza la hora de la negrada. Primero vemos que <code>e_i</code> es en realidad un wrapper de 4 líneas python:</p> <pre> <code>$ cat $(which easy_install) #!/usr/bin/python2.4 # EASY-INSTALL-ENTRY-SCRIPT: 'setuptools==0.6c3','console_scripts','easy_install' __requires__ = 'setuptools==0.6c3' import sys from pkg_resources import load_entry_point sys.exit( load_entry_point('setuptools==0.6c3', 'console_scripts', 'easy_install')() ) </code> </pre> <p>Cuál es la idea? Arrancar un intérprete python, modificar sys.path, de paso sys.argv, invocar dichas líneas de python y ya:</p> <pre> <code>In [1]: import sys In [2]: sys.path.append ("/var/lib/trac/xarope/plugins/") In [3]: __requires__ = 'setuptools==0.6c3' In [4]: from pkg_resources import load_entry_point In [5]: lep= load_entry_point('setuptools==0.6c3', 'console_scripts', 'easy_install') In [10]: sys.argv.extend (['--install-dir', '/var/lib/trac/xarope/plugins/', '--site-dirs', '/var/lib/trac/xarope/plugins/', 'TracSpamFilter']) In [13]: lep () Creating /var/lib/trac/xarope/plugins/site.py Searching for TracSpamFilter Reading http://www.python.org/pypi/TracSpamFilter/ Reading http://trac.edgewall.org/wiki/SpamFilter Reading http://www.python.org/pypi/TracSpamFilter/0.2dev-r4489 Best match: TracSpamFilter dev Downloading http://svn.edgewall.com/repos/trac/sandbox/spam-filter#egg=TracSpamFilter-dev Doing subversion checkout from http://svn.edgewall.com/repos/trac/sandbox/spam-filter to /tmp/easy_install-C5o9rL/spam-filter Processing spam-filter Running setup.py -q bdist_egg --dist-dir /tmp/easy_install-C5o9rL/spam-filter/egg-dist-tmp-nVJ04Y Adding TracSpamFilter 0.2.1dev-r6418 to easy-install.pth file Installed /var/lib/trac/xarope/plugins/TracSpamFilter-0.2.1dev_r6418-py2.4.egg Processing dependencies for TracSpamFilter </code> </pre> <p>Voilá! De acá! Si apunto mi browser a mi trac obtengo:</p> <pre> <code>[back trace] ExtractionError: Can't extract file(s) to egg cache The following error occurred while trying to extract file(s) to the Python egg cache: [Errno 13] Permission denied: '/var/www/.python-eggs' The Python egg cache directory is currently set to: /var/www/.python-eggs Perhaps your account does not have write access to this directory? You can change the cache directory by setting the PYTHON_EGG_CACHE environment variable to point to an accessible directory. </code> </pre> <p>Ah, esto es fácil, sólo agrego un <code>SetEnv PYTHON_EGG_CACHE path</code> en la configuración de Apache para este Trac y ahora sí, yastá!</p> <p><a href="http://grulicueva.homelinux.net/~mdione/glob//tags/trac/../sysadmin/">sysadmin</a> <span class= "selflink">trac</span></p> sarge-etch-2 http://grulicueva.homelinux.net/~mdione/glob//posts/sarge-etch-2/ 2009-01-22T04:24:04Z 2008-07-04T23:29:16Z <p>El segundo día me amaneció a las 13. Hoy tocaba terminar con el Apache, que incuía apenas los <code>trac</code>s y el <code>dotproject</code>. Ambos implicaban upgrades.</p> <p>Los <code>trac</code> no me hicieron renegar mucho, pues está <a href="http://trac.edgewall.org/wiki/0.10/TracUpgrade">muy bien</a> documentado y hasta fue scripteable. Básicamente era un salto de <a href= "http://trac.edgewall.org/wiki/0.10/TracUpgrade#From0.8.xto0.9"><code> sqlite2</code> a <code>sqlite3</code></a>, un <code>trac-admin ... upgrade</code> seguido de un <code>trac-admin ... resync</code>.</p> <p>Con lo único con lo que renegué fue que a pesar del upgrade fue exitoso no podía entrar. En los logs encontraba esto:</p> <pre> <code>(9)Bad file descriptor: Could not open password file: (null) </code> </pre> <p><a href= "http://idefix.net/~koos/irregular.php/irregular-20070213/mod-authnz-ldap-apache-2-2-and-allowing-all-ldap-users"> Google al rescate</a> me dijo que había que apagar esa directiva que había tenido que modificar el día anterior:</p> <pre> <code>AuthzLDAPAuthoritative off </code> </pre> <p>También me salió esto:</p> <pre> <code>Failed to load the AuthzSVNAccessFile: The character 'o' in rule '@except' is not allowed in authz rules </code> </pre> <p>Eso era porque en un archivo de configuración del repo (<code>conf.svnaccess</code>) tenía los permisos de sólo lectura como <code>ro</code> en vez de <code>r</code>.</p> <p>El <code>dotproject</code> me enfrentó a un viejo archienemigo: <code>mysql</code>. La verdad que no se a queinacarajos se le ocurre que es una excelente idea poner la configuración de acceso y permisos de una base de datos dentro de la base misma. Por un lado eso termina siendo un archivo binario no versionable y por otro obliga al sysadmin a aprender SQL (cosa que sé, pero no manejo fluidamente ni me interesa saberlo; otro de los motivos por los que amo los ORM's). Y además esta configuración termina en <code>/var</code> y no en <code>etc</code>. <code>postgresql</code>, en cambio, es mucho más inteligente. Y viva el SQL independiente del motor. Lástima nadie lo usa...</p> <p>Bien, sólo tuve que hacer un dump del <code>mysql</code> anterior (<code>chroot</code> mediante), crear la base en el nuevo y hacer un load. Fantástico. Luego una lucha trabado con el sistema de permisos antesmencionado. Luego apuntar un browser a <code>https://server/dotproject/install</code>. En ese minisitio tuve primero que configurarlo (como DP no es un paquete en Debian, lo instalé de fuentes; la configuración queda en un archivo en <code>include/config.php</code>; ojo que las otras opciones es nukear las bases), luego volver a entrar a dicha URL, momento en el cual detecta las bases viejas y da la opción de upgradearlas. Anduvo sin problemas y ahora disfrutamos de un DP más nuevo. Yeepee!</p> <p><a href="http://grulicueva.homelinux.net/~mdione/glob//tags/trac/../sysadmin/">sysadmin</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/trac/../debian/">debian</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/trac/../sarge/">sarge</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/trac/../etch/">etch</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/trac/../apache/">apache</a> <span class= "selflink">trac</span> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/trac/../svn/">svn</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/trac/../mysql/">mysql</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/trac/../dotproject/">dotproject</a></p> trac-para-kreissy http://grulicueva.homelinux.net/~mdione/glob//posts/trac-para-kreissy/ 2009-01-22T04:24:04Z 2008-07-04T23:29:16Z <p>esta noche me voy a dedicar rápidamente a poner un <a href= "http://trac.edgewall.org/">trac</a> para <a href= "http://grulicueva.homelinux.net/~mdione/projects/kreissy/">kreissy</a>. la idea final es que el URL anterior sea la páfina oficial del proyecto, pero que no necesariamente sea el URL final; puede que haya un redirect al medio. ya explicaré porqué.</p> <p>lo primero es crear un trac-env para eso:</p> <pre> <code>mdione@skid:~/src/projects/kreissy$ trac-admin trac initenv kReiSSy sqlite:db/trac.db svn /home/mdione/src/projects/kreissy/svn /usr/share/trac/templates </code> </pre> <p>también se puede con:</p> <pre> <code>mdione@skid:~/src/projects/kreissy$ trac-admin trac </code> </pre> <p>a secas, ejecutar el comando <em>initenv</em> y responder las preguntas, que en realidad son, en ese orden, los parámetro sde allá arriba.</p> <p>el punto complicado es enganchar esto con el apache. hay varios métodos: usándolo como un cgi común y coriente, con FastCGI, con mod<em>python y con mod</em>wsgi. hoy me siento valiente así que usaría mod<em>wsgi, pero como creo que en algún momento esto puede correr en un debian stable, me voy al más seguro mod</em>python.</p> <p>la <a href= "http://trac.edgewall.org/wiki/TracModPython">documentación de trac</a> es muy explícita con respecto a los pasos a seguir, así que no pienso repetirlos acá. sí voy a tratar de explicar cómo lo adapté a mi situación.</p> <p>resultó ser más sencillo que antes. la última que lo probé, hará unas <em>cuantas</em> versiones de trac, me quedó un chancullo muy feo. pero ahora sólo bastó este archivo <em>.htaccess</em> en el directorio en mi <em>public_html</em>:</p> <pre> <code>SetHandler mod_python PythonHandler trac.web.modpython_frontend PythonOption TracEnv /home/mdione/src/projects/kreissy/trac PythonOption TracUriRoot /~mdione/projects/kreissy </code> </pre> <p>y ya tengo el trac andando! ftatico! ahora a llenar contendo y eso. pero eso mañana...</p> <p><a href="http://grulicueva.homelinux.net/~mdione/glob//tags/trac/../sysadmin/">sysadmin</a> <span class= "selflink">trac</span> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/trac/../kreissy/">kreissy</a> [[!tagling tags/apache]]</p> autenticacion-para-un-trac http://grulicueva.homelinux.net/~mdione/glob//posts/autenticacion-para-un-trac/ 2009-01-22T04:24:04Z 2008-07-04T23:29:16Z <p>anoche puse a andar <a href= "http://grulicueva.homelinux.net/~mdione/glob/posts/trac-para-kreissy/"> un trac para kreissy</a>. una de las cosas que dejé colgando fue que el trac quedó abierto como... bueno, apelen a su imaginación para terminar esa frase. esa misma noche humitos dejó su impronta, cosa que no me molesta, pero marca que esto no puede quedar así. so, a poner auth.</p> <p>trac delega todo el sistema de autenticación en apache, así que es lo mismo que poner a andar tal cosa. apache tiene <a href= "http://httpd.apache.org/docs/2.2/howto/auth.html">muy buena doc9n[1] al respecto</a>. el desafío es hacerlo andar desde un <em>.htpasswd</em>.</p> <p>pero, no se puede poner un bloque en un <em>.htpasswd</em>, lo cual imposibilita la empresa. y esto, ahora recuerdo, es lo que lo hizo imposible antes. así que no queda otra que recurrir a la configuración global de apache y dejarnos de joder.</p> <p>al final el archivo <em>/etc/apache2/sites-available/trac-kreissy</em> quedó:</p> <pre> <code>&lt;Location /~mdione/projects/kreissy&gt; SetHandler mod_python PythonHandler trac.web.modpython_frontend PythonOption TracEnv /home/mdione/src/projects/kreissy/trac PythonOption TracUriRoot /~mdione/projects/kreissy &lt;/Location&gt; # auth &lt;Location /~mdione/projects/kreissy/login&gt; AuthType Basic AuthName "kReiSSy-trac" AuthUserFile /home/mdione/src/projects/kreissy/trac/htpasswd Require valid-user &lt;/Location&gt; </code> </pre> <p>luego agregamos el sitio como enabled y reiniciamos apache:</p> <pre> <code>$ sudo a2ensite trac-kreissy Site trac-kreissy installed; run /etc/init.d/apache2 reload to enable. $ sudo /etc/init.d/apache2 reload </code> </pre> <p>c'est tout! luego configuro el trac con <em>trac-admin</em> y listo.</p> <h2><a href="http://grulicueva.homelinux.net/~mdione/glob//tags/trac/../sysadmin/">sysadmin</a> <span class= "selflink">trac</span> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/trac/../apache/">apache</a></h2> <p>[1] documentación.</p>