Header Ads

Cockpit + virt-manager

Hoy abordaremos Cockpit, una interfaz o panel web para administrar servidores Linux, donde podemos ver registros del sistema, actualización e instalación, aplicaciones, redes, almacenamiento, servicios, cuentas, diagnóstico, terminal-shell, etc., etc., etc. En resumen, una auténtica navaja suiza y todo desde el navegador.
Para instalarlo (en Ubuntu 22.04/24.04):
sudo apt install cockpit
En dependencia de su sistema, la aplicación mostrará paquetes adicionales para su instalación. Se recomienda instalarlos. Para mayor información, consulte Aplicaciones
sudo apt install cockpit cockpit-storaged cockpit-networkmanager cockpit-packagekit cockpit-machines cockpit-sosreport virt-viewer
sudo usermod -aG libvirt-qemu $USER
Para iniciarlo y habilitarlo en el inicio del sistema:
sudo systemctl start cockpit cockpit.socket
sudo systemctl enable --now cockpit cockpit.socket 
Cockpit ofrece una interfaz web amigable para administrar servidores, e incluye la creación y manejo de máquinas virtuales a través del módulo cockpit-machines, que se integra con QEMU/KVM. Pero, aunque Cockpit permite iniciar y visualizar máquinas virtuales desde el navegador, esta visualización depende del paquete virt-viewer, que incluye la herramienta remote-viewer, (del cual hablaremos más adelante) y que es muy limitada.
Por tanto, se recomienda instalar los paquetes de QEMU/KVM (Cockpit y sus módulos relacionados), ya que incluye virt-manager (Virtual Machine Manager), una GUI más avanzada para crear, configurar y administrar VMs de forma local, editar el hardware virtual, gestionar snapshots y controlar múltiples VMs desde una sola interfaz.
Si prefiere esta integración, ejecute este bash ( sudo chmod +x cockpit.sh && sudo ./cockpit.sh):
#!/bin/bash
# LOCAL USER
local_user=$(
    who | grep -m 1 '(:0)' | awk '{print $1}' || 
    who | head -1 | awk '{print $1}'
)
# Web Admin + Virtualization: Cockpit + QEMU/KVM
# Virtualization Tools
apt install -y qemu-kvm virt-manager virtinst libvirt-clients libvirt-daemon-system virtiofsd qemu-system qemu-guest-agent
usermod -aG kvm "$local_user"
usermod -aG libvirt "$local_user"
systemctl enable --now libvirtd
# Virtual Tools
apt install -y bridge-utils libguestfs-tools ovmf
# Cockpit
apt install -y cockpit cockpit-storaged cockpit-networkmanager cockpit-packagekit cockpit-machines cockpit-sosreport virt-viewer
systemctl enable --now cockpit cockpit.socket
echo "Cockpit Access: http://localhost:9090"
Es importante que abra el puerto en el firewall:
sudo ufw allow 9090
El puerto por defecto es 9090. Verifique que esté libre:
sudo lsof -i -P -n | grep 9090
Si está en uso, puede cambiarlo, creando el siguiente archivo:
sudo mkdir -p /etc/systemd/system/cockpit.socket.d
sudo touch /etc/systemd/system/cockpit.socket.d/listen.conf
Lo edita con el siguiente contenido (por ejemplo, cambiado de 9090 a 9191):
[Socket]
ListenStream=
ListenStream=9191
FreeBind=yes
Opcional: Puede agregar la IP:Puerto del equipo. Ejemplo:
ListenStream=192.168.0.10:9191
Guarde los cambios y reinicie:
Nota: El comando restart en ocasiones falla, por tanto, se recomienda usar stop/start
sudo systemctl daemon-reload
sudo systemctl stop cockpit cockpit.socket
sudo systemctl start cockpit cockpit.socket
Nota: Para mayor información, consulte Listen
Ahora puede acceder a la interface de cockpit por el navegador con el siguiente enlace  https://localhost:9090 (o el puerto que haya elegido). 
Lo primero que debe hacer es habilitar el acceso administrativo una vez esté dentro de la aplicación:
acceso administrativo
En este punto, es posible que comiencen a aparecer mensajes en syslog como este (bug 14896):
error cockpit-tls: gnutls_handshake failed /var/log/syslog
Y hasta tanto corrijan el bug, dos varias maneras de evitarlos:
- Acceder por http ( http://localhost:9090) en lugar de https
- Instalar tus propios certificados
VMs
Como mencionamos, cockpit trabaja con QEMU libvirt y virtualización KVM (archivos .qcow2), que soporta VMs creadas en VirtualBox en formato .vdi siendo una excelente alternativa phpVirtualBox, que se quedó sin soporte hace algunos años, aunque hay una actualización externa al proyecto y cualquier otro tipo de imagen compatible con QEMU (ver lista AQUÍ). Para hacerlo, solo tiene que importar los discos virtuales en la sección "Import VM (importar una MV)".
En Contra
- Cockpit no soporta Spice en el navegador (solo consola VNC; asumimos que por razones de compatibilidad web), entonces las VMs creadas por virt-manager no se podrán ver corriendo en el navegador. Entonces, si desea ver su VM ejecutándose en el navegador, sí o sí deberá crearla en Cockpit. Tenga en cuenta que si hace esto, Cockpit por defecto accederá a su visualización con la consola VNC. Y a pesar de que puedes convertir Spice en VNC desde la interfaz web, esta consola VNC de cockpit es bastante limitada (no permite redimensionar los marcos, no tiene soporte para copiar y pegar, interfaz menos fluida, prblemas con el audio, redirección usb, carpetas compartidas, etc., etc.). Por tanto, se recomienda usar un programa externo como virt-manager o remote-viewer:
remote-viewer spice://[::1]:5901
# o
remote-viewer spice://localhost:5901
Instalación de Ubuntu: remote-viewer spice://localhost:5901
Notas:
- virt-manager permite cambiar la VM a VNC pero genera muchos errores de tipo spicevmc, por tanto no se recomienda.
- No olvide editar el archivo de configuración y descomentar (puede cambiar 0.0.0.0 por 127.0.0.1):
sudo nano /etc/libvirt/qemu.conf
vnc_listen = "0.0.0.0"
spice_listen = "0.0.0.0"
sudo systemctl restart libvirtd
sudo systemctl restart cockpit
- Puede usar virt-manager redimensionar la VM:
Auto Redimensionar la VM
Cockpit Selector
Al crear una VM, hay dos opciones:
Debe elegir entre "system" o "user session"
Para tener una idea de para qué sirve cada una, observemos esta tabla:
Tabla comparativa entre system y user session
Así que debe elegir para qué quiere la VM. Y un detalle importante es que en system el disco virtual .qcow2 se crea con permisos root y en user session no, además que los path por defecto son diferentes. Para el caso de virt-manager solo crea discos virtuales con permisos root.
Entonces, si no quiere trabajar con la opción default que ofrece cockpit y quiere guardar el disco virtual en un path específico, deberá crear un nuevo grupo de almacenamiento y dentro el nuevo disco virtual para usarlo con tu nueva VM, pero se recomienda desactivar default, ya que si no cockpit usará la ruta predeterminada segun el tipo de selección que realizó (ver tabla anterior). 
Pero hay otro problema. Un disco virtual creado por defecto mediante Cockpit o virt-manager es técnicamente sparse (disperso), ya que internamente almacena solo los bloques usados y no todo el espacio asignado. Sin embargo, durante la creación, incluso si no se activa la opción de “preasignar espacio”, estas interfaces gráficas no siempre trasladan correctamente esa configuración al sistema subyacente (libvirt y qemu-img). Esto genera un archivo que incluye bloques preasignados o metadata, lo que contradice la intención de un disco verdaderamente dinámico. El problema se manifiesta al intentar copiar dicho archivo a otra ubicación: el sistema de archivos, al no reconocer ni preservar la dispersión (sparsity) de manera automática, copia también los bloques vacíos o preasignados. Así, aunque el disco solo tenga 21 GB de datos reales, si fue creado con un tamaño lógico de 80 GB, la copia ocupará esos 80 GB completos. Esto no sucede con discos virtuales creados por VirtualBox, que sí mantienen la dispersión efectiva durante la copia.
La mejor solución es crear el disco virtual por línea de comandos (puede cambiar "preallocation=off" a "on" para conservar el tamaño completo establecido en su creación). Ejemplo:
# Para crear:
qemu-img create -f qcow2 -o preallocation=off /path_to/disk.qcow2 20G
# Para convertir:
qemu-img convert -f qcow2 -O qcow2 -o preallocation=off /path_to/disk.qcow2 /path_to/newdisk.qcow2
Una vez creada la VM, tanto en cockpit como en virt-manager debe decidir sobre lo siguiente:
- BIOS vs UEFI. Debe elegir con cuál va a trabajar. Por defecto ambos eligen BIOS.
BIOS vs UEFI en virt-manager
- Si usa un SSD, agregue a la configuración de su disco virtual el parámetro discard="unmap". Ejemplo:
<disk type="file" device="disk">
  <driver name="qemu" type="qcow2" discard="unmap"/>
  <source file="/path_to/w10.qcow2" index="3"/>
  <backingStore/>
  <target dev="vda" bus="virtio"/>
  <boot order="1"/>
  <alias name="virtio-disk0"/>
  <address type="pci" domain="0x0000" bus="0x04" slot="0x00" function="0x0"/>
</disk>
- Tenga en cuenta que, en lugar de SATA puede elegir bus="virtio", que tiene más integración con entornos virtualizados. Vea la siguiente tabla comparativa:
SATA vs Virtio
Pero, no reconocerá el disco duro virtual en el momento de la instalación de Windows, por tanto deberá descargar el driver virtio-win.iso  AQUI, montar la ISO, e instalarlos.
Añadiendo driver virtio a Win 10
- Y, por último, si su máquina invitada es Windows, descargar e instalar en el invitado virtio-win-guest-tools.exe, que viene siendo como el Virtualbox Guest Additions o el VMware Tools.
Y si es Linux:
sudo apt install qemu-guest-agent
Y si estás usando Cockpit en un servidor VMware:
sudo apt install open-vm-tools
Compartir Carpetas con Host
Si su invitado es Windows, Virtio-FS no es compatible con este SO, pero, a pesar de esto, aún podrá compartir carpetas del host. Hay dos métodos, pero no podrá hacerlo con cockpit sino con virt-manager:
Por Samba: Cree la carpeta en el host y compartala vía Samba
Por WinFSP: 
- Habilite la "memoria compartida" en virt-manager.
Habilitando shared memory
- Haga clic en "Agregar hardware" en la parte inferior. Seleccione "filesystem" en el panel izquierdo de la ventana "Agregar nuevo hardware". Luego, seleccione "Driver=virtiofs" en la pestaña de detalles. Haga clic en "Examinar > Examinar local" y seleccione la ruta del host de su sistema Linux. En la ruta de destino, indique el nombre de la carpeta a compartir.
Compartiendo carpeta de host en virt-manager
- Descargue e instale las aplicaciones spice-guest-toolvirtio-win-guest-tools y WinFSP en la VM de Windows (en virtualbox solo necesitamos uno: Guest Additions). Vea la tabla comparativa:
comparativa spice-guest-tool, virtio-win-guest-tools, WinFSP
- En "ejecutar" escriba services.msc y pulse Enter. En la lista de servicios encontrará uno llamado VirtIO-FS Service. Doble clic, selecciona "automático" para que inicie con el sistema y reinicie la VM.
- Después del reiniciar, abra el Explorador de Windows y debería ver la carpeta compartida en Z.
O también puede usar nuestro script vtools que se encarga de hacer este proceso.
Para el invitado Linux, puede hacerlo por Samba, o seleccione la carpeta a compartir en la interfaz gráfica de la máquina virtual, sección al final "Directorios compartidos" y luego, en el invitado, ejecute (cambie los nombres de las carpetas "my_shared_folder" del invitado y "my_host_folder" del host):
sudo apt install virtiofsd libvirt-daemon-system qemu-system
mkdir my_shared_folder
sudo mount -t virtiofs my_host_folder ~/my_shared_folder
Otra característica muy interesante, que solo se muestra en virt-manager, es la opción "Compartibles (Shareable)", que se activa en nuestro disco duro virtual para que varias máquinas virtuales lo usen simultáneamente. Muy útil en entornos empresariales complejos, como clústeres de alta disponibilidad HA (Oracle RAC, Microsoft SQL Server Always On, o PostgreSQL con almacenamiento compartido, etc.), Clustered File Systems (GFS2, OCFS2), almacenamiento compartido en backend SAN o iSCSI, etc.
Nota Importante: 
Respecto al uso de discos SSD en máquinas virtuales. Al crear la VM, se recomienda seleccionar el bus SCSI, ya que de lo contrario Windows podría identificar el disco como “Unrecognized” o “Unspecified”. No obstante, si estás utilizando un controlador Red Hat VirtIO SCSI Disk Device y sabes que se trata de un SSD, puedes forzar el reconocimiento y activar el soporte TRIM manualmente con el siguiente comando:
 Optimize-Volume -DriveLetter C -ReTrim -Verbose 
Redes Virtuales
Otra característica de virt-manager, que no tiene cockpit, es que podemos crear redes virtuales. Pulsamos en QEMU/KVM, luego en el menú Editar > Detalles de conexión y se abrirá una ventana. Vamos a la pestaña "Redes Virtuales" y ahí podemos crear nuestra red virtual en modo NAT, Enrutada, Abierta, Isolado o POOL-SR-IOV (Single Root I/O Virtualization), definir IPv4, DHCP, etc.
Creación de una Red Virtual
Bonding
Cockit también permite "agregación de enlaces" (bonding) en 7 modos (no confundir con "balanceo de carga"). Puede consultarlos los modos AQUÍ.
Bond
Aclaratoria: La agregación de enlaces (link aggregation) y el balanceo de carga (load balancing) son dos técnicas relacionadas, pero distintas, que se utilizan para mejorar la eficiencia y la disponibilidad de las redes. A continuación una tabla comparativa:
Aspecto Link Aggregation (LA) Trunking (VLAN) Balanceo de Carga
Propósito principal Aumentar capacidad y redundancia entre dispositivos Transportar múltiples VLANs por un mismo enlace físico Distribuir tráfico entre múltiples rutas/redes
Número de enlaces físicos Múltiples (2 o más) Normalmente, uno (aunque puede ir sobre LA) Múltiples conexiones WAN o rutas
Capa OSI Capa 2 (Enlace de datos) Capa 2 (Enlace de datos) Capa 3 (Red) o superior (L4/L7)
Unidad de trabajo Flujos individuales distribuidos entre interfaces físicas Etiquetado de tramas para transportar varias VLANs Flujos distribuidos según reglas (IP, puerto, tráfico, etc.)
Tecnología típica LACP, EtherChannel, NIC bonding IEEE 802.1Q (VLAN tagging) Policy-based routing, round robin, weighted routing, SD-WAN
Requiere configuración en ambos extremos No necesariamente (puede ser unidireccional en routers/firewalls)
Ventaja principal Aumenta ancho de banda en LAN y añade tolerancia a fallos Segmentación lógica de red sin cables adicionales Aprovecha múltiples conexiones a Internet o redes
Casos de uso comunes Switch ↔ Switch, Switch ↔ Servidor, NAS con múltiples NICs Switch ↔ Switch, Switch ↔ Router o servidor con VLANs Routers con varias WAN, servidores con múltiples interfaces externas
¿Suma anchos de banda para un solo flujo? ❌ No (a menos que se use MPTCP u otra técnica avanzada) ❌ No (es segmentación lógica, no aumento de ancho de banda) ❌ No (a menos que se use bonding o reconstrucción de sesión)
¿Puede coexistir con otros? ✅ Sí, puede combinarse con Trunking (trunk sobre LA) ✅ Sí, puede viajar sobre enlaces agregados (trunk sobre LA) ✅ Sí, pero debe manejarse cuidadosamente para evitar rutas conflictivas
Tenga en cuenta que si va a usar agregación de enlaces ("añadiendo" o "aggregate"), el objetivo es unir dos interfaces físicas Ethernet en una interfaz virtual para aumentar el ancho de banda o la redundancia. Para ello, debe contar con un switch compatible con el protocolo IEEE 802.3ad (LACP) y los puertos que elija deben ser secuenciales (1, 2, etc...), en dependencia de la cantidad de NICs que tenga y quiera unir en una interfaz virtual. Además, es importante comprender estos conceptos:
- LAG (Link Aggregation Group): conjunto de enlaces físicos que funcionan como un enlace lógico único.
- LACP (Link Aggregation Control Protocol): protocolo estándar que automatiza la creación y gestión de LAGs, incluyendo la negociación y el monitoreo del estado de los enlaces.
En Cockpit, deberá elegir el modo 802.3ad para la agregación y puede activar la monitorización miimon (MII) para supervisar el estado de los enlaces, aunque LACP realiza monitoreo propio. 
Por razones de compatibilidad, se recomienda usar la MAC de la primera interfaz física que forma parte del grupo.
Si su objetivo es balancear la carga de servicios o aplicaciones en lugar de unir interfaces físicas, recomendamos utilizar soluciones específicas de balanceo de carga a nivel de aplicación, como HAProxy, o balanceadores de carga por hardware, que son más efectivos para ese propósito.
Cockpit también se puede realizar monitoreo del canal:
Canal
Cockpit usa un programa externo para firewall llamado firewalld, pero se alargaría demasiado el tema y en lo personal preferimos y recomendamos iptables.
En fin; tiene un montón de cosas más, muy relevantes para los sysadmin. Cualquier duda consulten la documentación oficial. Esperamos que la disfruten.

Puede descargar nuestro script de instalación para VMs Windows: Spice + Virtio + WinFsp as a Service (QEMU/KVM) en Vault/Scripts
Con la tecnología de Blogger.