Tengo una instalación de Debian o Ubuntu de 64 bits (amd64 a.k.a. x86_64). Necesito ejecutar programas de 32 bits (i386/i686) ocasionalmente o compilar programas para un sistema de 32 bits. ¿Cómo puedo hacer esto con un mínimo de alboroto?
Bonificación:¿qué pasa si quiero ejecutar o probar con una versión más antigua o más nueva de la distribución?
Respuesta aceptada:
Para versiones actuales
Debian y Ubuntu actuales tienen soporte multiarquitectura:puede mezclar paquetes x86_32 (i386) y x86_64 (amd64) en el mismo sistema de una manera sencilla. Esto se conoce como compatibilidad con varias arquitecturas:
consulte la wiki de Ubuntu o Debian para obtener más información.
Consulte la respuesta de warl0ck para obtener una respuesta simple y actualizada.
Para lanzamientos antiguos
En versiones anteriores, Debian y Ubuntu se envían con varias bibliotecas de 32 bits en amd64. Instale el ia32-libs
Paquete para tener un conjunto básico de bibliotecas de 32 bits y posiblemente otros paquetes que dependan de este. Sus ejecutables de 32 bits simplemente deberían ejecutarse si tiene todas las bibliotecas requeridas. Para el desarrollo, instale gcc-multilib
, y posiblemente otros paquetes que dependan de él, como g++-multilib
. Puede encontrar binutils-multiarch
útil también, y ia32-libs-dev
en Debian. Pase el -m32
opción a gcc para compilar para ix86.
Tenga en cuenta que uname -m
seguirá mostrando x64_64
si está ejecutando un kernel de 64 bits, independientemente de los componentes de modo de usuario de 32 bits que haya instalado. Schroot descrito a continuación se encarga de esto.
Schroot
Esta sección es una guía para instalar una distribución similar a Debian “dentro” de otra distribución de Linux. Está redactado en términos de instalar un Ubuntu de 32 bits dentro de un Ubuntu de 64 bits, pero debería aplicarse con modificaciones menores a otras situaciones, como instalar Debian inestable dentro de Debian estable o viceversa.
Introducción
La idea es instalar una distribución alternativa en un subárbol y ejecutar desde allí. Puede instalar un sistema de 32 bits en un sistema de 64 bits de esa manera, o una versión diferente de su distribución, o un entorno de prueba con diferentes conjuntos de paquetes instalados.
El chroot
El comando y la llamada al sistema inician un proceso con una vista del sistema de archivos que está restringida a un subárbol del árbol de directorios. Debian y Ubuntu incluyen schroot, una utilidad que envuelve esta función para crear un subentorno más utilizable.
Instale el schroot
paquete (Debian) y el debootstrap
paquete (Debian). Debootstrap solo es necesario para la instalación de la distribución alternativa y puede eliminarse después.
Configurar schroot
Este ejemplo describe cómo configurar un entorno alternativo Ubuntu 10.04LTS (lucid lynx) de 32 bits. Una configuración similar debería funcionar con otras versiones de Debian y Ubuntu. Cree un archivo /etc/schroot/chroot.d/lucid32
con los siguientes contenidos:
[lucid32]
description=Ubuntu 10.04LTS 32-bit
directory=/32
type=directory
personality=linux32
users=yourusername
groups=users,admin
La línea directory=/32
le dice a schroot dónde colocaremos los archivos de la instalación de 32 bits. La línea username=yourusername
dice el usuario yourusername
se le permitirá utilizar el schroot. La línea groups=users,admin
dice que los usuarios de cualquier grupo podrán usar el schroot; también puedes poner un users=…
directiva.
Instalar la nueva distribución
Cree el directorio y comience a llenarlo con debootstrap. Debootstrap descarga e instala un conjunto básico de paquetes para la distribución y la arquitectura especificadas.
mkdir /32
debootstrap --arch i386 lucid /32 http://archive.ubuntu.com/ubuntu
Ya casi tienes un sistema en funcionamiento; lo que sigue son mejoras menores. Schroot sobrescribe automáticamente varios archivos en /32/etc
cuando lo ejecuta, en particular la configuración de DNS en /etc/resolv.conf
y la base de datos de usuarios en /etc/passwd
y otros archivos (esto se puede anular, consulte la documentación). Hay algunos archivos más que quizás desee copiar manualmente de una vez por todas:
cp -p /etc/apt/apt.conf /32/etc/apt/ # for proxy settings
cp -p /etc/apt/sources.list /32/etc/apt/ # for universe, security, etc
cp -p /etc/environment /32/etc/ # for proxy and locale settings
cp -p /etc/sudoers /32/etc/ # for custom sudo settings
No habrá un archivo /etc/mtab
o /etc/fstab
en el chroot. No recomiendo usar el mount
comando manualmente en el chroot, hazlo desde afuera. Pero cree un /etc/mtab
suficientemente bueno para hacer comandos como df
trabajar razonablemente.
ln -s /proc/mounts /32/etc/mtab
Con el directory
type, schroot realizará montajes de enlace de varios directorios, es decir, esos directorios se compartirán con la instalación principal:/proc
, /dev
, /home
, /tmp
.
Servicios en el chroot
Como se describe aquí, un schroot no es adecuado para ejecutar demonios. Los programas en el schroot se eliminarán cuando salga del schroot. Use un schroot "sencillo" en lugar de un schroot de "directorio" si desea que sea más permanente, y configure montajes de enlace permanentes en /etc/fstab
en la instalación principal.
En Debian y Ubuntu, los servicios se inician automáticamente en la instalación. Para evitar esto (que podría interrumpir los servicios que se ejecutan fuera del chroot, en particular porque se comparten los puertos de red), establezca una política de no ejecutar servicios en el chroot. Coloque el siguiente script como /32/usr/sbin/policy-rc.d
y hacerlo ejecutable (chmod a+rx /32/usr/sbin/policy-rc.d
).
#!/bin/sh
## Don't start any service if running in a chroot.
## See /usr/share/doc/sysv-rc/README.policy-rc.d.gz
if [ "$(stat -c %d:%i /)" != "$(stat -c %d:%i /proc/1/root/.)" ]; then
exit 101
fi
Poblar el nuevo sistema
Ahora podemos empezar a usar el chroot. Querrá instalar algunos paquetes más en este punto.
schroot -c lucid32
sudo apt-get update
apt-get install lsb-core nano
...
Es posible que deba generar algunas configuraciones regionales, por ejemplo,
locale-gen en_US en_US.utf8
Si el schroot es para una versión anterior de Ubuntu, como 8.04 (resistente), tenga en cuenta que el paquete ubuntu-standard extrae un MTA. Seleccione nullmailer
en lugar del postfix
predeterminado (es posible que desee que su chroot envíe correos, pero definitivamente no desea que los reciba).
Ir más allá
Para obtener más información, consulte el schroot
manual, las preguntas frecuentes de schroot y el schroot.conf
manual. Schroot es parte del proyecto Debian autobuilder (buildd). Puede haber consejos útiles adicionales en la página de la comunidad de Ubuntu sobre el arranque.
Máquina virtual
Si necesita un aislamiento completo del entorno alternativo, utilice una máquina virtual como KVM (qemu-kvm ) o VirtualBox.