Como faço para corrigir a dependência de libxml2-dev do Debian usando o apt?

8

Quando executo sudo apt-get upgrademinha instalação do Debian Squeeze, recebo o seguinte erro:

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.

Não sei ao certo o que "squeeze3" versus "squeeze5" significa, mas é a única coisa que difere no pacote libxml2.

Quando tento "sudo apt-get install -f", recebo:

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)

Um erro semelhante ocorre com sudo apt-get upgrade -f.

Meu /etc/apt/sources.list está atualmente:

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

Como faço para corrigir isso? Obrigado!

Jonathan
fonte
2
squeeze3é o terceiro lançamento do patch para squeeze, squeeze5é o quinto. Eles fazem parte do número da versão. As versões para a biblioteca e os arquivos de desenvolvimento devem corresponder exatamente. É normal que o APT queira que você execute apt-get install -f. O que não é normal é que a atualização libxml2-devestá falhando. O diretório /usr/include/libxml2existe? As permissões são razoáveis? Existe espaço em disco suficiente?
Gilles 'SO- stop be evil' (
@ Gilles Ah, as permissões estão desarrumadas: ls -ldiz que não é possível acessar libxml2(mesmo como root) e dá ?marcas no lugar de todas as informações de permissão. Promover para responder? Não tenho certeza de como consertar, mas posso procurar / conversar com meu host.
Jonathan

Respostas:

5

squeeze3é o terceiro patch de squeeze, squeeze5é o quinto. Eles fazem parte do número da versão. As versões da biblioteca e os arquivos de desenvolvimento devem corresponder exatamente, portanto, é normal que o APT deseje que você execute apt-get install -fquando seu sistema tiver versões inconsistentes.

O que não é normal é que a atualização libxml2-devestá falhando. A mensagem sobre não poder ler /usr/include/libxml2é incomum. Parece indicar que a instalação foi danificada de alguma forma. Verifique se o diretório ainda existe. Se você o moveu ou removeu em algum momento ... não faça isso e recrie ou mova o diretório para recuperar. Se o diretório existir, mas você vir algo como

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

então o seu sistema de arquivos está corrompido, ou talvez a sua RAM. Primeiro, verifique sua RAM : esta é a causa mais comum de corrupção do sistema de arquivos. Escreva o mínimo possível até ter certeza da RAM, pois poderá piorar os danos. Como tirá-lo de lá depende da natureza e extensão do dano.

Gilles 'SO- parar de ser mau'
fonte
3

Tente limpá-lo e depois reinstale.

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

Um -devpacote é apenas os componentes necessários para compilar programas vinculados a essa biblioteca, não é necessário para o tempo de execução, portanto é seguro limpar completamente.

bahamat
fonte
Isso não ajudou no meu caso, porque o arquivo acabou sendo corrompido. Recomendaria este procedimento para outras pessoas com problemas de dependência de biblioteca (+1).
Jonathan
Nesse caso, adicionei o apt-get cleanque limparia o cache do pacote e forçaria o re-download do repositório do pacote que você precisava.
bahamat
Desculpe, eu quis dizer que o arquivo /usr/include/libxml2estava corrompido. Mesmo rm -f /usr/include/libxml2iria falhar, dizendo algo como não poderia encontrar o arquivo. O meu webhost levou 17 horas para corrigi-lo.
21412 Jonathan