Traducción(es): Brasileiro - English - Español - Français - Русский
Contents
¿Qué es la multiarquitectura?
La multiarquitectura le permite instalar bibliotecas de múltiples arquitecturas en el mismo sistema. Esto es útil en múltiples casos, pero principalmente para instalar paquetes de 32 y 64 bits en la misma máquina y disponer de las dependencias automáticamente resueltas. En general, podrá tener bibliotecas de más de una arquitectura instaladas juntas y aplicaciones de una arquitectura u otra instaladas como alternativas. Téngase en cuenta que esto no permite la instalación simultánea de múltiples versiones de programas.
Conceptos
Se dispone de una arquitectura en la máquina, como refleja dpkg --print-architecture. Está integrada en la instalación actual de dpkg.
Obsérvese que con "arquitectura" se refiere a una "ABI" (interfaz de binarios de aplicaciones), no a un conjunto de instrucciones (ISA). De este modo, armel y armhf son distintas "arquitecturas", a pesar de que usan prácticamente el mismo conjunto de instrucciones, ya que tienen distintas ABIs.
Los paquetes pueden ser especificados como "paquete:arquitectura" prácticamente en cualquier lugar en el que antes se introducía solamente "paquete", así que disponemos de libc:i386 y libc:amd64. Por desgracia, por ahora la semántica en dpkg y apt es ligeramente distinta, por lo que se podrían obtener resultados distintos; pero en debiera ser siempre seguro e inequívoco archivar paquetes. El nombre puro "paquete" se refiere a la arquitectura actual de la máquina en apt.
Otras arquitecturas disponibles son mostradas mediante dpkg --print-foreign-architectures. dpkg administrará paquetes para esas arquitecturas así como para la arquitectura nativa de la máquina.
Hay una cabecera "Multi-Arch" en los metadatos de cualquier paquete adaptado para multiarquitectura.
Disponibilidad
Necesitará un dpkg y un apt compatibles con multiarquitectura. En el dpkg de Debian, dicha compatibilidad está presente desde la versión 1.16.2. En Ubuntu está presente desde Natty (v1.15.8.10ubuntu1). Puede comprobarlo viendo si ejecutar dpkg --print-foreign-architectures retorna los resultados correctos.
apt es compatible con multiarquitectura si soporta -o APT::Architectures. Está disponible desde la versión 0.8.13; no obstante, hay muchas mejoras y correcciones de errores relevantes en versiones posteriores de apt (algunas requeridas por Debian dpkg 0.8.13 y superiores para activar la multiarquitectura), tal que soporte multiarquitectura para apt build-dep -a; por lo que es mejor disponer de al menos la versión 0.9.4.
Antes de apt 0.9 en Debian, dpkg podía atascarse con multiarquitectura activada durante actualizaciones si no se le especificaba qué arquitectura debiera estar configurando con apt (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). dpkg --configure -a deshará esto.
Uso
Configuración de arquitecturas
Para añadir una arquitectura adicional (en Debian, desde dpkg 1.16.2):
# dpkg --add-architecture <arquitectura>
Por ejemplo:
# dpkg --add-architecture i386
Obsérvese que no habrán cambios perceptibles hasta que realice un
# apt update
para actualizar la lista de paquetes disponibles.
Para eliminar una arquitectura:
# dpkg --remove-architecture <arquitectura>
Las arquitecturas de dpkg son almacenadas en /var/lib/dpkg/arch.
Tenga en cuenta que necesitará desinstalar todos los paquetes de una arquitectura antes de eliminarla:
apt purge ".*:<arqutectura>"
Considérese que el dpkg de Ubuntu en Natty (1.16.0~ubuntu7 (reporta 1.15.8.10)), Oneiric y Precise (1.16.1.2ubuntu7) usa una sintaxis distinta:
echo "foreign-architecture <arquitectura>" >> /etc/dpkg/dpkg.cfg.d/architectures
Configuración de los orígenes de apt
Por defecto, apt usa el conjunto de arquitecturas reportado por dpkg, y cualquier línea de arquitectura no calificada en /etc/apt/sources.list, que es habitualmente el comportamiento deseado. Esto puede ser invalidado usando APT::Architecture=<arquitectura> para ajustar la arquitectura predeterminada o APT::Architectures="<arquitectura> <arquitectura>".
