Você está na página 1de 4

pt_BRMultiarchHOWTO

Translation(s): Português Brasileiro : Français : English

O que é esta multiarquitetura ("Multiarch")?


A multiarquitetura permite que você instale pacotes de bibliotecas de múltiplas
arquiteturas na mesma máquina. Isso é útil de diversas formas, mas a mais comum é
instalar tanto software de 64 quanto 32 bits na mesma máquina e ter as dependências
resolvidas corretamente de forma automática. Em geral, você pode ter bibliotecas de
mais de uma arquitetura instaladas juntas e aplicativos de uma arquitetura ou de
outra instalados como alternativas. Observe que isso não possibilita que várias
versões de aplicativos sejam instaladas simultaneamente.

Conceitos
Existe uma arquitetura da máquina atual, como é mostrada pelo dpkg --print-
architecture. Ela está incorporada ao pacote dpkg instalado atualmente.

(Observe que "architecture" aqui na realidade se refere a uma "ABI" (Interface


Binária de Aplicação), não um conjunto de instruções (ISA). Então, por exemplo,
"armel" e "armhf" são "arquiteturas" diferentes, embora elas usem (próximo o
bastante) o mesmo conjunto de instruções, porque elas têm ABIs de chamada de
biblioteca diferentes.)

Os pacotes agora podem ser especificados como "pacote:arquitetura" em paticamente


qualquer lugar onde antes era apenas "pacote", então nós temos libc:i386 e
libc:amd64. Infelizmente, as semânticas do dpkg e apt são ligeiramente diferentes,
por isso você pode obter resultados diferentes, mas deve ser sempre seguro e sem
ambiguidades para pacotes qualificados por arquitetura. O nome apenas "pacote"
refere-se à arquitetura atual da máquina no apt.

Outras arquiteturas disponíveis são mostradas pelo dpkg --print-foreign-


architectures. O dpkg gerenciará pacotes para essas arquiteturas assim como a
arquitetura da máquina.

Existe um cabeçalho "Multi-Arch" no meta-dado de qualquer pacote feito para


multiarquitetura.

Pacotes já existentes funcionam bem em um ambiente multiarquitetura, como antes,


mas para ter os benefícios de co-instalação ou dependências de arquiteturas
cruzadas, muito pacotes precisam ser feitos para multiarquitetura.

Para um pacote não modificado você pode escolher qual versão de arquitetura do
pacote deve ser instalada (por exemplo, "amd64" ou "i386").
Se um pacotes é marcado como "Multi-Arch: foreign", então ele pode satisfazer
dependências de um pacote de uma arquitetura diferente (por exemplo, "libglib2.0-
bin:amd64" irá satisfazer uma dependência da libglib2.0-bin para pacote de qualquer
arquitetura).

Para possibilitar que mais de uma versão de arquitetura de um pacote seja instalada
ao mesmo tempo (geralmente bibliotecas e pacotes -dev), os arquivos precisam ser
movidos para que eles não choquem. Esses pacotes são marcados como "Multi-Arch:
same".

Também exitem pacotes marcados como "Multi-Arch: allowed", que podem ser tratados
tanto como ":same" quanto ":foreign", dependendo da forma como ele são dependentes.

Empacotadores estão atualmente trabalhando na distribuição, começando com os


pacotes mais úteis para convertê-los para multiarquitetura. Veja a especificação da
multiarquitetura e o howto de implementação para detalhes de como tudo funciona de
fato, e como atualizar pacotes para tirar vantagem da funcionalidade.

Disponibilidade
Você precisa de um dpkg e apt que entendam multiarquitetura.

No dpkg do Debian isso está presente desde a versão 1.16.2. No Ubuntu isso está
presente desde a natty (v1.15.8.10ubuntu1). Verifique vendo se o dpkg --print-
foreign-architectures é entendido.

O apt entende multiarquitetura se suporta a opção -o APT::Architectures. Isso está


disponível da versão 0.8.13 em diante. Porém, há muitas melhorias relacionadas à
multiarquitetura e correções de bugs nas versões posteriores do apt (algumas são
exigidas pela versão 1.16.2 do dpkg do Debian para habilitar adequadamente a
multiarquitetura), tais como suporte a dependências cruzadas apt-get build-dep -a
<arquitetura> <pacote>. Então, em geral, a versão posterior é melhor, pelo menos
acima da 0.9.4.

Antes do apt 0.9, no Debian, o dpkg pode ficar emperrado (mas apenas se a
multiarquitetura for habilitada) durante as atualizações, quando não for dito qual
o pacote de arquitetura deve ser configurado pelo apt.

