PDF de programación - Ejecución de binarios de 32 bits en 64 bits

Imágen de pdf Ejecución de binarios de 32 bits en 64 bits

Ejecución de binarios de 32 bits en 64 bitsgráfica de visualizaciones

Publicado el 10 de Agosto del 2018
622 visualizaciones desde el 10 de Agosto del 2018
305,1 KB
5 paginas
Creado hace 15a (07/05/2008)
TALLER PRÁCTICO
ia32.sh

Ejecución de binarios
de 32 bits en 64 bits Toni CasTillo
P resentamos en este taller

[email protected]

ia32.sh, un script programa-
do en bash que permite eje-
cutar los binarios más conflictivos
de 32 bits, como Acrobat Reader,
los plugins para Firefox de JRE,
Flash, etc. en distribuciones
Debian o derivadas de 64 bits de
modo totalmente transparente pa-
ra el usuario.

Durante algún tiempo, sobre todo al

inicio de las primeras versiones de la distribu-
ción inestable de Debian para arquitecturas
AMD64/EM64T, era habitual toparse con la
problemática de que algunos binarios cuyas
fuentes no eran públicas, simplemente no
se ejecutaban. Era necesario utilizar algunas
técnicas -la mayoría bien conocidas por
los administradores de GNU/Linux- como
chroot, chroot de librerías de 32 bits, máqui-
nas virtuales, etc.

Quien firma este reportaje se decidió a
desarrollar algún tipo de herramienta que
pudiera ocultar completamente su funcio-
namiento interno, pensando siempre en
usuarios finales. Elegí chroot y debootstrap,
como veréis líneas más adelante, pero
debía programar una herramienta nueva
que las usara sin intervención directa del
usuario. Así nació el proyecto ia32.sh que
queremos presentaros aquí. Al principio era
poco más que una decena de líneas escri-
tas en C, que rápidamente descarté para
desarrollarlo en bash. La elección de bash
se debió a que era más sencillo de portar,
sin necesidad de realizar compilaciones, y
cualquier usuario con pocos conocimientos
de GNU/Linux y de la shell podía entenderlo
con más facilidad si decidía modificarlo a
su gusto. Podríamos decir que de las doce
líneas de código C del proyecto se trans-
formaron en dos docenas de código en
shell-script. A día de hoy, la última versión
liberada disponible en SourceForge contie-
ne unas cuantas líneas más, aproximada-
mente unas 643.

Como decíamos, queremos compartir

con los lectores de Todo Linux nuestra ex-
periencia con ia32.sh en este tutorial, vamos
allá.

ANÁLISIS
El script ia32.sh se divide en diferentes fases
de ejecución, las cuales son:
 Chequeo del entorno
 Preparación o instalación del debootstrap
 Enlace de los sistemas de archivo
 Generación en tiempo de ejecución de un

■ DEBOOTSTRAP
La técnica del debootstrapping es todo
un clásico en Debian: permite instalar una
minidistribución totalmente funcional en un
directorio de nuestro sistema de archivos de
una manera rápida a través de un repositorio
de Internet.

wrapper

 Sincronización de cuentas de seguridad
 Ejecución del wrapper via chroot.

que vamos a describir a continuación.

■ CHEQUEO DEL ENTORNO
En las primeras fases del script se realizan
una serie de tareas previas básicas. Entre las
cuales podemos observar la comprobación
de la distribución donde se lanza el script, la
detección de root y la retrollamada mediante
sudo. Gracias a dicha retrollamada, el script
podrá ejecutar los pasos siguientes como
superusuario (uid=0). Para garantizar que la
abstracción sea total, es necesario añadir
una línea como la que sigue en el archivo
/etc/sudoers (y, como es lógico, disponer del
paquete sudo instalado):

usuario localhost = (root)
NOPASSWD: /usr/loca
/bin/ia32.sh

Bastará substituir “usuario” por el usuario
que lanzará el script, y /usr/local/bin/ia32.sh
por el PATH completo donde lo ubicaremos.

Es necesario destacar que la compro-
bación previa de root es básica para evitar
problemas de seguridad. Nuestro script no
permite la ejecución de binarios o coman-
dos de shell de 32 bits para root. Durante un
breve lapso de tiempo, y gracias a sudo, el
usuario se convierte en root para preparar el
entorno de ejecución del chroot, pero des-
pués el UID y el UUID del proceso ejecutado
es exactamente el mismo que el del usuario
que ha lanzado el script.

Nuestro script usa debootstrap para

instalar una versión Debian Etch de 32 bits
en el directorio indicado, pero lo hace de
modo automatizado. Por supuesto, como
debootstrap no se instala por defecto en
Debian ni Ubuntu, el script hace una compro-
bación trivial y, en caso de ser necesario, lo
instalará vía apt-get.

Desde hace unas semanas, es posible
encontrar en SourceForge una FileRelease
para AMD64 en formato de paquete binario
debian. En sus dependencias hemos añadi-
do todo lo necesario para que pueda ejecu-
tarse sin problemas, como el debootstrap.
De este modo simplificamos todavía más su
instalación o primera ejecución. De esto ha-
blaremos un poco más adelante.

El script permite indicar mediante una
variable la distro a instalar. De este modo,
si cambiamos etch por stable en $DISTRO
(ver Cuadro 1), siempre tendremos la últi-
ma versión de Debian como referencia. Por
eso nuestro script, actualmente, funciona
únicamente con Debian o Debian-Based,
puesto que no nos hemos preocupado ex-
cesivamente por buscar alternativas al de-
bootstrap en distros basadas en paquetes
RPM. En el TO-DO lo dejamos y se aceptan
voluntarios.

