Eu tenho uma instalação Debian ou Ubuntu de 64 bits (amd64 aka x86_64). Preciso executar programas de 32 bits (i386 / i686) ocasionalmente ou compilar programas para um sistema de 32 bits. Como posso fazer isso com um mínimo de confusão?
Bônus: e se eu quiser executar ou testar com uma versão mais antiga ou mais recente da distribuição?
Respostas:
Suporte nativo
Desde o Ubuntu 11.04 e o Debian wheezy (7.0), o Debian e o Ubuntu têm suporte a multiarch: você pode misturar os pacotes x86_32 (i386) e x86_64 (amd64) no mesmo sistema de maneira direta. Isso é conhecido como suporte a multiarch. Consulte a resposta do warl0ck para obter mais detalhes.
Em versões mais antigas, o Debian e o Ubuntu são fornecidos com várias bibliotecas de 32 bits no amd64. Instale o pacote para ter um conjunto básico de bibliotecas de 32 bits e, possivelmente, outros pacotes que dependem dessa. Seus executáveis de 32 bits devem ser executados simplesmente se você tiver todas as bibliotecas necessárias. Para desenvolvimento, instale e, novamente, possivelmente outros pacotes que dependem dele, como . Você pode achar útil também, e no Debian. Passe a opção para o gcc para compilar para o ix86.
ia32-libs
gcc-multilib
g++-multilib
binutils-multiarch
ia32-libs-dev
-m32
Observe que
uname -m
ainda será exibidox64_64
se você estiver executando um kernel de 64 bits, independentemente dos componentes de modo de usuário de 32 bits que você instalou. Schroot descrito abaixo cuida disso.Schroot
Esta seção é um guia para instalar uma distribuição semelhante ao Debian "dentro" de outra distribuição Linux. Ele está redigido em termos de instalação de um Ubuntu de 32 bits dentro de um Ubuntu de 64 bits, mas deve ser aplicado com pequenas modificações em outras situações, como a instalação do Debian instável no Debian stable ou vice-versa.
Introdução
A idéia é instalar uma distribuição alternativa em uma subárvore e executar a partir dela. Você pode instalar um sistema de 32 bits em um sistema de 64 bits dessa maneira, ou uma versão diferente da sua distribuição ou um ambiente de teste com diferentes conjuntos de pacotes instalados.
A
chroot
chamada de comando e sistema inicia um processo com uma visualização do sistema de arquivos restrita a uma subárvore da árvore de diretórios. O Debian e o Ubuntu disponibilizam o schroot , um utilitário que envolve esse recurso para criar um sub-ambiente mais utilizável.Instale o
schroot
pacote ( Debian ) e odebootstrap
pacote ( Debian ). O Debootstrap é necessário apenas para a instalação da distribuição alternativa e pode ser removido posteriormente.Configurar schroot
Este exemplo descreve como configurar um ambiente alternativo do Ubuntu 10.04LTS (lucid lynx) de 32 bits. Uma configuração semelhante deve funcionar com outras versões do Debian e Ubuntu. Crie um arquivo
/etc/schroot/chroot.d/lucid32
com o seguinte conteúdo:A linha
directory=/32
informa ao schroot onde colocaremos os arquivos da instalação de 32 bits. A linhausername=yourusername
diz que o usuárioyourusername
poderá usar o schroot. A linhagroups=users,admin
diz que os usuários de qualquer grupo poderão usar o schroot; você também pode colocar umausers=…
diretiva.Instale a nova distribuição
Crie o diretório e comece a preenchê-lo com debootstrap. O Debootstrap baixa e instala um conjunto principal de pacotes para a distribuição e arquitetura especificadas.
Você quase já tem um sistema em funcionamento; o que se segue são pequenas melhorias. O Schroot sobrescreve automaticamente vários arquivos
/32/etc
quando você o executa, em particular a configuração do DNS/etc/resolv.conf
e o banco de dados do usuário/etc/passwd
e outros arquivos (isso pode ser substituído, consulte a documentação). Há mais alguns arquivos que você pode copiar manualmente de uma vez por todas:Não haverá um arquivo
/etc/mtab
ou/etc/fstab
no chroot. Não recomendo usar omount
comando manualmente no chroot, faça-o de fora. Mas crie um suficientemente bom/etc/mtab
para fazer comandos como odf
trabalho razoavelmente.Com o
directory
tipo, schroot irá realizar montagens bind de um número de diretórios, ou seja, os diretórios serão compartilhados com a instalação parent:/proc
,/dev
,/home
,/tmp
.Serviços no chroot
Conforme descrito aqui, um schroot não é adequado para executar daemons. Os programas no schroot serão eliminados quando você sair do schroot. Use um schroot "simples" em vez de um schroot de "diretório" se desejar que ele seja mais permanente e configure montagens de ligação permanentes na
/etc/fstab
instalação pai.No Debian e Ubuntu, os serviços iniciam automaticamente na instalação. Para evitar isso (que pode interromper os serviços executados fora do chroot, principalmente porque as portas de rede são compartilhadas), estabeleça uma política de não execução de serviços no chroot. Coloque o seguinte script como
/32/usr/sbin/policy-rc.d
e torne-o executável (chmod a+rx /32/usr/sbin/policy-rc.d
).Preencher o novo sistema
Agora podemos começar a usar o chroot. Você deseja instalar mais alguns pacotes neste momento.
Pode ser necessário gerar algumas localidades, por exemplo
Se o schroot é para uma versão mais antiga do Ubuntu, como 8.04 (hardy), observe que o pacote ubuntu-standard puxa um MTA. Selecione em
nullmailer
vez do padrãopostfix
(você pode querer que seu chroot envie correio, mas definitivamente não deseja que ele receba nenhum).Indo além
Para mais informações, consulte o
schroot
manual , as Perguntas frequentes sobre o schroot e oschroot.conf
manual . Schroot faz parte do projeto Debian autobuilder (buildd) . Pode haver dicas adicionais úteis na página da comunidade Ubuntu sobre o debootstrap .Máquina virtual
Se você precisar de um isolamento completo do ambiente alternativo, use uma máquina virtual como KVM ( qemu-kvm ) ou VirtualBox .
fonte
[ "$(stat -c %d:%i /)" != "$(stat -c %d:%i /proc/1/root/.)" ]
condição faz?users=faheem
no seu exemplo. Por padrão, pelo menos para mim, não sou membro do grupo de usuários. Eu esperava, no entanto.Desde que o Ubuntu 11.04 (natty) e o Debian 7.0 (wheezy) introduziram o suporte a multiarch , as bibliotecas de 32 e 64 bits podem coexistir em um sistema. Para instalar uma biblioteca de 32 bits libXX, primeiro adicione a arquitetura de 32 bits necessária ao seu sistema:
Para o Ubuntu:
E para o Debian:
Em seguida, instale a biblioteca de 32 bits:
O pacote ia32-libs. A partir do Ubuntu 12.04, preciso, ele não contém mais bibliotecas, apenas atrai
libXX:i386
pacotes como dependências.A parte de compilação é bastante fácil para programas em C e C ++, adicionar
-m32
aCFLAG
ouCXXFLAG
, o que tornará o programa gerado em 32 bits, por exemploIsso funciona para projetos baseados em makefile também.
fonte
apt-get install ia32-libs
trabalhou para mim (13.04)!Se você possui apenas um binário de 32 bits que deseja executar em um moderno sistema Debian / Ubuntu de 64 bits, faça o seguinte:
Isso foi testado no Debian 9.
fonte
sudo apt-get install lib32z1
do meu executável de 32 bits específico, se isso ajudar. O erro foi:sqlite3: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
. Sim, é 2019 e não consigo encontrar um cliente sqlite3 de 64 bits pré-compilado, suportado pelo projeto sqlite :( Estou bastante limitado no que tenho permissão para instalar neste recurso compartilhado, por isso tenho que remover pacotes sqlite pré-compilados. Felizmente eu posso instalarlib32z1
.