Сегодня мы будем устанавливать 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)
Antra
16.06.2024 10:17Также, в данной статье не будет рассуждений почему Home Assistant Supervised, а не Home Assistant OS. Данная статья не об этом.
Жаль. Хотелось бы понять, чем Supervised лучше готового образа (OS, хоть для bare metal, хоть под KVM/Hyper-V/etc.). Ну т.е. я понимаю, что это "полноценный SSH", а не адд-он какой-то. Но в каких сценариях проявляются преимущества этого?
GennPen Автор
16.06.2024 10:17+1Для обычного пользователя совершенно никакой разницы. Я бы сказал, что HA OS даже лучше, т.к. испортить ее кривыми руками довольно сложно, да и разворачивается она буквально в несколько кликов. Это скорее выбор религии.
Лично мне, логинясь в операционную систему (не важно каким способом) я хочу иметь полноценный доступ именно в операционную систему, а не в урезанный HA CLI.
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
garbagecollected
16.06.2024 10:17tailscale - отличный сервис, который фаэрволом заблокировал все соединения с российскими ip
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
GenkaOk
Я до сих пор не разобрался.
Подскажите, в чем преимущество Supervised перед обычным Docker контейнером с HA?
GennPen Автор
На сайте есть прекрасная табличка, показывающая все отличия разных версий: https://www.home-assistant.io/installation/#advanced-installation-methods
Mogwaika
Аддоны есть, как и в версии под virtualbox.
garbagecollected
Supervised запускает/останавливает/обновляет другие контейнеры, в каждом из которых устанавливаются разные дополнения HA. Если вы способны установить и обслуживать их вручную, то Supervised вам и не нужен. Тогда у вас появляется выбор, куда и как ставить компоненты. Хотите с docker, хотите - без. Тот же Portainer может делать то же самое. А, например, Mysql-сервер для recordera можно установить и на соседний сервер...