Não foi possível corrigir os problemas, você manteve pacotes quebrados

216

Após a atualização do 10.04 para o 12.04, estou tentando instalar pacotes diferentes. Por exemplo, ia32-libs e skype (4.0).

Ao tentar instalá-los, estou recebendo a mensagem de erro 'Não foi possível corrigir problemas, você reteve pacotes quebrados'.

Saída de comandos:

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.

Depois de executar isso:

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.
trond
fonte
3
Pode ajudar se você nos mostrou o comando que está realmente tentando (como sudo apt-get install ia32-libs) e a saída desse comando. Além disso, sudo apt-get dist-upgrademostra alguma atualização disponível?
thomasrutter
3
Não sei o que há de errado com sua pergunta, não vejo nenhum erro real, nem aquele que você descreve em seu título.
Braiam 10/09/14
possível duplicata de Como resolver dependências não atendidas?
Eliah Kagan 14/09/14

Respostas:

237

Essa mensagem de erro específica pode indicar que você reteve pacotes, mas também pode indicar um problema diferente.

Você pode obter uma lista dos pacotes retidos reais com:

dpkg --get-selections | grep hold

Se não houver nenhum, ou nenhum parecer relacionado, provavelmente é outra coisa. Verifique cuidadosamente a saída do comando que você estava tentando quando recebeu a mensagem de erro, pois pode haver outras pistas na saída completa desse comando, além da mensagem de erro.

Outro método de solução de problemas pode ser usar o aptitude em vez do apt-get para tentar instalar o seu pacote:

sudo aptitude install <packagename>

O Aptitude desistirá com menos facilidade e tentará encontrar soluções que podem envolver a modificação de outros pacotes. Pode dar mais explicações sobre o problema e opções para corrigi-lo.

Ocasionalmente, o aptitude estará ansioso demais para remover ou fazer o downgrade de um grande número de pacotes para atender à sua solicitação. Nesse caso, tentar novamente -fmudar suas prioridades e ajudá-lo a encontrar soluções que envolvam a remoção / desclassificação de menos pacotes, mesmo que isso signifique nem todas as alterações solicitadas pode ir em frente:

sudo aptitude -f install <packagename>
thomasrutter
fonte
6
Alguma idéia de como abrir um pacote? :-)
Eugene van der Merwe
6
Essa é uma pergunta separada .
precisa saber é o seguinte
59
Aptidão foi mais útil para mim do que apt-get, obrigado pela dica.
Szx #
9
Uma coisa a ser observada é que o aptitude pode tornar mais fácil causar mais danos ao seu sistema. Por exemplo, se o apt-get falhar na instalação de algo devido a dependências conflitantes, ele desistirá. No entanto, o aptitude pode se oferecer para seguir em frente, mas desinstale um monte de outros pacotes para satisfazer esses conflitos - ou mesmo fazer o downgrade de pacotes. Você simplesmente precisa estar ciente do que está sugerindo e prosseguir apenas se for uma boa ideia.
thomasrutter
4
Os pacotes "em espera" não têm nada a ver com a mensagem, apenas que o conflito foi evitado mantendo-os pressionados (não instalando, atualizando, fazendo o downgrade ou removendo).
Braiam 23/08/14
33

Isso aconteceu comigo também. Tudo o que fiz foi sudo apt-get updatee isso corrigiu o meu problema. Boa sorte.

user2292711
fonte
9

Encontrei um cenário semelhante em relação às dependências ausentes. No meu caso, eu estava tentando instalar o curl no ubuntu saucy salamander 13.10 ...

O erro afirmou que a dependência exigia uma versão anterior da biblioteca curl3.

Consegui degradar para a versão anterior tentando instalar o curl usando o aptitude.

Quando notou a dependência ausente e o motivo (exigia uma versão anterior do arquivo da biblioteca), ele me deu várias opções de como responder ... y// n/q

Yteria abortado a instalação, Nprocuraria outra opção e Qsimplesmente sairia e não faria mais nada, deixando um pacote quebrado.

Eu selecionei Ne ele me deu a opção de fazer o downgrade do arquivo da biblioteca para uma versão anterior. Foi o que fiz e o curl terminou de instalar sem mais erros.

  • Eu posso procurar atualizar o arquivo da biblioteca novamente após a instalação, mas ei, até agora tudo bem.
Unidade de pessoas
fonte
9

Eu tive um cenário semelhante em uma nova instalação do 14.04, sem arquivos listados dpkg --get-selections | grep holde sem alegria depois sudo apt-get update.

O que corrigiu isso para mim foi uma simples

sudo apt-get autoremove

Quando tentei reinstalar o pacote com falha, ele funcionou bem. Yay!

yochannah
fonte
4

Tive o mesmo problema, executei esse comando de verificação de pacote a partir da outra resposta ( dpkg --get-selections | grep hold) e vi

