Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Una vez instalados ya tenemos el nú leo que vamos a utilizar para las máquinas virtuales y diversas
utilidades. Para instalar la distribu ión base de las máquinas virtuales ne esitaremos bien los CD de
instala ión, bien a eso a Internet. Emplearemos para ello la utilidad debootstrap.
Lo primero es generar un hero donde más tarde rearemos el sistema de heros para la máquina
virtual. Por suerte, Linux nos permite simular un sistema de heros sobre un hero ordinario. Este
hero podrá ser montado on la orden mount y la op ión -o loop.
5
6 Prá ti a 2. User Mode Linux (UML)
Una parti ularidad que poseen los heros en los sistemas ext2, ext3, ext4 y reiserfs es que son sparse
(dispersos), es de ir, el sistema operativo omprime largas adenas de eros, de manera que el espa io
que o upan realmente en dis o es mu ho menor que el nominal. Podemos omprobarlo on la op ión -sl
de la orden ls:
$ ls -sl root_fs
256 -rw-r--r-- 1 umusr umusr 1016870912 2007-11-10 09:48 root_fs
$ /sbin/mkfs.ext4 -F root_fs
mke2fs 1.42.12 (29-Aug-2014)
Des artando los bloques del dispositivo: he ho
Se está reando El sistema de fi heros on 262144 4k bloques y 65536 nodos-i
La op ión -F sirve para que la orden mkfs.ext4 no proteste al dete tar que el root_fs no es un
dispositivo de bloques.
Ahora, el sistema de inter ambio:
$ /sbin/mkswap swap
A ontinua ión, de idiremos qué distribu ión queremos instalar. En nuestro aso hemos elegido la
buster, que es la distribu ión stable en julio de 2019 (Debian 10). Además, hemos optado por ha er
la instala ión desde Internet, aunque también podríamos ha erlo partiendo de los CD de instala ión.
Por tanto, ne esitamos un repositorio a partir del ual nos bajaremos los paquetes del sistema base.
Hemos sele ionado http://ftp.debian.org/debian (lo más fá il es elegir uno de los que tengamos en
/et /apt/sour es.list). Así, la orden que debemos eje utar es la siguiente:
A partir de este momento, debootstrap se one tará al repositorio y omenzará a bajar los paquetes
ne esarios, y a rear todo el sistema de arranque dentro del dire torio /mnt (que es donde está montado
nuestro sistema de heros para la máquina virtual). Una vez nalizado, tendremos todavía que ongurar
algunas osas bási as de nuestra máquina virtual. Por ejemplo, deberemos rear un fstab mínimo que
permita montar los sistemas de heros durante el arranque, y opiar los módulos del nú leo en el
dire torio ade uado.
Para ongurar el fstab:
# vi /mnt/et /fstab
y es ribimos lo siguiente:
/dev/ubda / ext4 defaults 0 1
pro /pro pro defaults 0 0
none /mnt hostfs /tmp/shared
8 Prá ti a 2. User Mode Linux (UML)
Los dispositivos /dev/ubdX son los equivalentes a /dev/hdX ó /dev/sdX de ualquier distribu ión Linux.
El dispositivo raíz está siempre en /dev/ubda. Es ne esario rear estos dispositivos en el sistema de
heros re ién reado de manera que estén disponibles para la máquina virtual. Lo podemos ha er así:
# mkdir /mnt/dev/ubd
# for i in {0..7} ; do
mknod /mnt/dev/ubd/$i b 98 $(( $i*16 )) ;
done
En este aso tenemos instalada la versión 4.19.37 del nú leo de uml, pero eso puede ambiar depen-
diendo de uál sea la versión a tual ontenida en el paquete user-mode-linux (se puede averiguar on
dpkg -L user-mode-linux)
Si apare e un error rela ionado on bind9, se produ e porque el demonio named no ha podido ini iarse,
pero no debe preo uparnos.
A la hora de desmontar el sistema de heros, a ve es nos informa de que no es posible pues está
o upado. Ello puede deberse a que algún pro eso lo esté utilizando. Podemos emplear la orden lsof para
averiguar uál es, y matarlo:
# umount /mnt
umount: /mnt: devi e is busy
umount: /mnt: devi e is busy
# lsof /mnt
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
named 5246 bind wd DIR 7,0 1024 49168 /mnt/var/ a he/bind
named 5246 bind rtd DIR 7,0 1024 2 /mnt
named 5246 bind txt REG 7,0 375148 41301 /mnt/usr/sbin/named
...
# kill 5246
# umount /mnt
También debemos asegurarnos de que en el ar hivo /et /network/interfa es gura la deni ión
del loopba k:
auto lo
ifa e lo inet loopba k
Podemos eliminar la ontraseña del usuario root editando el ar hivo /et /passwd y dejando la línea
orrespondiente omo sigue:
root::0:0:root:/root:/bin/bash
por
por
y omentar las siguientes líneas (las que omienzan por 2: hasta 6:) para que no nos muestre más de
una onsola por ada máquina virtual.
De esta manera estamos permitiendo el a eso a root en la onsola tty0, y también estamos indi ando
que la onsola virtual número 1 irá sobre tty0 (la misma en la que apare en los mensajes de arranque).
Para fa ilitar la identi a ión de las máquinas virtuales, también se puede modi ar el ar hivo
/et /init.d/hostname.sh para que muestre algo omo esto:
do_start() {
# If hostname has been passed as parameter to ommand line
a=$(dmesg | grep "Kernel ommand line")
b=${a##*hostname=}
h=${b%% *}
[ -n "$a" ℄ && HOSTNAME=$h
Para que podamos apagar la máquina virtual desde la antriona, mediante la utilidad uml_m onsole,
hay que enlazar trl-alt-del.target a powero.target:
# d /lib/systemd/system
# ln -sf poweroff.target trl-alt-del.target
Por último, para que el nombre de ada máquina sea el deseado, deberemos rear una unidad llamada
firstboot:
# d /lib/systemd/system
# at <<EOF > firstboot.servi e
[Unit℄
ConditionPathExists=|!/et /hostname
Before=network-pre.target
After=network-pre.target
DefaultDependen ies=true
[Servi e℄
Type=oneshot
Exe Start=/bin/bash - "/usr/lo al/sbin/firstboot.sh"
RemainAfterExit=yes
[Install℄
WantedBy=network.target
12 Prá ti a 2. User Mode Linux (UML)
EOF
# d /usr/lo al/sbin
# at <<EOF > firstboot.sh
name=$(dmesg | grep "Kernel ommand line" | sed -e 's/.*hostname=//;s/ .*//')
if [ -z $name ℄ ; then
exit 0
fi
# exit
Ya sabemos que el hero que rea será disperso. Ahora vol amos el ontenido del sistema de heros
original sobre el nuevo:
Y ya tenemos el nuevo sistema de heros en newroot_fs. Antes de nada, deberíamos omprobar que
la máquina virtual arran a sin problemas:
Para apagar la máquina virtual, debemos entrar omo root (no requiere ontraseña) y eje utar:
# shutdown -h now
$ mv newroot_fs root_fs
$ bzip2 -k root_fs
$ gzip - root_fs >root_fs.gz
La op ión -k indi a que se onserve el ar hivo original. Después de la eje u ión, tendremos también el
ar hivo root_fs.bz2 (o root_fs.gz si hemos usado gzip), que ya podremos guardar en nuestra memoria
USB o CD para llevarlo a otro omputador.
En aso de querer opiar la instala ión de las máquinas del laboratorio deberios opiar el ar hivo
/usr/lo al/et /uml/root_fs y los s ripts auxiliares situados en /usr/lo al/bin/.
14 Prá ti a 2. User Mode Linux (UML)
# if reate umluser
se rea la red virtual bási a omo puede verse en la gura 2.1 En esta red, se rean 5 interfa es virtuales
Host
192.168.254.254/24
vifbridge
vif1 vif2 vif3
umlbridge
# ifdel
Prepara ión del entorno 2.6 15
se rea la red virtual denida en el ar hivo sdef. Por ejemplo, dada una ongura ión omo la de la
gura 2.2 deberemos denir el siguiente ar hivo net. onf:
uml1 uml2
eth0 eth3 eth0 eth3
eth1 eth2 eth1 eth2
umls0
umls3 umls1
umls2
uml4 uml3
Para eliminar la ongura ión de red virtual, deberemos eje utar la orden:
# ifovsdel
# adduser mipropiousuario
Adding user `mipropiousuario' ...
Adding new group `mipropiousuario' (1005) ...
Adding new user `mipropiousuario' (1003) with group `mipropiousuario' ...
Creating home dire tory `/home/mipropiousuario' ...
Copying files from `/et /skel' ...
Introduz a la nueva ontraseña de UNIX:
Vuelva a es ribir la nueva ontraseña de UNIX:
passwd: ontraseña a tualizada orre tamente
Cambiando la informa ión de usuario para mipropiousuario
Introduz a el nuevo valor, o presione ENTER para el predeterminado
Nombre ompleto [℄:
Número de habita ión [℄:
Teléfono del trabajo [℄:
Teléfono de asa [℄:
Otro [℄:
¾Es orre ta la informa ión? [y/N℄ y
# exit
A ontinua ión debemos errar la sesión de root y entrar en el entorno de ventanas on el usuario
re ién reado. Una vez en el home del usuario, rear un dire torio UML, dentro del ual se alojarán los
dire torios parti ulares para ada máquina virtual, on el nombre uml<número> (tener en uenta que en
Linux se distinguen mayús ulas y minús ulas):
$ d
$ mkdir UML
$ d UML
$ for i in 1 2 3 4 5 ; do mkdir uml$i ; done
$ ls -l
total 0
drwxr-xr-x 2 mipropiousuario mipropiousuario 48 2008-02-15 15:59 uml1
drwxr-xr-x 2 mipropiousuario mipropiousuario 48 2008-02-15 15:59 uml2
drwxr-xr-x 2 mipropiousuario mipropiousuario 48 2008-02-15 15:59 uml3
drwxr-xr-x 2 mipropiousuario mipropiousuario 48 2008-02-15 15:59 uml4
drwxr-xr-x 2 mipropiousuario mipropiousuario 48 2008-02-15 15:59 uml5
Ahora rearemos los ar hivos de inter ambio de memoria virtual (swap) para ada máquina:
Antes de arran ar las máquinas virtuales, debemos rear la red virtual. Para ello emplearemos la
orden if reate omo superusuario:
$ su - '/usr/lo al/bin/if reate mipropiousuario'
Contraseña:
Creado swit h virtual umlbridge
Creado swit h virtual vifbridge on dire ión de red 192.168.0.0
Set 'vif1' persistent and owned by uid 1003
Set 'uml1.0' persistent and owned by uid 1003
Set 'uml1.1' persistent and owned by uid 1003
Set 'uml1.2' persistent and owned by uid 1003
Set 'uml1.3' persistent and owned by uid 1003
...
Set 'vif7' persistent and owned by uid 1003
Set 'uml7.0' persistent and owned by uid 1003
Set 'uml7.1' persistent and owned by uid 1003
Set 'uml7.2' persistent and owned by uid 1003
Set 'uml7.3' persistent and owned by uid 1003
Ahora ya podemos lanzar las máquinas virtuales que ne esitemos para nuestra prá ti a:
$ lanza 1
Se va a lanzar uml1 on:
NAME=uml1
UPATH=/home/mipropiousuario/UML/uml1
ROOTFS=/usr/lo al/et /uml/root_fs
COWFS=/home/mipropiousuario/UML/uml1/uml1_fs
SWAP=/home/mipropiousuario/UML/uml1/swap
HOSTIP=192.168.0.254
El resultado lo podemos ver en la gura 2.3. Una vez que han arran ado las máquinas virtuales,
debemos ongurar las interfa es de red. Se ha e de la manera habitual en ada una de ellas, teniendo
18 Prá ti a 2. User Mode Linux (UML)
en uenta que si modi amos los ar hivos /et /network/interfa es, la ongura ión de ada máquina
será permanente.
2.7. Prá ti a
En esta prá ti a omprobaremos el envío de mensajes ICMP de tipo e ho-request y e ho-replay de
prueba de a esibilidad en una red. Crearemos una ongura ión on tres máquinas virtuales omo la
mostrada en la gura 2.4. Todas las máquinas pertene erán a la misma subred IP 192.168.1.0/24. Se
umlbridge
re omienda asignar a ada máquina uml la dire ión 192.168.1.<máquina> en su interfaz eth0.
uml1 # if onfig eth0 192.168.1.1 up (en uml1)
uml2 # if onfig eth0 192.168.1.2 up (en uml2)
uml3 # if onfig eth0 192.168.1.3 up (en uml3)
Ini iar wireshark en la máquina antriona para inspe ionar el trá o por la interfaz umlbridge.
Eje utar la orden ping desde la máquina uml1 a las máquinas uml2 y uml3:
uml1 # ping - 5 192.168.1.2
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
64 bytes from 192.168.1.2: i mp_seq=1 ttl=64 time=0.277 ms
64 bytes from 192.168.1.2: i mp_seq=2 ttl=64 time=0.318 ms
64 bytes from 192.168.1.2: i mp_seq=3 ttl=64 time=0.308 ms
64 bytes from 192.168.1.2: i mp_seq=4 ttl=64 time=0.310 ms
64 bytes from 192.168.1.2: i mp_seq=5 ttl=64 time=0.321 ms
Utilizar wireshark para estudiar los datagramas inter ambiados entre las máquinas.