jueves, 18 de junio de 2026

VirtualBox y libvirt/virt-manager: dos enfoques para virtualizar en Debian

Durante un tiempo usé libvirt con virt-manager como mi solución principal de virtualización en Debian. La razón era simple: VirtualBox y KVM no podían coexistir sin intervención manual, y libvirt resolvía ese problema de raíz porque es KVM — no compite con él, lo usa directamente. Sin blacklist, sin módulos que descargar, sin elegir entre uno y otro cada vez.

Hoy la situación cambió con VirtualBox 7.2.2 y kernel 6.16+. Eso me llevó a replantear qué herramienta usar y para qué.

libvirt + virt-manager

libvirt no es un hipervisor sino una capa de gestión sobre KVM. Las VMs corren sin capas intermedias, con acceso nativo al hardware de virtualización. En un equipo como el mío — HP ProBook 4440s con i3-2370M y 16 GB de RAM — esa diferencia se nota en CPU y disco. La gestión de redes es más robusta: bridge real, NAT con control fino, redes aisladas. La contra es la curva de entrada: más pasos, menos documentación accesible para principiantes.

VirtualBox

Hipervisor tipo 2: corre como aplicación sobre el host, con el costo de rendimiento que eso implica. La ganancia es portabilidad — la misma VM en formato OVA abre en Windows, macOS o Linux sin cambios. La interfaz es más inmediata y las Guest Additions (resolución automática, portapapeles compartido, carpetas compartidas) se instalan desde un menú. El conflicto histórico con KVM quedó resuelto desde la 7.2.2 en adelante con kernel 6.16+.

Comparativa directa

Rendimiento: libvirt/KVM gana. Sin capa de emulación adicional, las VMs responden mejor, especialmente en hardware limitado.

Facilidad de uso: VirtualBox gana para usuarios nuevos. Interfaz más intuitiva y documentación más abundante en español.

Portabilidad de imágenes: VirtualBox gana con OVA. Con libvirt se puede convertir qcow2, pero no es transparente para un estudiante.

Integración con Linux: libvirt gana. Está pensado para Linux y se comporta como Linux.

Coexistencia con KVM: Antes VirtualBox perdía sin discusión. Hoy, con 7.2.2+ y kernel 6.16+, ambos corren al mismo tiempo sin conflicto.

Uso en aula: VirtualBox gana — no por rendimiento sino porque los estudiantes pueden recibir una imagen OVA e importarla en tres clics desde cualquier sistema operativo.

¿Cuál usar?

No son excluyentes. Uso libvirt/virt-manager para mis VMs de trabajo donde el rendimiento importa, y VirtualBox para preparar y distribuir imágenes a estudiantes. Antes esa combinación obligaba a elegir uno por sesión. Hoy en Debian sid con kernel 7.0.x ambos conviven sin tocar nada, y eso cambió completamente la forma en que trabajo.


Posts relacionados: Instalar VirtualBox en Debian 13Adaptación de redes y KVM en UbuntuEl blacklist que ya no necesitas

Prólogo mejorado con Inteligencia Artificial basado en el contexto humano.

VirtualBox y KVM en Debian sid: el blacklist que ya no necesitas

En septiembre de 2025 documenté cómo evitar el conflicto entre VirtualBox y KVM creando el archivo /etc/modprobe.d/blacklist-kvm.conf para bloquear los módulos kvm y kvm_intel. En ese momento era la solución correcta y necesaria. Hoy, esa configuración no solo es innecesaria — si la tienes aplicada, puede ser el motivo por el que VirtualBox no te arranca ninguna VM.

¿Qué cambió?

Dos cosas ocurrieron en paralelo que juntas resolvieron el problema de raíz:

VirtualBox 7.2.2 introdujo soporte para usar las API de KVM al momento de adquirir y liberar el acceso a VT-x en el host. En lugar de intentar tomar el control exclusivo del hardware de virtualización (lo que generaba el conflicto), ahora VirtualBox negocia ese acceso directamente con el módulo kvm_intel a nivel de kernel, sin pisarlo ni necesitar que esté fuera de juego.

El kernel Linux 7.0 es el otro componente: el arreglo de VirtualBox 7.2.2 requiere kernel 6.16 o superior para activarse. Con versiones anteriores del kernel, el comportamiento antiguo (y el conflicto) seguía presente.

En Debian sid, que actualmente usa el kernel 7.0.x, ambas condiciones se cumplen desde los repositorios oficiales sin tocar nada extra.

Lo que hay que hacer ahora

Si tienes el archivo de blacklist creado en el post anterior, bórralo:

sudo rm /etc/modprobe.d/blacklist-kvm.conf

Y reconstruye el initramfs para que el cambio tome efecto en el próximo arranque:

sudo update-initramfs -u

Verifica que los módulos de KVM estén cargados (deben estarlo para que VirtualBox funcione correctamente):

lsmod | grep kvm

