Сегодня мы будем устанавливать Home Assistant Supervised на Debian 12 по официальной инструкции. "Шо, опять?" - спросят многие. Да, но просто так устанавливать по инструкции скучно и обязательно столкнемся с проблемами, про которые даже не упоминается в инструкции.

Почему именно Debian? Потому что это рекомендуемая операционная система. Теоретически можно поставить на любую linux систему. Также, в данной статье не будет рассуждений почему Home Assistant Supervised, а не Home Assistant OS. Данная статья не об этом.

План установки Home Assistant Supervised следующий:

  • Установить Debian.

  • Установить зависимости.

  • Установить OS-Agent и Home Assistant.

Устанавливаем Debian.

На момент написания статьи актуальная версия Debian 12.5.0. Скачиваем ISO дистрибутив с официального сайта. Если устанавливаем на ПК, то записываем его на флешку, например через Rufus.

Устанавливаем все по минимуму, обязательно выбираем SSH server. Графическую оболочку и standard system utilites по желанию. Сеть настраиваем по DHCP, статический адрес пока не спешим настраивать.

Когда установка закончилась, в SSH отключаем вход по паролю и записываем публичный ключ в authorized_keys.

Если устанавливаете на виртуальную машину, то на данном этапе крайне желательно сделать снапшот, чтобы лишний раз не переустанавливать с нуля если что-то пойдет не так. Да и в целом, не стесняйтесь делать снапшоты после каждого успешного этапа, это сильно экономит время.

Далее вся установка должна идти от рута. Заходим в рут с помощью команды su - (тире в конце не забудьте). Должен быть запрос пароля рут, который вы вводили при установке системы. После перехода в рут строка приветствия должна быть вида:

root@homeassistant:~#

Установка зависимостей.

Устанавливаем/обновляем необходимые пакеты:

apt update
apt install apparmor bluez cifs-utils curl dbus jq libglib2.0-bin lsb-release network-manager nfs-common systemd-journal-remote systemd-resolved udisks2 wget -y

Далее устанавливаем докер:

curl -fsSL get.docker.com | sh

Установка OS-Agent и Home Assistant.

Скачиваем и устанавливаем OS-Agent. На момент написания статьи актуальная версия 1.6.0:

wget https://github.com/home-assistant/os-agent/releases/download/1.6.0/os-agent_1.6.0_linux_x86_64.deb
dpkg -i os-agent_1.6.0_linux_x86_64.deb

Проверяем его работоспособность:

root@homeassistant:~# gdbus introspect --system --dest io.hass.os --object-path /io/hass/os
node /io/hass/os {
  interface org.freedesktop.DBus.Introspectable {
    methods:
      Introspect(out s out);
    signals:
    properties:
  };
  interface org.freedesktop.DBus.Properties {
    methods:
      Get(in  s interface,
          in  s property,
          out v value);
      GetAll(in  s interface,
             out a{sv} props);
      Set(in  s interface,
          in  s property,
          in  v value);
    signals:
      PropertiesChanged(s interface,
                        a{sv} changed_properties,
                        as invalidates_properties);
    properties:
  };
  interface io.hass.os {
    methods:
    signals:
    properties:
      @org.freedesktop.DBus.Property.EmitsChangedSignal("invalidates")
      readonly s Version = '1.6.0';
      @org.freedesktop.DBus.Property.EmitsChangedSignal("true")
      readwrite b Diagnostics = false;
  };
};

Если нет ошибок, нормально выводятся объекты interface, то все установилось корректно.

Далее скачиваем и устанавливаем Home Assistant:

wget -O homeassistant-supervised.deb https://github.com/home-assistant/supervised-installer/releases/latest/download/homeassistant-supervised.deb
apt install ./homeassistant-supervised.deb

После установки, через 2-3 минуты (или дольше) заходим по адресу http://IP_ADDRESS:8123/ (где IP_ADDRESS - IP-адрес машины), ждем завершения и настраиваем Home Assistant.


Стоп-стоп-стоп! Подождите! Вы думали, что у вас вот так все просто установится? Помните я упоминал про проблемы? Давайте разбираться что может и обязательно пойдет не так в процессе установки.

systemd-resolved

Установили вы зависимости. Пытаетесь установить докер:

root@homeassistant:~# curl -fsSL get.docker.com | sh
curl: (6) Could not resolve host: get.docker.com

