tags/debianStyXman's globhttp://grulicueva.homelinux.net/~mdione/glob//tags/debian/StyXman's globikiwiki2009-05-27T15:33:17Zdebian-hal-policykithttp://grulicueva.homelinux.net/~mdione/glob//posts/debian-hal-policykit/2009-05-27T15:33:17Z2009-05-27T15:25:03Z
<p>Since a couple of <code>hal</code> versions
(<code>0.5.12~git20090406.46dc48-1</code>) in Debian Sid, it
stopped using system groups as the method to grant privileges to
users, and started using something called <code>PolicyKit</code>
instead. Just to remember what are we talking about here, a user in
the <code>powerdevil</code> group used to suspend or hibernate his
machine sucessfully. But now Mr. PL is a not-understood monster and
<a href=
"http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg643465.html">
the package does not give a smooth transition</a>. That's what I'll
try to do here.</p>
<p>To make sure this is the problem, let's try to suspend the
machine simply by calling <code>hal</code> through
<code>d-bus</code>. I use <code>qdbus</code> here, found in the
<code>libqt4-dbus</code> package, because it lets me introspect the
dbus interface, but you could use <code>dbus-send</code>
instead:</p>
<pre>
<code>qdbus --system org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Suspend 0
Error: org.freedesktop.Hal.Device.PermissionDeniedByPolicy
org.freedesktop.hal.power-management.suspend no <-- (action, result)
</code>
</pre>
<p>If we edit the file <code>/etc/PolicyKit/PolicyKit.conf</code>
we'll see the empty default config that comes with the package.
According to <a href="http://grulicueva.homelinux.net/usr/share/doc/policykit-doc/html/PolicyKit.conf.5.html">its
documentation</a>, we just need to add a couple of nested
<code><match></code> tags with a <code><return></code>
inside. The outher <code>match</code> will filter the
<code>hal</code> <code>action</code>, the inner one the group, and
the <code>return</code> will grant access.</p>
<p>... we wish! There's no way to match to a group, only to a user.
Ok, the first shot will use the user, then we'll see if we really
can do it.</p>
<p>How do we discover which action we must use? We can use
<code>polkit-action</code> to see what are the available actions.
In the first case,
<code>org.freedesktop.hal.power-management.*</code> will do.</p>
<pre>
<code><match action="org.freedesktop.hal.power-management.*">
<!--match group="powerdev"-->
<match user="mdione">
<return result="yes"/>
</match>
</match>
</code>
</pre>
<p>Now the previous command suspends the machine allright! Next,
removable devices:</p>
<pre>
<code><match action="org.freedesktop.hal.storage.mount-removable">
<!--match group="plugdev"-->
<match user="mdione">
<return result="yes"/>
</match>
</match>
<match action="org.freedesktop.hal.storage.eject">
<!--match group="plugdev"-->
<match user="mdione">
<return result="yes"/>
</match>
</match>
</code>
</pre>
<p>I added the <code>eject</code> action just in case. All this
works fine for my user, but I really liked the group interface. The
complaining about it was that it was too coarse, and now this way
one can grant specific actions in amore fine grained way, but I
think is too fine grained. Unluckly we cannot (ab)use the
<code>define_admin_auth</code> tag to give a similar functionality,
it doesn't work that way (I don't know what way it works
either).</p>
<p>As a final note, see that I used a per-action approach, where
the outer match points to an action. we could use a per-user
approach, where the outer match points to a user:</p>
<pre>
<code><match user="mdione">
<match action="...">
<match action="...">
<match action="...">
</match>
</code>
</pre>
<p><span class="selflink">debian</span> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/debian/../sysadmin/">sysadmin</a></p>
packaging-python-in-debianhttp://grulicueva.homelinux.net/~mdione/glob//posts/packaging-python-in-debian/2009-01-22T04:24:04Z2008-08-23T20:31:01Z
<p>Just a note: from now on some posts will be in English. I just
want to make sure some of them are worlwide readable.</p>
<p>During <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/debian/../../posts/debconf8/">DebConf8</a> I met John
Wright, who works in HP. He packages a couple of python things,
like <code>trac-mercurial</code> (currently in sid only), and he
offered to teach me how to package python things.</p>
<p>I've been trying to do that for a couple of years, but <a href=
"http://www.debian.org/doc/packaging-manuals/python-policy/">Debian's
Python Policy</a> is just too much for me. Call me lazy, $DEITY
knows I know I am, but I just can't cope with so much and dense
info.</p>
<p>So, I tried to look for automatical tools to do it. Two years
ago the only thing I could find was (WARNING: ugly colors ahead)
<a href="http://packer.sourceforge.net/"><code>packer</code></a>,
but its vitality is rather low: according to FreshMeat, it was
added on Dec 2005 and last updated on Feb 2006. I started using it,
but its interface is not very good, so realeasing further versions
was not an easy task. Also, I think now it's very out-of-date to
Debian Policy.</p>
<p>This week I tried again, now trying to find something that could
use either <code>python-support</code> or
<code>python-central</code> to manage the python package, and also
that it used the info from <code>setuptool</code>'s
<code>setup.py</code>, but I only could find some incomplete
tutorials.</p>
<p>So John explained it to me. It really comes down to using
<code>dh_make</code>, the starting point of <code>debhelper</code>.
Before you run it you have to make sure everything's in place for
it. That means to put the code in a directory which name is the
name of the program, followed by a dash, followed by the version,
like <code>psync-0.4.1</code>.</p>
<p>Now you just run <code>dh_make --createorig</code>, who asks
what kind of package you're about to build. Normaly a 'single
binary' is enough. It will show you some info it has gathered from
your environment, about who you are and what package you're
building. This will also create a <code>.orig</code> directory in
the parent directory (making if a sibling of the current one) from
the current directory, so make sure no cruft goes in. Here is the
point were if there is no <code>setup.py</code> file, you just add
it with <a href=
"http://peak.telecommunity.com/DevCenter/setuptools">the proper
info</a>.</p>
<p>This creates the <code>debian</code> directory with a lot of
files on it. Those who already read about Debian packaging will
find familiar files. If you're not, the best way to figuring out
what goes where is the proper Debian Policy.</p>
<p>The first file you have to edit is <a href=
"http://www.debian.org/doc/manuals/maint-guide/ch-dreq.en.html#s-control">
<code>control</code></a>; just make sure that you add
<code>python</code> and <code>python-support</code> as BuildDeps
and <code>${python:Depends}</code> as Deps.</p>
<p>The <a href=
"http://www.debian.org/doc/manuals/maint-guide/ch-dreq.en.html#s-rules">
<code>rules</code></a> file is a little more complicated. It's a
<code>Makefile</code> with several targets. <code>configure</code>
must have the commands needed to configure the project prior to
building it. Most python programs don't need this or the next one,
which is the <code>build</code> target. This one obviously should
have the commands needed to build the program. The third one is
<code>clean</code>, where you usualy just neet to replace the
boilerplate <code>$(MAKE) clean</code> with <code>python setup.py
clean</code>. The <code>install</code> target will need a
<code>python setup.py install
--prefix=$(CURDIR)/debian/psync/usr</code>. Just check out the
<code>$(MAKE)</code> invocation and you'll figure it out.</p>
<p>The last one is the <code>binary-arch</code> target. This one
has lots of calls to <code>debhelper</code> functions. If you read
it carefully, you'll see a <code>dh_python</code> call, commented
out. Don't use it, use <code>dh_pysupport</code>. This is the hook
for <code>python-support</code> support. This is the part that does
all the magic to make sure that you don't break the Debian Python
Policy. And that's mostly it. You can comment out a couple of
<code>dh_</code> functions, like <code>dh_strip</code> or
<code>dh_shlibdeps</code> (shared libs deps).</p>
<p>Another file to edit, and this might be the last one, is
<a href="http://www.debian.org/doc/manuals/maint-guide/ch-dreq.en.html#s-changelog">
<code>changelog</code></a>. This one has a particular format, so I
suggest to use <code>dch</code> from the <code>devscripts</code>
package. The one you'll find is a template the <code>dh_make</code>
left for you to fill. You just need to put the bug number of the
<a href="http://www.debian.org/devel/wnpp/being_packaged">ITP</a>
bug. What, you haven't send an ITP but yet? Well, <a href=
"http://www.debian.org/devel/wnpp/#l1">do it</a>! Then you can use
<code>dch -a</code> to add new entries to the current version's
entries, <code>dch -i</code> to increment the Debian version and
maybe <code>dch -r</code> to update the date at the bottom of the
current version. See its manpage for further options.</p>
<p>Last, there is some junk in the <code>debian</code> directory,
most of them the <code>*.ex</code> files, which are just examples.
You can safely get rid of them, or read them to see if they suit
you.</p>
<p>The next step is to build it. This is as easy-peasy as running
<code>dpkg-buildpackage</code>. This will build a <code>.deb</code>
file, a <code>.dsc</code> file, a <code>.orig.tar.gz</code> file, a
<code>.diff.gz</code> and a <code>.changes</code> file in the
parent directory. This is the outcome of all the work you've done
so far, but is not finished yet. You better run
<code>lintian</code> on the <code>.dsc</code> file and the
<code>.deb</code> file. If you add the <code>-i</code> option
you'll get some explanation on why you failed to give a proper,
no-lint package.</p>
<p>So, that's it. It's a longish post, but should get you up
packaging python apps in a few minutes. The are still a few
problems: you end up dup'ing info: in the <code>setup.py</code>
file and in various files in the <code>debian</code> directory.
Maybe I'll hack something to workaround this.</p>
<p><span class="selflink">debian</span> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/debian/../python/">python</a></p>
ntp-ntpdatehttp://grulicueva.homelinux.net/~mdione/glob//posts/ntp-ntpdate/2009-01-22T04:24:04Z2008-07-10T20:34:23Z
<p>En la oficina tenemos un server que entrega <code>nfs</code>;
también tenemos mucha gente que compila cosas. Estos dos parámetros
hacen que tener sincronizadas las horas de las máquinas sea una
necesidad. Pra esto se pueden usar los paquetes
<code>ntpdate</code> (para on-time-sync) y <code>ntp</code> (para
keep-in-sync). Hoy estuve revisando bien como interactúan ambos,
sobre todo al momento del booteo. antes una descripción de qué hace
cada uno.</p>
<p><code>ntp</code> se encarga de mantener la hora de la máquina
mas-o-menos sincronizada con la de una fuente externa. Si llega a
haber cierta diferencia, se encarga de ir acomodando la hora de a
poco, para que el sistema no sufra por cambios bruscos. Un problema
que tiene es que si la diferencia con la referencia externa es muy
grande, <code>ntp</code> no es capaz de salvar las diferencias y
entonces ''no hace nada''. <code>ntpdate</code> se encarga
simplemente de setear incondicionalmente la hora local según la
hora que consiga de esta referencia externa. El escenario ideal
sólo haría uso de <code>ntp</code>, pero en general se podría usar
también <code>ntpdate</code> para máquinas con el reloj
para-el-carajo, como parece ser el caso de al menos una de nuestra
máquinas.</p>
<p>El tema es que, por defecto, <code>ntpdate</code> utiliza un
archivo de configuración de <code>ntp</code>, pero a su vez corre
despúes de éste, en cuya condición falla pues el puerto UDP que usa
ya está en uso por <code>ntp</code>. Desinstalando <code>ntp</code>
nos deja sin el archivo de configuración, y en realidad tiene
sentido quedarnos con él.</p>
<p>La solución que encontré es simplemente hacer un symlink al
script de <code>ntpdate</code> en <code>/etc/network/if-up.d</code>
a un nombre anterior al de <code>ntp</code> (por ejemplo,
<code>mntpdate</code>). Voy a ver si en debian/ubuntu me dan pelota
con lo de ponerles mejor orden que simplemente el nombre.</p>
<p><a href="http://grulicueva.homelinux.net/~mdione/glob//tags/debian/../sysadmin/">sysadmin</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/debian/../ubuntu/">ubuntu</a> <span class="selflink">debian</span></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/debian/../sysadmin/">sysadmin</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/debian/../ldap/">ldap</a>
<span class="selflink">debian</span> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/debian/../sarge/">sarge</a>
<a href="http://grulicueva.homelinux.net/~mdione/glob//tags/debian/../etch/">etch</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/debian/../pam/">pam</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/debian/../apache/">apache</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/debian/../svn/">svn</a></p>
debconf8http://grulicueva.homelinux.net/~mdione/glob//posts/debconf8/2009-01-22T04:24:04Z2008-07-04T23:29:16Z
<p>¡Sí señores, voy a <a href=
"http://debconf8.debconf.org/">DebConf8</a>! MDQ, del 9 al 17.</p>
<p><span class="selflink">debian</span></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/debian/../sysadmin/">sysadmin</a> <span class=
"selflink">debian</span> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/debian/../sarge/">sarge</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/debian/../etch/">etch</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/debian/../apache/">apache</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/debian/../trac/">trac</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/debian/../svn/">svn</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/debian/../mysql/">mysql</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/debian/../dotproject/">dotproject</a></p>
hosting-humitoshttp://grulicueva.homelinux.net/~mdione/glob//posts/hosting-humitos/2009-01-22T04:24:04Z2008-07-04T23:29:16Z
<p>ayer le ofrecí hosting para sus proyectos a <a href=
"http://humitos.wordpress.com/">humitos</a>. el iluso cayó rápido,
sobre todo después de que probó cómo anda svn desde su casa bajando
las fuentes de kreissy.</p>
<p>para ofrecerle este servicio le creé una cuenta en mi máquina y
lo dejé hacer lo que le parezca, como ya he hecho con otra gente
(por ejemplo, mi máquina es un ssh gateway paara alguna gente que
se queda detrás del firewaal de la facu, pues tiene corriendo el
ssh en el 443, que si está abierto).</p>
<p>como mi máquina es un debian sid, y éste suele sacudir los
paquetes de vez en cuando (ya con el desarrollo de kreissy me
mordió el cambio de SQLAlchemy, saltando de la 0.3.x a la 0.4.x,
que tienen APIs sutilmente incompatibles), se me ocurrió levantar
una instancia xen que ya tenía tirada por ahí. les cuento.</p>
<p>hace poco más de un mes nueces trajo su desktop que estaba
juntando en un rincón de su pieza y, poniendo uno de los dos discos
que tengo, pusimos un debian unstable, al cual convertimos en el
dom0 de un xen que corrió dos instancias xen, una para él y otra
para mí. la mía corría un debian etch directamente de mi disco, por
las dudas en algún momento él se tuviera que llevar la máquina.</p>
<p>y ese momento llegó hace una semana: la vendió. me devolvió mi
disco, que terminó de nuevo en mi máquina. lo monté como lo ten;ia
antes y todos contentos.</p>
<p>entonces, hoy instalé un kernel xen. como esto es un debian sis,
y no hay kernels con xen más arriba del 2.6.18, y sid ya corre
2.6.22 (para cuándo el .23?!?), tuve que bajar los paquetes
linux-image-2.6.18-5-xen-686<em>2.6.18.dfsg.1-13</em>i386.deb y
linux-modules-2.6.18-5-xen-686<em>2.6.18.dfsg.1-13</em>i386.deb a
mano e instalarlos a mano. para instalarlos usé dpkg a lo macho,
pero bien podría haber usado gdebi. configuré grub un poco a mano y
reinicié.</p>
<p>hace mucho que uso debian, y desde hace mucho que uso kelmers
compilados específicamente para mi hw (he notado que en máquinas
chicas eso aumenta bastante la velocidad, así porqué no aplicar un
poco la filosofía gentoo en este caso?). el tema es que estuve un
rato reconfigurando algunas cosas para que anden con cómo levantó
el kernel genérico algunas cosas (red y soporte de IDE en vez de
PATA). sé que esas cosas se pueden arreglar con udev, pero la
verdad es que siempre me llevé medio mal con él y ahora no tenía
tiempo de revisarlo.</p>
<p>cuestión que después de un par de toqueteos levantó sin más
problemas. me restregué las manos, creé el archivo de configuración
de la instancia xen, y disparé un xm create. para asegurarme que
estaba todo bien, con xm console luxury me ataché a la consola del
domU. ésta felizmente me mostró cómo arrancó todo el sistema hasta
que llegó el momento de correr /sbin/init. entonces es cuando no
hizo más que imprimir:</p>
<pre>
<code>request_module: runaway loop modprobe binfmt-464c
</code>
</pre>
<p>y nada más. buscando encontré referencias que no entendía, hasta
que me cayó la ficha: la máquina de nueces era una amd64, y la
instancia xen estaba en esa arquitectura. acá tengo un athlon xp
2600+, que es i386. el loco se negaba a correr soft compilado para
64 bits.</p>
<p>en fin. humitos empezó a subir sus cosas a su home en el dom0.
ya después veré si migro eso a una máquina aparte o no. también
estuvimos jugando con svk y svnadmin.</p>
<p><a href="http://grulicueva.homelinux.net/~mdione/glob//tags/debian/../xen/">xen</a> <span class="selflink">debian</span>
<a href="http://grulicueva.homelinux.net/~mdione/glob//tags/debian/../sysadmin/">sysadmin</a></p>
broken-trachttp://grulicueva.homelinux.net/~mdione/glob//posts/broken-trac/2009-01-22T04:24:04Z2008-07-04T23:29:16Z
<p>Yo sabía que tener un serven en Debian Sid es una lotería, pero
como <a href=
"http://grulicueva.homelinux.net/~mdione/glob/posts/hosting-humitos/">
no me anduvo</a> volver a poner a andar mi instancia Xen con Debian
Etch, bueno, acá estamos.</p>
<p>Cuestión que hoy hice una actualización de los paquetes, cosas
que hago una vez por semana, y resulta que ahora mis tracs no
andan. Revisando los logs de Apache veo backtraces que terminan
en:</p>
<pre>
<code>ValueError: database parameter must be string or APSW Connection object
</code>
</pre>
<p>Buscando encontré que es <a href=
"http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=454424">un bug en
Debian</a>. Ahora, resulta que estoy usando <a href=
"http://packages.debian.org/sid/apt-listbugs"><em>apt-listbugs</em></a>,
que te muestra los bugs reportados de los paquetes que van a ser
instalados/actualizados antes de que lo sean, de forma que puedas
decidir si lo querés hacer o no. Recuerdo haber visto el bug en la
lista e ignorarlo, cosa que fue mi perdición.</p>
<p>Según <a href=
"http://www.mail-archive.com/trac-users%40googlegroups.com/msg07792.html">
la lista <em>trac-users</em></a>, una forma de soplucionarlo es
volver a la versión anterior de <em>python-pysqlite2</em>. ¿Y cuál
era la versión anterior? Bueno, eso lo puede responder el log de la
actualización, <em>/var/log/apt/term.log</em>:</p>
<pre>
<code>Preparing to replace python-pysqlite2 2.3.5-1 (using .../python-pysqlite2\_2.4.0-1\_i386.deb) ...
</code>
</pre>
<p>Fantástico. Por suerte justo esa versión <a href=
"http://packages.qa.debian.org/p/python-pysqlite2.html">fué migrada
a Lenny</a> hace poco; sino, habría que haber buscado un mirror que
no actualizara muy seguido. Además, parece que <a href=
"http://packages.qa.debian.org/p/python-pysqlite2/news/20071205T223205Z.html">
el bug ya está reparado</a> por la nueva versión del paquete. Así
que simplemente me bajé la <em>2.4.0-2</em> y la instalé con
<em>dpkg -i</em>. ¡Listo!</p>
<p>¿Listo? I wish. El trac que estaba revisando quedó sin css y
otras cosas. De los logs de Apache:</p>
<pre>
<code>GET /~mdione/projects/kreissy/chrome/common/css/trac.css HTTP/1.1" 500
</code>
</pre>
<p><em>Internal Server Error</em>. Now what? ¡Seguimos en la
misma!:</p>
<pre>
<code>ValueError: database parameter must be string or APSW Connection object, referer: http://grulicueva.homelinux.net/~mdione/projects/kreissy/
</code>
</pre>
<p>Ok, tons vamos patrás. Instalo <em>2.3.5-1</em> y... ¡tampoco!
Same shit... ¿No me olvido de algo? ¡Sí, de reiniciar Apache!
Reinicio, y allí está mi querido trac, vivito y coleando.</p>
<hr />
<p>PD: Ustedes tal vez se preguntarán "¿Este pibe piensa globear
todo lo que le pase en Sid?". La respuesta es: espero que no. Only
time will tell. Supongo que será hasta que descubra qué está bueno
y qué no.</p>
<p><a href="http://grulicueva.homelinux.net/~mdione/glob//tags/debian/../sysadmin/">sysadmin</a> <span class=
"selflink">debian</span></p>
tzdata-en-sargehttp://grulicueva.homelinux.net/~mdione/glob//posts/tzdata-en-sarge/2009-01-22T04:24:04Z2008-07-04T23:29:16Z
<p>Como dijo Marga <a href=
"http://www.marga.com.ar/blog/index.cgi/debian/Argentina_changes_timezone.html">
hace más de un mes</a>, hubo que hacer una nueva versión del
paquete <em>tzdata</em> para que tome el cambio de horario de
Argentina por el supuesto ahorro de energía. Una cosa que no aclaró
Marga es que ese paquete sirve para sarge también, aunque sea una
versión para etch.</p>
<p>Como no me animo a poner en un sarge el volatile de un etch,
decidí instalar el paquete a mano. Lo bajé de <a href=
"http://volatile.debian.org/debian-volatile/pool/volatile/main/t/tzdata/">
volatile</a> y lo instalé con <em>dpkg -i</em>:</p>
<pre>
<code># dpkg -i tzdata_2007j-1etch2_all.deb
Selecting previously deselected package tzdata.
(Reading database ... 51812 files and directories currently installed.)
Unpacking tzdata (from tzdata_2007j-1etch2_all.deb) ...
Replacing files in old package libc6 ...
Setting up tzdata (2007j-1etch2) ...
Current default timezone: 'America/Cordoba'.
Local time is now: Tue Jan 29 14:55:02 ARST 2008.
Universal Time is now: Tue Jan 29 16:55:02 UTC 2008.
Run 'tzconfig' if you wish to change it.
</code>
</pre>
<p>Como diría Anibal, "me encanta cuando un plan funciona".</p>
<p><a href="http://grulicueva.homelinux.net/~mdione/glob//tags/debian/../sysadmin/">sysadmin</a> <span class=
"selflink">debian</span></p>