Executando um executável de 32 bits no Debian Jessie de 64 bits

5

Estou tentando instalar o Adobe Air (necessário para o Balsamiq Mockups) e, quando tento executar o instalador, recebo:

sudo: unable to execute ./AdobeAIRInstaller.bin: No such file or directory

Assegurei que o arquivo é executável e, ao pesquisar, parece que tentar executar um executável de 32 bits em um sistema de 64 bits fará isso. A recomendação de todos neste ponto parece ser a de instalar o ia32-libs, no entanto, esse pacote não existe mais no Debian Jessie (eles já refatoraram o suporte multiarch, ao que parece).

O que preciso fazer? multiarch-support está instalado, existe outra coisa?

    
por emilecantin 27.08.2014 / 03:36

1 resposta

4

Alguns antecedentes

Sim, ia32-libs foi uma medida paliativa antes de o multi-arch true ter sido implementado - basicamente, esse pacote continha apenas um monte de versões de 32 bits de algumas bibliotecas populares.

O que você faz agora é

  1. Ativar a arquitetura foregin i386 in dpkg :

    dpkg --add-architecture i386
    
  2. Descobrir quais bibliotecas essa coisa quer e instalar suas versões apropriadas de 32 bits ( i386 ), como

    apt-get install libfooX.Y:i386
    

Mas anote algumas coisas infelizes:

  • O multi-arch no Debian é baseado no fato de que bibliotecas dependentes de arco são instaladas em diretórios dependentes de arco, como /usr/lib/x86_64-linux-gnu para bibliotecas amd64 nativas e /usr/lib/i386-linux-gnu/ para o mesmo i386 bibliotecas no mesmo sistema.

    O problema aqui é que o software de terceiros que não tem conhecimento de multi-arch, conforme implementado no Debian, normalmente espera encontrar bibliotecas que dependem do uso de nomes comuns como /usr/lib/libfoo.so.X.Y.Z , que é simplesmente não é o caso de versões recentes do Debian.

    Isso poderia ser resolvido com o symlinking ou LD_PRELOAD ou com o carregador dinâmico usando outras formas (por exemplo, usando um arquivo de cache alternativo em vez de /etc/ld.so.cache , contendo referências a bibliotecas instaladas em outro lugar), mas veja próximo ponto.

  • O trabalho em versões compatíveis com Linux do Adobe Air foi interrompido por um longo tempo, o IIRC, então o último blob do Adobe Air pode depender de versões obsoletas de bibliotecas não presentes em versões recentes do Debian. E bibliotecas mais recentes significam alterações API / ABI, e estas não são solucionáveis usando links simbólicos.

Possível solução

Se me livrar dessa abominação da Adobe é impossível, eu possivelmente tentaria confiar no fato da API / ABI do kernel do kernel ser bastante estável e tentar criar um chroot ou LXC ambiente especificamente para executar este blob usando bibliotecas retiradas de qualquer sistema operacional alegava ser compatível com ele.

Basicamente, para o chroot, você precisa criar um diretório contendo um conjunto mínimo de bibliotecas (e pode haver alguns binários, como /bin/bash ) com nomes conhecidos (como /usr/lib/libfoo.so ).

Esta não é exatamente uma maneira fácil (você vai precisar de muitas rodadas de tentativa e erro, armada com readelf , ldd , extraindo e copiando arquivos, etc.), mas pode dar certo porque no final , todas as bibliotecas chamam o kernel usando syscalls, e elas são bastante estáveis em versões do kernel.

    
por 27.08.2014 / 13:55