Вступление

Данный мануал составлен мной после нескольких недель штудирования форумов, для тех, кто захочет пройти моим путем. Критика приветствуется.

Выбор стека

Про Home Assistant (далее для краткости - HA) сказано было многое, и, на мой взгляд, это самая удачная система умного дома. По теме выбора можно почитать тут:

Почему HDD? Много раз на форумах писали, что малинка с Home Assistant на борту кушает SD карты по одной за год. Кроме того, HA еще и логи пишет не понятно до каких пределов. Так что никаких SD.

Оборудование в наличии

  • Raspberry Pi 4

  • HDD

  • Переходник SATA - USB (при необходимости)

  • Монитор

  • Клава

  • Ноут (комп) c возможностью записи SD карт. (У меня ноут под Windows 10)

  • Роутер для выхода в сеть

Варианты установки Home Assistant

Официальный сайт предлагает нам несколько способов установки Home Assistant:

Home Assistant Operating System для Raspberry Pi. Самый простой способ установки: залил образ и нет проблем. Все фичи в наличии. Рекомендован разработчиками. Минус - отсутствие полноценной системы.

Home Assistant Operating System (VM) для Linux. Поднимаем виртуальную машину. Качаем образ. Запускаем. Профит. Да, все фичи на месте. Рекомендован разработчиками. Минус - виртуальная машина более затратна для системы чем Docker. Впрочем, этот способ я не пробовал.

Home Assistant Container. Установка в контейнер Docker. Также рекомендован разработчиками. Минус - нет Supervisor.

Home Assistant Core. Устанавливаем окружение Python. Устанавливаем Home Assistant. Минус - нет Supervisor.

Home Assistant Supervised. Установка в контейнер Docker, но уже с Supervisor в комплекте. Вот что про это пишут разработчики:

Внимание! Этот способ запуска Home Assistant потребует всех ваших сил. У вас будут строгие требования, которым придется следовать. Если вы не понимаете зачем оно вам надо, используйте способы описанные выше.

Или вот еще:

Этот метод установки обеспечит полный функционал HA на обычной системе. Это значит, что все компоненты HA будут использованы за исключением Home Assistant Operating System. Пользователь сам ответственен, чтобы все требуемые компоненты были установлены и настроены. Список компонентов и их версии меняются со временем, а Home Assistant Supervised предоставляется как есть. И, вообще, мы принимаем багрепорты воспроизводимые только на свежеустановленном полностью обновленном Debian без дополнительных архивов.

Этот метод считается продвинутым и должен использоваться только если читающий - эксперт в управлении Linux, Docker и сетях. Приятно слышать.

Мы работаем только с Docker и ни с чем другим.

Дальше идет список требований. К нему вернемся в процессе установки.

Только вышеназванная версия Debian (на момент написания статьи это Debian Linux Debian 10 aka Buster (no derivatives)) поддерживается. Когда выходит новая версия Debian поддержка предыдущей прекращается в течение 4 месяцев. Если только новая версия не соответствует требованиям Supervisor.

Этот метод не будет работать если читающий где-то накосячит. Кстати, вот вам еще несколько дополнительных условий:

Эта система только для Home Assistant. Даже не думайте устанавливать еще какое-то ПО.

Читающий ответственен:

  • За установку и настройку ОС

  • За обновление компонентов, необходимых для Supervisor

  • За установку хоть чего нибудь, конфликтующего с Supervisor

  • За обновления безопасности

Время от времени требования к Supervisor меняются и читающий должен сам обновлять свою ОС и устанавливать недостающие компоненты

Заключение: Эксперт. Тебе будет непросто. Смирись.

Это наш путь.

Шаг 0. Первый контакт

Здесь и далее я буду подключать Raspberry через WiFi. Начнем с того, что пропишем в нашем домашнем DHСP сервере статический IP-адрес Raspberry. Это нужно для удобства, чтобы не выяснять каждый раз, как достучаться до малинки.

Вот официальный туториал как подружить Raspberry и WiFi.

