Diferencia entre revisiones de «Virtualización con libvirt»

De Wiki de Sistemas Operativos
Saltar a: navegación, buscar
(Paso 8: Instalación Manual de SO en VVM)
 
(No se muestran 81 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
Para la realización de esta práctica necesitará de una imagen de Ubuntu Cloud que descargaremos de https://cloud-images.ubuntu.com/ y necesitaremos un
+
Para la realización de esta práctica necesitará de una imagen de Debian Cloud que descargaremos de https://cloud.debian.org
sistema anfitrión con Ubuntu 18.04.
 
  
En esta práctica se empleará la imagen descargada de la web Ubuntu Cloud y se hará uso de la herramienta '''cloud-init''' para configurarla.
+
En esta práctica se empleará la imagen descargada de la web Debian Cloud y se hará uso de la herramienta '''virt-customize''' para configurarla.
  
A continuación, utilizaremos la imagen de Ubuntu ya configurada para ser importada al software de virtualización '''libvirt'''.
+
A continuación, utilizaremos la imagen de Debian ya configurada para ser importada al software de virtualización '''libvirt'''.
  
= Paso 1: Descarga de la imagen Ubuntu Cloud =
+
= Paso 1: Descarga de la imagen Cloud =
  
Entramos en https://cloud-images.ubuntu.com/ y descargamos la imagen de Ubuntu 18.04 LTS (Long Time Support).
+
Entramos en http://cloud.debian.org/images/cloud/ y descargamos la imagen de Debian 13.
  
 
Puedes descargarla directamente con la orden ''wget'':
 
Puedes descargarla directamente con la orden ''wget'':
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
wget https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img
+
wget https://cloud.debian.org/images/cloud/trixie/latest/debian-13-generic-amd64.qcow2
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Línea 19: Línea 18:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
-2019-08-06 12:26:26--  https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img
+
-2019-08-06 12:26:26--  https://cloud.debian.org/images/cloud/trixie/latest/debian-13-generic-amd64.qcow2
Resolviendo cloud-images.ubuntu.com (cloud-images.ubuntu.com)... 91.189.88.89, 2001:67c:1560:8001::8001
+
Resolviendo cloud.debian.org (cloud.debian.org)... 91.189.88.89, 2001:67c:1560:8001::8001
Conectando con cloud-images.ubuntu.com (cloud-images.ubuntu.com)[91.189.88.89]:443... conectado.
+
Conectando con cloud.debian.org (cloud.debian.org)[91.189.88.89]:443... conectado.
 
Petición HTTP enviada, esperando respuesta... 200 OK
 
Petición HTTP enviada, esperando respuesta... 200 OK
 
Longitud: 343474176 (328M) [application/octet-stream]
 
Longitud: 343474176 (328M) [application/octet-stream]
Grabando a: “bionic-server-cloudimg-amd64.img”
+
Grabando a: “debian-13-generic-amd64.qcow2”
  
bionic-server-cloudimg-amd64.img.  0%[                                                              ]  2,21M  472KB/s    eta 14m 6s
+
debian-13-generic-amd64.qcow2.  0%[                                                              ]  2,21M  472KB/s    eta 14m 6s
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
Espera hasta que la imagen esté descargada al 100%.
 
Espera hasta que la imagen esté descargada al 100%.
  
= Paso 2: Instalación del paquete cloud-init =
+
La imagen de Debian cloud viene con 2 GBytes de espacio por defecto, puedes ampliar el tamaño con la siguiente orden antes de usarla en la máquina virtual:
  
A continuación, tienes que instalar los [[paquetes]] que ofrecen la herramienta ''cloud-init'' para configurar la imagen de Ubuntu que has descargado, estos paquetes son:
+
<syntaxhighlight lang="bash">
 +
qemu-img resize debian-13-generic-amd64.qcow2 +8G
 +
</syntaxhighlight>
 +
 
 +
Esto aumenta en 8 Gbytes la imagen, por tanto, quedas con una unidad virtual de almacenamiento de 10 GBytes.
  
* '''cloud-init''': herramienta para configurar una imagen de Ubuntu cloud.
+
= Paso 2: Configuración de la imagen cloud con virt-customize =
* '''cloud-image-utils''': esta herramienta es complementaria a cloud-init y sirve para modificar imágenes de Ubuntu cloud.
 
  
Podemos instalar estos paquetes con la herramienta '''apt''' desde el intérprete de órdenes:
+
La orden ''virt-customize'' permite establecer la contraseña del usuario administrador de la imagen que hemos descargado.
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
sudo apt install cloud-init cloud-image-utils
+
virt-customize -a debian-13-generic-amd64.qcow2 --root-password password:coolpass --hostname servidor
 
</syntaxhighlight>
 
</syntaxhighlight>
  
''En los ordenadores del aula de prácticas estos paquetes ya estarán preinstalados, con lo que puedes saltarte este paso''.
+
El ejemplo anterior muestra cómo configurar la imagen descargada para que disponga del usuario ''root'', y en este caso, la contraseña es ''coolpass''.
 +
 
 +
= Paso 3: Creación de máquina virtual =
 +
 
 +
Para crear una máquina virtual con libvirt, tienes que hacer uso de ''virt-install'':
 +
 
 +
<syntaxhighlight lang="bash">
 +
virt-install --name mi-mv --memory 2048 --disk path=/home/usuario/debian-13-generic-amd64.qcow2 --network network=default --os-variant generic --import
 +
</syntaxhighlight>
 +
 
 +
En la orden anterior:
 +
 
 +
* Se crea una máquina virtual denominada ''mi-mv''
 +
* La memoria de la máquina virtual es de 2 GBytes (2048 Mbytes)
 +
* El ''--disk path'' indica la ruta a la imagen Cloud
 +
* Se usa la configuración de red por defecto.
 +
* Se especifica que la variante de sistema operativo genérico
 +
* Se indica que se trata de una importación de una imagen con un sistema operativo ya instalado mediante ''--import''
 +
* Opcionalmente, puede indicar ''--vcpus=NUM'' donde NUM es el número de CPUs para su máquina virtual.
 +
 
 +
'''Recuerde modificar el nombre de la máquina virtual ''mi-mv'' y actualizar la ruta a la imagen Cloud que ha descargado en el paso anterior'''.
 +
 
 +
Tras invocar este lo cual le aparecerá la pantalla de la máquina virtual en una ventana, puede salir de la pantalla al pulsar sobre "File -> Quit".
 +
 
 +
= Paso 4: Acceso y gestión de la máquina virtual =
  
= Paso 3: Configuración de la imagen de Ubuntu con cloud-init =
+
El comando ''virt-install'' lanza inicialmente el programa ''virt-viewer'' siempre que haya iniciado la sesión mediante ''ssh'' con la opción -X.
  
Para configurar la imagen de Ubuntu cloud, hay que crear un fichero de configuración para la herramienta '''cloud-init'''. Este fichero empieza siempre por la línea #cloud-config y se estructura en formato [https://es.wikipedia.org/wiki/YAML yaml], el contenido del fichero ''cloud.cfg'' sería el siguiente:
+
Para volver acceder al teclado y pantalla de la máquina virtual en cualquier momento mediante el siguiente programa:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
#cloud-config
+
virt-viewer mi-mv &
password: qwerty123
 
chpasswd: { expire: False }
 
ssh_pwauth: True
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
El ejemplo anterior muestra cómo configurar la imagen descargada para que disponga del usuario ''ubuntu'', y en este caso, la contraseña es ''querty123'', y que se pueda acceder a dicho usuario por medio de ''[[ssh]]''.
+
NOTA: Si observa un mensaje de error que indica "Cannot open display" significa que no ha iniciado sesión con ''ssh -X''.
  
Podemos configurar la imagen para que apliquen estos cambios con el siguiente comando:
+
Para parar la máquina virtual:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
cloud-localds media.img cloud.cfg
+
virsh shutdown mi-mv
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Esta aplicación genera un fichero imagen que será empleado para configurar la imagen de Ubuntu cloud que has descargado.
+
Para listar las máquinas virtuales existentes y comprobar su estado:
  
Dispones de más información suplementaria sobre como usar [[cloud-init]].
+
<syntaxhighlight lang="bash">
 +
virsh list --all
 +
</syntaxhighlight>
  
= Paso 4: Instalación de libvirt e importación de imagenes =
+
Puede usar ''grep'' para localizar su máquina virtual y mostrar el estado en el que está.
  
Para instalar libvirt lo hacemos con la herramienta '''apt''' desde el intérprete de órdenes:
+
<syntaxhighlight lang="bash">
 +
virsh list --all | grep mi-mv
 +
</syntaxhighlight>
 +
 
 +
Para lanzar una máquina virtual apagada, puede usar:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
sudo apt install virt-manager
+
virsh start mi-mv
 
</syntaxhighlight>
 
</syntaxhighlight>
  
''En los ordenadores del aula de prácticas este paquete ya estará preinstalado, con lo que puedes saltarte la orden anterior''.
+
Si necesita borrar una máquina virtual completamente (previamente apagada), puede hacerlo con:
  
[[Archivo:virt-manager.png|thumb|Interfaz de virt-manager.]]
+
<syntaxhighlight lang="bash">
 +
virsh undefine mi-mv
 +
</syntaxhighlight>
  
Una vez instalada podemos lanzar virt-manager desde el intérprete de órdenes:
+
tras los cual ya no aparecerá en el listado de ''virsh list --all''.
 +
 
 +
= Paso 5: Ampliación de tamaño de la imagen Cloud =
 +
 
 +
En el Paso 1 se amplió la unidad virtual de almacenamiento a 10 Gbytes mediante ''qemu-img''.
 +
 
 +
En '''Debian 12''' hay que hacer un paso más para completar la ampliación, desde '''dentro de la máquina virtual''', hay que extender la partición para que ocupe todo el tamaño de la unidad virtual de almacenamiento:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
virt-manager
+
growpart /dev/sda 1
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Para importar la imagen de Ubuntu cloud que hemos descargado a la máquina virtual, desde un intérprete de órdenes en el anfitrión (¡sin cerrar la ventana de virt-manager de la que ya disponemos!), vamos a copiar la imagen descargada en el paso 1 y la imagen generada en el paso 3 en el directorio de trabajo de virt-manager que se encuentra en ''/var/lib/libvirt/images''. Para ello, desde el intérprete de órdenes que hemos lanzado y desde el directorio donde tengamos las imágenes anteriormente generadas, invocamos las siguientes ordenes:
+
Tras esto, hay que extender el sistema de ficheros que está en dicha partición:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
sudo cp bionic-server-cloudimg-amd64.img /var/lib/libvirt/images
+
resize2fs /dev/sda1
sudo cp media.img /var/lib/libvirt/images
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Con estas ordenes, estas copiando la imagen de Ubuntu cloud descargada y la imagen generada por cloud-localds en la carpeta''/var/lib/libvirt/images'' que contiene las imagenes de las que dispone la virt-manager.
+
Con esto puedes comprobar que el sistema de ficheros es de 10 Gbytes, con la utilidad ''df'':
 +
 
 +
<syntaxhighlight lang="bash">
 +
df -h
 +
</syntaxhighlight>
  
[[Archivo:virt-manager-paso4-5.png|thumb|Seleccionar imagen de Ubuntu descargada.]]
+
NOTA: En Debian 13 este paso no es necesario.
  
Volvemos a la interfaz gráfica de virt-manager una vez copiadas las imágenes y creamos una nueva máquina virtual empleando dichas imágenes:
+
= Paso 6: Configuración del teclado en la imagen Cloud =
  
# Desde la interfaz de virt-manager creamos una nueva Máquina Virtual ''(Archivo --> Nueva máquina virtual)''
+
Por defecto, la imagen cloud viene con el teclado en inglés americano.
# En la nueva ventana que se abre, seleccionamos ''Medio de instalación local'' y pulsamos ''Adelante''
 
# En ''Choose ISO or CDROM install media'' seleccionamos la imagen de ''media.img''' creada en el paso 3; y desmarcamos la casilla de ''Detección automática'' para seleccionar nuestro Sistema Operativo, en este caso, Ubuntu 18.04 LTS. Vemos que todo queda como en la imagen y pulsamos ''Adelante'' [[Archivo:virt-manager-paso4-3.png|thumb|Elegir imagen de configuración y SO.]]
 
# Seleccionamos la cantidad de memoria y de CPU que queremos, por defecto 2048 de Memoria y 1 CPU está bien.
 
# En el almacenamiento, vamos a seleccionar un almacenaje personalizado, y aquí sera donde seleccionemos la imagen de ubuntu descargada, en nuestro caso ''bionic-server-cloudimg-amd64.img'' y pulsamos ''Adelante''
 
# En el último paso, podremos selecionar la red, por ahora dejaremos [[NAT]] por defecto y pulsamos '''Finalizar''' (Si nos pregunta si queremos crear una red [[NAT]] porque no está creada, le decimos que sí).
 
  
Ya tenemos nuestra máquina virtual creada con nuestra configuración. Ahora vamos a probar que todo funciona correctamente. La máquina debería de estar arrancando y debería de aparecer el mensaje de login. [[Archivo:virt-manager-login.png|thumb|Login de ubuntu.]]
+
Puedes cambiarlo con la siguiente orden:
  
Utilizamos como usuario ''ubuntu'', que es el usuario por defecto y como contraseña empleamos la que hayamos elegido en el paso 3. Con esto nos validamos en el sistema con éxito. [[Archivo:virt-manager-logged.png|thumb|Usuario ya validado, en el intérprete de ordenes]]
+
<syntaxhighlight lang="bash">
 +
apt install kbd
 +
</syntaxhighlight>
  
Ya disponemos de un intérprete de ordenes en nuestro sistema operativo Ubuntu cloud que corre sobre nuestra máquina virtual.
+
Y seleccione "Other", después busque "Spanish". En general, deje lo preseleccionado para opciones que no entienda, solo cambien el idioma.
  
'''Nota''': El teclado de la imagen de Ubuntu cloud que corre en la máquina virtual está en inglés, puedes cambiarlo con la siguiente orden:
+
Si se equivoca en la selección de los menús, lo puede solucionar de esta manera:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
sudo loadkeys es
+
dpkg-reconfigure keyboard-configuration
 +
service keyboard-setup restart
 
</syntaxhighlight>
 
</syntaxhighlight>
  
= Paso 5: Configuración de la red en libvirt =
+
= Paso 7: Configuración de la red en libvirt =
  
Antes de ver los detalles de red, vamos a hacer una pequeña diferencia entre las dos ventanas que tenemos abiertas, virt-manager principal y virt-manager máquina de ubuntu ejecutándose. En la primera tendremos las configuraciones generales y en la segunda tendremos las configuraciones de una máquina virtual concreta, en nuestro caso, la configuración de la máquina virtual de ubuntu.
+
Antes de ver los detalles de red, vamos a hacer una pequeña diferencia entre las dos ventanas que tenemos abiertas, virt-manager principal y virt-manager máquina virtual ejecutándose. En la primera tendremos las configuraciones generales y en la segunda tendremos las configuraciones de una máquina virtual concreta, en nuestro caso, la configuración de la máquina virtual.
  
 
Con esto, veremos dos formas de saber la IP de nuestra máquina virtual:
 
Con esto, veremos dos formas de saber la IP de nuestra máquina virtual:
  
# En la ventana de nuestra máquina virtual de ubuntu, vamos a cambiar la vista y ver los detalles de nuestra máquina. ''Vista --> Detalles''. Aquí tenemos toda la configuración de nuestra máquina, pero solo vamos a centrarnos en la Interfaz de red virtual, que es donde podremos ver cual es pa IP que tiene asiganada nuestra máquina y cual es la fuente de red que se está utilizando. [[Archivo:virt-manager-nic.png|thumb|Interfaz de red virtual.]]
+
# En la ventana de nuestra máquina virtual, vamos a cambiar la vista y ver los detalles de nuestra máquina. ''Vista --> Detalles''. Aquí tenemos toda la configuración de nuestra máquina, pero solo vamos a centrarnos en la Interfaz de red virtual, que es donde podremos ver cual es pa IP que tiene asiganada nuestra máquina y cual es la fuente de red que se está utilizando. [[Archivo:virt-manager-nic.png|thumb|Interfaz de red virtual.]]
 
# La otra opción es utilizando comandos, podemos utilizar ''ip address'' en la consola de nuestra máquina virtual.
 
# La otra opción es utilizando comandos, podemos utilizar ''ip address'' en la consola de nuestra máquina virtual.
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
$ sudo ip address
+
# ip address
 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
 
     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 
     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
Línea 149: Línea 187:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
sudo dhclient ens3
+
dhcpcd ens3
 +
</syntaxhighlight>
 +
 
 +
NOTA: Si usa la imagen cloud de Debian 12, entonces tiene que usar ''dhclient'' en lugar de ''dhcpcd'':
 +
 
 +
<syntaxhighlight lang="bash">
 +
dhclient ens3
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Línea 155: Línea 199:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
ping 192.168.100.168
+
ping 9.9.9.9
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Línea 166: Línea 210:
 
64 bytes from 192.168.100.168: icmp_seq=3 ttl=64 time=0.321 ms
 
64 bytes from 192.168.100.168: icmp_seq=3 ttl=64 time=0.321 ms
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
Puede pararlo con ctrl-C.
 +
 +
Compruebe también que la resolución de nombre funciona adecuadamente, mediante:
 +
 +
<syntaxhighlight lang="bash">
 +
ping www.us.es
 +
</syntaxhighligh>
  
 
Si hubiere algún problema de conectividad la salida sería de este tipo:
 
Si hubiere algún problema de conectividad la salida sería de este tipo:
Línea 179: Línea 231:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
sudo dhclient ens3
+
dhcpcd ens3
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
Esto quiere decir que la configuración de red es incorrecta, o quizás que la dirección IP de tu máquina virtual no es 192.168.100.168 :-).
 
