tags/apacheStyXman's globhttp://grulicueva.homelinux.net/~mdione/glob//tags/apache/StyXman's globikiwiki2009-01-22T04:24:04Zsarge-etch-3http://grulicueva.homelinux.net/~mdione/glob//posts/sarge-etch-3/2009-01-22T04:24:04Z2008-07-04T23:29:16Z
<p>Hoy llegué a la oficina con la idea de que algunos
<code>trac</code>s aún no andaban. Resultó que la auth contra LDAP
no estaba lista. Encontré que esta configuración si andaba:</p>
<pre>
<code> AuthLDAPURL ldap://ldap.except.com.ar/ou=People,dc=except,dc=com,dc=ar
Require valid-user
</code>
</pre>
<p>Mientras que esta otra no:</p>
<pre>
<code> AuthLDAPURL ldap://ldap.except.com.ar/ou=People,dc=except,dc=com,dc=ar
AuthLDAPGroupAttribute memberUid
AuthLDAPGroupAttributeIsDN off
Require group cn=except,ou=Group,dc=except,dc=com,dc=ar
</code>
</pre>
<p>Resulta que ahora tenés que avisarle que <a href=
"http://www.linux.com/feature/120050">el grupo lo tiene que buscar
en el LDAP</a>:</p>
<pre>
<code> Require ldap-group cn=except,ou=Group,dc=except,dc=com,dc=ar
</code>
</pre>
<p><a href="http://grulicueva.homelinux.net/~mdione/glob//tags/apache/../sysadmin/">sysadmin</a> <span class=
"selflink">apache</span> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/apache/../ldap/">ldap</a></p>
apache-como-wrapper-de-sslhttp://grulicueva.homelinux.net/~mdione/glob//posts/apache-como-wrapper-de-ssl/2009-01-22T04:24:04Z2008-07-04T23:29:16Z
<p>Hoy me tocó hacer una negrada marca cañón. Resulta que tenemos
un <a href="https://beetroot.except.com.ar/xarope/">Xarope</a>
andando. En la arquitectura de Xarope tenemos un Apache que nos
hace de frontend a todos los sitios Zope que corren en los
DomU's.</p>
<p>El tema es que estaba poniendo a andar en uno de los DomU's un
repo <a href=
"http://www.selenic.com/mercurial/wiki/">Mercurial</a>, el cual
corre detrás de un <a href="http://www.lighttpd.net/">lighty</a>.
Ponerlo a andar no fue muy duro, salvo que no sabía mucho ni de uno
ni del otro. Cuestión que llegué al punto en que podía hacer un
<code>hg clone</code> para bajarme una copia del repo, mas no hacer
un <code>push</code>. Acá es donde se ponía peluda la cosa.</p>
<p>El problema es el siguiente: para que las passwds no anden
volando en cueros tenía que poder acceder al repo por
<code>https</code>. Ahora, repiensen el esquema: tengo un Apache al
que le llegan los pedidos <code>https</code>, el que a través de un
<code>Rewrite</code> forwardea el pedido al Lighttpd corriendo en
otra máquina (virtual, pero no viene al caso). Por razones casi
obvias forwardear de un 443 a un 443 no anda. ¡Pero resulta que si
el forward es al 80 si!</p>
<p>Es decir, el Apache recibe <code>https</code>, y cuando
forwardea el pedido, lo hace en <code>http</code> plano. Esto
responde a mi pregunta "¿Comocatzo vamos a hacer cuando los
usuarios de Zope pidan acceso por <code>https</code>?". La única
contra que le veo a este setup es que el sitio final (sea un Zope o
un repo Mercurial) no sabe si el acceso viene con SSL o no.</p>
<p><a href="http://grulicueva.homelinux.net/~mdione/glob//tags/apache/../sysadmin/">sysadmin</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/apache/../lighttpd/">lighttpd</a> <span class="selflink">apache</span>
<a href="http://grulicueva.homelinux.net/~mdione/glob//tags/apache/../ssl/">ssl</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/apache/../mercurial/">mercurial</a>
<a href="http://grulicueva.homelinux.net/~mdione/glob//tags/apache/../xarope/">xarope</a></p>
sarge-etch-1http://grulicueva.homelinux.net/~mdione/glob//posts/sarge-etch-1/2009-01-22T04:24:04Z2008-07-04T23:29:16Z
<p>Después de la debacle de la semana pasada (de la que aún quedan
algunas secuelas que ya comentaré) y teniendo ya planeada una
upgradeada del desrver de Sarge a Etch (cosa que venía haciendo en
un Xen hasta que me fui de vacaciones), decidimos hacerlo de
una.</p>
<p>Empezamos en otra máquina instalando un Etch prístino. Esto
implicó (re)instalar todo el soft que ya estaba corriendo en el
servidor (que aún seguía corriendo). Lo único que no instalamos de
nuevo aún es el zope/plone; tal vez lo hagamos directamente con lo
que llaman un <em>buildout</em>.</p>
<p>Una desición personal, sobre todo basada en que en este entorno
casi todos somos root, fue instalar algo que mantuviera en un rcs
el contenido de <code>/etc</code>. Hace un par de años me senté a
intentar un wrapper para <code>svn</code> que guardara la metadata
como properties de los archivos llamado <code>sylvan</code>. El
sistema era mas o menos usable, pero por suerte el genio de Joey
Hess le ocurrió el mismo problema y salió con
<code>etckeeper</code>. <code>ectkeeper</code> no está en Etch, por
lo que instalé ese paquete y <code>metastore</code> bajándolos del
repo de Sid y <code>mercurial</code> del repo de backports. Como no
estoy seguro que el nnotito de <code>aptitude</code> sepa manejar
este tipo de repos [para el caso creo que <code>dselect</code>
tampoco] no puse backports entre los <em>deblines</em>.</p>
<p>El siguiente paso fue mergear la configuración actual del server
con lo que me dejó esta instalación. Claramente no era cuestión de
tirar el <code>/etc</code> viejo encima del otro y que se hagan
agua los helados. Para ello usé <code>xxdiff</code> (o también
podría haber usado <code>meld</code> o <code>diff3</code> para
<code>emacs</code>), pudiendo seleccionar qué pedazos quería
específicamente. Un poco de edición y estábamos casi listos.</p>
<p>El penúltimo paso fue popular el nuevo LDAP. pare ello alcanzó
un <code>slapcat -l</code> en el server; borrar los registros que
ya están en el server nuevo (el root del directorio y el admin);
luego un <code>slapadd -l</code> en el nuevo; y luego probar con un
par de <code>ldapsearch</code>s. Tambien copiar los certificados y
cambiarles el owner a <code>openldap</code>.</p>
<p>Luego tocó hacer andar <code>PAM</code> y <code>nss</code>
contra dicho LDAP. La configuración estaba "as is", incluyendo los
certificados. Luego de algo así como una hora encontré que la parte
de TLS no estaba andando, así que hube de desactivarla, para lo
cual śolo hubo que comentar el <code>ssl start_tls</code> y ya. Mas
adelante veré cómo reactivarla.</p>
<p>Ya listos (cerca de las 12 de la noche) apagué el server,
instalé el disco y a bootear. Y acá es cuando comienza el verdadero
baile.</p>
<p>Por suerte el mail no me trajo verdaderos problemas. Sólo tuve
que ser muy cuidadoso, pues nosotros bajamos losmails de nuestra
verdadero servidor por <code>fetchmail</code>. Por algún motivo se
me escapó en el merge de la configuración del <code>postfix</code>
la parte que dice que use MailDir en el home del usuario, por lo
que estuve renegando otro tanto. <code>ssh</code> también fallaba,
pero era porque se me había escapado un
<code>PasswordAuthentication no</code>.</p>
<p>El último paso de la noche era (re)configurar el Apache para que
anduvieran los repos <em>svn</em> vía DAV que autenticaban contra
el LDAP. Al día siguiente vendría la parte de reactivar otros
servicios del Apache. No hubo que renegar mucho, sólo cambiaron la
forma en que le decía que autentique contra LDAP y agregarle una
<code>z</code> a <code>AuthzLDAPAuthoritative</code>:</p>
<pre>
<code># AuthLDAPEnabled On
AuthBasicProvider ldap
AuthzLDAPAuthoritative on
</code>
</pre>
<p>13 horas después de iniciar mi día laboral (3 de la matina) me
retiré tambaleando a mi casa.</p>
<p><a href="http://grulicueva.homelinux.net/~mdione/glob//tags/apache/../sysadmin/">sysadmin</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/apache/../ldap/">ldap</a>
<a href="http://grulicueva.homelinux.net/~mdione/glob//tags/apache/../debian/">debian</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/apache/../sarge/">sarge</a>
<a href="http://grulicueva.homelinux.net/~mdione/glob//tags/apache/../etch/">etch</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/apache/../pam/">pam</a> <span class=
"selflink">apache</span> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/apache/../svn/">svn</a></p>
acceso-svn-por-httpshttp://grulicueva.homelinux.net/~mdione/glob//posts/acceso-svn-por-https/2009-01-22T04:24:04Z2008-07-04T23:29:16Z
<p>Heme aquí otra vez, tratando de dar el último paso en <a href=
"http://grulicueva.homelinux.net/~mdione/glob/posts/hosting-humitos/">
darle hosting a humitos</a>, que vendría a ser, dar acceso a
subversion por https. Actualmente tenemos acceso anónimo y acceso
por ssh, pero el primero no tiene autenticación, por lo que no
permite commits, y para acceder al segundo requiere un user en mi
server. Éste no deja de ser mi server privado y no me gusta la idea
de abrir cuentas a troche y moche.</p>
<p>Prender https fue faćil, aunque lo puse en el puerto 4433,
porque en el 443 tengo el ssh. El motivo es medio largo de
explicar. Cabía la posibilidad de poner algún programa que me
permita tener <a href=
"http://www.google.com/search?q=ssh+https+443">los dos servicios en
el mismo puerto</a>, pero el más maduro que ví decía ser una
implementación muy chapucera.</p>
<p>Poner dav y dav-svn a andar es una pavada. Todo está explicado
en el <a href=
"http://svnbook.red-bean.com/en/1.4/svn.serverconfig.httpd.html">libro
de subversion</a>. El problema saltó cuando ví los repos de
humitos. Este chango tiene bastantes proyectitos chicos puestos en
disco de una forma que justo queda incómodo de usar con esto.</p>
<p>Resulta que los paths son de la pinta
<em>/home/humitos/proyectos/<proy>/svn</em>. Las directivas
que tengo que poner en la configuración de apache son de la
pinta:</p>
<pre>
<code><Location /~humitos/svn/<proy>>
DAV svn
SVNPath /home/humitos/proyectos/<proy>/svn
</Location>
</code>
</pre>
<p>Al día de hoy cuento 15 proyectos. Se me ocurrió que tal vez s
podría hacer con un LocationMatch, as in:</p>
<pre>
<code><LocationMatch ^/(~|%2f|%2F)humitos/svn/([^/]*)/(.*)$>
DAV svn
SVNPath /home/humitos/projects/$2/svn/$3
</LocationMatch>
</code>
</pre>
<p>El primer match es porque en distintas circunstancias el
<em>~</em> es enviado en alguna de esas tres formas por los
navegadores, y no se desescapan antes de ser procesados por Apache.
Lamentablemente no hay nada en la documentación de Apache que diga
que se puedan usar el $2 y el $3 de esa forma, cosa que me
confirmaron en el canar #apache en freenode. También existe la
directiva <em>SVNParentPath</em>, pero serviría sólo si los path
fueran de la pinta
<em>/home/humitos/proyectos/<proy>/svn</em>.</p>
<p>Así que al fin y al cabo, no me quedó otra más que poner todo en
un mismo archivo, darle permiso a humitos para escribir en él, y
darle sudo pare reiniciar el Apache.</p>
<p><a href="http://grulicueva.homelinux.net/~mdione/glob//tags/apache/../sysadmin/">sysadmin</a> <span class=
"selflink">apache</span> subversion</p>
sarge-etch-2http://grulicueva.homelinux.net/~mdione/glob//posts/sarge-etch-2/2009-01-22T04:24:04Z2008-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/apache/../sysadmin/">sysadmin</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/apache/../debian/">debian</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/apache/../sarge/">sarge</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/apache/../etch/">etch</a> <span class="selflink">apache</span> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/apache/../trac/">trac</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/apache/../svn/">svn</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/apache/../mysql/">mysql</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/apache/../dotproject/">dotproject</a></p>
autenticacion-para-un-trachttp://grulicueva.homelinux.net/~mdione/glob//posts/autenticacion-para-un-trac/2009-01-22T04:24:04Z2008-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><Location /~mdione/projects/kreissy>
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonOption TracEnv /home/mdione/src/projects/kreissy/trac
PythonOption TracUriRoot /~mdione/projects/kreissy
</Location>
# auth
<Location /~mdione/projects/kreissy/login>
AuthType Basic
AuthName "kReiSSy-trac"
AuthUserFile /home/mdione/src/projects/kreissy/trac/htpasswd
Require valid-user
</Location>
</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/apache/../sysadmin/">sysadmin</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/apache/../trac/">trac</a>
<span class="selflink">apache</span></h2>
<p>[1] documentación.</p>