Hypervisor Web para LXD. Creación y personalización de VM con ventanas - perfeccion-ar/infraestructura-clasica-y-avanzada GitHub Wiki
Artículo principal: LXD
LXD cuenta con una interface básica, muy amable para controlar recursos en VMs (Máquinas virtuales) y containers.
También tiene un hypervisor capaz de asignar, limitar recursos, e incluso una modalidad Consola. Lo cual es muy útil si tenemos VMs a cargo.
Respecto de "Consola", distinguimos primero la palabra de la expresión "Terminal", que se refiere a acceder "solo texto". Consola equivale a decir a que
- Podemos tomar el control de VMs que corren Windows (Windows corre en VMs, no en containers)
- Entrar y usar VMs con Linux que corren Escritorios, es decir, que corren un Window Manager, con ventanas, office, etc.
- Podemos ver como botea la VM o el container. Lo cual es útil si un día no ha arrancado. Igual que una máquina física, digamos.
Fuente: https://www.youtube.com/watch?v=wqEH_d8LC1k

¿Tenemos este hypervisor funcionando?
Veamos la configuración: si es un equipo nuevo, al momento del lxd init
, nos podemos haber encontrado con estas opciones:
Would you like the LXD server to be available over the network? (yes/no) [default=no]: yes
Address to bind LXD to (not including port) [default=all]: all
Port to bind LXD to [default=8443]: 8443
Estas preguntas son necesarias contestarlas con los valores que se detallan, yes, all y 8443
Pero si al momento de la instalación las hemos ignorado, es decir, dejado como estaban, o si venimos de una vieja instalación de LXD versión 4, entonces esos valores están por defecto. Debemos cambiarlos por aquellos mencionados en este documento. En esencia:
lxc config set core.https_address :8443
Luego
sudo systemctl restart snap.lxd.daemon.service (o reiniciamos el equipo)
Ahora se puede acceder por nuestra ip externa, ej: https://37.27.49.225:8443 - atención, es https, no http. Si el experimento es local (ej: en nuestra notebook) la url será https://localhost:8443
Ahora necesitamos crear unos certificados para que nuestro navegador se conecte.
lxc config trust add
Please provide client name: ntb-cachito
Esto nos generará un token. Ejemplo de token (no real)
Client ntb-cachito certificate add token:
^k43qIg^xV1BDuSw^k43qIg^xV1BDuSw^k43qIg^xV1BDuSw^k43qIg^xV1BDuSw^k43qIg^xV1BDuSw^k43qIg^xV1BDuSw^k43qIg^xV1BDuSw^k43qIg^xV1BDuSw^k43qIg^xV1BDuSw^k43qIg^xV1BDuSw^k43qIg^xV1BDuSw^k43qIg^xV1BDuSw^k43qIg^xV1BDuSw^k43qIg^xV1BDuSw^k43qIg^xV1BDuSw^k43qIg^xV1BDuSw^k43qIg^xV1BDuSw^k43qIg^xV1BaaDuSw^k43qIg^xV1BDuSw^k43qIg^xV1BDuSw^k43qIg^xV1BDuSw^k43qIg^xV1BDuSw==
Luego vamos a la URL del server en, https://37.27.49.225:8443, o a https://localhost:8443, e ignoramos el mensaje sobre la falta de certificado https ("Sitio no de confianza").

Vamos a ahora a Crear un nuevo certificado, Generate. Aquí obtendremos un archivo .crt y un archivo .pfx


Los guardo en un lugar seguro

Ahora importo el pfx en el navegador, poniendo en la url chrome://settings/certificates - reinicio el navegador (a veces es necesario hacerlo dos veces)
En cuanto al archivo crt, lo copio al server, o si estoy trabajando en mi propio equipo, simplemente lo agrego al almacén de claves con
scp ~/Trucos/LXC/lxd-ui-37.27.49.225.crt [email protected]:/root/
Importo el crt
# lxc config trust add lxd-ui-37.27.49.225.crt
# lxc config trust list
+--------+-------------+-------------+--------------+-------------------------------+-------------------------------+
| TYPE | NAME | COMMON NAME | FINGERPRINT | ISSUE DATE | EXPIRY DATE |
+--------+-------------+-------------+--------------+-------------------------------+-------------------------------+
| client | ntb-cachito | | e714ssa66b1b | May 28, 2024 at 12:56am (UTC) | Feb 22, 2027 at 12:56am (UTC) |
+--------+------------+-------------+--------------+-------------------------------+-------------------------------+
Como alternativa, también podemos optar por usar el token en la pantalla de bienvenida, cada vez que entremos.

Una vez que estemos adentro, si vamos a crear una nueva instancia, podremos escoger de una gran cantidad de imágenes para Containers y para Maquinas Virtuales. Si bien los Containers son más eficientes en términos de recursos, en este artículo crearemos una VM.