... и внезапно обнаруживаем, что отвалился резольвер. На самом деле, установился systemd-resolved и DNS сервер из настроек сети не подтянулся.

Проверяем:

root@homeassistant:~# resolvectl dns
Global:
Link 2 (ens192):

Так и есть, отсутствуют DNS сервер на интерфейсе. Сразу не работает, нужно прежде всего перезапустить сервис systemctl restart systemd-resolved.service.

Добавляем на сетевой интерфейс DNS сервер роутера, 1.1.1.1 или 8.8.8.8 и проверяем:

root@homeassistant:~# resolvectl dns ens192 192.168.1.1
root@homeassistant:~# resolvectl dns
Global:
Link 2 (ens192): 192.168.1.1
root@homeassistant:~# ping4 google.com
PING  (108.177.14.101) 56(84) bytes of data.
64 bytes from lt-in-f101.1e100.net (108.177.14.101): icmp_seq=1 ttl=111 time=32.4 ms
64 bytes from lt-in-f101.1e100.net (108.177.14.101): icmp_seq=2 ttl=111 time=32.7 ms
64 bytes from lt-in-f101.1e100.net (108.177.14.101): icmp_seq=3 ttl=111 time=32.7 ms
^C

Отлично! Повторяем попытку установки докера.

Данная проблема также иногда всплывает при установке пакета Home Assistant. Во время установки начинает спамить ошибками пинга.

ping: checkonline.home-assistant.io: Temporary failure in name resolution
[info] Waiting for checkonline.home-assistant.io - network interface might be down...
ping: checkonline.home-assistant.io: Temporary failure in name resolution
[info] Waiting for checkonline.home-assistant.io - network interface might be down...

Не прерывая процесс установки нужно залогиниться в параллельный сеанс SSH, либо (если работаете напрямую) переключиться на второй терминал (переключение между терминалами Alt+F1..F6). Далее прописываем DNS на интерфейс, переключаемся на основной сеанс/терминал, установка должна продолжится автоматически.

NetworkManager

Проблема NetworkManager обычно возникает уже после всей установки Home Assistant в процессе запуска Docker контейнеров.

Если прописывали статический IP адрес, то проблема с NetworkManager возникает практически гарантировано. Выражается в том, что не работает резольвер, даже если он прописан вручную, соответственно не скачиваются и не запускаются все контейнеры кроме основного. Хотя пинг напрямую по IP адресу нормально проходит.

root@homeassistant:~# docker ps
CONTAINER ID   IMAGE                                                   COMMAND   CREATED         STATUS         PORTS     NAMES
5fa8dfe4429c   ghcr.io/home-assistant/amd64-hassio-supervisor:latest   "/init"   6 minutes ago   Up 6 minutes             hassio_supervisor
root@homeassistant:~# resolvectl dns
Global:
Link 2 (ens192):
Link 3 (docker0):
Link 5 (vethfd10614):
Link 6 (hassio):
Link 8 (veth3dfd1c5):
root@homeassistant:~# resolvectl dns ens192 192.168.1.1
root@homeassistant:~# resolvectl dns
Global:
Link 2 (ens192): 192.168.1.1
Link 3 (docker0):
Link 5 (vethfd10614):
Link 6 (hassio):
Link 8 (veth3dfd1c5):
root@homeassistant:~# ping4 google.com
ping: google.com: Temporary failure in name resolution
root@homeassistant:~# ping4 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=112 time=30.6 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=112 time=30.6 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=112 time=30.7 ms
^C

Раз у нас установился NetworkManager, то скорее всего управление сетью перешло к нему. Проверим.

root@homeassistant:~# nmcli connection show 
NAME                UUID                                  TYPE      DEVICE 
Supervisor ens192   4e12c325-9cce-4446-bce6-4e00a038da7a  ethernet  ens192 
lo                  0fb78ab7-1397-4b7d-b2f9-08a5e4ce159c  loopback  lo     
Wired connection 1  9596ad70-3e69-3dcf-9c4e-7baffa45d79d  ethernet  --     

Так и есть. Home Assistant создал новый профиль Supervisor ens192 (ens192 может отличаться в зависимости от используемого интерфейса) и активировал его. Скорее всего проблема в нем.

