¿Cómo reparo la dependencia rota de libxml2-dev en Debian usando apt?

8

Cuando ejecuto sudo apt-get upgrademi instalación de Debian Squeeze, aparece el siguiente error:

You might want to run 'apt-get -f install' to correct these.
The following packages have unmet dependencies:
 libxml2-dev : Depends: libxml2 (= 2.7.8.dfsg-2+squeeze3) but 2.7.8.dfsg-2+squeeze5 is installed
E: Unmet dependencies. Try using -f.

No estoy seguro de lo que significa "squeeze3" versus "squeeze5", pero es lo único que difiere en el paquete libxml2.

Cuando intento "sudo apt-get install -f", obtengo:

The following extra packages will be installed:
  libxml2-dev
The following packages will be upgraded:
  libxml2-dev
1 upgraded, 0 newly installed, 0 to remove and 8 not upgraded.
108 not fully installed or removed.
Need to get 0 B/830 kB of archives.
After this operation, 69.6 kB disk space will be freed.
Do you want to continue [Y/n]? Y
(Reading database ... 96842 files and directories currently installed.)
Preparing to replace libxml2-dev 2.7.8.dfsg-2+squeeze3 (using .../libxml2-dev_2.7.8.dfsg-2+squeeze5_amd64.deb) ...
Unpacking replacement libxml2-dev ...
dpkg: error processing /var/cache/apt/archives/libxml2-dev_2.7.8.dfsg-2+squeeze5_amd64.deb (--unpack):
 unable to install new version of `./usr/include/libxml2': No such file or directory
configured to not write apport reports
                                      dpkg-deb: subprocess paste killed by signal (Broken pipe)
Errors were encountered while processing:
 /var/cache/apt/archives/libxml2-dev_2.7.8.dfsg-2+squeeze5_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

Un error similar ocurre con sudo apt-get upgrade -f.

Mi /etc/apt/sources.list es actualmente:

deb http://ftp.us.debian.org/debian/ squeeze main contrib non-free
deb http://ftp.debian.org/debian/ squeeze-updates main contrib non-free
deb http://security.debian.org/ squeeze/updates main contrib non-free

¿Cómo hago para arreglar esto? ¡Gracias!

Jonathan
fuente
2
squeeze3es el tercer lanzamiento de parche para squeeze, squeeze5es el quinto. Son parte del número de versión. Las versiones para la biblioteca y los archivos de desarrollo deben coincidir exactamente. Es normal que APT quiera que corras apt-get install -f. Lo que no es normal es que la actualización de libxml2-devesté fallando. ¿Existe el directorio /usr/include/libxml2? ¿Son razonables los permisos? ¿Hay suficiente espacio en disco?
Gilles 'SO- deja de ser malvado'
@Gilles Ah, los permisos están en mal estado: ls -ldice que no puede acceder libxml2(incluso como root) y da ?marcas en lugar de toda la información del permiso. ¿Promover para responder? No estoy seguro de cómo solucionarlo, pero puedo consultar / hablar con mi anfitrión.
Jonathan

Respuestas:

5

squeeze3es el tercer lanzamiento de parche para squeeze, squeeze5es el quinto. Son parte del número de versión. Las versiones para la biblioteca y los archivos de desarrollo deben coincidir exactamente, por lo que es normal que APT quiera que se ejecute apt-get install -fcuando su sistema tenga versiones inconsistentes.

Lo que no es normal es que la actualización de libxml2-devesté fallando. El mensaje sobre no poder leer /usr/include/libxml2es inusual. Parece indicar que la instalación se ha dañado de alguna manera. Compruebe si el directorio aún existe. Si lo movió o eliminó en algún momento ... no lo haga, y vuelva a crear o retroceda el directorio para recuperarlo. Si el directorio existe pero ves algo como

$ ls -ld /usr/include/libxml2
?????????? ??? ???????? ???????? 4096 ??? ?? ???? /usr/include/libxml2

entonces su sistema de archivos está dañado, o tal vez su RAM. Primero, verifique su RAM : esta es la causa más común de corrupción del sistema de archivos. Escriba lo menos posible hasta que esté seguro acerca de la RAM, ya que puede empeorar el daño. Cómo tomarlo desde allí depende de la naturaleza y el alcance del daño.

Gilles 'SO- deja de ser malvado'
fuente
3

Intenta purgarlo y luego vuelve a instalarlo.

sudo apt-get purge -f libxml2-dev
sudo apt-get clean
sudo apt-get update
sudo apt-get install libxml2 libxml2-dev

Un -devpaquete son solo los componentes necesarios para compilar programas vinculados a esa biblioteca, no es necesario para el tiempo de ejecución, por lo que es seguro purgarlo por completo.

bahamat
fuente
Esto no ayudó en mi caso, porque el archivo terminó siendo dañado. Recomendaría este procedimiento para otras personas con problemas de dependencia de la biblioteca (+1).
Jonathan
En ese caso, agregué apt-get cleanqué purgaría el caché del paquete y forzaría la descarga desde el repositorio del paquete que necesitaba.
bahamat
Lo siento, quise decir que el archivo /usr/include/libxml2estaba dañado. Incluso rm -f /usr/include/libxml2fallaría, diciendo algo así no podría encontrar el archivo. Mi webhost tardó 17 horas en solucionarlo.
Jonathan