tomcat7                                         deinstall
tomcat7-common                                  install

então eu usei " apt-get remove tomcat7-common"

Depois, instalei o Tomcat 6 (estava removendo o Tomcat 7 e instalando o Tomcat 6 como você faz).

Nollaig
fonte
A "em espera" pacotes não tem nada a ver com a mensagem, basta que o conflito foi evitado mantendo-os para baixo (não instalar, atualizar desclassificação, ou remover)
Braiam
adicione a flag flag: apt-get remove --purge packet
Sergio Abreu
4

Estas são algumas maneiras rápidas e fáceis de corrigir o you have held broken packageserro.

  • Abra o arquivo sources.list /etc/apt/sources.liste verifique se não há fontes de software para uma versão diferente do Ubuntu que a versão que você está usando no momento. Se você encontrar linhas de liberação incorretas em sources.list, abra o arquivo sources.list com sudoedit /etc/apt/sources.list, comente as linhas incorretas em sources.list precedendo-as com um #caractere, salve o arquivo sources.list e execute sudo apt updatepara atualizar a lista de pacotes de software disponíveis.

  • Selecione a opção Corrigir pacotes quebrados no gerenciador de pacotes Synaptic. Execute os seguintes comandos para instalar o Synaptic.

    sudo apt update  
    sudo apt upgrade   
    sudo apt install synaptic  
    

    Abra o Synaptic e, no Synaptic, selecione Editar -> Corrigir pacotes quebrados e repita Editar -> Corrigir pacotes quebrados pela segunda vez.

    No Synaptic, no painel esquerdo, clique no botão Filtros personalizados, marcado pelo cursor do mouse na captura de tela abaixo. Na lista no canto superior esquerdo, selecione Quebrado . No painel central, serão listados todos os pacotes quebrados que ainda precisam ser reparados.

    mostrar pacotes quebrados no Synaptic

    Selecione os pacotes quebrados, um de cada vez. Selecione um pacote quebrado e, em seguida, abra o terminal e execute . Os resultados deste comando dirão se esse pacote quebrado foi instalado a partir dos repositórios padrão do Ubuntu ou de alguma outra fonte. Se o pacote quebrado foi instalado a partir de outra fonte, talvez esse pacote possa ser removido junto com a fonte do software e substituído por uma versão diferente do mesmo pacote dos repositórios padrão do Ubuntu. Normalmente, isso significa consertar um pacote quebrado, desclassificando esse pacote para uma versão mais antiga.apt policy <package-name>

  • Se você receber esta mensagem de erro:

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

    Execute os seguintes comandos:

    sudo apt update  
    sudo apt upgrade   
    sudo apt-get -f install   
    
  • Remova manualmente um pacote quebrado.

    1. Encontre seu pacote em /var/lib/dpkg/info

      ls -l /var/lib/dpkg/info | grep <package>
      
    2. Mova a pasta do pacote para outro local.

      cd /tmp && sudo mkdir new-package-location  
      sudo mv /var/lib/dpkg/info/<package>.* /tmp/new-package-location/    
      
    3. Execute o seguinte comando:

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

Se todos esses métodos não funcionarem, é possível que os pacotes quebrados sejam causados ​​por algo incorporado tão profundamente no sistema operacional que nenhum desses métodos tenha qualquer efeito sobre ele. O primeiro lugar óbvio para procurar esse "algo" profundamente incorporado está nas fontes de software do Windows /etc/apt/sources.list. Verifique o arquivo sources.list para ver se ele contém linhas não-padrão que podem estar causando um erro de pacotes quebrados. Um arquivo sources.list padrão do Ubuntu se parece com os arquivos sources.list nesta resposta .

A maneira correta de remover uma linha suspeita do sources.list é comentá-la, precedendo-a com um #caractere. Em seguida, execute sudo apt updatea atualização da lista de softwares disponíveis.

karel
fonte
0

Para mim, nenhuma das opções acima funcionou porque meu sistema não foi atualizado. eu fiz

Home Key > Software Updater > Install

e atualizei meu sistema; depois, eu poderia instalar meu pacote normalmente com apt.

nathangeorge1
fonte
0

Eu tive o mesmo problema ao reinstalar xsaneapós uma falha na ppainstalação. Como aconteceu com a yochannah, "não há arquivos listados dpkg --get-selections | grep holdnem alegria depois sudo apt-get update".

A dica que apt-getme deu é

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

Por causa da resposta do yochannah, tive a sensação de que devo remover alguns pacotes instalados anteriormente. E foi assim que tive que remover manualmente todos os pacotes relacionados para sane, entre outros xsane-commone libsane, que ainda estavam instalados como a ppaversão.

Portanto, cuidado com o que você instalou anteriormente e arrume!

Jesus amado
fonte