Как стать автором
Обновить

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

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров36K

Сегодня мы будем устанавливать 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.

Теги:
Хабы:
Всего голосов 2: ↑2 и ↓0+3
Комментарии20

Публикации

Ближайшие события