Deberías ver kvm_intel y kvm en la lista. Si no aparecen, cárgalos manualmente:

sudo modprobe kvm kvm_intel

Instalar VirtualBox en Debian sid

Con el blacklist eliminado, la instalación desde los repositorios oficiales de Debian es directa. Primero los headers del kernel en uso:

sudo apt install linux-headers-$(uname -r)

Luego VirtualBox y sus componentes:

sudo apt install virtualbox virtualbox-qt virtualbox-dkms virtualbox-guest-additions-iso

Agrega tu usuario al grupo correspondiente:

sudo usermod -aG vboxusers $USER

Y para confirmar que el módulo compiló correctamente contra tu kernel:

dkms status

Liberar rangos de red

Esto no cambia respecto al post anterior y sigue siendo necesario. Crea la carpeta si no existe:

sudo mkdir -p /etc/vbox

Y dentro de ella el archivo networks.conf con el siguiente contenido:

* 0.0.0.0/0 ::/0

Este comodín permite cualquier rango IPv4 e IPv6 sin restricciones en las redes virtuales de VirtualBox.

La prueba real

La forma más sencilla de confirmar que la coexistencia funciona es dejar corriendo una VM de VirtualBox y verificar con lsmod que kvm_intel sigue cargado al mismo tiempo. Si ambos conviven sin errores, el conflicto que documenté en 2025 ya es historia.


Actualización de la entrada publicada en septiembre de 2025. El procedimiento anterior era correcto para el contexto de ese momento (kernel 6.x, VirtualBox pre-7.2.2). Este nuevo post documenta el comportamiento actual en Debian sid con kernel 7.0.x y VirtualBox desde los repositorios oficiales de Debian.

Prólogo mejorado con Inteligencia Artificial basado en el contexto humano.

domingo, 7 de junio de 2026

Debian

Llevo mucho tiempo usando una laptop HP ProBook 4440s que poco a poco le he ido mejorando hasta donde es posible claro esta pero aun no mejoro el procesador dentro de sus limitaciones, actualmente tiene un i3-2370m que me ha sido muy fiel eso no lo puedo negar.

Le he colocado muchas distribuciones, y tambien otros Windows 10/11 y ha sido bastante responsiva. 

 Actualmente uso Debian, la he estado migrando en sus diferentes versiones y ramas. Actualmente la he llevado a Forky que al momento de escribir esto es la version de pruebas con el Kernel 7.0.x 

 Pense que me daria mas problemas, pero ha migrado bien. Mantengo los repositorios oficiales.

Repositorios extras tengo solo el de Antigravity, OneDrive, Microsoft Edge y Microsoft Produccion para algunos otros programas que actualmente no estoy usando pero pienso aprender.

 Veamos que tal avanza.

Este post no ha sido modificado con AI. 

martes, 12 de mayo de 2026

No sé programar. Y aun así construí mi propio sistema de desarrollo.

Trabajo en redes. Configuro switches, administro servidores, resuelvo problemas de conectividad. El código nunca fue mi mundo y nunca pensé que lo sería.

Entonces llegó Antigravity. No se si mi experiencia sea correcta, pero es mía.


El primer proyecto

Todo empezó con una necesidad simple: generar boletos para un evento. En lugar de buscar una aplicación ya hecha, algo me dijo: ¿y si lo construyo yo?

No sabía PHP. No sabía JavaScript. Lo que sí sabía era exactamente qué quería que hiciera.

Y resulta que eso era suficiente.

Le describí mi idea a Antigravity. Le dije qué información debía tener el boleto, cómo quería que se viera, qué debía pasar al hacer clic. Antigravity escribió el código. Yo lo revisé, le dije qué cambiar, qué faltaba.

En ningún momento escribí una sola línea de código. Y funcionó.


Lo que nadie te dice

Hay una creencia muy extendida: para usar IA en desarrollo necesitas saber programar. Como si fuera una herramienta solo para programadores avanzados que quieren ir más rápido.

Eso es mentira.

Lo que necesitas no es saber código. Es saber pensar. Saber describir problemas. Saber qué quieres que ocurra y qué no. Saber cuándo algo está mal aunque no sepas por qué.

Eso lo sabe cualquier persona que haya resuelto problemas en su vida. En redes llevamos años haciendo exactamente eso.


El momento en que todo cambió

Después del generador de boletos algo se encendió. Empecé a pensar en sistemas. En cómo organizar el trabajo. En cómo pasar de una idea a algo que funciona sin romper lo que ya funciona.

Sin darme cuenta estaba diseñando una arquitectura de desarrollo. Con fases, zonas, reglas y flujos.

Le pregunté a Claude cómo lo hacen los proyectos grandes. Me habló del Kernel Linux, de Debian, de cómo organizan sus ramas de desarrollo, de cómo nunca modifican el código original sino que aplican parches.

Y pensé: eso es exactamente lo que necesito.