Качаем образ Ubuntu от сюда. На данный момент это Ubuntu Server 20.04.2 LTS 64-bit. Заливаем на SD карту при помощи Balena Etcher. Вынимаем карту и ... снова вставляем откуда взяли. Это нужно, чтобы загрузочный сектор Ububuntu стал доступен в проводнике. Открываем файл network-configи прописываем туда параметры WiFi. Должно получится что-то вроде:

version: 2
ethernets:
  eth0:
    dhcp4: true
    optional: true
wifis:
  wlan0:
    dhcp4: true
    optional: true
    access-points:
      "сюда пишем название сети":
        password: "сюда пишем пароль"

А теперь немного комментариев разработчиков:

Имя сети должно быть в кавычках

При первой загрузке Raspberry попытается присоединится к WiFi. Эта попытка обречена на провал. Но не расстраивайтесь, просто перезагрузите малинку sudo reboot -h now и все заработает.

Для этого нам и нужен монитор с клавой. И да, дефолтный логинubuntuпароль такой же. Если выдается сообщение Login incorrect значит нужно просто немного подождать и попробовать еще раз. Затем нам предложат задать свой супер-мега-сложный пароль и не отстанут, пока не сделаем это. Как только мы получили доступ к телу командной строке - перезагружаемся. Верный признак, что коннект есть - Ubuntu рапортует, что можно поставить несколько апдейтов. Узнать IP и MAC адрес малинки можно командой ip a. А теперь идем в настройки роутера и прописываем статический IP дли MAC одноплатника. Как это сделать не скажу - здесь все индивидуально.

Шаг 1. Настройка загрузки с HDD

Обновляем систему чтобы все было по фен-шую.

sudo apt update

sudo apt upgrade -y

Теперь устанавливаем пакет для работы с загрузчиком sudo apt install rpi-eeprom. На всякий случай перезагружаемся sudo reboot -h now.

У загрузчика имеется три версии релиза (выдержка из оригинальной статьи):

default - Обновляется для поддержки нового железа, исправления критических ошибок и регулярного обновления новых фичей, протестированных в релизе latest.

latest - Обновляется, когда новые фичи прошли успешное бета-тестирование

beta - Здесь тестируется все новое

Из вышесказанного понятно, что релизы проранжированы по степени новизны/стабильности.

На одном из форумов написано:

Будьте уверены, что используете последнюю версию релиза latest(он же stable). Если же нет, Вы не сможете загрузиться с USB. Не существует default(он же critical) релиза с поддержкой загрузки по USB.

Как по мне, все нормально запустилось с defaultветки. По-видимому, на дату статьи релиз уже обновили.

Итак, делай раз: обновляем загрузчик до последней версии sudo rpi-eeprom-update -a. Перезагружаемся sudo reboot -h now.

Делай два: заливаем Ubuntu на USB (HDD) носитель. Как это сделать, описано в Шаге 0. Примечание: некоторые рапортуют о проблемах с питанием HDD при использовании переходника SATA-USB. Что с этим делать - думайте сами. Например, замените HDD на SSD. Лично у меня HDD Toshiba MK7575GSX нормально завелся.

Делай три: В загрузочном разделе (он всегда первый и отформатирован в FAT32) Находим файл vmlinuz, распаковываем его в эту же директорию (я использовал 7-Zip) и переименовываем в vmlinux. Идем в config.txt, комментим строки чтобы было как-то так:

#[pi4]

#kernel=uboot_rpi_4.bin

#max_framebuffers=2

#[pi2]

#kernel=uboot_rpi_2.bin

#[pi3]

#kernel=uboot_rpi_3.bin

И дописываем, чтобы было как-то так:

[all]

arm_64bit=1

device_tree_address=0x03000000

kernel=vmlinux

initramfs initrd.img followkernel

Все. Больше здесь ничего ни трогаем, впрочем кому как нравится...

Делай четыре: прописываем настройки wi-fi как в шаге 0.

