A dependência circular está bloqueando a atualização

1

Eu tenho um ciclo de dependência que não consigo descobrir como me locomover e está me impedindo de atualizar.

Estou no momento em 14.04 e quero mudar para 16.04. Mais abaixo está uma demonstração do que eu tenho tentado, sem sucesso. E a qualquer momento através do funcionamento, se eu fizer o apt-get -f install, então a bagunça está de volta no começo do problema.

Mas, primeiro, deixe-me dar um atalho para a pergunta específica e, em seguida, se você quiser saber o porquê e o como da pergunta, veja abaixo.

PERGUNTA: Como posso mover o pacote gcc-4.8-base da versão 14.04.3 para a 14.04.1? Basta simplesmente dar a versão desejada não é suficiente, o pacote mais antigo não existe na minha máquina e não tenho idéia de onde e como obter esse pacote mais antigo.

É assim que cheguei a precisar responder a pergunta acima e se você vir uma solução diferente para o problema, eu sou todo ouvidos (os olhos eram):

sudo apt-get update

Isso funciona bem. Então atualize:

sudo apt-get upgrade

Isso falha com:

The following packages have unmet dependencies:
 libstdc++-4.8-dev : Depends: libstdc++6 (>= 4.8.4-2ubuntu1~14.04.3) but 4.8.4-2ubuntu1~14.04.1 is installed
 libstdc++6 : Depends: gcc-4.8-base (= 4.8.4-2ubuntu1~14.04.1) but 4.8.4-2ubuntu1~14.04.3 is installed
E: Unmet dependencies. Try using -f.

Então, como sugerido, tente com a opção -f:

sudo apt-get upgrade -f

E após vários minutos de busca, finalmente falha:

Preparing to unpack .../libstdc++6_4.8.4-2ubuntu1~14.04.3_i386.deb ...
Unpacking libstdc++6:i386 (4.8.4-2ubuntu1~14.04.3) over (4.8.4-2ubuntu1~14.04.1) ...
dpkg: error processing archive /var/cache/apt/archives/libstdc++6_4.8.4-2ubuntu1~14.04.3_i386.deb (--unpack):
 trying to overwrite '/usr/share/gcc-4.8/python/libstdcxx/__init__.py', which is also in package libstdc++6-armhf-cross 4.8.4-2ubuntu1~14.04.1cross0.11.1
Errors were encountered while processing:
 /var/cache/apt/archives/libstdc++6_4.8.4-2ubuntu1~14.04.3_i386.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

Meu pensamento neste momento é livrar-se do libstdc ++ 6-armhf-cross, atualmente não preciso fazer nenhuma compilação cruzada e, no futuro, se o fizer, tentarei trazê-lo de volta em:

sudo apt-get remove --purge libstdc++6-armhf-cross libstdc++-4.8-dev-armhf-cross g++-4.8-arm-linux-gnueabihf libsfstdc++-4.8-dev-armhf-cross g++-4.8-multilib-arm-linux-gnueabihf libstdc++-4.8-dev g++-4.8 g++-arm-linux-gnueabihf g++ build-essential

Isso funciona bem e, portanto, de volta ao upgrade:

sudo apt-get upgrade

Bem, isso ainda falha, só que desta vez em um pacote diferente:

The following packages have unmet dependencies:
 libstdc++-4.8-dev : Depends: libstdc++6 (>= 4.8.4-2ubuntu1~14.04.3) but 4.8.4-2ubuntu1~14.04.1 is installed
 libstdc++6 : Depends: gcc-4.8-base (= 4.8.4-2ubuntu1~14.04.1) but 4.8.4-2ubuntu1~14.04.3 is installed
E: Unmet dependencies. Try using -f.

E usando a opção -f:

sudo apt-get upgrade -f

Falha novamente com:

Preparing to unpack .../libstdc++6_4.8.4-2ubuntu1~14.04.3_i386.deb ...
Unpacking libstdc++6:i386 (4.8.4-2ubuntu1~14.04.3) over (4.8.4-2ubuntu1~14.04.1) ...
dpkg: error processing archive /var/cache/apt/archives/libstdc++6_4.8.4-2ubuntu1~14.04.3_i386.deb (--unpack):
 trying to overwrite '/usr/share/gcc-4.8/python/libstdcxx/__init__.py', which is also in package libstdc++6-armhf-cross 4.8.4-2ubuntu1~14.04.1cross0.11.1
Errors were encountered while processing:
 /var/cache/apt/archives/libstdc++6_4.8.4-2ubuntu1~14.04.3_i386.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

Então, livre-se do gcc-4.8-base? Não, isso não está acontecendo, é uma dependência do libstdc ++ 6, daí a dependência circular. A única solução que posso pensar é tentar mover o gcc-4.8-base de volta para a versão 14.03.1 e depois atualizar a partir daí, daí a pergunta original acima.

Como sugestão de Scott, também comecei a tentar sua sequência, mas o primeiro comando falhou:

sudo dpkg --configure -a

Falha com:

dpkg: dependency problems prevent configuration of libstdc++-4.8-dev:i386:
 libstdc++-4.8-dev:i386 depends on libstdc++6 (>= 4.8.4-2ubuntu1~14.04.3); however:
  Version of libstdc++6:i386 on system is 4.8.4-2ubuntu1~14.04.1.

dpkg: error processing package libstdc++-4.8-dev:i386 (--configure):
 dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of g++-4.8:
 g++-4.8 depends on libstdc++-4.8-dev (= 4.8.4-2ubuntu1~14.04.3); however:
  Package libstdc++-4.8-dev:i386 is not configured yet.

dpkg: error processing package g++-4.8 (--configure):
 dependency problems - leaving unconfigured
Errors were encountered while processing:
 libstdc++-4.8-dev:i386
 g++-4.8
    
por MadMan 14.12.2016 / 19:03

1 resposta

0

Observe em sua última atualização a menção de i386 ... para simplificar seu desafio primeiro remova sua multi arquitetura ... remova todos os pacotes de 32 bits

sudo apt-get remove --purge 'dpkg --get-selections | grep i386 | awk '{print $1}''

em seguida, o próprio multi arch

sudo dpkg --remove-architecture i386

em seguida, edite

sudo dpkg --configure -a
sudo apt-get -f install
sudo apt-get --fix-missing install
sudo dpkg --configure --pending
sudo dpkg -C  # audit -
    
por Scott Stensland 14.12.2016 / 19:25