Esto quiere decir que la configuración de red es incorrecta, o quizás que la dirección IP de tu máquina virtual no es 192.168.100.168 :-).
 +
 +
Esta configuración de red es efímera, en el siguiente reinicio de la máquina virtual tendrá que invocar a ''dhcpcd''.
 +
 +
Para realizar la configuración de manera permanente, puede configurar ''netplan'' para que la máquina virtual obtenga IP por DHCP automáticamente en tiempo de arranque con la siguiente configuración en ''/etc/netplan/ens3.yaml''.
 +
 +
<syntaxhighlight lang="bash">
 +
network:
 +
  version: 2
 +
  renderer: networkd
 +
  ethernets:
 +
    ens3:
 +
      dhcp4: true
 +
</syntaxhighlight>
 +
 +
Para evitar un mensaje de ''WARNING'', asegúrese de que el fichero tiene los permisos adecuados:
 +
 +
<syntaxhighlight lang="bash">
 +
chmod 600 /etc/netplan/ens3.yaml
 +
</syntaxhighlight>
 +
 +
tras crear este fichero, puedes aplicar los cambios con:
 +
 +
<syntaxhighlight lang="bash">
 +
netplan apply
 +
</syntaxhighlight>
  
 
Dispones de más información suplementaria sobre la [[configuración de red en libvirt]].
 