Acaso la mayor utilidad del Hypervisor es poder entrar en modo consola a VMs que tengan escritorios gráficos (ej: Windows), no solo terminales.
En este ejemplo, me veo en la necesidad de contar remotamente con una VM con programas gráficos, de modo que escojo una versión Desktop de Ubuntu 24, el cual viene con Xorg y un escritorio, Navegador, Libreoffice,etc.
Preferiría que hubieran imágenes disponibles con un escritorio que considero mas óptimo y liviano para datacenters, llamado Lubuntu. Pero ya lo solucionaremos más abajo.


Al arrancar la VM, veremos

Y adentro de la instancia corriendo, podemos acceder a la consola
Si se nota "trabado", se debe a la poca memoria asignada por defecto. También vamos a resolverlo.


Comenzamos asignando una contraseña al usuario por defecto, ubuntu:
$ lxc shell VM-con-Lubuntu ⏎
root@VM-con-Lubuntu:~# passwd ubuntu
New password:
Vamos ahora a los recursos. En Configuración, podemos ver que la nueva Vm está usando el perfil default, de 1 GB de ram y 10 GB de disco. Esto equivale a decir a que se quedará rápidamente sin recursos o se colgará.
Ademas, si nos logueamos, veremos que ¡no tiene placa de red ni red asignada!
Debemos mejorar varias cosas:
- Asignarle red
- Asignarle algo mas de potencia.
- Opcional: cambiar el modo gráfico por defecto (Gnome Shell) por algo mas liviano, como XFCE, Mate, o LXDE. Es decir, convertir esa VM con Ubuntu Desktop, en un Ubuntu Mate, Xubuntu, o Lubuntu (el más liviano de todos).
Comenzamos apagando la VM. Antes, si está muy sobrecargada, la forzamos a detenerse, ej: lxc stop VM-con-Lubuntu --force
- también podemos entrar lxc shell y apagarla con poweroff

- En la Configuración de la máquina (no la Configuración general, cuidado), vamos a Advanced, Network Devices, y le agregamos una placa de red.

- Para la potencia, vamos a la sección Profiles, y creamos un Profile mas potente



Ya podemos editar la Configuración de la Máquina Virtual, y asignarle el otro Profile.


- Opcional, Avanzado: Cambiar el Window Manager por defecto
Ubuntu viene por defecto con el escritorio Gnome-Shell, una versión reducida de Gnome. Este Window Manager viene pre instalado en la versión Desktop de Ubuntu, bajo una colección de paquetes, llamados genéricamente ubuntu-desktop.
Y aunque es muy bueno, muy completo, y parecido a Mac/OS, no es el único. Hay otros mas parecidos a Windows o mas livianos.
Otros "sabores" de Ubuntu son
- Ubuntu Server (solo terminal)
- Ubuntu Gnome
- Kubuntu (con escritorio KDE, un poco más pesado, alias "Plasma")
- Ubuntu Mate (con Mate Desktop, liviano)
- Xubuntu (XFCE, mi preferido, liviano)
- Y el que nos atañe aquí, el super liviano LXDE. En la comunidad de Ubuntu, se lo ha portado como Lubuntu.
De hecho, se pueden tener todos esos escritorios al mismo tiempo, y cambiar entre ellos en el momento del login gráfico ("Session Manager") cuando botea la VM. Solo hay que instalar los paquetes kubuntu-desktop, mate-desktop, xubuntu-desktop, lubuntu-desktop, etc, y quedarse con el que mas le guste.
A partir de ahora, si tenemos miedo de romper algo, podemos ir a la sección de Snapshots y tomar una foto de este momento, para volver atrás en el futuro e intentarlo de nuevo.

Ahora sí: para quitar gnome-shell y poner en su lugar, por ejemplo LXDE
$ lxc shell VM-con-Lubuntu
root@VM-con-Lubuntu:~# apt-get remove gnome-shell
root@VM-con-Lubuntu:~# apt-get autoremove
root@VM-con-Lubuntu:~# apt-get install lubuntu-desktop
Cuando termine, apague la VM
root@VM-con-Lubuntu:~# poweroff
Así es como debería verse tras encender nuevamente la VM: LXDE con un escritorio limpio, parecido a Windows, y muy rápido.

Si queremos una lista de todas las colecciones de paquetes para Window Manager, podemos simplemente instalar tasksel y escoger desde allí
$ lxc shell VM-con-Lubuntu
root@VM-con-Lubuntu:~# apt-get update && apt-get install tasksel
root@VM-con-Lubuntu:~# tasksel

Dudas, a [email protected] - https://about.me/elbunker