Impossibile correggere i problemi, hai conservato pacchetti rotti


216

Dopo l'aggiornamento da 10.04 a 12.04, sto cercando di installare diversi pacchetti. Ad esempio ia32-libs e skype (4.0).

Quando provo a installarli, visualizzo il messaggio di errore "Impossibile correggere i problemi, hai trattenuto i pacchetti rotti".

Uscita di comandi:

sudo apt-get install -f
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Dopo aver eseguito questo:

sudo dpkg --configure -a
foo@foo:~$ sudo apt-get install -f
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

3
Può essere utile se ci hai mostrato il comando che stai effettivamente provando (come sudo apt-get install ia32-libs) e l'output di quel comando. Inoltre, sudo apt-get dist-upgrademostra eventuali aggiornamenti disponibili?
thomasrutter,

3
Non so cosa c'è di sbagliato nella tua domanda, non vedo alcun errore reale, né quello che descrivi nel tuo titolo.
Braiam,


Risposte:


237

Quel particolare messaggio di errore può indicare che hai conservato pacchetti, ma può anche indicare un problema diverso.

È possibile ottenere un elenco di pacchetti effettivamente trattenuti con:

dpkg --get-selections | grep hold

Se non ce ne sono, o nessuno sembra correlato, allora probabilmente è qualcos'altro. Controlla attentamente l'output del comando che stavi provando quando hai ricevuto il messaggio di errore, poiché potrebbero esserci altri indizi sull'output completo di quel comando, oltre al messaggio di errore.

Un altro metodo di risoluzione dei problemi potrebbe essere usare aptitude piuttosto che apt-get per provare a installare il pacchetto:

sudo aptitude install <packagename>

Aptitude si arrenderà meno facilmente e tenterà di trovare soluzioni che potrebbero comportare la modifica di altri pacchetti. Potrebbe darti ulteriori spiegazioni sul problema e opzioni per risolverlo.

Occasionalmente aptitude sarà troppo desideroso di rimuovere o eseguire il downgrade di un gran numero di pacchetti per soddisfare la tua richiesta, nel qual caso riprovare a -fcambiare le sue priorità e aiuta a trovare soluzioni che implicano la rimozione / il downgrade di un minor numero di pacchetti anche se ciò significa che non tutte le modifiche richieste può andare avanti:

sudo aptitude -f install <packagename>

6
Qualche idea su come annullare un pacchetto? :-)
Eugene van der Merwe,

6
Questa è una domanda separata .
thomasrutter,

59
Aptitude mi è stato più utile di apt-get, grazie per il suggerimento.
szx,

9
Una cosa da notare è che l'attitudine può rendere più facile fare più danni al tuo sistema. Ad esempio, se apt-get non riesce a installare qualcosa a causa di dipendenze contrastanti, si arrenderà. Tuttavia, aptitude potrebbe offrire di andare avanti, ma disinstallare un sacco di altri pacchetti al fine di soddisfare tali conflitti - o persino pacchetti di downgrade. Devi semplicemente essere consapevole di ciò che sta suggerendo e procedere solo se è una buona idea.
thomasrutter,

4
I pacchetti "in attesa" non hanno nulla a che fare con il messaggio, solo che il conflitto è stato evitato tenendolo premuto (non installando, aggiornando, declassando o rimuovendo).
Braiam,

33

È successo anche a me. Tutto quello che ho fatto è stato sudo apt-get updatee questo ha risolto il mio problema. In bocca al lupo.


9

Mi sono imbattuto in uno scenario simile per quanto riguarda le dipendenze mancanti. Nel mio caso stavo cercando di installare curl su Ubuntu Saucy Salamander 13.10 ...

L'errore affermava che la dipendenza richiedeva una versione precedente della libreria curl3.

Sono stato in grado di degradare alla versione precedente cercando di installare il ricciolo usando aptitude.

Quando ha notato la dipendenza mancante e il motivo (richiesto una versione precedente del file della libreria), mi ha dato diverse opzioni su come rispondere ... y// n/q

Yavrebbe interrotto l'installazione, Navrebbe cercato un'altra opzione e Qavrebbe semplicemente chiuso e non fare più nulla, lasciando un pacchetto rotto.

Ho selezionato Ne mi ha dato la possibilità di eseguire il downgrade del file della libreria a una versione precedente. Quindi è quello che ho fatto e ho arricciato l'installazione senza ulteriori errori.

  • Potrei cercare di aggiornare nuovamente il file della libreria dopo l'installazione, ma ehi, finora tutto bene.

9

Ho avuto uno scenario simile in una nuova installazione di 14.04, senza file elencati dpkg --get-selections | grep holde nessuna gioia dopo sudo apt-get update.

Ciò che ha risolto il problema per me è stato semplice

sudo apt-get autoremove

Quando ho provato a reinstallare il pacchetto in errore ha funzionato bene. Sìì!


4

Ho avuto lo stesso problema, ho eseguito quel comando di controllo del pacchetto dall'altra risposta ( dpkg --get-selections | grep hold) e ho visto

tomcat7                                         deinstall
tomcat7-common                                  install