Dispones de más información suplementaria sobre la [[configuración de red en libvirt]].
  
= Paso 6: Clonado de máquinas virtuales =
+
= Paso 8: Activación del servicio de ssh =
 +
 
 +
Para configurar el servicio de ssh en su máquina virtual, pare su máquina virtual:
  
Vamos a reutilizar la configuración y la máquina virtual creada, para crear varias iguales. Empecemos:
+
<syntaxhighlight lang="bash">
 +
virsh shutdown mi-mv
 +
</syntaxhighlight>
  
# Apagamos la máquina virtual si la tenemos encendida, para que nos permita hacer un clonado. ''Máquina virtual --> Apagar --> Apagar''
+
Genere un par de claves pública y privada desde su cuenta del servidor de la asignatura:
# En la ventana principal, pulsar botón derecho encima de la máquina virtual que queramos clonar, y pulsar ''Clonar ...''
 
# En la ventana que nos aparece, por defecto seleccionará la misma red y creará una MAC diferente para la nueva máquina y clonará la imagen de ubuntu que usamos de almacenamiento. Le damos un nuevo nombre a nuestra máquina, y pulsamos en ''Clonar''.
 
# Repetimos este paso hasta que tengamos toda las máquinas virtuales deseadas, en nuestro caso, solo crearemos una para probar los detalles de red.
 
  
Ahora arrancaremos la máquina original y la clonada, y vamos a comprobar que ambas están en la misma red y que pueden verse entre ellas. Como comentamos en el paso anterior, comprobaremos la IP de la máquina virtual original y de la clonada, y haremos ping desde dentro de las máquinas para comprobar que se ven.
+
<syntaxhighlight lang="bash">
 +