Si miramos el código del script, en la
función install_ia32_environment() obser-
varemos que hace algunas cosas más,
como la instalación de Acrobat Reader , de
la JRE de SUN y de los plugins de Firefox. Al
mismo tiempo, en las primeras versiones
del script teníamos el problema del idioma.
Necesitábamos sincronizar las locales del
equipo del usuario dentro del entorno chroot

El script ia32.sh consigue abstraer totalmente el uso de
chroot y debootstrap para usuarios sin conocimientos

www.studiopress.es

Número 91



TALLER PRÁCTICO

IA32.SH

para mantener la falsa sensación de que
nada había cambiado en realidad. Así que
optamos por añadir una nueva función upda-
te_locale() que arreglaba ese problema.

Si el usuario hace cambios de idioma en
su equipo, ia32.sh no los sincronizará auto-
máticamente. Decidimos añadir una opción
explícita (--update-locales) para que el
usuario la ejecutase bajo demanda poste-
riormente a la instalación inicial del deboots-
trap por motivos de eficiencia asintótica. La
generación de las locales tarda un tiempo,
mayor cuantas más locales tenga el usuario
definidas, es decir, es un problema con nota-
ción O lineal: O(n). Así que nos parecía terrible
que se auto-regenerasen en cada ejecución
del script. Consideramos que esta solución
era razonablemente elegante.

Siguiendo con nuestro diseño, creímos
oportuno abstraer al máximo los pasos pre-
vios que debía realizar un usuario antes de
poder ejecutar sus aplicaciones de 32 bits
preferidas, así que optamos por dejarle al
script toda la responsabilidad.

La primera vez que lo ejecutemos indi-
cándole una aplicación como parámetro,
detectará que no disponemos todavía de un
directorio de 32 bits instalado con deboots-
trap y nos lo instalará de manera automatiza-
da, por defecto, en $CHROOTDIR (Cuadro
1). Podemos monitorizar todo el proceso de
instalación leyendo el archivo /var/log/de-
bootstrap.log:

$ tail -F /var/log/
debootstrap.log

directorios indicados en $MPOINTS dentro
del $CHROOTDIR.

Por ejemplo, para dar acceso al ~ de ca-
da usuario que ejecute ia32.sh, es necesario
enlazar /home. Para lograrlo basta con hacer
algo como esto:

# mount -t none /home
$CHROOTDIR/home -o bind

ia32.sh desmontará dichos enlaces en

cuanto ya no quede ningún usuario acce-
diendo al chroot gracias a la llamada check_
running_environments(). Se ha dotado de un
trap al principio del mismo para desmontar
los sistemas de archivo enlazados ante una
situación de cierre con “CTRL+C” o de kill.

Es importante destacar que los diferen-

tes directorios de $MPOINTS se enlazan
dentro del chroot con permisos de lectu-
ra/escritura y siempre dependiendo de los
permisos del sistema de archivos (EXT3
en nuestro análisis). Esto significa que un
usuario puede trabajar en su /home con total
normalidad, pero que una ejecución de algo
tipo:

Figura 1. Instalando un entorno de 32 bits en /home/nroot32
manualmente.

Por supuesto, la idea era automatizar

al máximo. Pero en cualquier momento, un
usuario puede decidir instalar el entorno de
32 bits manualmente y en el directorio de-
seado:

$ ia32.sh –install
/home/nroot32

Tal y como puede apreciarse en la

Figura 1.

■ ENLACE DE LOS SISTEMAS DE

$ rm -rf $CHROOTDIR

ARCHIVO

Para lograr una abstracción total, el usuario
ubicado dentro de un chroot necesita acce-
der a sus archivos en ~, escuchar su música
o imprimir sobre sus colas de cups. Para
lograrlo es indispensable enlazar los diversos
directorios dentro del directorio donde se
ha instalado el debootstrap. Esto se logra
gracias a mount. La idea es enlazar todos los

Cuadro 1. Principales variables del script 
El script posee unas cuantas variables que definen su comportamiento. Todas
ellas están perfectamente documentadas en el propio código, pero vamos a
describir de manera resumida las más importantes que aparecen en este tutorial:
 $CHROOTDIR. Directorio donde debootstrap instalará el entorno de 32 bits.
 $MPOINTS. Directorios que se enlazarán dentro del entorno de 32 bits, co-

mo, por ejemplo, /home.

 $DBS_LOG. Log de salida de la llamada a install_ia32_environment(), la fun-

ción encargada de instalar el entorno de 32 bits sobre $CHROOTDIR.

 $CHROOT_ERROR. Log de salida de los wrappers ejecutados via chroot.
 $DEBUG. si la ponemos a 1, obtendremos mayor nivel de información sobre

su ejecución.

 $DISTRO. La distribución Debian que se instalará mediante debootstrap.

Podemos indicar el nombre de la misma (como Etch). aunque para dotar de
mayor estabilidad y transparencia al script podríamos indicar “stable”, así
siempre se nos instalará la versión más actual de Debian sin comprometer la
estabilidad del sistema.

 $MIRRORS. Lista de servidores repositorio de Debian, separados por es-
pacio en blanco, para que la función install_ia32_environment() sea redun-
dante. Cuantos más, mejor ;-).

 $FILETYPES. archivo a utilizar por ia32.sh para la asoci
  • Links de descarga
http://lwp-l.com/pdf12945

Comentarios de: Ejecución de binarios de 32 bits en 64 bits (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad