Usando Fedora Atomic con Home Assistant

El Hackerspace Eastermundigen es a menudo mi patio de recreo en el mundo real para temas relacionados con Home Assistant que a veces pertenecen más al área de automatización industrial que a un hogar. Además, me da acceso a dispositivos que no tengo, como impresoras 3D, cortadoras láser, regletas conectadas y similares. En el pasado, la instancia local de Home Assistant se ejecutaba en un viejo CubieBoard2 con Fedora ARM. Era uno de varios sistemas que funcionaban las 24 horas del día, los 7 días de la semana. Para reducir los costos de electricidad decidimos consolidar los sistemas físicos a solo dos. Uno para almacenamiento y otro para todos los demás servicios.

Esta publicación de blog contiene los detalles de la configuración. También pueden ser útiles para otros. Nuestro nuevo sistema ejecuta Fedora 27 de Project Atomic. No cubriremos la configuración de un host Atomic y los detalles del Proyecto Atomic en sí. Para obtener más detalles, eche un vistazo a la publicación del blog de Benjamin Affolter, que también cubre algunos de los conceptos básicos.

El proceso de instalación de un host Atomic es prácticamente el mismo que para Fedora Server o Fedora Workstation. Cree un dispositivo Live USB o use PXE para iniciar la instalación. Por ejemplo, inicie iPXE y cargue en cadena netboot.yxz con chain --autofree https://boot.netboot.xyz. Entonces deja anaconda guiarlo a través de la configuración.

Después del primer arranque, copie las claves SSH, use visudo para agregar usuarios y realizar los pasos habituales que realiza para un nuevo sistema. Solo permitimos SSH con claves, estamos imponiendo el uso de sudo, necesita una configuración de red especial y un par de cosas más. Pero esos ajustes de configuración son irrelevantes para una instalación en una red local.

Si el sistema está en funcionamiento, compruebe si está utilizando la última versión.

€ sudo atomic host status State: idle; auto updates disabled Deployments: ● ostree://fedora-atomic:fedora/27/x86_64/atomic-host                    Version: 27.100 (2018-03-13 17:19:44)                     Commit: 326f62b93a5cc836c97d31e73a71b6b6b6955c0f225f7651b52a693718e6aa91               GPGSignature: Valid signature by 860E19B0AFA800A1751881A6F55E7430F5282EE4 

El lanzamiento es 27.100. La última es 27.105. Entonces, actualicemos el host y reiniciémoslo.

sudo atomic host upgrade sudo systemctl reboot 

También puede ver que Docker ya se está ejecutando. No necesita instalación.

€ sudo systemctl status docker ● docker.service - Docker Application Container Engine    Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)    Active: active (running) since Thu 2018-03-28 15:44:04 CEST; 35min ago ... 

Además, cubriremos cómo funciona para Home Assistant y Mosquitto. Para una configuración pequeña, usar kubernetes parece un poco excesivo. Por lo tanto, decidimos apegarnos a systemd.

En lugar de docker podemos usar la herramienta de línea de comandos atomic para realizar muchas tareas. Descarga las imágenes de los contenedores. Estamos extrayendo las imágenes de Docker Hub, por lo que necesitamos agregar el registro para usar.

sudo atomic install docker.io/​homeassistant/home-assistant sudo atomic install docker.io/eclipse-mosquitto 

Ambos contenedores necesitan directorios adicionales para el almacenamiento persistente.

sudo mkdir -p /opt/home-assistant sudo mkdir -p /opt/mosquitto/{config,data,log} 

Necesitamos una copia de mosquitto.conf para ejecutar Mosquitto más tarde:

sudo curl -o /opt/mosquitto/config/mosquitto.conf    https://raw.githubusercontent.com/eclipse/mosquitto/master/mosquitto.conf 

Para manejar los contenedores creamos archivos de unidades de servicio para el Home Assistant y el contenedor Mosquitto. Para Home Assistant y Mosquitto, el archivo puede verse como el ejemplo a continuación. Más detalles sobre el ExecStart La línea se puede encontrar en la documentación sobre una configuración de Docker. Para asistente de hogar

€ su # cat <<'EOF' >> /etc/systemd/system/home-assistant.service [Unit] Description=Home Assistant Requires=docker.service Wants=docker.service After=docker.service   [Service] Restart=on-failure RestartSec=10 ExecStart=/usr/bin/docker run --rm --name %p -v /opt/home-assistant:/config:Z -v /etc/localtime:/etc/localtime:ro --network host homeassistant/home-assistant ExecStop=-/usr/bin/docker stop -t 30 %p   [Install] WantedBy=multi-user.target EOF 

y para Mosquito.

# cat <<'EOF' >> /etc/systemd/system/mosquitto.service [Unit] Description=Mosquitto MQTT docker container Requires=docker.service Wants=docker.service After=docker.service  [Service] Restart=on-failure RestartSec=10 ExecStart=/usr/bin/docker run --name %p -v mosquitto.conf:/opt/mosquitto/config/mosquitto.conf -v /opt/mosquitto/data:/opt/mosquitto/data -v /opt/mosquitto/log:/mosquitto/log -p 1883:1883 -p 9001:9001 eclipse-mosquitto ExecStop=/usr/bin/docker stop -t 2 %p ExecStopPost=/usr/bin/docker rm -f %p  [Install] WantedBy=multi-user.target EOF 

Salir para no estar más root.

Recargar systemd para informarle de las nuevas configuraciones.

sudo systemctl daemon-reload 

Ahora, ambos contenedores pueden ser controlados por systemctl.

sudo systemctl enable home-assistant.service --now sudo systemctl enable mosquitto.service --now 

Comprobar con € sudo systemctl status [name].service si hay un error o los servicios se están ejecutando.

El despliegue de NGINX como servidor web para contenido estático, grafana e InfluxBD funciona de la misma forma que para Home Assistant y Mosquitto. Para obtener una configuración de traefik adecuada, se requiere lectura y trabajo adicionales.