ssh-keygen
 +
</syntaxhighlight>
  
Ejemplo:
+
Para consultar la clave pública generada:
  
* Máquina original tiene IP 192.168.100.168
+
<syntaxhighlight lang="bash">
* Máquina clonada tiene IP 192.168.100.169
+
cat ~/.ssh/id_rsa.pub
* Desde la máquina original haremos un ping 192.168.100.169
+
</syntaxhighlight>
* Desde la máquina clonada haremos un ping 192.168.100.168
 
* Desde ambas máquinas, comprobaremos que la puerta de enlace es la misma, haciendo un ''ip route''.
 
* Desde la máquina host, deberíamos de obtener ping hacía las dos máquinas
 
  
= Paso 7: Instantáneas de máquinas virtuales =
+
Configure de nuevo la imagen cloud con ''virt-customize'' haciendo uso de la opción ''--ssh-inject'':
  
Las instantáneas nos permiten almacenar una captura del estado de la ejecución de una máquina virtual en un cierto instante tiempo que podremos restaurar cuando sea necesario. Las instantáneas te serán útiles si tienes trabajo a medio hacer en la máquina virtual, de manera que quieras guardar lo que has hecho para restaurarlo posteriormente.
+
<syntaxhighlight lang="bash">
 +
virt-customize -a debian-13-generic-amd64.qcow2 --root-password password:coolpass --ssh-inject root:string:"ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAr8IhH+eH3FAq+gKqPvDazeU5QOGMty3NJlP1Oqt6XZkZvJsEXAMPLEkeyFa2IJfjL9SlQXs1vxB7ivj4AGz4sWkvgNvP1OFHHyGkEw== user@example.com"
 +
