Писал для себя, чтобы не забыть, но может кому-то и пригодится
Данная инструкция написана для WirenBoard 8.x с версией ПО WB-2410 (Debian 11 Bullseye), но при небольших корректировках, подойдет и на WB 6 и 7.* (нужно поправить часть со сборкой ядра, будет другой Branch на GitHub, другой компилятор armhf и соответственно небольшие изменения в командах)
В целом даже на WB 6 версия Home Assistant Supervised работает, но:
- с момента включения контроллера и до полной функциональности Home Assistant проходит от 20 минут (боль и страдания)
- CPU постоянно загружен в районе 60% и иногда до 100% кратковременно
- малый размер MMC и раздела /mnt/data, поэтому приходится монтировать внешний USB диск
Зачем ставить вариант Supervised? Я просто так привык и мне не сложно. А вообще абсолютной необходимости в такой установке нет и, да, можно поставить версию Docker из Wiki. Это на вкус и цвет.
Установка Home Assistant Supervised
1. Сброс контроллера с установкой прошивки в режиме Factory Reset
1.1. Сбросить к заводскому состоянию
*это нужно, что бы понимать начальное состояние контроллера для нормального описания последовательности установки)
Инструкции: Программное обеспечение контроллеров Wiren Board — Wiren Board
Прошивку качать с: S3 Bucket Listing Generator
1.2. Если прошивка проверенная временем и рабочая, то её файлом желательно заменить файл:
/mnt/data/.wb-restore/factoryreset.fit
Это позволит быстро сбрасывать контроллер к этой версии прошивки.
2. Первоначальная настройка контроллера
2.1. Сменить пароль на SSH.
Инструкция: Как подключиться к консоли контроллера Wiren Board по SSH — Wiren Board
passwd
Лучше использовать авторизацию по ключу, но мне с паролем удобнее.
2.2. Настроить сеть
Инструкция: Настройка сети в контроллере Wiren Board — Wiren Board
через web интерфейс, nmtui или nmcli
2.3. Настроить часовой пояс
Инструкция: Настройка даты и времени в контроллере Wiren Board — Wiren Board
Посмотреть какие часовые пояса существуют и как их прописывать
timedatectl list-timezones
Изменить часовой пояс
timedatectl set-timezone Asia/Yekaterinburg
systemctl restart wb-rules
Проверить текущие значения
timedatectl
Сохранить время в энергонезависимый таймер
hwclock --systohc
2.4. Создать папку для временных файлов, она понадобится позднее
mkdir /mnt/data/tmp
3. Настройка модулей расширения и портов через Web интерфейс
Выполнить штатными средствами
4. Обновление ПО
apt update && apt upgrade -y && apt autoremove -y
иногда нужно запретить автоматическое обновление пакета, для этого:
чтобы не обновлять
apt-mark hold wb-rules
чтобы вернуть для обновения
apt-mark unhold wb-rules
5. Сборка ядра Linux с AppArmor
Наличие AppArmor и CGroup v.1, это требование Home Assistant
Сборку ядра необходимо производить в Linux, но не на контроллере, для этого либо использовать имеющийся ПК с OS Linux, либо поставить WSL под Windows, по инструкции ниже
5.1. Установка WSL
Запустить PowerShell от имени администратора
- вариант - (меню “Пуск” > PowerShell > щелкните правой кнопкой мыши > Запуск от имени администратора)
- вариант - Win + X, выбираем в контекстном меню пункт Терминал (администратор)
Установить необходимые компоненты (процесс не быстрый)
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
Выбрать версию WSL v.2
wsl --set-default-version 2
Установить WSL
wsl.exe --install --no-distribution
Перезагрузить ПК
restart-computer
5.2. Установка дистрибутива Linux
достаточно выбрать один из ниже предложенных, мне больше подходит Ubuntu
В WSL если ставить Ubuntu, то необходимо установить и настроить Ubuntu 18.04 LTS (именно эту версию так как в старших применяется компилятор gcc-arm-linux-gnueabihf не совместимый с gnulibc 3.1, возможно старшие версии подойдут, но я не пробовал и не собираюсь так как всё работает)
Все действия в Linux производить с правами root, для этого выполнить sudo -i с паролем, созданного при установке, пользователя.
Запустить PowerShell от имени администратора
- вариант - (меню “Пуск” > PowerShell > щелкните правой кнопкой мыши > Запуск от имени администратора)
- вариант - Win + X, выбираем в контекстном меню пункт Терминал (администратор)
5.2.1. Установить дистрибутив Debian 11 (самый сложный вариант)
Скачать дистрибутив Debian 11
- вариант - скачать в пользовательскую папку Загрузки браузером по ссылке https://wslstorestorage.blob.core.windows.net/wslblob/TheDebianProject.DebianGNULinux_1.12.1.0.AppxBundle
- вариант - в PowerShell
cd $HOME\Downloads
curl.exe -OL --ssl-no-revoke https://wslstorestorage.blob.core.windows.net/wslblob/TheDebianProject.DebianGNULinux_1.12.1.0.AppxBundle
Установить скачанный дистрибутив
cd $HOME\Downloads
Add-AppxPackage TheDebianProject.DebianGNULinux_1.12.1.0.AppxBundle
Запустить консоль Debian (так же можно это сделать из меню Пуск)
wsl -d Debian
Завершить установку и создать пользователя
Первичная настройка
sudo -i
apt update && apt upgrade -y && apt autoremove -y
Далее для запуска консоли Debian выполнять
wsl -d Debian
5.2.2. Установить актуальный дистрибутив Debian (на момент написания Debian 12 Bookworm)
Получить список доступных дистрибутивов
wsl.exe --list --online
Установить Debian
wsl.exe --install Debian
Запустить для первоначальной настройки (иногда терминал запускается сам)
wsl -d Debian
Завершить установку и создать пользователя
Первичная настройка
sudo -i
apt update && apt upgrade -y && apt autoremove -y
Далее для запуска выполнять
wsl -d Debian
5.2.3. Установить дистрибутив Ubuntu-18.04
Получить список доступных дистрибутивов
wsl.exe --list --online
Установить Ubuntu 18.04
wsl.exe --install Ubuntu-18.04
Завершить установку и создать пользователя
Первичная настройка
sudo -i
apt update && apt upgrade -y && apt autoremove -y
Далее для запуска выполнять
wsl -d Ubuntu-18.04
для выбора дистрибутива по умолчанию использовать (не требуется если он всего один)
wsl --setdefault Debian
или
wsl --setdefault Ubuntu-18.04
для запуска дистрибутива по умолчанию достаточно вызова без указания дистрибутива
wsl
5.3. Удаление WSL
Этот пункт на будущее для информации и не должен выполняться до окончания процесса сборки и установки нового ядра на контроллер, в последствии его можно выполнить для освобождения места на диске ПК
Далее в инструкции будет описание в ситуации когда установлены два дистрибутива в WSL, но скорее всего будет только один, так как одного вполне достаточно, команды те же
Запустить терминал как Администратор. Для этого жмем Win + X, выбираем в контекстном меню пункт Терминал (администратор).
Получить список установленных на виртуальную машину дистрибутивов.
wsl -l -v
Вывод команды:
|PS C:\Users\user> wsl -l -v
| NAME STATE VERSION
|* Debian Stopped 2
| Ubuntu-18.04 Stopped 2
Удалить регистрацию дистрибутива на виртуальной машине
wsl --unregister Debian
wsl --unregister Ubuntu-18.04
Проверить отсутствие регистрации
wsl -l -v
Вывод команды:
|PS C:\Users\user> wsl -l -v
|Подсистема Windows для Linux не содержит установленных дистрибутивов.
Установленных дистрибутивов больше нет.
Получить список установленных дистрибутивов и определить их ИД
winget list
Удалить дистрибутивы
winget uninstall --id Debian.Debian
winget uninstall --id Canonical.Ubuntu.1804
Удалить WSL - Вариант 1 (через терминал):
dism.exe /online /disable-feature /featurename:VirtualMachinePlatform /norestart
dism.exe /online /disable-feature /featurename:Microsoft-Windows-Subsystem-Linux /norestart
Перезагрузить ПК
restart-computer
Удалить WSL - Вариант 2 (через интерфейс):
Нажать Win + X и выбрать в открывшемся контекстном меню пункт Параметры
В открывшемся контекстном меню выбрать пункт Приложения
В открывшемся окне выбрать пункт Установленные приложения
В появившемся перечне установленных программ удлить OS, которые были установлены на виртуальной машине. (Ubuntu 18.04.5 on Windows)
Нажать Win + X и в открывшемся контекстном меню выбрать пункт Найти
В открывшемся контекстном меню ввести в строке поиска Панель управления и в результатах поиска выбрать соответствующее приложение.
В открывшемся окне выбрать пункт Программы и компоненты.
В открывшемся окне (слева) выбираем пункт Включение или отключение компонентов Windows
В открывшемся окне находим и убираем галочку (чекбокс) с пунктов:
- Платформа виртуальной машины (Virtual Machine Platform)
- Подсистема Windows для Linux
Нажать кнопку OK.
Дождаться окончания удаления и нажать кнопку Перезагрузить сейчас.
После перезагрузки системы WSL будет удален с компьютера.
5.4. Изменить и собрать ядро на основе актуальной версии с Git
Запустить дистрибутив Linux
wsl
sudo -i
Нужно клонировать с GitHub последний релиз ядра, для чего на контроллере посмотреть текущий релиз командой
uname -a
пример вывода
Linux wirenboard-AL2EXXXXX 6.8.0-wb123 #1 SMP Tue Dec 24 07:55:47 UTC 2024 aarch64 GNU/Linux
в данном случае ядро 6.8.0-wb123
Установить необходимые пакеты (список пакетов излишний так как компиляторы на все ревизии, но рабочий)
apt update && apt upgrade -y && apt install -y build-essential libncurses5-dev rsync fakeroot lzop bc git bison flex libssl-dev gcc-arm-linux-gnueabihf gcc make gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu mc
Скачать соответствующее ядро с Git WirenBoard
cd ~
rm -r ~/Linux
в следующей команде заменить v6.8.0-wb123 на соответствующую версию ядра (это тег, но возможно вам понадобится бранч)
git clone --depth 1 --branch v6.8.0-wb123 --recurse-submodules -j8 https://github.com/wirenboard/linux
Сразу забэкапить директорию linux в Linux.original (это ускорит процесс если вдруг в процессе подготовки, что-то пошло не так)
mkdir ~/linux.original && cp -r -f ~/linux/* ~/linux.original
для восстановления бэкапа
rm -r ~/linux && mkdir ~/linux && cp -r -f ~/linux.original/* ~/linux && mkdir ~/linux/.git
Добавить AppArmor для Home Assistant в файл arch/arm64/configs/wb8.config
- вариант - добавить строки с помощью любого текстового редактора:
#
# AppArmor (needed for Home Assistant)
#
CONFIG_AUDIT=y
CONFIG_SECURITY_APPARMOR=y
CONFIG_DEFAULT_SECURITY_APPARMOR=y
CONFIG_LSM="apparmor,landlock,lockdown,yama,loadpin,safesetid,bpf"
- вариант - через терминал контроллера (мне так проще сохранять на будущее)
cd ~/linux
echo -e "\n#\n# AppArmor (needed for Home Assistant)\n#\nCONFIG_AUDIT=y\nCONFIG_SECURITY_APPARMOR=y\nCONFIG_DEFAULT_SECURITY_APPARMOR=y\nCONFIG_LSM=\"apparmor,landlock,lockdown,yama,loadpin,safesetid,bpf\"" >> ~/linux/arch/arm64/configs/wb8.config
Создать конфиг по умолчанию (дефконфиг)
cd ~/linux
make KBUILD_OUTPUT=.build-wb8 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig wb8.config
make KBUILD_OUTPUT=.build-wb8 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- savedefconfig
для настройки ядра (в данном случае не требуется, это для информации)
make KBUILD_OUTPUT=.build-wb8 ARCH=arm64 menuconfig
или
make KBUILD_OUTPUT=.build-wb8 ARCH=arm64 xconfig
Собрать пакет для установки на контроллер
KERNEL_FLAVOUR=wb8 VERSION_SUFFIX="-ha" CORES=12 ./scripts/package/wb/do_build_deb.sh
сборка идет с предупреждениями, но это не критично
Загрузить deb пакет на контроллер
scp linux-image-wb8_*-ha_arm64.deb root@10.200.200.1:/mnt/data/tmp/
Если появится запрос Are you sure you want to continue connecting (yes/no/[fingerprint])?, ответить yes
Ввести пароль root контроллера
В команде scp указан IP адрес (10.200.200.1) при подключении через debug usb-c, при необходимости сменить на свой
Подключиться к контроллеру терминалом
- вариант - используя ПО типа Putty и т.п
- вариант - прямо из WSL при помощи ssh
ssh root@10.200.200.1
Установить deb пакет
dpkg -i /mnt/data/tmp/linux-image-wb8_*-ha_arm64.deb
Блокировка автоматического обновления ядра
apt-mark hold linux-image-wb8
Теперь нужно самостоятельно контролировать обновления ядра и при необходимости пересобирать заново с последующей установкой вручную
Перезагрузить контроллер
reboot
6. Установка Systemd-resolved
Это необходимо для установки в Debian 11. В версии Debian 12 разработчики выделили Systemd-resolved в отдельный пакет и наличие пакета проверяется при установке. При этом сам сервис Systemd-resolved присутствует в Debian 11 и позволяет Home Assistant нормально функционировать. Приходится обманывать.
Описание проблемы: Bug Report: Problems with systemd-resolved in 1.5.0 · Issue #304 · home-assistant/supervised-installer · GitHub
Запустить WSL (при необходимости указать нужный дистрибутив)
wsl
Установить equivs
apt install equivs
Подготовить настройки пакета systemd-resolved
equivs-control systemd-resolved.control
sed -i 's/<package name; defaults to equivs-dummy>/systemd-resolved/g' systemd-resolved.control
Собрать deb пакет пустышку
equivs-build systemd-resolved.control
Загрузить deb пакет на контроллер
scp systemd-resolved_1.0_all.deb root@10.200.200.1:/mnt/data/tmp/
7. Установка AppArmor
Запустить консоль контроллера
Установить утилиты и профили apparmor
apt update && apt install -y apparmor-utils apparmor-profiles
Перевести AppArmor в режим обучения для некоторых сервисов
aa-complain ntpd
aa-complain avahi-daemon
возможно в последствии будет необходимо добавить и другие сервисы при наличии проблем
Проверить текущий статус AppArmor
aa-status
Анализ работы AppArmor можно производить по журналу
journalctl -f
и
journalctl -g apparmor
и
dmesg | grep apparmor
8. Установка Docker
Инструкция: Установка Docker на контроллер Wiren Board — Wiren Board
Установить необходимые пакеты
apt update && apt install -y ca-certificates curl gnupg lsb-release
Загрузить ключ репозитория Docker
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
Добавить репозиторий Docker
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
Установить iptables
apt install -y iptables
Настроить iptables
update-alternatives --set iptables /usr/sbin/iptables-legacy
update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
Перенести Docker в /mnt/data, создав директории и линки
mkdir /mnt/data/etc/docker && ln -s /mnt/data/etc/docker /etc/docker
mkdir -p /mnt/data/usr/libexec/docker && ln -s /mnt/data/usr/libexec/docker /usr/libexec/docker
mkdir /mnt/data/.docker && ln -s /mnt/data/.docker /var/lib/docker
Создать файл с настройками Docker
echo -e "{\n \"data-root\": \"/mnt/data/.docker\",\n \"log-driver\": \"json-file\",\n \"log-opts\": {\n \"max-size\": \"10m\",\n \"max-file\": \"3\"\n }\n}\n" > /etc/docker/daemon.json
Создать бэкап файла (может пригодится позже)
cp -f /etc/docker/daemon.json /etc/docker/daemon.json.wb
Установить Docker и Docker Compose
apt update && apt install -y docker-ce docker-ce-cli containerd.io
Проверить установку и версии
docker --version
docker compose version
systemctl status docker
9. Установка Home Assistant Supervised
9.1. Предварительная подготовка
Перейти во временную директорию
cd /mnt/data/tmp
Перенести Home Assistant в /mnt/data, создав директории и линки (можно так не делать, а задать при установке DATA_SHARE=/mnt/data/.hassio, но мне такой подход нравится больше)
mkdir /mnt/data/.hassio && ln -s /mnt/data/.hassio /usr/share/hassio
Установить необходимые зависимости
apt install -y udisks2 libglib2.0-bin systemd-journal-remote
Отключить автозапуск ModemManager (требование установщика)
systemctl disable ModemManager
Остановить ModemManager
systemctl stop ModemManager
Установить пакет пустышку systemd-resolved, это позволит установить HASS на Debian 11 (для Debian 12 не требуется)
apt install /mnt/data/tmp/systemd-resolved_1.0_all.deb
Блокировка обновления systemd-resolved
apt-mark hold systemd-resolved
Так как пакет - пустышка, то и контролировать его обновление не требуется.
Изменить диверсии файла /etc/network/interfaces, так как это мешает установке (логичный путь через dpkg-divert --rename --remove /etc/network/interfaces не работает)
sed -i '\|/etc/network/interfaces|{N;N;d;}' /var/lib/dpkg/diversions
9.2. Установка OS-Agent for Home Assistant (ставить версию для aarch64)
Инструкция: GitHub - home-assistant/os-agent: Daemon allowing to control OS features through D-Bus
Скачивать вручную: Release 1.6.0 · home-assistant/os-agent · GitHub
Скачать в /mnt/data/tmp файл deb пакета os-agent
wget https://github.com/home-assistant/os-agent/releases/download/1.6.0/os-agent_1.6.0_linux_aarch64.deb
Установть deb пакет
apt install /mnt/data/tmp/os-agent_1.6.0_linux_aarch64.deb
Перезагрузить контроллер
reboot
9.3. Установка Home Assistant Supervised
Инструкция: GitHub - home-assistant/supervised-installer: Installer for a generic Linux system
Перейти во временную директорию
cd /mnt/data/tmp
Скачать в /mnt/data/tmp файл deb пакета установщика
wget -O homeassistant-supervised.deb https://github.com/home-assistant/supervised-installer/releases/latest/download/homeassistant-supervised.deb
Установть deb пакет
BYPASS_OS_CHECK=true apt install /mnt/data/tmp/homeassistant-supervised.deb -y
Во время установки выбрать Machine Type = qemuarm-64
Создать бэкап файла настроек Docker (может пригодится позже)
cp -f /etc/docker/daemon.json /etc/docker/daemon.json.ha
Начнется процесс загрузки контейнеров и установки Home Assistant, это может занять много времени (от 10 минут до нескольких часов), особенно с медленным интернетом
Через некоторое время можно зайти в Home Assistant в браузере по адресу http://10.200.200.1:8123/
Статус Observer можно посмотреть в браузере по адресу http://10.200.200.1:4357/
Установка будет предупреждать о том, что эта OS Debian 11 не поддерживается, но это не важно и можно игнорировать
Иногда возникает проблема с HA DNS в части определения адреса Cloud сервиса, это проявляется в высокой загрузке процессора, что особенно критично для WB6
Исправить процесс определения адреса для Cloud сервиса можно запуская следующую команду через минут 5-10 после начала установки
ha dns options --fallback=false
при этом пока не завершится установка необходимых компонентов HASS выполнение будет завершаться ошибками:
“Error response from daemon: No such container: hassio_cli”
или
“Error: System is not ready with state: setup”,
необходимо повторять запуск пока выполнение не завершится сообщением
“Command completed successfully.”
Можно запустить top для контроля процесса установки и ожидать пока не завершится этот процесс (на WB6 отчетливо видно)
Можно смотреть вывод в дебаг консоли контроллера
Можно смотреть системный журнал в консоли
journalctl -f
В журнале появляются записи красного цвета от HA, это не обязательно ошибки, сильно не нервничать и ждать (иногда долго ждать)
10. Установка WB-Engine
Инструкция: GitHub - 4mr/wb-engine
10.1. Для WirenBoard 8.x
Перейти во временную директорию
cd /mnt/data/tmp
Скачать в /mnt/data/tmp файл deb пакета установщика
wget https://github.com/4mr/wb-engine/releases/latest/download/wb-engine_arm64.deb
Установть deb пакет
apt -y install ./wb-engine_arm64.deb
10.2. Для WirenBoard 6.x и 7.x
Перейти во временную директорию
cd /mnt/data/tmp
Скачать в /mnt/data/tmp файл deb пакета установщика
wget https://github.com/4mr/wb-engine/releases/latest/download/wb-engine_armhf.deb
Установть deb пакет
apt -y install ./wb-engine_armhf.deb
10.3. Настроить WB-Engine
Через Web интерфейс WirenBoard с правами Администратора
Настройки > Конфигурационные файлы > WB Engine Configuration
11. Полезные команды
Остановка HASS
systemctl stop hassio-apparmor
systemctl stop hassio-supervisor
systemctl stop haos-agent
Остановка Docker
systemctl stop docker
Далее писать можно долго, но это уже будет про настройки Home Assistant, что выходит за рамки Support Wirenboard