quindi ho usato " apt-get remove tomcat7-common"

Quindi ho potuto installare Tomcat 6 (stavo rimuovendo Tomcat 7 e installando Tomcat 6 mentre lo fai).


I pacchetti "in attesa" non hanno nulla a che fare con il messaggio, solo che il conflitto è stato evitato tenendolo premuto (non installando, aggiornando, declassando o rimuovendo)
Braiam

aggiungi il flag purge: apt-get remove --purge packet
Sergio Abreu

4

Questi sono alcuni modi semplici e veloci per correggere l' you have held broken packageserrore.

  • Apri il tuo file sources.list /etc/apt/sources.liste verifica che non ci siano fonti software per una versione di Ubuntu diversa dalla versione di Ubuntu che stai attualmente utilizzando. Se trovi le righe di rilascio errate in sources.list, apri il file sources.list con sudoedit /etc/apt/sources.list, commenta le righe errate in sources.list precedendole con un #carattere, salva il file sources.list ed esegui sudo apt updateper aggiornare l'elenco di pacchetti software disponibili.

  • Seleziona l' opzione Correggi pacchetti spezzati nel gestore pacchetti Synaptic. Eseguire i comandi seguenti per installare Synaptic.

    sudo apt update  
    sudo apt upgrade   
    sudo apt install synaptic  
    

    Apri Synaptic e in Synaptic seleziona Modifica -> Correggi pacchetti rotti e quindi ripeti Modifica -> Correggi pacchetti rotti una seconda volta.

    In Synaptic nel riquadro sinistro fare clic sul pulsante Filtri personalizzati che è contrassegnato dal cursore del mouse nell'immagine seguente. Dall'elenco nell'angolo in alto a sinistra selezionare Rotto . Nel riquadro centrale verranno elencati tutti i pacchetti rotti che devono ancora essere riparati.

    mostra i pacchetti rotti in Synaptic

    Seleziona i pacchetti rotti uno alla volta. Seleziona un pacchetto rotto, quindi apri il terminale ed esegui . I risultati di questo comando ti diranno se quel pacchetto rotto è stato installato dai repository Ubuntu predefiniti o da qualche altra fonte. Se il pacchetto rotto fosse installato da qualche altra fonte, forse quel pacchetto può essere rimosso insieme alla sua fonte software e sostituito da una versione diversa dello stesso pacchetto dai repository Ubuntu predefiniti. Di solito questo significa correggere un pacchetto rotto eseguendo il downgrade di quel pacchetto a una versione precedente.apt policy <package-name>

  • Se viene visualizzato questo messaggio di errore:

    Try 'apt-get -f install' with no packages (or specify a solution)  
    

    Esegui i seguenti comandi:

    sudo apt update  
    sudo apt upgrade   
    sudo apt-get -f install   
    
  • Rimuovere manualmente un pacchetto rotto.

    1. Trova il tuo pacchetto in /var/lib/dpkg/info

      ls -l /var/lib/dpkg/info | grep <package>
      
    2. Sposta la cartella del pacchetto in un'altra posizione.

      cd /tmp && sudo mkdir new-package-location  
      sudo mv /var/lib/dpkg/info/<package>.* /tmp/new-package-location/    
      
    3. Esegui il seguente comando:

      sudo dpkg --remove --force-remove-reinstreq <package>  
      

Se tutti questi metodi non funzionano, è possibile che i pacchetti rotti siano causati da qualcosa che è incorporato così profondamente nel sistema operativo che nessuno di questi metodi ha alcun effetto su di esso. Il primo posto ovvio in cui cercare questo "qualcosa" profondamente incorporato è nelle fonti del software in /etc/apt/sources.list. Controllare il file sources.list per vedere se contiene righe non standard che potrebbero causare un errore di pacchetti interrotti. Un file Ubuntu sources.list standard assomiglia ai file sources.list in questa risposta .

Il modo corretto di rimuovere una linea sospetta da sources.list è commentarla precedendola con un #carattere. Quindi eseguire sudo apt updateper aggiornare l'elenco dei software disponibili.


0

Per me, nessuna delle precedenti ha funzionato perché il mio sistema non è stato aggiornato. L'ho fatto

Home Key > Software Updater > Install

e aggiornato il mio sistema; successivamente, potrei installare il mio pacchetto normalmente con apt.


0

Ho avuto lo stesso problema con la reinstallazione xsanedopo ppaun'installazione non riuscita . Come è successo a yochannah, "nessun file elencato dpkg --get-selections | grep holde nessuna gioia dopo sudo apt-get update".

Il suggerimento che apt-getmi ha dato è

xsane : Depends: libsane (>= 1.0.24) but it is not going to be installed

A causa della risposta di yochannah, ho avuto la sensazione di dover rimuovere alcuni pacchetti precedentemente installati. Ed è stato così, ho dovuto rimuovere manualmente tutti i pacchetti correlati sane, tra gli altri xsane-commone libsane, che era ancora installato come ppaversione.

Pertanto, fai attenzione a ciò che hai precedentemente installato e riordina!

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.