</syntaxhighlight>
  
Para crear una instantánea, accedemos a la máquina virtual en ejecución y desplegamos el menú ''Vista'' y pinchamos sobre ''Capturas de Pantalla'' (Snapshot). Después pulsamos en el botón ''+'' que aparece abajo a la izquierda, indicamos el nombre de la instantánea y le damos a ''Finalizar'.
+
donde la cadena entre comillas que comienza por ''ssh-rsa'' se trata del contenido de su fichero ''.ssh/id_rsa.pub''.
  
La creación de instantáneas toma algo de tiempo, sé paciente. Puedes almacenar tantas instantáneas como quieras. El nombre ''Captura de pantalla'' es una traducción poco afortunada del inglés ''snapshot'' que se refiere al término ''instantánea''.
+
Ahora, volvemos a lanzar la máquina virtual:
  
= Paso 8: Instalación Manual de SO en VVM =
+
<syntaxhighlight lang="bash">
 +
virsh start mi-mv
 +
</syntaxhighlight>
  
 +
Accedemos a ella mediante ''virt-viewer'':
  
1) Ubuntu net install (ubuntu minimalCD):
+
<syntaxhighlight lang="bash">
64bit 18.04
+
virt-viewer mi-mv
 +
</syntaxhighlight>
  
[[Archivo:WEB DONDE INSTALARLA .png|200px|thumb|right|texto alternativo]]
+
'''Desde dentro de la máquina virtual''', creamos las claves pública y privadas del servidor:
  
[[Archivo:DESCARGAR UBUNTU .png|200px|thumb|right|texto alternativo]]
+
<syntaxhighlight lang="bash">
 +
ssh-keygen -A
 +
</syntaxhighlight>
  
2) Creamos una nueva máquina virtual:
+
Tras esto, puede activar el servicio de ''ssh'':
(medio de instalación local (imagen ISO o CDROM))
 
  
3) Install
+
<syntaxhighlight lang="bash">
 +
systemctl enable --now ssh
 +
</syntaxhighlight>
  
[[Archivo:INSTALL.png|200px|thumb|right|texto alternativo]]
+
Puede comprobar el estado del servicio mediante:
  
4) Idioma -> Spanish
+
<syntaxhighlight lang="bash">
 +
systemctl status ssh
 +
</syntaxhighlight>
  
5) Teclado: DETECT? NO -> Spanish
+
Para comprobar que funciona correctamente, desde la sesión ssh del servidor de la asignatura:
(Dvorak es similar a la máquina de escribir inglesa) -> NO
 
  
[[Archivo:CONFIGURACIÓN TECLADO.png |200px|thumb|right|texto alternativo]]
+
<syntaxhighlight lang="bash">
 +
ssh root@10.141.28.25
 +
</syntaxhighlight>
  
6) Escoger réplica ubuntu: Spanish, en blanco y continuamos
+
Donde tiene que reemplazar ''10.141.28.25'' por la IP de su máquina virtual.
  
[[Archivo:RÉPLICA DE UBUNTU .png |200px|thumb|right|texto alternativo]]
+
= Paso 9: Clonado de máquinas virtuales =
  
7) Nombre de usuario: MARINARF
+
Vamos a reutilizar la configuración y la máquina virtual creada, para crear varias iguales. Empecemos:
  
8) Nombre para la cuenta: marinarf
+
# Apagamos la máquina virtual si la tenemos encendida, para que nos permita hacer un clonado. ''Máquina virtual --> Apagar --> Apagar''
 +
# En la ventana principal, pulsar botón derecho encima de la máquina virtual que queramos clonar, y pulsar ''Clonar ...''
 +
# En la ventana que nos aparece, por defecto seleccionará la misma red y creará una MAC diferente para la nueva máquina y clonará la imagen que usamos de almacenamiento. Le damos un nuevo nombre a nuestra máquina, y pulsamos en ''Clonar''.
 +
# Repetimos este paso hasta que tengamos toda las máquinas virtuales deseadas, en nuestro caso, solo crearemos una para probar los detalles de red.
  
9) Contraseña: qwerty123
+
Ahora arrancaremos la máquina original y la clonada, y vamos a comprobar que ambas están en la misma red y que pueden verse entre ellas. Como comentamos en el paso anterior, comprobaremos la IP de la máquina virtual original y de la clonada, y haremos ping desde dentro de las máquinas para comprobar que se ven.
  
10) Configurar el reloj: NO, continuar y marcar Península
+
Es posible clonar una máquina virtual desde el intérprete de órdenes:
  
11) Método de particionado: Guiado -> utilizar todo el disco
+
<syntaxhighlight lang="bash">
 +
virt-clone --original mi-mv --name mi-mv-clone --auto-clone
 +