Делай пять. Идем сюда: https://github.com/raspberrypi/firmware/tree/masterи копируем себе репозиторий. Там есть такая зеленая кнопка Code, а в ней Download ZIP. В скаченном архиве идем в папку Bootи копируем (с заменой конечно же!) файлы с расширением .datи .elfв загрузочный раздел нашего USB носителя. Теперь USB готов к работе. Подключаем его к порту USB 3.0 (тот, что с синей полоской) чтобы быстрее работало. Пробуем загрузиться, и... надеюсь, что все заведется.

Траблшутинг: Лично у меня была проблема - не запускалась малинка после очередного обновления ядра Linux или чего-то такого. Но потом ребята с GitHub'а все пофиксили и стало ОК. Так что, если у вас что-то идет не так: либо нарушили какой-то пункт из описанных выше, либо ждем обновления ветки (кстати, можно перейти на релиз latestи попробовать с него), либо повезет в любви. И еще, после обновления системы, выполняемого, например, командой sudo apt full-upgradeUbuntu перестанет запускаться до тех пор, пока в загрузочном секторе мы снова не распакуем vmlinuzв vmlinux.

Шаг 2. Устанавливаем зависимости

Разработчики требуют, чтобы в системе было установлено Docker, Systemd, NetworkManager, AppArmor. Sysstemd и AppArmor уже установлены в системе - по ним дополнительных действий не требуется.

Хотя пакет jqотсутствует в официальных требованиях, без него установочный скрипт все-равно не запустится. С него и начнем. Выполняем sudo apt install jq. Готово!

Теперь возьмемся за NetworkManager. Для начала устанавливаем его командой sudo apt install network-manager. Добавляем в автозагрузку sudo systemctl enable NetworkManager. Но просто установить и запустить его недостаточно. В настоящий момент есть две альтернативные системы управления сетью systemd-networkd и NetworkManager. По умолчанию в системе установлена первая, а нам нужен именно NetworkManager. Чтобы переключится на него идем в /etc/netplanи редактируем файл конфигурации командой sudo vi /etc/netplan/50-cloud-init.yaml. Примечание: у меня это 50-cloud-init.yaml . Говорят, название может отличаться. Добавляем строку renderer: NetworkManager следующей строкой за network:. Обращаем внимание на отступы. В yaml отступы решают. Делаем sudo netplan generateиsudo netplan apply, перезагружаемся. Останавливаем systemd-networkd - он теперь больше не нужен -sudo systemctl stop systemd-networkd и отключаем его от автозагрузкиsudo systemctl disable systemd-networkd, перезагружаемся.

Приступаем к установке Docker. Далее взяты инструкции с официального сайта Docker.

Для начала установим зависимости, которые требует Docker sudo apt install apt-transport-https ca-certificates curl gnupg-agent \

software-properties-common.

Добавляем официальный ключ Docker curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -. Проверяем, что ключ добавился правильно командой sudo apt-key fingerprint 0EBFCD88. В ответе должно быть 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88.

Добавляем официальный репозиторий Docker в систему.

sudo add-apt-repository \

"deb [arch=arm64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) \

stable"

Обновляем репозитории sudo apt updateи устанавливаем Docker командой sudo apt install docker-ce docker-ce-cli containerd.io. Проверяем, что Docker встал нормально командой sudo docker run hello-world.

Шаг 3. Устанавливаем Home Assistant

И вот уже все готово, чтобы установить Home Assistant! Качаем установочный скрипт командой curl -Lo installer.sh https://raw.githubusercontent.com/home-assistant/supervised-installer/master/installer.sh

Но запускать его не спешим. А лучше открываем его через vi installer.sh. Находим строчку и # Pull supervisor imageпосле нее вставляем sleep 20, а затем вставляем еще одну строкуHASSIO_VERSION="latest" . Переходим в режим суперпользователяsudo suи запускаем скрипт bash installer.sh --machine raspberrypi4-64. Ждем когда скрипт отработает до конца. Первая загрузка Home Assistant занимает некоторое время. Будьте терпеливы. Если все прошло нормально, достучаться до HA можно по адресу http://локальный ip малинки:8123. Не забудьте удалить rm installer.shон теперь не нужен.

Вот и все.