root@homeassistant:~# nmcli connection edit "Supervisor ens192" 
nmcli> print ipv4
['ipv4' setting values]
ipv4.method:                            manual
ipv4.dns:                               --
ipv4.dns-search:                        --
ipv4.dns-options:                       --
ipv4.dns-priority:                      0
ipv4.addresses:                         192.168.1.30/24
ipv4.gateway:                           192.168.1.1
.......

В профиле отсутствует указание на DNS сервер. Добавляем его в профиль, сохраняем, проверяем.

nmcli> set ipv4.dns 192.168.1.1
nmcli> print ipv4.dns
ipv4.dns: 192.168.1.1
nmcli> save persistent 
Connection 'Supervisor ens192' (4e12c325-9cce-4446-bce6-4e00a038da7a) successfully updated.
nmcli> quit 
root@homeassistant:~# nmcli connection down "Supervisor ens192" && nmcli connection up "Supervisor ens192" 
Connection 'Supervisor ens192' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
root@homeassistant:~# ping4 google.com
PING  (173.194.220.139) 56(84) bytes of data.
64 bytes from lk-in-f139.1e100.net (173.194.220.139): icmp_seq=1 ttl=109 time=32.6 ms
64 bytes from lk-in-f139.1e100.net (173.194.220.139): icmp_seq=2 ttl=109 time=32.5 ms
64 bytes from lk-in-f139.1e100.net (173.194.220.139): icmp_seq=3 ttl=109 time=32.5 ms

Если подключаетесь по SSH, то переподключение нужно делать одной командой, иначе придется лезть в консоль, т.к. сетка отключится.

Идем за чаем и ждем пока поднимутся все контейнеры.

root@homeassistant:~# docker ps
CONTAINER ID   IMAGE                                                      COMMAND               CREATED          STATUS         PORTS                                   NAMES
9085135ef77d   ghcr.io/home-assistant/qemux86-64-homeassistant:2024.6.2   "/init"               6 minutes ago    Up 6 minutes                                           homeassistant
54edaaebde19   ghcr.io/home-assistant/amd64-hassio-multicast:2024.03.0    "/init"               7 minutes ago    Up 7 minutes                                           hassio_multicast
ad3991713142   ghcr.io/home-assistant/amd64-hassio-audio:2023.12.0        "/init"               7 minutes ago    Up 7 minutes                                           hassio_audio
b0d247d8d950   ghcr.io/home-assistant/amd64-hassio-dns:2024.04.0          "/init"               7 minutes ago    Up 7 minutes                                           hassio_dns
58fcbe893417   ghcr.io/home-assistant/amd64-hassio-cli:2024.05.0          "/init"               7 minutes ago    Up 7 minutes                                           hassio_cli
896050f24454   ghcr.io/home-assistant/amd64-hassio-observer:2023.06.0     "/usr/bin/observer"   14 minutes ago   Up 7 minutes   0.0.0.0:4357->80/tcp, :::4357->80/tcp   hassio_observer
5fa8dfe4429c   ghcr.io/home-assistant/amd64-hassio-supervisor:latest      "/init"               36 minutes ago   Up 7 minutes                                           hassio_supervisor

Когда поднялся последний контейнер qemux86-64-homeassistant, можно заходить через браузер и производить дальнейшую настройку.

Если зашли слишком рано и видите ошибку инсталляции не пугайтесь, нужно еще некоторое время подождать.

Проблемы с NetworkManager также могут выражаться в том, что система не запоминает настройки сети через веб интерфейс и сбрасывает их после перезагрузки системы.

Решение данной проблемы достаточно простое. Если посмотреть сетевые профили, то в данном случае скорее всего профиль которым управляет Home Assistant будет неактивным.

root@homeassistant:~# nmcli connection show 
NAME                UUID                                  TYPE      DEVICE 
Supervisor ens192   4e12c325-9cce-4446-bce6-4e00a038da7a  ethernet  -- 
lo                  0fb78ab7-1397-4b7d-b2f9-08a5e4ce159c  loopback  lo     
Wired connection 1  9596ad70-3e69-3dcf-9c4e-7baffa45d79d  ethernet  ens192     

Нужно переключить на профиль, которым будет управлять Home Assistant. Оставшийся профиль желательно удалить, но обычно он сам удаляется при перезагрузке системы.

