Устанавливаем Home Assistant Supervised

от автора

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

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

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

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

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

  • Установить 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.


ссылка на оригинал статьи https://habr.com/ru/articles/822071/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *