- Instalando Debian en User Mode Linux
- UML en debian etch para facilistas
- Introducción
- ¿Por qué usar User Mode Linux?
- ¿Por qué usar Debian?
- Requisitos del Huésped
- Convenciones:
- Compilar el kernel del huésped.
- Compilando el kernel UML
- Obteniendo el sistema base de Debian
- Creando el sistema de archivos
- Iniciando una sesión en UML
- Accediendo a Internet
- Configurando el sistema base
- Jugando con UML
- Solución de problemas
- Referencias
Instalando Debian en User Mode Linux
Este documento fue inicialmente escrito para las personas que desean probar User Mode Linux para probar nuevos desarrollos, tanto a nivel de Kernel como en el espacio del usuario. El documento ya es útil, y con su ayuda puede ser mejor.
El documento programando para el kernel linux es un complemento de este documento, también lo es el documento linux drivers, que tiene ejemplos de como programar un driver.
Este documento es mantenido por Nelson Castillo.
UML para facilistas escrito por digitalfredy.
UML en debian etch para facilistas
NOTA: el paquete user-mode-linux en debian etch solo está para i386, a fecha 13 de Sept de 2007 en lenny y en sid está también para amd64
# apt-get install user-mode-linux debootstrap
# debootstrap etch chroot-etch
$ dd if=/dev/zero of=root_fs bs=1M count=1 seek=2000
# mkfs.reiserfs -f root_fs
# mount -o loop root_fs /mnt/
# cp -a chroot-etch/* /mnt/
# sed -i 's/^\([23456]:23:\)/#\1/' /mnt/etc/inittab
# sed -i 's/^tty1$/tty0\ntty1/' /mnt/etc/securetty
# echo uml > /mnt/etc/hostname
# Este es el archivo fstab del uml (/mnt/etc/fstab) # file system mount point type options dump pass /dev/ubda / reiserfs defaults 0 1 proc /proc proc defaults 0 0 devpts /dev/pts devpts defaults,rw,mode=0620 0 0 sysfs /sysfs sysfs defaults 0 0
# umount /mnt
# linux.uml
Introducción
¡User-Mode Linux permite correr Linux dentro de Linux!
User Mode Linux es el Kernel de Linux portado a su propia interfaz de llamadas al sistema. Provee una especie de máquina virtual, que corre Linux como un proceso dentro de otra kernel de Linux.
Es una forma segura de correr versiones de Linux y programas. Se pueden correr programas experimentales, probar nuevas kernels o distribuciones y estudiar el interior del kernel, sin arriesgar la instalación principal.
Linux en modo de usuario provee una máquina virtual que puede tener más recursos virtuales de hardware y software que el computador en el que corre. El almacenamiento en disco de la máquina virtual se aloja en un archivo en la máquina huésped. Se puede configurar la máquina virtual sólo con el hardware que usted desee. Si se configura correctamente el acceso limitado de la máquina virtual, nada que haga en ella puede cambiar su computador real ni su software.
Es importante aclarar que los procesos dentro de UML corren nativamente, en el procesador de la máquina huésped, y no en un procesador emulado como en Bochs.
En este documento se describen los pasos para instalar la distribución Debian dentro de una máquina virtual con UML. La máquina huésped no necesariamente tiene que tener la distribución Debian.
Se describe la instalación de Debian sarge en dos distribuciones y en dos arquitecturas.
- Instalación de Debian sarge (i386) en una máquina AMD de 32 bits. El huésped tiene Debian sarge instalado.
- Instalación de Debian sarge (amd64) arquitectura amd64 en un AMD de 64 bits. El huésped tiene la distribución Gentoo instalada.
La última versión de este documento estará en esta dirección.
Este documento está siendo escrito por Nelson Castillo <arhuaco@freaks-unidos.net>. Algunos parrafos de la introducción son traducciones adaptadas de las referencias que están al final de la página.
Si tiene una contribución puede editar este documento directamente o hacer comentarios en la página de discusión de este artículo.
¿Por qué usar User Mode Linux?
- Si UML se bloquea, el kernel del huésped seguirá sin problemas.
- Se puede correr una kernel de Linux sin ser usar privilegios de root.
- Se puede depurar el UML como cualquier proceso normal.
- Se puede jugar con el Kernel sin dañar cosas.
- Se puede usar UML para proveer hosting virtual.
- Se puede usar como un sandbox para probar aplicaciones nuevas.
- Se puede usar para probar kernels en desarrollo de manera segura.
- Se pueden correr diferentes distribuciones al tiempo.
- Es muy divertido.
¿Por qué usar Debian?
En este documento, encontrará algunas razones para usar Debian. Si no son suficientes, conviene agregar que es divertido.
Recuerde que el huésped no tiene que tener Debian instalado. De igual forma, parte de este documento puede ser usado para instalar otra distribución dentro de UML.
Apenas consiga el hosting para ello, subiré a Internet el sistema base de Debian, que permitirá usar Debian dentro de cualquier otra distribución sin que usted tenga que crear el sistema base. El paquete que permite crear el sistema base de Debian se llama debootstrap, y puede ser instalado en diversas distribuciones. En Gentoo, por ejemplo, se instala con el comando emerge -u debootstrap.
Requisitos del Huésped
- Se recomienda usar un Kernel con el parche SKAS. Realmente.
- Instalar las utilidades de UML.
- Instalar el programa debootstrap (opcional).
El parche del modo SKAS aumenta la eficiencia de la máquina UML. Además, los procesos que corren dentro del UML no serán visibles en el huésped.
Las utilidades de UML (UML utilities) son algunos programas que corren en el espacio del usuario que se necesitan para ejecutar la máquina UML. En Debian se instalan con apt-get install uml-utilities. En Gentoo con emerge -u emerge sys-apps/usermode-utilities. Es probable que existan paquetes para otras distribuciones. En todo caso, las utilidades se pueden instalar usando las fuentes.
El programa debootstrap se necesita para crear el sistema base de Debian. No es es necesario instalarlo si usted puede descargar el sistema base de Debian o si lo crea en otra máquina y lo transfiere por red.
Lo bueno de usar un sistema base ya creado, es que no es necesario tener permisos de root en el huésped para probar UML. Por otro lado, existen muchas razones para que usted prefiera crear su propio sistema base, siendo la seguridad una de ellas.
Convenciones:
Cuando un comando requiere privilegios de root, este iniciará con el símbolo #, cuando no, con $. Ejemplos:
# mkfs $ ls
Compilar el kernel del huésped.
El huésped es la máquina dentro de la que va a ejecutar UML. No es necesario hacerlo para probar User Mode Linux.
Si nunca ha compilado un kernel para su estación de trabajo, tal vez no sea el mejor momento para hacerlo y puede continuar con el paso siguiente, en donde puede practicar la compilación de un kernel para su máquina virtual.
Este paso sólo es necesario si se quiere dar soporte al modo SKAS. Este parche está disponible en Debian, y puede ser instalado con apt-get install kernel-patch-skas.
Las instrucciones de esta sección no están completas ya que compilar un kernel para el huésped se encuentra fuera del alcance de este documento.
$ wget http://www.user-mode-linux.org/~blaisorblade/patches/skas3-2.6/skas-2.6.13-rc7-v8.2/skas-2.6.13-rc7-v8.2.patch.bz2 $ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.13.tar.bz2
$ tar xjf linux-2.6.13.tar.bz2 ; cd linux-2.6.13 $ cat ../skas-2.6.13-rc7-v8.2.patch | patch -p1 $ make menuconfig
Esta es la forma en la que se suelen compilar kernels en Debian. Cuando la compilación termine, instale el kernel y arranque con él.
$ fakeroot make-kpkg --initrd --append-to-version arhuaco kernel_image kernel_headers
Compilando el kernel UML
En Debian hay un paquete con el kernel ya compilado, como un ejecutable. Para instalarlo y ahorrarse este paso, use apt-get install user-mode-linux.
Si no desea ejecutar este paso, he subido un binario ejecutable del kernel del ejemplo que se puede bajar acá. Compilado para la arquitectura i386.
Se baja un kernel reciente de un servidor espejo de kernel.org y se descomprime. Si no está familiarizado con la compilación de kernels de Linux, tal vez quiera leer el archivo linux-2.6.13/README.
$ tar xjf linux-2.6.13.tar.bz2 $ cd linux-2.6.13 $ make mrproper
En este ejemplo usaré una configuración que he probado. Tal vez quiera usar ARCH=um make menuconfig para cambiar la configuración a su gusto. En ese caso, supondré que no necesita las instrucciones. Habilité la opción "CONFIG_BLK_DEV_UBD_SYNC" que puede hacer a UML lento cuando hay entrada y salida masiva, tal vez usted desee deshabilitarla.
Puede bajar a su disco esta configuración de ejemplo para usarla como base para su .config.
$ mv config-uml-2.6.13-sep9.txt .config $ ARCH=um make $ ARCH=um make modules
Ahora se puede ejecutar el programa "./linux", y obtendremos un kernel panic debido a que no está disponible el sistema de archivos que crearemos en el siguiente paso.
Usando ccache
El programa ccache permite acelerar posteriores compilaciones del kernel.
Para habilitarlo, debe editar el Makefile de Linux. Note que se ha cambiado la línea CC = $(CROSS_COMPILE)gcc por CC = ccache $(CROSS_COMPILE)gcc.
--- Makefile.old 2006-05-22 18:50:15.000000000 -0500 +++ Makefile 2006-05-22 18:50:29.000000000 -0500 @@ -306,7 +306,7 @@
AS = $(CROSS_COMPILE)as LD = $(CROSS_COMPILE)ld -CC = $(CROSS_COMPILE)gcc +CC = ccache $(CROSS_COMPILE)gcc CPP = $(CC) -E AR = $(CROSS_COMPILE)ar NM = $(CROSS_COMPILE)nm
Ejemplo de uso de ccache con dos procesadores. Esta es la compilación inicial.
$ time nice make -j2 ARCH=um
real 3m49.397s user 5m57.136s sys 0m32.548s
Las estadísticas de ccache.
$ ccache -s cache directory /home/n/.ccache cache hit 0 cache miss 801 called for link 6 not a C/C++ file 7 no input file 56 files in cache 1602 cache size 8.4 Mbytes max cache size 976.6 Mbytes
Ahora vemos la segunda compilación:
$ time nice make -j2 ARCH=um
real 0m52.167s user 1m2.517s sys 0m18.769s
El ahorro de tiempo es importante. De 3.81 minutos a 0.87 minutos.
Las estadísticas de ccache:
$ ccache -s cache directory /home/n/.ccache cache hit 797 cache miss 805 called for link 11 not a C/C++ file 14 no input file 90 files in cache 1610 cache size 8.4 Mbytes max cache size 976.6 Mbytes
Note que 797 archivos se encontraron en el caché, y no tuvieron que compilarse.
Notas sobre la compilación del kernel del AMD64
- Al compilar en una máquina a AMD a 64 bits la compilación preguntó por la opción CONFIG_CRYPTO_AES_X86_64. Se puede habilitar la opción.
Obteniendo el sistema base de Debian
debootstrap se usa para crear un sistema base de Debian desde ceros, sin necesidad de dpkg o apt. El programa descarga los paquetes en formato .deb de un servidor espejo de Debian, y los desempaqueta en un directorio en el que se puede hacer chroot luego. En nuestro caso, es útil para crear un sistema base de Debian que luego usaremos con el proceso UML. En Debian se instala con apt-get install debootstrap. Note que corremos el programa con el usuario root.
# debootstrap sarge root-filesystem
Averiguamos el espacio en disco ocupado por el sistema base (puede variar).
# du -sh root-filesystem/ 144M root-filesystem/
Tal vez quiera hacer una copia de respaldo del sistema base, ya sea para usarlo en otra máquina o para repetir el proceso si algo sale mal.
# tar cvf root-filesystem.tar root-filesystem # bzip2 -9 root-filesystem.tar
Notas sobre el sistema base en el AMD64
- En Gentoo se usa emerge -u debootstrap.
- En el Gentoo debemos especificar el servidor espejo de la arquitectura amd64.
# debootstrap sarge root-filesystem http://debian-amd64.alioth.debian.org/debian/
Creando el sistema de archivos
Usualmente se crean sistemas de archivos sobre particiones, pero también se puede crear un sistema de archivos (ext2, ext3, reiserfs, xfs, etc) sobre un archivo. El primer paso es crear un archivo que contendrá el sistema de archivos.
Creando el archivo
Creamos un archivo disperso de 2G. El tamaño de este archivo depende de sus necesidades. En todo caso, es fácil crear otro sistema de archivos más grande y hacer una copia si esto llega a ser necesario. Note que no hay que ser root.
$ dd if=/dev/zero of=root_fs bs=1M count=1 seek=2000 1+0 records in 1+0 records out 1048576 bytes transferred in 0.008551 seconds (122625940 bytes/sec)
Note que se puede crear el archivo escribiendo 0 bytes. Lo importante es que se haga la llamada del sistema fseek(3) con el valor apropiado, que es 2097152000 en este caso.
$ dd if=/dev/zero of=root_fs bs=1 count=0 seek=2097152000 0+0 records in 0+0 records out 0 bytes transferred in 0.000279 seconds (0 bytes/sec)
Verificamos el tamaño del archivo (que todavía no se está ocupando en el disco):
$ ls -lha root_fs -rw-r--r-- 1 n users 2.0G 2005-09-10 21:36 root_fs
creando el sistema de archivos
Luego creamos el sistema de archivos. Usaré reiserfs. Si no existe /sbin/mkfs.reiserfs, ejecute # apt-get install progsreiserfs, o use un sistema de archivos diferente, como ext3.
$ /sbin/mkfs.reiserfs --format=3.6 root_fs Warning: Device root_fs isn't a block device. All data on root_fs will be lost. Do you really want to create reiser filesystem (v3.6) (y/n) y Creating reiser filesystem (v3.6) with standard journal on root_fs initializing skiped area: done initializing journal: done
Nota: En el gentoo(amd64) usé /sbin/mkfs.reiserfs -f --format=3.6 root_fs.
Copiando el sistema base en el sistema de archivos recién creado
Ahora copiamos el sistema base de Debian en el recién creado sistema de archivos.
$ su # mkdir mnt-uml && mount root_fs mnt-uml/ -o loop # cp -a root-filesystem/* mnt-uml/
Editando archivos en el sistema base
Se debe editar el inittab del UML para dejar una sola consola. Si esto no se hace y se usan xterms, se instanciarán 6 de ellas.
# vim mnt-uml/etc/inittab
1:2345:respawn:/sbin/getty 38400 tty0 #2:23:respawn:/sbin/getty 38400 tty2 #3:23:respawn:/sbin/getty 38400 tty3 #4:23:respawn:/sbin/getty 38400 tty4 #5:23:respawn:/sbin/getty 38400 tty5 #6:23:respawn:/sbin/getty 38400 tty6
Se deben adicionar las siguientes entradas al archivo fstab del UML. Cambie reiserfs por el sistema de archivos que usted haya usado.
# vim /mnt-uml/etc/fstab
# file system mount point type options dump pass /dev/ubda / reiserfs defaults 0 1 proc /proc proc defaults 0 0 devpts /dev/pts devpts defaults,rw,mode=0620 0 0 sysfs /sysfs sysfs defaults 0 0
También editamos el archivo securetty para habilitar permitir que el usuario root pueda ingresar en tty0.
# vim mnt-uml/etc/securetty
# Standard consoles tty0 tty1 tty2
Es apropiado poner un nombre diferente al del host en el archivo /etc/hostname. uml parece un nombre apropiado para el host.
Instalando los módulos
En la configuración de ejemplo hay módulos. Procedemos a instalarlos. Asigne el valor apropiado a INSTALL_MOD_PATH, de acuerdo a su instalación.
# cd linux-2.6.13/ # ARCH=um make modules_install INSTALL_MOD_PATH=/home/n/uml/mnt-uml/ # cd ..
Ya podemos desmontar el sistema de archivos.
# umount mnt-uml/
Y ya no necesitamos ser el usuario root.
# exit
Iniciando una sesión en UML
Nota: se recomienda tener el parche SKAS en el kernel. No me funcionó sin el parche.
Podemos arrancar por primera vez con el nuevo kernel. La consola debe abrirse en un xterm. Si desea que se abra en stdin/stdout, adicione "con=fd:0,fd:1" a la invocación del binario linux. Si no va a depurar el kernel, puede reducir el tamaño del mismo con strip linux.
$ cp linux-2.6.13/linux . $ strip linux $ ./linux
Si el siguiente paso no funciona, por favor mire si hay una solución documentada en la sección de solución de problemas al final de este documento.
Si todo funciona bien, debe aparecer una xterm como la siguiente:

Arrancando por primera vez
Ingrese como root y ejecute un halt para detener la máquina UML.
Accediendo a Internet
Existen varios métodos para acceder a la red desde UML y están documentadas en esta página
Por el momento documentaremos un método fácil que nos permitirá acceder a Internet y descargar paquetes de un servidor espejo de Debian. Usando otros métodos es posible acceder a UML desde el huésped o desde otras máquinas en una LAN o en Internet.
El programa slirp permite a la máquina UML acceder a la red local con conectividad IP. Es como hacer masquerading pero en el espacio del usuario. Sólo funcionará el protocolo IP, no los demás. Para nuestros propósitos es suficiente, ya que nos permite acceder a los mirrors de Debian para instalar paquetes.
Debe instalar el binario con apt-get install slirp en la máquina host, si es Debian, ó emerge -u net-dialup/slirp si es Gentoo.
./linux eth0=slirp,,/usr/bin/slirp
Ingrese como root, no requiere password.
# ifconfig eth0 10.2.0.15 up # route add default dev eth0
auto lo iface lo inet loopback
Con este método, el archivo /etc/network/interfaces del UML debería quedar como el que se muestra a continuación para configurar la red automáticamente al arrancar.
auto lo iface lo inet loopback
auto eth0 iface eth0 inet static address 10.0.2.15 netmask 255.0.0.0 up route add default dev eth0 down route del default dev eth0
Slirp utiliza algunas direcciones especiales que facilitan la configuración y el uso de la red dentro de UML. La IP 10.0.2.3 es un alias de el DNS del huésped. Todos los paquetes enviados a esa dirección serán dirigidos al DNS del huesped. Puede añadir la siguiente entrada al /etc/resolv.conf del UML.
nameserver 10.0.2.3
La IP 10.0.2.2 es un alias del host remoto. Cuando se conecta a esta dirección usted puede conectarse al huésped.
Ahora que UML puede acceder a la red, ya es hora de configurar el sistema base.
Notas sobre la red en el AMD64
En el momento, parece que el slitp que se distribuye con Gentoo no funciona bien en una máquina de 64 bits. Está "enmascarado" y no se puede instalar.
# emerge -u =net-dialup/slirp Calculating dependencies !!! All ebuilds that could satisfy "=net-dialup/slirp" have been masked. !!! One of the following masked packages is required to complete your request: - net-dialup/slirp-1.0.16 (masked by: -amd64 keyword) - net-dialup/slirp-1.0.13 (masked by: missing keyword)
Es probable que este paquete no funcione bien en amd64. Debe usar otro método documentado para acceder a la red en este host, o arreglar el problema :)
Configurando el sistema base
Ingresamos como root al UML y comenzamos la configuración del sistema base.
# base-config
El resto de la configuración es muy similar a una instalación normal de Debian, por lo que puede usar como guía la sección del manual Arrancando su nuevo sistema Debian.
center|Configurando el sistema base
También puede hacer la configuración del sistema base usando chroot.
Al terminar la configuración del sistema base se descargan algunos paquetes necesarios por red y al final usted podrá iniciar una sesión en su Debian configurado para correr dentro de UML. No olvide que siempre puede detener UML y hacer una copia de respaldo del sistema de archivos root_fs para experimentar.
En debian se insalan paquetes con apt-get install nombre_paquete, se buscan paquetes disponibles con apt-cache search palabra... y se borran paquetes con apt-get remove [--purge] paquete.... La opción --purge del último comando hace que se borren los archivos de configuración del paquete.
Jugando con UML
Poniendo IPv6
¡Lo más interesante de poner IPv6 en UML es que con la dirección que se obtiene ya podremos accederla desde cualquier lugar!
Para tener IPv6 dentro de UML no hay que hacer mucho. freenet6.net provee un tunel que permite tener una IP dinámica. Si crea una cuenta en el sitio, puede tener una IPv6 estática.
Prerequisitos:
- Estar conectado a Internet
- La conexión con slirp es suficiente, así que no hay que ser root en el husped.
- Que el kernel de UML soporte IPv6
- Acá tengo un .config para el kernel 2.6.13.1 sin módulos habilitado para IPv6.
# apt-get install udev # apt-get install tspc
Si el servicio tscp inicia el tunel correctamente, ya será posible hacer pings al exterior.
eth0 Link encap:Serial Line IP
inet addr:10.0.2.15 Mask:255.0.0.0
UP RUNNING NOARP MTU:1500 Metric:1
RX packets:920 errors:0 dropped:0 overruns:0 frame:0
TX packets:596 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:256
RX bytes:425493 (415.5 KiB) TX bytes:33686 (32.8 KiB)
Interrupt:5 tun Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet6 addr: 2001:5c0:8fff:ffff::11/128 Scope:Global
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1280 Metric:1
RX packets:104 errors:0 dropped:0 overruns:0 frame:0
TX packets:101 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:8488 (8.2 KiB) TX bytes:8272 (8.0 KiB)$ ping6 -c 5 www.kame.net
PING www.kame.net(orange.kame.net) 56 data bytes 64 bytes from orange.kame.net: icmp_seq=1 ttl=54 time=405 ms 64 bytes from orange.kame.net: icmp_seq=2 ttl=54 time=620 ms 64 bytes from orange.kame.net: icmp_seq=3 ttl=54 time=648 ms 64 bytes from orange.kame.net: icmp_seq=4 ttl=54 time=640 ms 64 bytes from orange.kame.net: icmp_seq=5 ttl=54 time=559 ms
--- www.kame.net ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4304ms rtt min/avg/max/mdev = 405.818/575.041/648.457/90.140 ms
$ ping6 -c 5 -n www.kame.net
PING www.kame.net(2001:200:0:8002:203:47ff:fea5:3085) 56 data bytes 64 bytes from 2001:200:0:8002:203:47ff:fea5:3085: icmp_seq=1 ttl=54 time=793 ms 64 bytes from 2001:200:0:8002:203:47ff:fea5:3085: icmp_seq=2 ttl=54 time=742 ms 64 bytes from 2001:200:0:8002:203:47ff:fea5:3085: icmp_seq=3 ttl=54 time=853 ms 64 bytes from 2001:200:0:8002:203:47ff:fea5:3085: icmp_seq=4 ttl=54 time=879 ms 64 bytes from 2001:200:0:8002:203:47ff:fea5:3085: icmp_seq=5 ttl=54 time=768 ms
--- www.kame.net ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4086ms rtt min/avg/max/mdev = 742.420/807.393/879.633/51.532 ms
Así que ya tenemos una IPv6 que puede ser alcanzable desde cualquier lugar. Note que esta IP es dinámica. Si quiere una estática, debe crear una cuenta en el broker.
maquina-remota:~# ping6 -c 2 2001:5c0:8fff:ffff::11 PING 2001:5c0:8fff:ffff::11(2001:5c0:8fff:ffff::11) 56 data bytes 64 bytes from 2001:5c0:8fff:ffff::11: icmp_seq=1 ttl=63 time=774 ms 64 bytes from 2001:5c0:8fff:ffff::11: icmp_seq=2 ttl=63 time=703 ms
--- 2001:5c0:8fff:ffff::11 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1002ms rtt min/avg/max/mdev = 703.344/739.089/774.834/35.745 ms
Solución de problemas
Lo primero es revisar la FAQ de UML. Cuando solucione el problema, puede añadir la solución en esta sección.
Kernel panic con cannot set up LDT for thread-local storage
cannot set up thread-local storage: cannot set up LDT for thread-local storage Kernel panic - not syncing: Attempted to kill init!
El kernel de UML no soporta la Native Posix Thread Library (NPTL) y los binarios que está corriendo están siendo enlazados dinamicamente con ella. Trate de correr UML usando el parche SKAS en el huésped, esta es la mejor solución.
Tal vez pueda evitar el panic asignando la variable del entorno LD_ASSUME_KERNEL en la línea de comandos.
./linux init=/bin/sh LD_ASSUME_KERNEL=2.4.1
Muchos comandos son muy estrictos acerca de lo que se preserva en el entorno cuando crean procesos hijos, así que garantizar que la variable LD_ASSUME_KERNEL va a estar presente en todos los procesos del sistema no es posible. Es mejor quitar la NTPL del sistema de archivos de UML.
# mount root_fs mnt-uml/ -o loop # mv mnt-uml/lib/tls mnt-uml/lib/tls.away # umount mnt-uml
Ejecute de nuevo la máquina UML y confirme que funcione. Como estamos usando Debian, esta solución puede generar problemas al hacer apt-get upgrade y tal vez en otras circunstacias, por lo que una
mejor solución es usar dpkg-divert.
# export LD_ASSUME_KERNEL=2.4.1
# mount root_fs mnt-uml/ -o loop
# chroot mnt-uml
# mkdir /lib/tls.off
# cd /lib/tls
# pwd
# for f in *;
do
dpkg-divert --divert --local --rename --divert /lib/tls.off/$f --add /lib/tls/$f;
done
# exit
# umount mnt-uml
# unset LD_ASSUME_KERNELxterm_open: $DISPLAY not set.
Starting printer spooler: lpd . Starting NFS common utilities: statd. Starting deferred execution scheduler: atd. Starting periodic command scheduler: cron. xterm_open: $DISPLAY not set.
UML no pudo abrir una Consola Virtual. Este error lo imprime el driver de xterm, en arch/um/drivers/xterm.c:
/* Check that DISPLAY is set, this doesn't guarantee the xterm
* will work but w/o it we can be pretty sure it won't. */
if (!getenv("DISPLAY")) {
printk("xterm_open: $DISPLAY not set.\n");
return -ENODEV;
}
Yo obtuve este error cuando estaba ejecutando UML desde GNU Screen. Soluciones:
- Ejecutar UML fuera de GNU screen.
- Ejecutar "xhost + 127.0.0.1" antes de correr UML. Así me funcionó en GNU Screen. Si está corriendo UML en una máquina remota, debe hacer forwarding de X11.
- Usar otro método para acceder a una consola de UML.
No me puedo conectar por ssh, la conexión se muere
Puede ser este error, que es un problema con el TLS y el PAM.
El workaround es hacer:
touch /etc/ld.so.nohwcap
También sirve quitar /lib/tls. Un problema común con UML.
UML no corre en Linux 2.6.16
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=366915
Para poder correr UMl con Linux 2.6.16 SKAS en el kernel de host. En general, es buena idea usar este parche.
Los procesos dentro de UML se quedan sin memoria
Y esto pasa, incluso cuando se asigna suficiente memoria a la máquina virtual. Para resolver este prublema, usé la siguiente línea.
echo 262144 > /proc/sys/vm/max_map_count
TODO: sacar el tiempo para explicar esto. Por el momento, toca usar google :)
Referencias
The User-mode Linux Kernel Home Page :
- http://user-mode-linux.sourceforge.net
- http://user-mode-linux.sourceforge.net/UserModeLinux-HOWTO.html
- http://user-mode-linux.sourceforge.net/networking.html
Gentoo Linux Developer's guide to system testing with User-Mode Linux:
Last update: 2007-09-13 (Rev 12938)