</syntaxhighlight>
  
12) Sí
+
Ejemplo:
  
13) Administrar actualizaciones: SIN ACTUALIZACIONES AUTOMÁTICAS
+
* Máquina original tiene IP 192.168.100.168
 +
* Máquina clonada tiene IP 192.168.100.169
 +
* Desde la máquina original haremos un ping 192.168.100.169
 +
* Desde la máquina clonada haremos un ping 192.168.100.168
 +
* Desde ambas máquinas, comprobaremos que la puerta de enlace es la misma, haciendo un ''ip route''.
 +
* Desde la máquina host, deberíamos de obtener ping hacía las dos máquinas
  
[[Archivo:SIN ACTUALIZACIONES AUTOMÁTICAS.png|200px|thumb|right|texto alternativo]]
+
= Paso 10: Instantáneas de máquinas virtuales =
  
14) Programas a instalar: Lotes de paquetes de software
+
Las instantáneas nos permiten almacenar una captura del estado de la ejecución de una máquina virtual en un cierto instante tiempo que podremos restaurar cuando sea necesario. Las instantáneas te serán útiles si tienes trabajo a medio hacer en la máquina virtual, de manera que quieras guardar lo que has hecho para restaurarlo posteriormente.
(Si marcas alguno, tarda más en instalar)
 
  
15) GRUB:
+
Para crear una instantánea, accedemos a la máquina virtual en ejecución, podemos hacerlo con:
  
16) Hora UTC: Sí
+
<syntaxhighlight lang="bash">
 +
virsh snapshot-create-as --domain mimv --name snapshot-mimv-131125 --description "mi snapshot de prueba"
 +
</syntaxhighlight>
  
FIN
+
La creación de instantáneas toma algo de tiempo, sé paciente.
  
_____________________________________________________________________________________
+
Puedes listar los snapshots disponibles para una máquina virtual en:
  
·) INSTALACIÓN DE WINDOWS:
+
<syntaxhighlight lang="bash">
 +
virsh snapshot-list mimv
 +
</syntaxhighlight>
  
> Versión de evaluación de Windows: windows 2016 evaluation
+
Puedes resturar un snapshot mediante:
  
> hhtps://dennisnotes.com/note/20180614-ubuntu-18 ...  (libvirt install windows)
+
<syntaxhighlight lang="bash">
 +
virsh snapshot-revert mimv snapshot-mimv-131125
 +
</syntaxhighlight>
  
+
Puedes almacenar tantas instantáneas como quieras. El nombre ''Captura de pantalla'' es una traducción poco afortunada del inglés ''snapshot'' que se refiere al término ''instantánea''.
·) EXTRAS:
 
  
· Nas: Network Attack Story = smart
+
= Material complementario =
  
· Carpeta temporal rutkit seguir en el sistema sin que lo sepa el dueño = Peligro
+
Además, existe [[material complementario sobre libvirt]] que no es parte del contenido del examen pero que podría ser de su interés.
- Si quitamos lo temporal = más seguridad
 

Revisión actual del 09:01 4 dic 2025

Para la realización de esta práctica necesitará de una imagen de Debian Cloud que descargaremos de https://cloud.debian.org

En esta práctica se empleará la imagen descargada de la web Debian Cloud y se hará uso de la herramienta virt-customize para configurarla.

A continuación, utilizaremos la imagen de Debian ya configurada para ser importada al software de virtualización libvirt.

Paso 1: Descarga de la imagen Cloud

Entramos en http://cloud.debian.org/images/cloud/ y descargamos la imagen de Debian 13.

Puedes descargarla directamente con la orden wget:

wget https://cloud.debian.org/images/cloud/trixie/latest/debian-13-generic-amd64.qcow2

si comenzó a descargar verás una salida similar a esta:

-2019-08-06 12:26:26--  https://cloud.debian.org/images/cloud/trixie/latest/debian-13-generic-amd64.qcow2
Resolviendo cloud.debian.org (cloud.debian.org)... 91.189.88.89, 2001:67c:1560:8001::8001
Conectando con cloud.debian.org (cloud.debian.org)[91.189.88.89]:443... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 343474176 (328M) [application/octet-stream]
Grabando a: “debian-13-generic-amd64.qcow2”

debian-13-generic-amd64.qcow2.   0%[                                                              ]   2,21M   472KB/s    eta 14m 6s

Espera hasta que la imagen esté descargada al 100%.

La imagen de Debian cloud viene con 2 GBytes de espacio por defecto, puedes ampliar el tamaño con la siguiente orden antes de usarla en la máquina virtual:

qemu-img resize debian-13-generic-amd64.qcow2 +8G

Esto aumenta en 8 Gbytes la imagen, por tanto, quedas con una unidad virtual de almacenamiento de 10 GBytes.

Paso 2: Configuración de la imagen cloud con virt-customize

La orden virt-customize permite establecer la contraseña del usuario administrador de la imagen que hemos descargado.

virt-customize -a debian-13-generic-amd64.qcow2 --root-password password:coolpass --hostname servidor

El ejemplo anterior muestra cómo configurar la imagen descargada para que disponga del usuario root, y en este caso, la contraseña es coolpass.

Paso 3: Creación de máquina virtual

Para crear una máquina virtual con libvirt, tienes que hacer uso de virt-install:

virt-install --name mi-mv --memory 2048 --disk path=/home/usuario/debian-13-generic-amd64.qcow2 --network network=default --os-variant generic --import

