Главная > Умный дом > Попытка перенести Home Assistant в Docker на Raspberry Pi c SSD

Попытка перенести Home Assistant в Docker на Raspberry Pi c SSD


3 февраля 2021. Разместил: dimon
В этой заметке я просто опишу проблемы, с которыми я столкнулся при переносе Home Assistant с SD карты на SSD и развертыванию системы в Docker-е на Raspberry Pi..

С переездом созрел я и к обновлению сервера умного дома - точнее к смене платформы с Domoticz на Home Assistant.

Сначала на второй Raspberry Pi 3 Model B я просто развернул Hassio на SD-карту по инструкции с официального сайта, вроде все работает с моим зоопарком умных устройств - Xiaomi Smart Home, Sonoff RF bridge на Tasmota, сяоми роутером и APC UPS.

Потом немного вникнув в тему, мне показалось, что нужно HA ставить в Докер, чтобы потом на любом железе/ОС можно было поднять тот же инстанс без особых проблем.
Для пробы, я грохнул на основной малине Домотикз, и решил использовать ее в качестве тестового стенда - на нее поставить SSD, Raspberry Pi OS Lite, Docker, а уже в него запихать Home Assistant.

Первое что делаем - ставим бит загрузки с USB по инструкции с официального сайта, т.к. Pi 3B по умолчанию с ЮСБ не грузится.
Дополнительная инструкция на русском языке от Sprut.AI

После этого подключаем SSD к компьютеру и с помощью balenaEtcher заливаем на него скачанный с официального сайта образ для Raspberry Pi 3 Model B and B+ 32-bit.

Для того чтобы наша Малина подключилась к Wi-Fi и на ней работал SSH, кладем в boot раздел два файла - пустой ssh и wpa_supplicant.conf с содержимым:

network={
    ssid="your_wifi_SSID"
    psk="your_wifi_password"
}


Официальный манула по подключению Raspberry Pi к вайфайю

Но почему-то Raspberry Pi не подключилась к WiFi сети, пришлось брать монитор, клавиатуру и заходить в консоль. Попытался настроить сеть через sudo raspi-config и получил ошибку "could not communicate with wpa_supplicant".
Помог официальный форум - оказывается нужно добавить еще страну в файл wpa_supplicant.conf в загрузочном разделе:

country=ru
update_config=1
ctrl_interface=/var/run/wpa_supplicant

network={
 ssid="your_wifi_SSID"
 psk="your_wifi_password"
}



Дальше я по инструкции Alex-а Kvazis-а начал обновлять ОС и ставим все остальное - Docker и Home Assistant в Докер.
Home Assistant. Урок 1.1 Установка. Raspberry Pi 3B, 3B+ raspbian, portainer, hass.io

При установке у меня были отступления от инструкции Алекса. У меня Малина подключена к роутеру по ВиФи, и статику для сетевого интерфейса я не стал настраивать - просто сделал резервацию адреса для этой малины в DHCP роутера. Просто лично мне так удобнее.
На этой Raspberry Pi3B больше пяти лет работал Domoticz. Проблем из-за того что используется беспроводное подключение, а не проводное, я за все это время не наблюдал.

Продолжим и выполняем установку необходимых пакетов:

sudo apt-get install -y bash curl git jq avahi-daemon dbus apparmor-utils \
libavahi-compat-libdnssd-dev libatlas3-base apt-transport-https ca-certificates \
socat software-properties-common ftpd mc


После того как я выполнил установку кучи пакетов, не смог по ssh подключаться к Малине. Поэтому я полез на роутер и обнаружил, что у Pi поменялся ip-адрес. После следующей перезагрузки, ситуация повторилась и у Малину уже третий MAC.
Оказалось все просто. Одно из приложений - NeworkManager - имеет такую фичу “MAC randomisation is a security feature designed to keep the DHCP server from guessing who you are”

Ссылка на форум

Если бы я использовал проводное соединение, то не столкнулся бы с этой проблемой.
Nework Manager позволяет отключать эту фичу "MAC address randomization".
Нужно создать файл /etc/NetworkManager/conf.d/100-disable-wifi-mac-randomization.conf с содержимым:

[connection]
wifi.mac-address-randomization=1
 
[device]
wifi.scan-rand-mac-address=no


Поборов эту проблему, я продолжил установку по инструкции Алекса. Дошел до пункта установки Хасио в контейнер и получаю ошибку:

curl -sL https://raw.githubusercontent.com/home-assistant/supervised-installer/master/installer.sh \
| bash -s -- -m raspberrypi3

Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup 
registry-1.docker.io on 192.168.0.1:53: read udp 19.4.20.28:40385->192.168.0.1:53: i/o timeout


Такая ошибка описана в Issues на GitHub Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on 192.168.65.1:53: server misbehaving #1317.
Решение для Apple MAC - "change nameserver to 8.8.8.8".
Я сделал это на роутере - просто изменив основной DNS сервер на Гугловский.

Новая попытка установки и новая ошибка:

[warn] ModemManager service is enabled. This might cause issue when using serial devices.
[info] Creating NetworkManager configuration
bash: строка 100: /etc/NetworkManager/NetworkManager.conf: Отказано в доступе


Добавил прав в команду winked
Но получил другую ошибку

curl -sL https://raw.githubusercontent.com/home-assistant/supervised-installer/master/installer.sh \
| sudo bash -s -- -m raspberrypi3

[info] Restarting NetworkManager
[info] Install supervisor Docker container
Error response from daemon: 
Get https://registry-1.docker.io/v2/homeassistant/armv7-hassio-supervisor/manifests/249:
read tcp 192.168.0.4:50444->52.5.11.128:443: read: connection reset by peer


Опять изменил команду:

sudo curl -sL https://raw.githubusercontent.com/home-assistant/supervised-installer/master/installer.sh \
| sudo bash -s -- -m raspberrypi3


И наконец то:

[info]
[info] Home Assistant supervised is now installed
[info] First setup will take some time, when it's ready you can reach it here:
[info] http://192.168.0.10:8123
[info]
dimon@raspberrypi:~ $



Залил backup с боевой Raspberry Pi с Home Assistant, восстановил. Вроде бы все работает.

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

Единственное что я хотел бы еще сделать - это перенести Home Assistant OS (Hass.io) на SSD, но на Raspberry Pi Model 3B это оказалось сделать проблематично. После разворачивания Hass.io на SSD, Малина как то очень нестабильно стала загружаться - иногда нужно несколько раз ее перезагрузить по питанию, чтобы она начала стартовать с USB SSD.
Возможно нужна модель поновее, возможно переходник USB-to-SATA (usb2sata) с Алиэкспресс оказался кривой. Причем второй вариант более вероятный - т.к. друг использует плату расширения Raspberry Pi X820 с 2.5” SATA SSD, и у него такая проблема не наблюдается.

Вернуться назад