No porque sea programador. Sino porque en redes pensamos así. Tienes producción que no puedes tocar. Tienes un entorno de pruebas. Tienes un laboratorio donde experimentas. Nunca llevas algo a producción sin probarlo antes.

El concepto era el mismo. Solo el lenguaje era diferente.


La distinción que cambia todo

Un programador escribe el código.

Un orquestador sabe qué debe hacer el código.

La IA convierte a cualquier persona con conocimiento de dominio en un orquestador. No te da habilidades de programación. Te da un ejecutor que entiende instrucciones en lenguaje natural.

Yo nunca me convertí en programador. Me convertí en alguien que sabe exactamente qué quiere construir y tiene las herramientas para construirlo.


Lo que sí necesitas

No es una lista técnica. Es algo más simple y más difícil al mismo tiempo.

Saber qué quieres construir. No el código, sino el propósito. Qué problema resuelve, para quién, cómo debería sentirse usarlo.

Saber describir lo que ves. Cuando algo no funciona tienes que poder explicarlo en términos de comportamiento, no de código. "Esperaba que pasara esto y pasó aquello."

Confiar en tu conocimiento previo. Mi experiencia en redes me dio más ventaja de lo que pensaba. Entender flujos, entender por qué aislar entornos es importante, todo eso se tradujo directamente.

Paciencia con el proceso. Hubo noches pensando en la arquitectura. La almohada fue parte del equipo.


Para quien está pensando en intentarlo

Si tienes una idea que siempre quisiste construir pero nunca lo hiciste porque no sabes programar, quiero que sepas algo.

El obstáculo no era el código. Era creer que lo necesitabas para empezar.

Empieza describiendo qué quieres que haga tu idea. Qué problema resuelve. Qué debería pasar paso a paso. Qué no debería pasar nunca. Eso es el 80% del trabajo.

El otro 20% es aprender a conversar con la IA. A corregirla cuando se equivoca. A saber cuándo parar y pensar antes de seguir.

No necesitas saber programar. Necesitas saber qué quieres construir.


Escrito por alguien de redes que un día decidió que una idea era suficiente razón para empezar.

 Prólogo mejorado con Inteligencia Artificial basado en el contexto humano. 

jueves, 9 de abril de 2026

Mantener servicios desactivados y llamarlos de manera conjunta en Debian y Ubuntu

En mi entorno de desarrollo local prefiero instalar Apache2 y MariaDB de manera independiente y mantenerlos desactivados por defecto. No utilizo XAMPP o LAMPP completos porque incluyen más componentes de los que necesito, obligan a usar rutas largas para guardar los sitios web y no ofrecen un panel gráfico nativo integrado al sistema. En Debian 13 decidí mantenerlos desactivados, de manera que solo los enciendo cuando realmente los necesito. No instalé vsftpd ni openssh, porque todo lo hago en localhost y no requiero acceso remoto. Por costumbre llamé al servicio conjunto lampp, aunque en realidad solo agrupa Apache2 y MariaDB.

Crear un servicio conjunto en Debian 13

La idea es definir un archivo de unidad en systemd que actúe como agrupador. Así, con un solo comando puedo iniciar o detener ambos servicios.

Archivo /etc/systemd/system/lampp.service:

[Unit]
Description=Servicio conjunto LAMPP (Apache2 + MariaDB)
After=network.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/systemctl start apache2.service mariadb.service
ExecStop=/bin/systemctl stop apache2.service mariadb.service

[Install]
WantedBy=multi-user.target

Luego recargamos systemd:

sudo systemctl daemon-reload

Y ya podemos usar:

sudo systemctl start lampp.service
sudo systemctl stop lampp.service

De esta forma, los servicios permanecen desactivados al inicio, pero se levantan juntos cuando los necesito.

Variante para MySQL en Ubuntu

En Ubuntu, el servidor de base de datos suele instalarse como mysql.service en lugar de mariadb. El archivo sería casi idéntico, solo cambiando el nombre del servicio:

[Unit]
Description=Servicio conjunto LAMPP (Apache2 + MySQL)
After=network.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/systemctl start apache2.service mysql.service
ExecStop=/bin/systemctl stop apache2.service mysql.service

[Install]
WantedBy=multi-user.target

Recargamos systemd:

sudo systemctl daemon-reload

Y lo usamos igual:

sudo systemctl start lampp.service
sudo systemctl stop lampp.service

Conclusión

Mantener los servicios desactivados por defecto ayuda a ahorrar recursos y evita procesos innecesarios en segundo plano. Con un archivo de unidad personalizado podemos agruparlos y manejarlos de manera conjunta, manteniendo la flexibilidad y el control sobre nuestro entorno de desarrollo local.

Prólogo mejorado con Inteligencia Artificial basado en el contexto humano.


VirtualBox y libvirt/virt-manager: dos enfoques para virtualizar en Debian

Durante un tiempo usé libvirt con virt-manager como mi solución principal de virtualización en Debian. La razón era simple: VirtualBox y KV...