Como um comando apt-get pode ser configurado para ignorar aqueles que ele pretende remover?

1

O comando apt-get pode ser configurado para ignorar alguns dos pacotes que deseja remover. Eu corro ambos os pacotes de desenvolvimento de 32 bits e 64 bits, bem como os programas criados neles, o que significa que eu preciso tanto do xxx: i386 e suas contrapartes de 64 bits no sistema.Neste sistema por exemplo eu preciso instalar um pacote de desenvolvimento de 64 bits Todos os pacotes de desenvolvimento de 32 bits relacionados estão marcados para remoção.

root@ac02:/usr/src/packages/lazarus# apt-get -f install
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Correcting dependencies... Done
The following packages were automatically installed and are no longer required:
  gir1.2-freedesktop:i386 gir1.2-glib-2.0:i386 gir1.2-pango-1.0:i386 libcairo-gobject2:i386 libcairo-script-interpreter2:i386 libexpat1-dev:i386 libgirepository-1.0-1:i386
  libharfbuzz-gobject0:i386 libharfbuzz-icu0:i386 libice-dev:i386 liblzo2-2:i386 libpcre3-dev:i386 libpcrecpp0:i386 libpng12-dev:i386 libpthread-stubs0-dev:i386 libsm-dev:i386
  libx11-dev:i386 libxau-dev:i386 libxcb-render0-dev:i386 libxcb-shm0-dev:i386 libxcb1-dev:i386 libxcursor-dev:i386 libxdamage-dev:i386 libxdmcp-dev:i386 libxext-dev:i386
  libxfixes-dev:i386 libxinerama-dev:i386 libxrandr-dev:i386 libxrender-dev:i386 zlib1g-dev:i386
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
  gir1.2-atk-1.0 gir1.2-gdkpixbuf-2.0 gir1.2-gtk-2.0 libatk1.0-dev libcairo-script-interpreter2 libcairo2-dev libexpat1-dev libfontconfig1-dev libfreetype6-dev libgdk-pixbuf2.0-dev
  libglib2.0-dev libgtk2.0-dev libharfbuzz-dev libharfbuzz-gobject0 libice-dev libpango1.0-dev libpcre3-dev libpcrecpp0 libpixman-1-dev libpng12-dev libpthread-stubs0-dev libsm-dev
  libx11-dev libxau-dev libxcb-render0-dev libxcb-shm0-dev libxcb1-dev libxcomposite-dev libxcursor-dev libxdamage-dev libxdmcp-dev libxext-dev libxfixes-dev libxft-dev libxi-dev
  libxinerama-dev libxrandr-dev libxrender-dev
Suggested packages:
  libcairo2-doc libglib2.0-doc libgtk2.0-doc libice-doc libpango1.0-doc libsm-doc libxcb-doc libxext-doc
The following packages will be REMOVED:
  gir1.2-atk-1.0:i386 gir1.2-gdkpixbuf-2.0:i386 gir1.2-gtk-2.0:i386 libatk1.0-dev:i386 libcairo2-dev:i386 libfontconfig1-dev:i386 libfreetype6-dev:i386 libgdk-pixbuf2.0-dev:i386
  libglib2.0-dev:i386 libgtk2.0-dev:i386 libharfbuzz-dev:i386 libpango1.0-dev:i386 libpixman-1-dev:i386 libxcomposite-dev:i386 libxft-dev:i386 libxi-dev:i386
The following NEW packages will be installed:
  gir1.2-atk-1.0 gir1.2-gdkpixbuf-2.0 gir1.2-gtk-2.0 libatk1.0-dev libcairo-script-interpreter2 libcairo2-dev libexpat1-dev libfontconfig1-dev libfreetype6-dev libgdk-pixbuf2.0-dev
  libglib2.0-dev libgtk2.0-dev libharfbuzz-dev libharfbuzz-gobject0 libice-dev libpango1.0-dev libpcre3-dev libpcrecpp0 libpixman-1-dev libpng12-dev libpthread-stubs0-dev libsm-dev
  libx11-dev libxau-dev libxcb-render0-dev libxcb-shm0-dev libxcb1-dev libxcomposite-dev libxcursor-dev libxdamage-dev libxdmcp-dev libxext-dev libxfixes-dev libxft-dev libxi-dev
  libxinerama-dev libxrandr-dev libxrender-dev
0 upgraded, 38 newly installed, 16 to remove and 33 not upgraded.
1 not fully installed or removed.
Need to get 14.0 MB of archives.
After this operation, 13.4 MB of additional disk space will be used.
Do you want to continue? [Y/n] 

Quando um pacote é marcado para remoção, isso significa que o apt-get acha que está em conflito com outros pacotes? Isso me parece bastante inesperado, já que a maioria dos sistemas de desenvolvimento procura pacotes de desenvolvimento de 32 bits separadamente, formando pacotes de 64 bits.

    
por vfclists 05.03.2017 / 22:57

1 resposta

2

Quando apt-get decide remover um pacote como parte da instalação de outro pacote, é porque há um conflito declarado (que pode não refletir um conflito real). Pacotes não-multiarch entram em conflito com o mesmo pacote de outra arquitetura; como explicado em resposta a Por que tentar instalar uma biblioteca de 64 bits via apt ameaça excluir um número de 32 bits requeridos? este é frequentemente o caso dos pacotes de desenvolvimento.

Você pode, no entanto, forçar a instalação de um pacote conflitante, usando dpkg --force-conflicts . Você precisará baixar os pacotes afetados e instalá-los manualmente, e você não poderá usar apt-get até que o conflito seja resolvido (ou melhor, apt-get insistirá em resolver o conflito). Você pode quebrar os pacotes envolvidos no conflito, mas pelo menos você pode tentar ...

Não estou ciente de uma opção para desabilitar o tratamento de conflitos de apt-get .

Uma alternativa é corrigir os pacotes afetados; Isso é bastante simples na maioria dos casos e evitará problemas subsequentes com apt . Por exemplo, para harfbuzz no Debian 8:

  • faça o download do código-fonte e extraia:

    dget http://httpredir.debian.org/debian/pool/main/h/harfbuzz/harfbuzz_0.9.35-2.dsc
    cd harfbuzz-0.9.35
    
  • edite debian/control e adicione Multi-Arch: same após a linha Architecture em Package: libharfbuzz-dev

  • adicione uma entrada de changelog para que seus pacotes personalizados não sejam substituídos pela versão atual do arquivo:

    dch -n "Enable Multi-Arch on the -dev package."
    
  • construa o pacote (você precisará fazer isso em um construtor amd64 e um construtor i386 - é aqui que pbuilder ou sbuild são úteis)

    dpkg-buildpackage -us -uc
    

Isso produzirá libharfbuzz-dev pacotes co-instaláveis. Isso funciona porque os pacotes já eram co-instaláveis, eles simplesmente não tinham os meta-dados necessários. Por harfbuzz isto foi corrigido no Debian 9.

    
por 05.03.2017 / 23:37

Tags