Saltar al contenido principal

Importando Home Assistant como Máquina virtual en Incus

miércoles, 8 de octubre de 2025
Tiempo de lectura 5 minutos

Soy fan de Home Assistant desde ahce tiempo. Aunque aún no cuento con demasiados dispositivos de domótica, lo uso para, entre otras cosas, automatizar partes de mi día a día que dependen de su actividad con sensores, automatizaciones, y alguna integración con dispositivos que tengo en casa.

Como ya tengo un equipo que hace las veces de servidor y que tiene, por lo general, bastantes recursos para poder correr Home Assistant, he optado por utilizar la versión de Home Asistant OS (el sistema operativo diseñado para este software) dentro de una máquina virtual en mi servidor.

Actualmente uso Incus (fork de LXD), del que posiblemente hable en otra ocasión. Así que aquí escribiré un poco sobre cómo importar correctamente la última versión de la imagen del sistema operativo para Home assistant a Incus, y cómo desplegar la máquina virtual. Para esto, naturalmente, se debe presuponer que ya se tiene Incus correctamente instalado y configurado.

¿qué es Home Assistant?

Home Assistant es esencialmente un ecosistema de código abierto diseñado para permitir el total control de una casa inteligente. La idea detrás del proyecto es devolver al usuario el control de sus dispositivos de domótica, permitiendo, en la mayoría de ellos, el completo control e integración incluso entre diferentes familias de dispositivos que no son compatibles entre sí de manera nativa.

¿Qué es Incus?

En otras entradas de este blog ya he llegado a escribir sobre Libvirt (cómo crear máquinas virtuales, gestionarlas, configurar el acceso vía IPv6 entre otras cosas). Incus es, a grandes rasgos, un proyecto que nació bajo una idea un poco diferente (crear contenedores de sistemas Linux que pudieran ejecutarse proporcionando un sistema operativo completo, pero compartiendo el Kernel del sistema anfitrión) pero que poco a poco fue ganando capacidades para gestionar máquinas virtuales usando qemu por debajo, justo como lo hace Libvirt. Incus es en realidad un fork de otro proyecto, llamado LXD, creado por Canonical (empresa detrás de ubuntu). La idea de Incus es permitir la gestión de configuraciones de contenedores de sistemas, OCI (como imágenes docker) y máquinas virtuales completas con la misma configuración y sintaxis.

eligiendo variante

En mi caso la elección es sencilla: he elegido la variante de sistema operativo completo de las múltiples opciones disponibles debido principalmente a que en esta variante todo funciona como se ha contemplado. Se pueden instalar complementos vía contenedores docker de forma automática, lleva algunos servicios de sistema destinados a supervisar y mantener en funcionamiento y actualizado el sistema, y en general se hizo para que no se deba dedicar tiempo a actualizar el sistema manualmente o a meter mano, si no se sabe lo que se hace. Además de esta ´versión, Home Assistant se puede instalar vía Docker (aunque no se pueden instalar complementos de forma sencilla), o directamente en un sistema Debian; pero todas estas opciones adicionales se consideran avanzadas.

Importando la imagen

Ahora bien, para poder crear una imagen de Home Assistant dentro de una instancia Incus, lo primero que se debe hacer es importar la imagen a nuestra instancia. El proyecto Home Assistant ya ofrece varias imágenes listas para grabar a diferentes sistemas operativos y en distintas formas. Todas ellas pueden encontrarse en la página de releases en GitHub del sistema operativo. Como usaremos imágenes de disco, debemos escoger las imágenes qcow2. En el momento de escribir esto, la versión más reciente del sistema operativo es la versión 16.2. Vamos a descargarla dentro de nuestra instancia con algo parecido a esto:

mkdir homeassistant
cd homeassistant
wget https://github.com/home-assistant/operating-system/releases/download/16.2/haos_ova-16.2.qcow2.xz

Una vez descargada, se desempaqueta de la siguiente forma:

xz -d haos_ova-16.2.qcow2.xz

Esto nos dejará con un archivo nuevo que se llama justo igual al descargado, pero terminado en .qcow2. Esta es la imagen del sistema operativo, que contiene todo lo necesario para poder iniciar el sistema. Sin embargo, antes de poder ahcerlo, necesitamos crear un fichero con metadatos para importar la imagen a la instancia. Se hace de esta forma:

cat << EOF > metadata.yaml
architecture: x86_64
creation_date: 1719527456
properties:
  description: Home Assistant image
  os: Debian
  release: trixie 13.0
EOF

Esto escribirá el archivo con la información mínima necesaria para que Incus sepa cómo debe tratar la imagen de disco que acompaña a esta información.

Después, se debe empaquetar también así:

tar -cvzf metadata.tar.gz metadata.yaml

Finalmente, se puede importar la imagen y el metadata empaquetado:

incus image import metadata.tar.gz haos_ova-16.2.qcow2 --alias haos

Una vez hecho esto, la imagen ha sido importada. Esto a grandes rasgos quiere decir que ya podemos crear máquinas virtuales a partir de esta imagen, que será la plantilla.

Creando máquina virtual

Crear una máquina virtual de home assistant es bastante sencillo. Simplemente se define la VM:

incus launch haos ha --vm -c security.secureboot=false -d root,size=40GiB

Se detiene inmediatamente para asignar mayores recursos:

incus stop ha --force
incus config set ha limits.cpu=4 limits.memory=4GiB

(el sistema operativo de Home Assistant puede funcionar con la mitad de estos recursos, pero a medida que se requieran complementos e integraciones se puede hechar en falta más memoria o más tiempo de CPU).

Ahora sí, se inicia el sistema:

incus start ha

A partir de aquí, se ha iniciado Home Assistant de manera normal. La web UI del proyecto se puede encontrar bajo el puerto 8123 de la IP que ha sido asignada a la VM. También puedes buscarla dentro de los dispositivos conectados al router, ya que por defecto publica su nombre.