Come posso correggere la dipendenza libxml2-dev rotta da Debian usando apt?


8

Quando corro sudo apt-get upgradesulla mia installazione di Debian Squeeze, ottengo il seguente errore:

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.

Non sono sicuro del significato di "squeeze3" rispetto a "squeeze5", ma è l'unica cosa che differisce nel pacchetto libxml2.

Quando provo "sudo apt-get install -f", ottengo:

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)

Si verifica un errore simile con sudo apt-get upgrade -f.

La mia /etc/apt/sources.list è attualmente:

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

Come posso risolvere questo problema? Grazie!


2
squeeze3è la terza versione di patch per squeeze, squeeze5è la quinta. Fanno parte del numero di versione. Le versioni per la libreria e i file di sviluppo devono corrispondere esattamente. È normale che APT ti voglia eseguire apt-get install -f. Ciò che non è normale è che l'aggiornamento di libxml2-devnon riesce. La directory /usr/include/libxml2esiste? Le autorizzazioni sono ragionevoli? C'è abbastanza spazio su disco?
Gilles 'SO- smetti di essere malvagio' il

@Gilles Ah, i permessi sono incasinati: ls -ldice che non può accedere libxml2(anche come root) e dà ?segni al posto di tutte le informazioni sui permessi. Promuovi a rispondere? Non sono sicuro di come risolvere, ma posso esaminare / parlare con il mio host.
Jonathan,

Risposte:


5

squeeze3è la terza versione di patch per squeeze, squeeze5è la quinta. Fanno parte del numero di versione. Le versioni per la libreria e i file di sviluppo devono corrispondere esattamente, quindi è normale che APT desideri che tu esegua apt-get install -fquando il tuo sistema ha versioni incoerenti.

Ciò che non è normale è che l'aggiornamento di libxml2-devnon riesce. Il messaggio di non poter leggere /usr/include/libxml2è insolito. Sembra indicare che l'installazione è stata danneggiata in qualche modo. Controlla se la directory esiste ancora. Se lo hai spostato o rimosso ad un certo punto ... non farlo, e ricreare o spostare indietro la directory per ripristinare. Se la directory esiste ma vedi qualcosa di simile

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

allora il tuo filesystem è corrotto, o forse la tua RAM. Innanzitutto, controlla la tua RAM : questa è la causa più comune di corruzione del filesystem. Scrivi il meno possibile finché non sei sicuro della RAM, in quanto potresti peggiorare il danno. Come prenderlo da lì dipende dalla natura e dall'entità del danno.


3

Prova a eliminarlo e quindi a reinstallare.

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

Un -devpacchetto è solo i componenti necessari per compilare programmi collegati a quella libreria, non è necessario per il runtime, quindi è sicuro eliminare completamente.


Questo non ha aiutato nel mio caso, perché il file è stato danneggiato. Consiglierei questa procedura per gli altri con problemi di dipendenza dalla biblioteca (+1).
Jonathan,

In tal caso, ho aggiunto apt-get cleanche eliminerebbe la cache del pacchetto e imporrebbe il re-download dal repository del pacchetto necessario.
bahamat,

Spiacente, intendevo dire che il file /usr/include/libxml2era corrotto. Persino rm -f /usr/include/libxml2fallirebbe, dicendo che qualcosa del genere non riusciva a trovare il file. Il mio webhost ha impiegato 17 ore per risolverlo.
Jonathan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.