En la orden anterior:

  • Se crea una máquina virtual denominada mi-mv
  • La memoria de la máquina virtual es de 2 GBytes (2048 Mbytes)
  • El --disk path indica la ruta a la imagen Cloud
  • Se usa la configuración de red por defecto.
  • Se especifica que la variante de sistema operativo genérico
  • Se indica que se trata de una importación de una imagen con un sistema operativo ya instalado mediante --import
  • Opcionalmente, puede indicar --vcpus=NUM donde NUM es el número de CPUs para su máquina virtual.

Recuerde modificar el nombre de la máquina virtual mi-mv y actualizar la ruta a la imagen Cloud que ha descargado en el paso anterior.

Tras invocar este lo cual le aparecerá la pantalla de la máquina virtual en una ventana, puede salir de la pantalla al pulsar sobre "File -> Quit".

Paso 4: Acceso y gestión de la máquina virtual

El comando virt-install lanza inicialmente el programa virt-viewer siempre que haya iniciado la sesión mediante ssh con la opción -X.

Para volver acceder al teclado y pantalla de la máquina virtual en cualquier momento mediante el siguiente programa:

virt-viewer mi-mv &

NOTA: Si observa un mensaje de error que indica "Cannot open display" significa que no ha iniciado sesión con ssh -X.

Para parar la máquina virtual:

virsh shutdown mi-mv

Para listar las máquinas virtuales existentes y comprobar su estado:

virsh list --all

Puede usar grep para localizar su máquina virtual y mostrar el estado en el que está.

virsh list --all | grep mi-mv

Para lanzar una máquina virtual apagada, puede usar:

virsh start mi-mv

Si necesita borrar una máquina virtual completamente (previamente apagada), puede hacerlo con:

virsh undefine mi-mv

tras los cual ya no aparecerá en el listado de virsh list --all.

Paso 5: Ampliación de tamaño de la imagen Cloud

En el Paso 1 se amplió la unidad virtual de almacenamiento a 10 Gbytes mediante qemu-img.

En Debian 12 hay que hacer un paso más para completar la ampliación, desde dentro de la máquina virtual, hay que extender la partición para que ocupe todo el tamaño de la unidad virtual de almacenamiento:

growpart /dev/sda 1

Tras esto, hay que extender el sistema de ficheros que está en dicha partición:

resize2fs /dev/sda1

Con esto puedes comprobar que el sistema de ficheros es de 10 Gbytes, con la utilidad df:

df -h

NOTA: En Debian 13 este paso no es necesario.

Paso 6: Configuración del teclado en la imagen Cloud

Por defecto, la imagen cloud viene con el teclado en inglés americano.

Puedes cambiarlo con la siguiente orden:

apt install kbd

Y seleccione "Other", después busque "Spanish". En general, deje lo preseleccionado para opciones que no entienda, solo cambien el idioma.

Si se equivoca en la selección de los menús, lo puede solucionar de esta manera:

dpkg-reconfigure keyboard-configuration
service keyboard-setup restart

Paso 7: Configuración de la red en libvirt

Antes de ver los detalles de red, vamos a hacer una pequeña diferencia entre las dos ventanas que tenemos abiertas, virt-manager principal y virt-manager máquina virtual ejecutándose. En la primera tendremos las configuraciones generales y en la segunda tendremos las configuraciones de una máquina virtual concreta, en nuestro caso, la configuración de la máquina virtual.

Con esto, veremos dos formas de saber la IP de nuestra máquina virtual:

  1. En la ventana de nuestra máquina virtual, vamos a cambiar la vista y ver los detalles de nuestra máquina. Vista --> Detalles. Aquí tenemos toda la configuración de nuestra máquina, pero solo vamos a centrarnos en la Interfaz de red virtual, que es donde podremos ver cual es pa IP que tiene asiganada nuestra máquina y cual es la fuente de red que se está utilizando.
    Interfaz de red virtual.
  2. La otra opción es utilizando comandos, podemos utilizar ip address en la consola de nuestra máquina virtual.
# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 3d:f0:ee:49:aa:22 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.168/24 brd 192.168.2.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::3e97:eff:fe39:dd20/64 scope link 
       valid_lft forever preferred_lft forever

Que nos permite comprobar que estamos utilizando la dirección IP 192.168.100.168.

Si la interfaz no muestra una dirección IP, puedes forzar la obtención de una dirección IP desde la máquina virtual para la interfaz ens3 con la orden:

dhcpcd ens3

NOTA: Si usa la imagen cloud de Debian 12, entonces tiene que usar dhclient en lugar de dhcpcd:

dhclient ens3

Vamos a comprobar ahora desde un terminal en el anfitrión que alcanzamos a nuestra máquina virtual.

ping 9.9.9.9

Deberíamos de ver una salida similar a la siguiente:

PING 192.168.100.168 (192.168.100.168) 56(84) bytes of data.
64 bytes from 192.168.100.168: icmp_seq=1 ttl=64 time=0.397 ms
64 bytes from 192.168.100.168: icmp_seq=2 ttl=64 time=0.409 ms
64 bytes from 192.168.100.168: icmp_seq=3 ttl=64 time=0.321 ms

Puede pararlo con ctrl-C.

Compruebe también que la resolución de nombre funciona adecuadamente, mediante:

ping www.us.es
</syntaxhighligh>

Si hubiere algún problema de conectividad la salida sería de este tipo:

<syntaxhighlight lang="bash">
PING 192.168.100.168 (192.168.100.168) 56(84) bytes of data.
From 192.168.100.1 icmp_seq=1 Destination Host Unreachable
From 192.168.100.1 icmp_seq=2 Destination Host Unreachable
From 192.168.100.1 icmp_seq=3 Destination Host Unreachable

