Eu tenho um ambiente chroot qemu-armhf em uma máquina amd64 (é principalmente para compilar o código Raspberry Pi). Como tal, ele pode executar os binários armhf e amd64, mas é mais rápido fazer o último.
Existem certos pacotes (como make) onde instalei a versão amd64 dentro do chroot para obter uma velocidade melhor. Isso funciona bem até que eu preciso do apt-get algum outro pacote armhf e acontece de ter o make listado como uma dependência, quando eu recebo isso:
The following packages have unmet dependencies:
build-essential : Depends: make but it is not going to be installed
dpkg-dev : Depends: make but it is not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).
Se eu tentar o comando sugerido, ele diz que deseja instalar make:armhf
e desinstalar make:amd64
. Eu não quero fazer isso. Como eu digo ao APT que make:armhf
já está instalado (porque eu quero usar make:amd64
para satisfazer dependências) sem realmente instalá-lo?
Eu tentei usar apt-mark manual make
, mas ele diz que não está instalado.
Eu sei que este provavelmente não é o jeito certo de fazê-lo, mas eu estive olhando o arquivo /var/lib/dpkg/status
para tentar descobrir como ele acha que as definições de pacote funcionam e tentar enganá-lo e concordar que make: amd64 satisfaz make: armhf também.
Em particular, notei que "libbz2-1.0" é um pacote listado como instalado duas vezes; uma vez como:
Architecture: armhf
Multi-Arch: same
Pre-Depends: multiarch-support
e uma vez como:
Architecture: amd64
Multi-Arch: foreign
Pre-Depends: multiarch-support
Então eu tentei duplicar as entradas para "make" da mesma forma, definindo todos esses valores acima. Mas agora o APT está apenas dizendo que "make" e "make: amd64" estão em conflito. Por que é um conflito quando o make faz isso, mas não quando o libbz2-1.0 faz isso? (Espero que não sejam bibliotecas de invólucros especiais; isso parece ser um bug.)
Por esta resposta , tentei criar um pacote fictício com equivs
e instalá-lo (após remover meu manual mexendo acima), mas instalá-lo produz esses erros:
# dpkg -i /var/cache/apt/archives/make_3.81-8.2_amd64.deb (real amd64 make)
# dpkg -i make_3.81-8.2_armhf.deb (fake armhf depends on the above)
Preparing to replace make 3.81-8.2 (using make_3.81-8.2_armhf.deb) ...
Unpacking replacement make ...
dpkg: dependency problems prevent configuration of make:
make depends on make:amd64 (= 3.81-8.2).
Então, novamente, o problema parece que o make: armhf é um substituto para o make: amd64, e eu não sei como dizer que eu quero que esses dois pacotes coexistam. (Não parece ter um problema com a idéia de dois pacotes libbz2 coexistindo, por exemplo).