El segundo día me amaneció a las 13. Hoy tocaba terminar con el Apache,
que incuía apenas los tracs y el dotproject. Ambos implicaban
upgrades.
Los trac no me hicieron renegar mucho, pues está muy
bien documentado y
hasta fue scripteable. Básicamente era un salto de sqlite2 a
sqlite3,
un trac-admin ... upgrade seguido de un trac-admin ... resync.
Con lo único con lo que renegué fue que a pesar del upgrade fue exitoso no podía entrar. En los logs encontraba esto:
(9)Bad file descriptor: Could not open password file: (null)
Google al rescate me dijo que había que apagar esa directiva que había tenido que modificar el día anterior:
<span class="createlink">AuthzLDAPAuthoritative</span> off
También me salió esto:
Failed to load the <span class="createlink">AuthzSVNAccessFile</span>: The character 'o' in rule '@except' is not allowed in authz rules
Eso era porque en un archivo de configuración del repo
(conf.svnaccess) tenía los permisos de sólo lectura como ro en
vez de r.
El dotproject me enfrentó a un viejo archienemigo: mysql. 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
/var y no en etc. postgresql, en cambio, es mucho más inteligente.
Y viva el SQL independiente del motor. Lástima nadie lo usa...
Bien, sólo tuve que hacer un dump del mysql anterior (chroot
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 https://server/dotproject/install. 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
include/config.php; 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!
In one of my previous post I mentioned that my blog was brokenito. Actually my
blog is just a bunch of markdown files that I compile in a blog with
ikiwiki, and I store it in a Bazaar repo.
A month ago I bought a new hardisk that I installed in my notebook, replacing the one that used to have the sources of my blog. I reinstalled Debian Sid from scratch[1] and just grabbed everything from the backups (yes, I have weekly backups. How many can say that? :)
The problem was this: the backups included the Bazaar working copies/branches,
except for the (normally empty) directory .bzr/repository/upload/. This
directory is populated with a temporary file each time you do a commit, but
bzr doesn't try to create it if it doesn't exist. I think they
assume it's a given because it's created when you do a bzr init.
So here are two bugs: first my backup system (just a bash script that runs
rsync) should store empty directories (fixed) and I think bzr should create
the dir if it's not there. I will try to make a patch and submmit a wish in
their bugtracker.
This oneliner should fix all my restored repos:
find . -name .bzr | while read repo; do mkdir -vp $repo/repository/upload/; done
[1] Somehow I feel the new instalation faster than the previous one, specially when installing new software or updates. I think this might be related to the high fragmentation that the old system might have. I should explore this.
Tal vez ya lo leyeron en otro lado, pero bueno: el otro día fue el día de los tutoriales de Kubuntu. Básicamente fueron tutoriales por IRC. Los logs los pueden encontrar en el wiki de Kubuntu. En particular hay 3 que me parecen bastante piolas:
Cómo usar bazaar (con Launchpad, esa bonga de project server cerrado que usan los *buntu guys).
Empaquetando para Kubuntu (obvio, sirve para Debian también).
Tutorial de PyKDE4, el cual lamebtablemente es muy corto.
Como para salir masomenos andando están muy piolas.
Siguiendo el post anterior, y en particular con bazaar, un par de links más.
Empecemos por el hecho de que bazaar acaba de lanzar su versión 1.0. Notable que entonces yo encuentre esto:
$ dpkg -l bazaar
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name Version Description
+++-=======-==========-========================================================
ii bazaar 1.4.2-5.3 arch-based distributed revision control system
La explicación según la comunidad:
14:56 < <span class="createlink">StucKman</span>> is debian's version numbering wrong?
14:57 < <span class="createlink">MattCampbell</span>> The package name is bzr
14:58 < sabdfl> <span class="createlink">StucKman</span>: bzr was bazaar-ng
14:59 < sabdfl> there was a project called tla
14:59 < sabdfl> some folks at canonical had a branch of that, which they called bazaar
14:59 < sabdfl> that's what you are looking at v1.4.2 of
15:00 < sabdfl> bzr was a skunkworks, from scratch clean set of ideas
15:00 < sabdfl> and when most of the canonical guys embraced that, they brought the name along
Del sitio de bazaar, recomiendo el minitutorial, un pdf con una quick reference, obviamente la extensa documentación, y muy particularmente los workflows.
Por último, acá hay un link de cómo usar bazaar para administrar /etc, el cual al momento de escribir este post parece estar caído.
Acaba de terminar la edición 2009 de pyCamp. Esta vez vinieron cerca de 40 personas, lo cual hizo que hubiera más proyectos dando vueltas y mas gente en los proyectos. Fueron 4 días fantásticos llenos de ideas, código, reuniones, juegos, algo de alcohol y mucho mas. A diferencia del año pasado, esta vez vienieron algunos audaces con familia, no sé cómo les habrá ido.
Este año estuve mucho mas enganchado. El primer día hicimos un schedule
cuasi definitivo y en el momento se me ocurrió hacer cosas con Fuse y
Python. Cuando tocó el slot, di una charla de cómo funciona Fuse y
algunas puntas de cómo implementar file systems con él. Al final del
evento yo había terminado el wrapper que venía haciendo hace unas
semanas (ok, ok, falta statvfs) y perrito
se hizo un filesystem para acceder los iPod. Lucio me hizo prometer ver
cómo combinar Fuse async con Twisted. También le estuve explicando
ctypes al Polako, con lo que creo que terminé de entender el módulo y
me ayudó a entender algunas cosas que había hecho para el wrapper.
También estuve en el diseño y (re)implementación del bot de irc. En
apenas 2 días y medio ya tenemos el core y unos cuantos plugins, y hay
varios desarrolladores haciendo mas. Sólo faltan implementar pedezos de
infraestructura, sobre todo la parte de bases de datos, pero me veo
metiendo un par de plugins mas y ponerla en producción muy muy pronto
(en relaidad perrito le va a dar hosting). También fue una oportunidad
para (re)aprender Twisted, y enterarse de cosas como que no podés hacer
asincrónico un proceso
sincrónico,
y de aprender de boca de Guillo cómo usar bzr para laburar entre los 6
u 8 que metíamos código.
También estuve renegando los dos primeros días con el applet de batería de KDE4. Terminé encontrando (un bug en Solid)[https://bugs.kde.org/show_bug.cgi?id=187600] y aprendiendo detalles sobre Hal, D-Bus, algunos bastante oscuros y bizarros. Al mismo tiempo estuve viendo cómo se comportan los algoritmos de recarga de batería y de estimación de los tiempos de descarga y de descarga. Resulta que cuando está terminando de cargar se empieza a estirar el tiempo y los últimos 5 minutos pueden termiar siendo 20.
Estuvo genial poder conocer más gente y de volver a ver algunas caras conocidas (hace rato que no estaba en un evento de alguna comunidad). Entre los nuevos encontré a gente de Kde-ar como Leo u otros jugando con PyQt. Me encantó volver a sentir que programaba, ver unos proyectos arrancar y otros continuar a velocidades de la hostia, con features apareciendo como hongos y bugs desapareciendo como... bueno, no es una buena fecha para hablar de desapariciones :|
El último sprint estuvo genial; monitoreen la lista y/o el canal para enterarse de los resultados ;-)
A couple of days ago Marcelo Fernández wrote a simple image viewer in
PyGTK. It's
less than 200 lines long[1], and I thought that it would be nice to compare how
the same app would be written in PyKDE4. But then I though that it would not
be fair, as KDE is a whole desktop environment and GTK is 'only' a widget
library, so I did it in PyQt4 instead.
To make this even more fair, I hadn't had a good look at the code itself, I only run it to see what it looks like: a window with only the shown image in it, both scrollbars, no menu or statusbar, and no external file, so I assume he builds the ui 'by hand'. He mentions these features:
- Pan the image with the mouse.
- F1 to F5 handle the zoom from 'fit to window', 25%, 50%, 75% and 100%.
- Zooming with the mouse wheel doesn't work.
Here's my take:
#! /usr/bin/python
# -*- coding: utf-8 -*-
# OurManInToulon - Example image viewer in PyQt4
# Marcos Dione <mdione@grulic.org.ar> - http://grulicueva.homelinux.net/~mdione/glob/
# TODO:
# * add licence! (GPLv2 or later)
from PyQt4.QtGui import QApplication, QMainWindow, QGraphicsView, QGraphicsScene
from PyQt4.QtGui import QPixmap, QGraphicsPixmapItem, QAction, QKeySequence
import sys
class OMITGraphicsView (QGraphicsView):
def __init__ (self, pixmap, scene, parent, *args):
QGraphicsView.__init__ (self, scene)
self.zoomLevel= 1.0
self.win= parent
self.img= pixmap
self.setupActions ()
def setupActions (self):
# a factory to the right!
zoomfit= QAction (self)
zoomfit.setShortcuts ([QKeySequence.fromString ('F1')])
zoomfit.triggered.connect (self.zoomfit)
self.addAction (zoomfit)
zoom25= QAction (self)
zoom25.setShortcuts ([QKeySequence.fromString ('F2')])
zoom25.triggered.connect (self.zoom25)
self.addAction (zoom25)
zoom50= QAction (self)
zoom50.setShortcuts ([QKeySequence.fromString ('F3')])
zoom50.triggered.connect (self.zoom50)
self.addAction (zoom50)
zoom75= QAction (self)
zoom75.setShortcuts ([QKeySequence.fromString ('F4')])
zoom75.triggered.connect (self.zoom75)
self.addAction (zoom75)
zoom100= QAction (self)
zoom100.setShortcuts ([QKeySequence.fromString ('F5')])
zoom100.triggered.connect (self.zoom100)
self.addAction (zoom100)
def zoomfit (self, *ignore):
winSize= self.size ()
imgSize= self.img.size ()
print winSize, imgSize
hZoom= 1.0*winSize.width ()/imgSize.width ()
vZoom= 1.0*winSize.height ()/imgSize.height ()
zoomLevel= min (hZoom, vZoom)
print zoomLevel
self.zoomTo (zoomLevel)
def zoom25 (self, *ignore):
self.zoomTo (0.25)
def zoom50 (self, *ignore):
self.zoomTo (0.5)
def zoom75 (self, *ignore):
self.zoomTo (0.75)
def zoom100 (self, *ignore):
self.zoomTo (1.0)
def zoomTo (self, zoomLevel):
scale= zoomLevel/self.zoomLevel
print "scaling", scale
self.scale (scale, scale)
self.zoomLevel= zoomLevel
if __name__=='__main__':
# this code is enough for loading an image and show it!
app= QApplication (sys.argv)
win= QMainWindow ()
pixmap= QPixmap (sys.argv[1])
qgpi= QGraphicsPixmapItem (pixmap)
scene= QGraphicsScene ()
scene.addItem (qgpi)
view= OMITGraphicsView (pixmap, scene, win)
view.setDragMode (QGraphicsView.ScrollHandDrag)
view.show()
app.exec_ ()
# up to here!
# end
Things to note:
- The code for loading, showing the image and pan support is only 13 lines of
Pythoncode, including 3 imports. The resulting app is also able to handle vector graphics, but of course I didn't exploit that, I just added aQPixmap/QGraphicsPixmapItempair. - Zooming is implemented via
QGraphicsView.scale(), which is accumulative (scaling twice to 0.5 actually scales to 0.25 of the original size), so I have to keep the zoom level all the time. There should be azoom()interface! - The code for calculating the scale level is not very good: scaling between 75% and 50% or 25% produces scales of 0.666 and 0.333, which I think at the end of the day will accumulate a lot of error.
- For the same reason,
zoomToFit()has to do some magic. I also got hit by the integer division ofPython(I was getting zoom factors of 0) so I had to add1.0*to the claculations. It's good that this is fixed inPython2.6/3.0. - The size reported by the
QMainWindowwas any vegetable (it said 640x480 when it actually was 960x600), so I used theQGraphicsViewinstead. WTF? - For some strange reason
zoomToFit()scales the image a little bigger than it should, so a scrollbar appears in the direction of the constraining dimension. - Less that 100 lines! Even if
setupActions()could surely be improved. - In Marcelo's favor I should mention that he writes docstrings for most of his methods both in english and spanish (yes, of course I read his code after I finished mine). I barely put a couple of comments, but doing the same should add 10 more lines, tops. Also, I don't want to convert this into a who-has-it-smaller contest (the code, I mean :).
- It took me approx 3 hours, with no previous knowledge of how to do it and no internet connection, so no asking around. I just used the «Qt Reference Documentation», going to the «Gropued Classes» page and to the «Graphics View Classes» from there.
- It doesn't zoom with the mouse wheel either.
- The default colors of
ikiwiki'sformatplugin are at most sucky, but better than nothing.
[1] Unluckly he didn't declared which license it has, so I'm not sure if I really can do this. I GPL'ed mine.
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.
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 buildout.
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 /etc. Hace un par de años me senté a intentar un wrapper
para svn que guardara la metadata como properties de los archivos
llamado sylvan. El sistema era mas o menos usable, pero por suerte el
genio de Joey Hess le ocurrió el mismo problema y salió con etckeeper.
ectkeeper no está en Etch, por lo que instalé ese paquete y
metastore bajándolos del repo de Sid y mercurial del repo de
backports. Como no estoy seguro que el nnotito de aptitude sepa
manejar este tipo de repos [para el caso creo que dselect tampoco] no
puse backports entre los deblines.
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
/etc viejo encima del otro y que se hagan agua los helados. Para ello
usé xxdiff (o también podría haber usado meld o diff3 para
emacs), pudiendo seleccionar qué pedazos quería específicamente. Un
poco de edición y estábamos casi listos.
El penúltimo paso fue popular el nuevo LDAP. pare ello alcanzó un
slapcat -l en el server; borrar los registros que ya están en el
server nuevo (el root del directorio y el admin); luego un slapadd
-l en el nuevo; y luego probar con un par de ldapsearchs. Tambien
copiar los certificados y cambiarles el owner a openldap.
Luego tocó hacer andar PAM y nss 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 ssl start_tls y
ya. Mas adelante veré cómo reactivarla.
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.
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 fetchmail. Por algún motivo se me escapó en el merge de
la configuración del postfix la parte que dice que use MailDir en el
home del usuario, por lo que estuve renegando otro tanto. ssh también
fallaba, pero era porque se me había escapado un PasswordAuthentication
no.
El último paso de la noche era (re)configurar el Apache para que
anduvieran los repos svn 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 z a AuthzLDAPAuthoritative:
# <span class="createlink">AuthLDAPEnabled</span> On
<span class="createlink">AuthBasicProvider</span> ldap
<span class="createlink">AuthzLDAPAuthoritative</span> on
13 horas después de iniciar mi día laboral (3 de la matina) me retiré tambaleando a mi casa.
El segundo día me amaneció a las 13. Hoy tocaba terminar con el Apache,
que incuía apenas los tracs y el dotproject. Ambos implicaban
upgrades.
Los trac no me hicieron renegar mucho, pues está muy
bien documentado y
hasta fue scripteable. Básicamente era un salto de sqlite2 a
sqlite3,
un trac-admin ... upgrade seguido de un trac-admin ... resync.
Con lo único con lo que renegué fue que a pesar del upgrade fue exitoso no podía entrar. En los logs encontraba esto:
(9)Bad file descriptor: Could not open password file: (null)
Google al rescate me dijo que había que apagar esa directiva que había tenido que modificar el día anterior:
<span class="createlink">AuthzLDAPAuthoritative</span> off
También me salió esto:
Failed to load the <span class="createlink">AuthzSVNAccessFile</span>: The character 'o' in rule '@except' is not allowed in authz rules
Eso era porque en un archivo de configuración del repo
(conf.svnaccess) tenía los permisos de sólo lectura como ro en
vez de r.
El dotproject me enfrentó a un viejo archienemigo: mysql. 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
/var y no en etc. postgresql, en cambio, es mucho más inteligente.
Y viva el SQL independiente del motor. Lástima nadie lo usa...
Bien, sólo tuve que hacer un dump del mysql anterior (chroot
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 https://server/dotproject/install. 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
include/config.php; 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!
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.
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 buildout.
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 /etc. Hace un par de años me senté a intentar un wrapper
para svn que guardara la metadata como properties de los archivos
llamado sylvan. El sistema era mas o menos usable, pero por suerte el
genio de Joey Hess le ocurrió el mismo problema y salió con etckeeper.
ectkeeper no está en Etch, por lo que instalé ese paquete y
metastore bajándolos del repo de Sid y mercurial del repo de
backports. Como no estoy seguro que el nnotito de aptitude sepa
manejar este tipo de repos [para el caso creo que dselect tampoco] no
puse backports entre los deblines.
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
/etc viejo encima del otro y que se hagan agua los helados. Para ello
usé xxdiff (o también podría haber usado meld o diff3 para
emacs), pudiendo seleccionar qué pedazos quería específicamente. Un
poco de edición y estábamos casi listos.
El penúltimo paso fue popular el nuevo LDAP. pare ello alcanzó un
slapcat -l en el server; borrar los registros que ya están en el
server nuevo (el root del directorio y el admin); luego un slapadd
-l en el nuevo; y luego probar con un par de ldapsearchs. Tambien
copiar los certificados y cambiarles el owner a openldap.
Luego tocó hacer andar PAM y nss 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 ssl start_tls y
ya. Mas adelante veré cómo reactivarla.
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.
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 fetchmail. Por algún motivo se me escapó en el merge de
la configuración del postfix la parte que dice que use MailDir en el
home del usuario, por lo que estuve renegando otro tanto. ssh también
fallaba, pero era porque se me había escapado un PasswordAuthentication
no.
El último paso de la noche era (re)configurar el Apache para que
anduvieran los repos svn 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 z a AuthzLDAPAuthoritative:
# <span class="createlink">AuthLDAPEnabled</span> On
<span class="createlink">AuthBasicProvider</span> ldap
<span class="createlink">AuthzLDAPAuthoritative</span> on
13 horas después de iniciar mi día laboral (3 de la matina) me retiré tambaleando a mi casa.
El segundo día me amaneció a las 13. Hoy tocaba terminar con el Apache,
que incuía apenas los tracs y el dotproject. Ambos implicaban
upgrades.
Los trac no me hicieron renegar mucho, pues está muy
bien documentado y
hasta fue scripteable. Básicamente era un salto de sqlite2 a
sqlite3,
un trac-admin ... upgrade seguido de un trac-admin ... resync.
Con lo único con lo que renegué fue que a pesar del upgrade fue exitoso no podía entrar. En los logs encontraba esto:
(9)Bad file descriptor: Could not open password file: (null)
Google al rescate me dijo que había que apagar esa directiva que había tenido que modificar el día anterior:
<span class="createlink">AuthzLDAPAuthoritative</span> off
También me salió esto:
Failed to load the <span class="createlink">AuthzSVNAccessFile</span>: The character 'o' in rule '@except' is not allowed in authz rules
Eso era porque en un archivo de configuración del repo
(conf.svnaccess) tenía los permisos de sólo lectura como ro en
vez de r.
El dotproject me enfrentó a un viejo archienemigo: mysql. 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
/var y no en etc. postgresql, en cambio, es mucho más inteligente.
Y viva el SQL independiente del motor. Lástima nadie lo usa...
Bien, sólo tuve que hacer un dump del mysql anterior (chroot
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 https://server/dotproject/install. 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
include/config.php; 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!