Por exemplo:

dpkg: error: --configure needs a valid package name but 'gcc-4.7-base' is not:
ambiguous package name 'gcc-4.7-base' with more than one installed instance
Executando dpkg --configure -a corrigirá isso.

Uso
Configurando arquiteturas
Para adicionar uma arquitetura extra (no Debian, do dpkg 1.16.2 em diante):

dpkg --add-architecture <arquitetura>


Por exemplo:

dpkg --add-architecture armhf


Note que nada realmente mudará até que você faça um

apt-get update
para atualizar a lista de pacotes disponíveis.

Para remover uma arquitetura:

dpkg --remove-architecture <arquitetura>


As arquiteturas do dpkg são armazenadas em /var/lib/dpkg/arch.

Observe que o dpkg do Ubuntu na natty (1.16.0~ubuntu7 (relatórios 1.15.8.10)),


oneiric e precise (1.16.1.2ubuntu7) usa uma sintaxe diferente:

echo "foreign-architecture armhf" >> /etc/dpkg/dpkg.cfg.d/architectures


Configurando fontes do apt
O padrão do apt é usar o conjunto de arquiteturas relatado pelo dpkg, e qualquer
linha de arquitetura não qualificada em /etc/apt/sources.list, que normalmente é o
que você quer. Isso pode ser sobrescrito usando a opção -o
APT::Architecture=<arquitetura> para definir a arquitetura padrão ou -o
APT::Architectures="<arquitetura> <arquitetura>".

O arquivo de fontes do apt pode ser qualificado por arquitetura com a sintaxe
abaixo. Isso é muito útil na divisão de repositórios do Ubuntu. Isso normalmente
não é necessário no Debian, a menos que o seu repositório normal não faça espelho
das arquiteturas extras nas quais você está interessado.

deb [arch=amd64,i386] http://br.archive.ubuntu.com/ubuntu/ quantal main universe


deb [arch=armel,armhf] http://ports.ubuntu.com/ubuntu-ports quantal main universe
Linhas deb-src qualificadas por arquiteturas não fazem nenhum sentido.

Observação: Existe um bug nas versões do apt >= 0.9.7 e < 0.9.7.2 o qual significa
que não funcionou ao colocar "arch=armel,armhf" em uma linha - você precisa de duas
entradas separadas.

Não esqueça de executar

apt-get update
após adicionar novas arquiteturas.

Instalando/removendo pacotes
Para instalar um pacote de uma arquitetura que não seja padrão, apenas especifique
essa arquitetura na linha de comando:

apt-get install pacote:arquitetura


As dependências dos pacotes serão instaladas automaticamente para as arquiteturas
corretas (dependências de biblioteca para a mesma arquitetura, outras dependências
para uma arquitetura diferente). Por exemplo:

apt-get install links:i386

dpkg -i pacote_versão_arquitetura.deb
dpkg -r pacote:arquitetura
Instalando dependências cruzadas
Para instalar dependências para construção de um pacote, antes da construção
cruzada ("cross-building") execute:

apt-get build-dep -a <arquitetura> <pacote>


Isso funciona apenas quando todos os pacotes de ferramentas dependentes são
marcados como Multi-Arch: foreign, quaisquer bibliotecas dependentes que também
sejam necessárias na máquina de construção ("BUILD"), e pacotes -dev que são
necessários tanto para a arquitetura HOST quanto a BUILD sejam feitos como co-
instaláveis. ("Multi-Arch: same" com os paths qualificados por arquitetura), e
quaisquer exceções às regras padrão são marcadas como "package:any" ou
"package:native" no fonte do pacote. Esse processo está em andamento.

Quando não funcionar, você geralmente pode obter as dependências instaladas


executando o apt-get na linha de comando. Por exemplo, ao invés de:

apt-get build-dep -a armhf acl


fazer:

apt-get install autoconf automake debhelper gettext libtool libattr1-dev:armhf


Os detalhes de como isso é resolvido estão em MultiarchCross.

Instalando bibliotecas de compatibilidade do SDK do Android


Alguns usuários que utilizam o SDK do Android encontram problemas quando tentam
executar build-tools ou platform-tools em uma plataforma de 64 bits. Como
substituto para ia32-libs, os usuários devem resolver apenas instalando as
seguintes bibliotecas:

dpkg --add-architecture i386


apt-get update
apt-get install libstdc++6:i386 libgcc1:i386 zlib1g:i386 libncurses5:i386

Você também pode gostar