En dicho caso, puedes forzar la obtención de una dirección IP con la orden:

dhcpcd ens3

Esto quiere decir que la configuración de red es incorrecta, o quizás que la dirección IP de tu máquina virtual no es 192.168.100.168 :-).

Esta configuración de red es efímera, en el siguiente reinicio de la máquina virtual tendrá que invocar a dhcpcd.

Para realizar la configuración de manera permanente, puede configurar netplan para que la máquina virtual obtenga IP por DHCP automáticamente en tiempo de arranque con la siguiente configuración en /etc/netplan/ens3.yaml.

network:
  version: 2
  renderer: networkd
  ethernets:
    ens3:
      dhcp4: true

Para evitar un mensaje de WARNING, asegúrese de que el fichero tiene los permisos adecuados:

chmod 600 /etc/netplan/ens3.yaml

tras crear este fichero, puedes aplicar los cambios con:

netplan apply

Dispones de más información suplementaria sobre la configuración de red en libvirt.

Paso 8: Activación del servicio de ssh

Para configurar el servicio de ssh en su máquina virtual, pare su máquina virtual:

virsh shutdown mi-mv

Genere un par de claves pública y privada desde su cuenta del servidor de la asignatura:

ssh-keygen

Para consultar la clave pública generada:

cat ~/.ssh/id_rsa.pub

Configure de nuevo la imagen cloud con virt-customize haciendo uso de la opción --ssh-inject:

virt-customize -a debian-13-generic-amd64.qcow2 --root-password password:coolpass --ssh-inject root:string:"ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAr8IhH+eH3FAq+gKqPvDazeU5QOGMty3NJlP1Oqt6XZkZvJsEXAMPLEkeyFa2IJfjL9SlQXs1vxB7ivj4AGz4sWkvgNvP1OFHHyGkEw== user@example.com"

donde la cadena entre comillas que comienza por ssh-rsa se trata del contenido de su fichero .ssh/id_rsa.pub.

Ahora, volvemos a lanzar la máquina virtual:

virsh start mi-mv

Accedemos a ella mediante virt-viewer:

virt-viewer mi-mv

Desde dentro de la máquina virtual, creamos las claves pública y privadas del servidor:

ssh-keygen -A

Tras esto, puede activar el servicio de ssh:

systemctl enable --now ssh

Puede comprobar el estado del servicio mediante:

systemctl status ssh

Para comprobar que funciona correctamente, desde la sesión ssh del servidor de la asignatura:

ssh root@10.141.28.25

Donde tiene que reemplazar 10.141.28.25 por la IP de su máquina virtual.

Paso 9: Clonado de máquinas virtuales

Vamos a reutilizar la configuración y la máquina virtual creada, para crear varias iguales. Empecemos:

  1. Apagamos la máquina virtual si la tenemos encendida, para que nos permita hacer un clonado. Máquina virtual --> Apagar --> Apagar
  2. En la ventana principal, pulsar botón derecho encima de la máquina virtual que queramos clonar, y pulsar Clonar ...
  3. En la ventana que nos aparece, por defecto seleccionará la misma red y creará una MAC diferente para la nueva máquina y clonará la imagen que usamos de almacenamiento. Le damos un nuevo nombre a nuestra máquina, y pulsamos en Clonar.
  4. Repetimos este paso hasta que tengamos toda las máquinas virtuales deseadas, en nuestro caso, solo crearemos una para probar los detalles de red.

Ahora arrancaremos la máquina original y la clonada, y vamos a comprobar que ambas están en la misma red y que pueden verse entre ellas. Como comentamos en el paso anterior, comprobaremos la IP de la máquina virtual original y de la clonada, y haremos ping desde dentro de las máquinas para comprobar que se ven.

Es posible clonar una máquina virtual desde el intérprete de órdenes:

virt-clone --original mi-mv --name mi-mv-clone --auto-clone

Ejemplo:

  • Máquina original tiene IP 192.168.100.168
  • Máquina clonada tiene IP 192.168.100.169
  • Desde la máquina original haremos un ping 192.168.100.169
  • Desde la máquina clonada haremos un ping 192.168.100.168
  • Desde ambas máquinas, comprobaremos que la puerta de enlace es la misma, haciendo un ip route.
  • Desde la máquina host, deberíamos de obtener ping hacía las dos máquinas

Paso 10: Instantáneas de máquinas virtuales

Las instantáneas nos permiten almacenar una captura del estado de la ejecución de una máquina virtual en un cierto instante tiempo que podremos restaurar cuando sea necesario. Las instantáneas te serán útiles si tienes trabajo a medio hacer en la máquina virtual, de manera que quieras guardar lo que has hecho para restaurarlo posteriormente.

Para crear una instantánea, accedemos a la máquina virtual en ejecución, podemos hacerlo con:

virsh snapshot-create-as --domain mimv --name snapshot-mimv-131125 --description "mi snapshot de prueba"

La creación de instantáneas toma algo de tiempo, sé paciente.

Puedes listar los snapshots disponibles para una máquina virtual en:

virsh snapshot-list mimv

Puedes resturar un snapshot mediante:

virsh snapshot-revert mimv snapshot-mimv-131125

Puedes almacenar tantas instantáneas como quieras. El nombre Captura de pantalla es una traducción poco afortunada del inglés snapshot que se refiere al término instantánea.

Material complementario

Además, existe material complementario sobre libvirt que no es parte del contenido del examen pero que podría ser de su interés.