root@homeassistant:~# nmcli connection down "Wired connection 1" && nmcli connection up "Supervisor ens192" 
Connection 'Wired connection 1' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
root@homeassistant:~# nmcli connection delete "Wired connection 1"

Прочие ошибки

После установки не забудьте перезагрузить систему на которой установлен Home Assistant. Иначе будет сигнализировать о неисправимой ошибке и/или не будет показывать адрес на сетевом интерфейсе.

Заключение

Возможно, это не все ошибки с которыми придется столкнуться, особенно если устанавливать Home Assistant на linux систему отличную от Debian 12. Проблемы с NetworkManager скорее всего со временем пофиксят, т.к. это проблема настройки системы когда активируется самый первый контейнер amd64-hassio-supervisor.

Комментарии (15)


  1. GenkaOk
    16.06.2024 10:17

    Я до сих пор не разобрался.
    Подскажите, в чем преимущество Supervised перед обычным Docker контейнером с HA?


    1. GennPen Автор
      16.06.2024 10:17
      +1

      На сайте есть прекрасная табличка, показывающая все отличия разных версий: https://www.home-assistant.io/installation/#advanced-installation-methods


    1. Mogwaika
      16.06.2024 10:17

      Аддоны есть, как и в версии под virtualbox.


    1. garbagecollected
      16.06.2024 10:17

      Supervised запускает/останавливает/обновляет другие контейнеры, в каждом из которых устанавливаются разные дополнения HA. Если вы способны установить и обслуживать их вручную, то Supervised вам и не нужен. Тогда у вас появляется выбор, куда и как ставить компоненты. Хотите с docker, хотите - без. Тот же Portainer может делать то же самое. А, например, Mysql-сервер для recordera можно установить и на соседний сервер...


  1. Antra
    16.06.2024 10:17

    Также, в данной статье не будет рассуждений почему Home Assistant Supervised, а не Home Assistant OS. Данная статья не об этом.

    Жаль. Хотелось бы понять, чем Supervised лучше готового образа (OS, хоть для bare metal, хоть под KVM/Hyper-V/etc.). Ну т.е. я понимаю, что это "полноценный SSH", а не адд-он какой-то. Но в каких сценариях проявляются преимущества этого?


    1. GennPen Автор
      16.06.2024 10:17
      +1

      Для обычного пользователя совершенно никакой разницы. Я бы сказал, что HA OS даже лучше, т.к. испортить ее кривыми руками довольно сложно, да и разворачивается она буквально в несколько кликов. Это скорее выбор религии.

      Лично мне, логинясь в операционную систему (не важно каким способом) я хочу иметь полноценный доступ именно в операционную систему, а не в урезанный HA CLI.


  1. Johan_Palych
    16.06.2024 10:17

    Поставил на виртуалку(vmware workstation player) за 40 мин без ошибок с debian-12.5.0-amd64-netinst.iso в минимуме. Только openssh и mc

    sudo nmtui(TUI-интерфейс на curses)

    в Chromium config/network

    addon tailscale - это круто

    По умолчанию в Debian-netinstall устанавливается ifupdown
    systemctl status networking.service
    Для работы сети через NetworkManager надо закомментировать строки и shutdown -r now
    nano(mcedit) /etc/network/interfaces
    #allow-hotplug ens33
    #iface ens33 inet dhcp
    Проверяем: nmcli connection show
    systemctl --now mask networking
    systemctl enable --now systemd-resolved.service
    ставим на динамическом IP docker, os-agent_1.6.0_linux_x86_64.deb и homeassistant-supervised.deb
    через web-фейс или nmtui настраиваем статический IP, добавляем DNS и др.
    Смотрим конфиги перед установкой:

    dpkg-deb -R homeassistant-supervised.deb homeass
    cat homeass/etc/systemd/resolved.conf
    cat homeass/etc/NetworkManager/NetworkManager.conf
    cat homeass/etc/network/interfaces


    1. garbagecollected
      16.06.2024 10:17

      tailscale - отличный сервис, который фаэрволом заблокировал все соединения с российскими ip


      1. Johan_Palych
        16.06.2024 10:17
        +1

        Пользуюсь headscale. Поддержку в addon-tailscale добавили в апреле 2023
        https://github.com/hassio-addons/addon-tailscale/pull/175
        ZeroTier One тоже грамотная штука
        Home Assistant Community Add-on: ZeroTier One
        https://github.com/hassio-addons/addon-zerotier