Saltar al contenido

¿Cómo ejecuto programas de 32 bits en Debian / Ubuntu de 64 bits?

Hola usuario de nuestra página, hallamos la respuesta a tu búsqueda, deslízate y la encontrarás un poco más abajo.

Solución:

Para lanzamientos actuales

Debian y Ubuntu actuales tienen soporte multiarch: puede mezclar paquetes x86_32 (i386) y x86_64 (amd64) en el mismo sistema de una manera sencilla. Esto se conoce como soporte multiarca; 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 incluyen varias bibliotecas de 32 bits en amd64. Instala el ia32-libsInstalar ia32-libs

package 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 necesarias. Para el desarrollo, instale gcc-multilibInstalar gcc-multilib, y nuevamente posiblemente otros paquetes que dependen de él, como g++-multilib. Puedes encontrar binutils-multiarchInstalar binutils-multiarch útil también, y ia32-libs-dev en Debian. Pasa el -m32 opción a gcc para compilar para ix86.

Tenga en cuenta que uname -m todavía se mostrará 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 que se describe 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 eso. 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.

los 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 característica para crear un sub-entorno más utilizable.

Instala el schroot paquete Instalar schroot (Debian) y el debootstrap paquete Instalar debootstrap (Debian). Debootstrap solo es necesario para la instalación de la distribución alternativa y se puede quitar posteriormente.

Configurar schroot

Este ejemplo describe cómo configurar un entorno alternativo de Ubuntu 10.04LTS (lucid lynx) de 32 bits. Una configuración similar debería funcionar con otras versiones de Debian y Ubuntu. Crea un archivo /etc/schroot/chroot.d/lucid32 con el siguiente contenido:

[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á usar el schroot. La línea groups=users,admin dice que los usuarios de cualquiera de los grupos podrán utilizar schroot; también puedes poner un users=… directiva.

Instala la nueva distribución

Cree el directorio y comience a poblarlo con debootstrap. Debootstrap descarga e instala un conjunto básico de paquetes para la distribución y 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 puede querer 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, hágalo desde afuera. Pero crea un lo suficientemente bueno /etc/mtab 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 schroot se eliminarán cuando salga de schroot. Utilice un schroot “simple” 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 los puertos de red son compartidos), establezca una política de no ejecutar servicios en el chroot. Ponga el siguiente script como /32/usr/sbin/policy-rc.d y hacerlo ejecutablechmod 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

Complete el nuevo sistema

Ahora podemos empezar a usar 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, p. Ej.

locale-gen en_US en_US.utf8

Si el schroot es para una versión anterior de Ubuntu como 8.04 (hardy), tenga en cuenta que el paquete ubuntu-standard extrae un MTA. Seleccione nullmailer en lugar del predeterminado postfix (es posible que desee que su chroot envíe correo, pero definitivamente no desea que reciba ninguno).

Ir más lejos

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 de construcción automática de Debian (buildd). Puede haber consejos útiles adicionales en la página de la comunidad de Ubuntu sobre debootstrap.

Máquina virtual

Si necesita un aislamiento completo del entorno alternativo, utilice una máquina virtual como KVM (qemu-kvm Instalar qemu-kvm) o VirtualBox.

Dado que Ubuntu 11.04 (natty) y Debian 7.0 (wheezy) introdujeron el soporte multiarca, las bibliotecas de 32 y 64 bits pueden coexistir en un sistema. Para instalar una biblioteca libXX de 32 bits, primero agregue la arquitectura de 32 bits necesaria a su sistema:

sudo dpkg --add-architecture i386

Luego instale la biblioteca de 32 bits:

sudo apt-get install libXX:i386

El paquete ia32-libs. A partir de Ubuntu 12.04 precisa, ya no contiene bibliotecas, solo extrae libXX:i386 paquetes como dependencias.

La parte de compilación es bastante fácil para los programas C y C ++, agregue -m32 para CFLAG o CXXFLAG, lo que hará que el programa generado sea de 32 bits, p. ej.

export CFLAGS="-m32"
gcc main.c -o main

Esto también funciona para proyectos basados ​​en archivos MAKE.

Si solo tiene un binario de 32 bits que le gustaría ejecutar en un sistema Debian / Ubuntu moderno de 64 bits, haga lo siguiente:

dpkg --add-architecture i386
apt update
apt install libc6-i386

Esto ha sido probado en Debian 9.

valoraciones y reseñas

Si eres capaz, tienes el poder dejar un post acerca de qué le añadirías a esta noticia.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *