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 -aFOQVaya, 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.2Es 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.31Ahora 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 -FFinalmente ya estamos en disposición de volver al proceso de instalación/actualización del software obsoleto:
# portupgrade ruby-1.8.5_4,1Imagino que habrá múltiples formas - y más simples- de recomponer este error, yo lo he hecho así ;).
Escribe tu comentario
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]


