Arreglando pkgdb

03.oct 2007 Envía un trackback

Hay veces que FreeBSD también juega malas pasadas. Este ha sido el caso de una máquina dejada en el olvido. Estoy intentando recuperar su uso y ponerla al día. Me gusta utilizar portupgrade para estas tareas de mantenimiento, con lo que, -después de un make update- al hacer un listado de los paquetes que necesitaban actualizarse procedo con uno de ellos:
# portupgrade ruby-1.8.5_4,1
[Updating the pkgdb (format:bdb_btree) in /var/db/pkg ... /var/db/pkg/pkgdb.db: unexpected
file type or format -- Invalid argument; rebuild needed] [Rebuilding the pkgdb
(format:bdb_btree) in /var/db/pkg ... [Updating the pkgdb (format:bdb_btree) in /var/db/pkg ... /var/db/pkg/pkgdb.db:
unexpected file type or format -- Invalid argument; rebuild needed]
[Rebuilding the pkgdb (format:bdb_btree) in /var/db/pkg ... /var/db/pkg/pkgdb.db: unexpected file type or format -- Invalid 
argument: Cannot update the pkgdb!]: Cannot update the pkgdb!]
Command failed [exit code 1]: /usr/local/sbin/pkgdb -aFOQ
Vaya, era previsible tener algo roto después de tanto tiempo. A ver si obtenemos más información de lo que ocurre realmente:

# pkgdb -aFOQ
[Updating the pkgdb (format:bdb_btree) in /var/db/pkg ... /var/db/pkg/pkgdb.db: unexpected file type or format -- Invalid argument; rebuild needed] [Rebuilding the pkgdb (format:bdb_btree) in /var/db/pkg ... /var/db/pkg/pkgdb.db: unexpected file type or format -- Invalid argument: Cannot update the pkgdb!]: Cannot update the pkgdb!]
Parece que falla la base de datos de paquetes (pkgdb.db), intentamos forzar su recuperación:
# pkgdb -F
--->  Checking the package registry database
[Updating the pkgdb (format:bdb_btree) in /var/db/pkg ... /var/db/pkg/pkgdb.db: unexpected file type or format -- Invalid argument; rebuild needed] [Rebuilding the pkgdb (format:bdb_btree) in /var/db/pkg ... /var/db/pkg/pkgdb.db: unexpected file type or format -- Invalid argument: Cannot update the pkgdb!]: Cannot update the pkgdb!]
Sin éxito. Pues a lo bruto. Hacemos copia de seguridad de INDEX-6.db y pkgdb.db y procedemos a la actualización manual (make, make install...) de portupgrade, ruby-bdb y db4 (el gestor de base de datos de paquetes):
# mv /usr/ports/INDEX-6.db --> INDEX-6.db.org
# mv /var/db/pkg/pkgdb.db --> pkgdb.db.org
# pkg_delete portupgrade-2.3.1,2
# pkg_delete ruby18-bdb-0.6.2
# pkg_delete ruby18-bdb1-0.2.2
Es posible que nos advierta de dependencias insatisfechas en el borrado de alguno de estos paquetes, no nos preocupamos demasiado puesto que su eliminación solo será temporal. De necesitarlo, forzamos (-f) su desinstalación:
# pkg_delete db41-4.1.25_4
pkg_delete: package 'db41-4.1.25_4' is required by these other packages
and may not be deinstalled:
amavisd-new-2.4.3_1,1
p5-BerkeleyDB-0.31

# pkg_delete -f db41-4.1.25_4
pkg_delete: package 'db41-4.1.25_4' is required by these other packages
and may not be deinstalled (but I'll delete it anyway):
amavisd-new-2.4.3_1,1
p5-BerkeleyDB-0.31
Ahora reinstalamos portupgrade a la antigua usanza y desde cero (make clean para borrar antiguas compilaciones y configuraciones). Seleccionamos BDB4 de nuevo como backend de datos (¡veis como era temporal!). Y por último recomponemos de nuevo la base de datos de paquetes (pkgdb -F):
# cd /usr/ports/ports-mgmt/portupgrade
# make clean
# make config
  [X] BDB4  Use Berkeley DB >=2 as backend 
# make
# make install
# pkgdb -F
Finalmente ya estamos en disposición de volver al proceso de instalación/actualización del software obsoleto:
# portupgrade ruby-1.8.5_4,1
Imagino que habrá múltiples formas - y más simples- de recomponer este error, yo lo he hecho así ;).
freebsd pkgdb portupgrade

Escribe tu comentario
 
 
Guardar datos
Escribe tu comentario:
captcha


Intenta que tu comentario sea interesante y con información relevante al tema de la entrada. BBCodes disponibles: [url=http://direccion]texto[/url], negrita: [b]texto[/b], itálica: [i]texto[/i], subrayada: [u]texto[/u]. Para mencionar o citar a alguien (quote): [cita]texto[/cita]