Capítulo 9: Emulando Linux

Tabla de Contenidos

9.1. Configuración del Emulador
9.1.1. Configurando el núcleo
9.1.2. Instalando las librerías de Linux
9.1.3. Instalando Acrobat Reader
9.2. Estructura de los directorios
9.3. Emulando / proc

El puerto de NetBSD para i386, alpha, mac68k, macppc y muchos otros pueden ejecutar un gran número de programas nativos de Linux, usando la capa de emulación de Linux. Generalmente, cuando piensa en emulación se imagina cosas como lentitud e ineficiencia porque, a menudo, los emuladores deben reproducir instrucciones de hardware y hasta arquitecturas (normalmente de equipos antiguos) en software. En el caso de la emulación de Linux esto es radicalmente diferente: este es una delgada capa de software, sobre todo para las llamadas del sistema que son actualmente muy similares entre los dos sistemas. El código de la aplicación en si mismo es procesado a la velocidad máxima de su CPU, así no consigue un funcionamiento degradado con la emulación de Linux y la sensación sería la misma que con las aplicaciones nativas de NetBSD.

Este capítulo explica como configurar la emulación de Linux con un ejemplo: La instalación del conocido programa versión 4 Acrobat Reader.

9.1. Configuración del emulador

La instalación del emulador de Linux se describe en la página de ayuda compat_linux(8); usando el sistema de paquetes solo son necesarios dos pasos.

  1. Configuración del núcleo.

  2. Instalando las librerías de Linux.

  3. Instalando las aplicaciones de Linux como Acrobat Reader.

9.1.1. Configurando el núcleo

Si utiliza el núcleo GENERICO no necesita hacer nada porque la compatibilidad con Linux está habilitada correctamente.

Si utiliza un núcleo personalizado, verifique que las siguientes opciones están habilitadas:

opción COMPAT_LINUX
opción EXEC_ELF32

Cuando haya compilado el núcleo con las anteriores opciones puede iniciar la instalación del software necesario.

9.1.2. Instalando las librerías de Linux

Por lo general, las aplicaciones están vinculadas con librerías compartidas, y para las aplicaciones Linux, Linux comparte las librerías que son necesarias. Puede conseguir las librerías compartidas desde cualquier distribución Linux, a condición de que estas no sean demasiado antiguas, pero el método sugerido es que utilice el sistema de paquetes e instale las librerías automáticamente (las cuales usan librerías de SuSE). Cuando instala las librerías lo siguiente que ocurre es:

  • Se crea un directorio raíz secundario el cual será utilizado por los programas Linux. Este directorio es /emul/linux/. Los programas Linux en el modo emulación utilizarán este directorio como su directorio raíz y utilizarán los archivos de ahí. Si un archivo requerido no es encontrado, este será buscado con / como el directorio raíz.

    Por ejemplo, si una aplicación Linux abre /etc/ld.so.conf, primero buscarán en /emul/linux/etc/ld.so.conf, y si no lo encuentra buscará en /etc/ld.so.conf.

  • Las librerías compartidas para Linux son instaladas. La mayoría de aplicaciones están vinculadas dinámicamente y esperan encontrar las librerías necesarias en el sistema. Por ejemplo, para Acrobat Reader, si va a /usr/pkgsrc/print/acroread y pone el comando make depends, obtendrá el siguiente mensaje:

    ===>  acroread-4.0 requires Linux glibc2 libraries - vea compat_linux(8)
    ===> (acroread-4.0 requiere las librerías glibc2 de Linux).

Ambas operaciones serán manejadas automáticamente por el sistema de paquetes, sin la necesidad de la intervención manual por el usuario (supongo que, por ahora, ya le comienza ha gustar el sistema de paquetes ...) Observe que esta sección describe la instalación manual de las librerías de Linux.

Para instalar las librerías, se debe instalar un programa que maneje el formato RPM [1]: este es rpm, el cual es utilizado para extraer las librerías de SuSE. Ejecute make y make install en el directorio /usr/pkgsrc/misc/rpm/ para construir e instalar rpm.

Después el paquete suse_base debe ser instalado. Los archivos RPM de SuSE pueden ser descargados por el sistema de paquetes o, si tiene un CD de SuSE, pude copiarlos en el directorio /usr/pkgsrc/distfiles/suse y entonces ejecutar make y make install después vaya al directorio /usr/pkgsrc/emulators/suse_base.

Con el mismo método instale suse_compat y suse_x11. El final de la configuración es:

# pkg_info -a | grep suse
suse_base-7.3nb5    Linux compatibility package
suse_x11-7.3nb2     Linux compatibility package for X11 binaries
suse_compat-7.3     Linux compatibility package with old shared libraries 

9.1.3. Instalando Acrobat Reader

Ahora todo está listo para la instalación del programa Acrobat Reader (o cualquier programa Linux). Cambie a /usr/pkgsrc/print/acroread y ponga el comando usual.

# make
# make install

Nota

Para descargar e instalar Acrobat Reader necesita añadir la línea “ACCEPTABLE_LICENSES+=adobe-acrobat-license” a /etc/mk.conf para aceptar la licencia de Acrobat Reader, simplemente siga la instrucciones dadas después de make.

9.2. Estructura de Directorio

Si examinamos el resultado de la instalación de las librerías y programas de Linux encontraremos que /emul/linux es un punto simbólico de enlace para /usr/pkg/emul/linux, donde los directorios siguientes han sido creados:

bin/
boot/
cdrom/
dev/
etc/
floppy/
home/
lib/
mnt/
opt/
proc/
root/
sbin/
usr/

Note

Por favor, refiérase siempre a /emul/linux y no a /usr/pkg/emul/linux. El ultimo es un detalle de la implementación y puede cambiar en un futuro.

¿Cuánto espacio se requiere para el software de emulación de Linux?. En mi sistema me ocupa lo siguiente:

# cd /usr/pkg/emul
# du -k linux
...
214049   linux/

El programa Acrobat Reader, ha sido instalado en el directorio usual para los paquetes binarios: /usr/pkg/bin. Este puede ser ejecutado como cualquier otro programa:

$ acroread netbsd.pdf 

9.3. Emulando /proc

Algunos programas de Linux confían en un sistema de archivos Linux-like /proc El sistema de archivos procfs de NetBSD puede emular un sistema de archivos /proc que contiene seudo-archivos específicos de Linux. Para lograr esto debe montar el procfs con la opción de “linux”:

# mount_procfs -o linux procfs /emul/linux/proc

En este ejemplo un archivo de sistemas de Linux-like será montada en el directorio /emul/linux/proc. También puede dejar que NetBSD lo monte automáticamente durante el proceso de arranque de NetBSD, añadiendo la siguiente línea a /etc/fstab:

procfs /emul/linux/proc procfs ro,linux