Установка Home Assistant на Raspberry Pi 4. Загрузка и работа с внешнего SSD
Всем привет! Уже больше года у меня работает сервер умного дома iobroker на базе Raspberry Pi 3 B+ c 1 гигабайтом оперативной памяти (на тот момент малин с большим объемом памяти не существовало). Шло время, устройств и датчиков становилось все больше и сервер начал подвисать. Откровенно так подвисать. Анализ ситуации показал, что серверу не хватает ресурсов. И если на карте памяти места достаточно, а процессор не так уж сильно загружен, то вот с оперативной памятью беда…. Мне очень нравится iobroker своей интуитивностью и простотой, но тяга к новому и экспериментам все еще есть. В итоге было принято решение развернуть новый сервер умного дома на базе проекта Home Assistant (далее HA). Попробовать его в деле и если понравится, то остаться на нем, ну а если нет, то вернуться на IOBROKER, т.к. аппаратная часть у этих систем одинакова.
Итак. Давайте поговорим об аппаратной части. Т.е. о том оборудовании, которое нам понадобится:
- Raspberry Pi 4 B с объемом памяти 4 ГБ. Можно взять и двух гигабайтную версию, но памятуя предыдущий опыт, чет мне не хочется в следующем году все переделывать. Пускай лучше будет запас.
- Карта памяти формата MicroSD, да пошустрее. У меня таковая имелась в запасе
- Плата X862 для подключения SSD жестких дисков формата M.2 NGFF (SSD жесткие диски с SATA интерфейсов в формфакторе M.2)
- Кабель USB Type-C
- Блок питания на 5Вольт 3 Ампера
- M.2 SSD диск. В моем случае это Kingston SA400M8/120G такой тоже был в хозяйстве. Чего-нибудь недорогого порекомендовать не могу. У меня пунктик на носители информации.
Вот так выглядит минимальный набор:
А так выглядит плата для подключения SSD накопителя с уже установленным жестким диском:
Опционально я приобрел корпус для Raspberry Pi с дополнительным охлаждением. Мне это нужно для того, чтобы защитить малину от случайного повреждения. Жить ей предстоит в шкафу. Мало ли что может случиться.
Справочно. Данная инструкция подходит не только для загрузки с платы x862
C таким же успехом ее можно применять для следующих плат:
А также вероятно с другими USB 3.0 носителями информации.
Перейдем к установке.
Для начала скачаем и установим программу BalenaEtcher. Можно воспользоваться и другими вариантами, например руфусом. Балена у меня уже стоит, поэтому буду пользоваться ей.
Кроме этого, нам понадобится образ операционной системы. Ранее он назывался Raspbian, но на момент написания статьи он называется Raspberry Pi OS Lite. Переходим по ссылке https://www.raspberrypi.org/software/operating-systems/
Скачиваем архив и распаковываем в удобное место.
Вставляем microSD карту в картридер и подключаем ее к ПК
Запускаем BalenaEtcher
Выбираем файл с образом операционной системы, которую мы скачивали и распаковывали
Выбираем куда будем записывать файл. Т.е. нашу карту памяти
Т.е. выбираем флешку, а после этого нажимаем кнопку SELECT
Нажимаем кнопку FLASH
И дожидаемся окончания записи образа операционной системы на карту памяти.
Закрываем BalenaEtcher.
Вынимаем карту памяти из картридера из снова вставляем обратно.
После подключения компьютер может пожаловаться, что есть диск, который не отформатирован.
Не обращаем на это сообщение внимания. Нажимаем ОТМЕНА. Ни в коем случае ничего не надо форматировать.
В проводнике появится диск с меткой BOOT
В корне этого диска любым удобным способом создаем пустой файл с именем SSH и без каких-либо расширений.
С флешкой все. Безопасно извлекаем ее из картридера и откладываем в сторонку.
Устанавливаем SSD жесткий диск в плату X862
И с помощью комплектного переходника и USB удлинителя подключаем ее к компьютеру.
После этого, проделываем с диском все те же операции, что мы проделывали с MicroSD карточкой.
Запускаем BalenaEtcher
Выбираем файл с образом операционной систем, которую мы скачивали и распаковывали
Выбираем куда будем записывать файл. В этом случае выбираем наш SSD диск.
Т.е. выбираем флешку, а после этого нажимаем кнопку SELECT
Нажимаем кнопку FLASH
И дожидаемся окончания записи образа операционной системы на SSD диск.
Закрываем BalenaEtcher.
Отключаем плату от компьютера, подключаем ее обратно. Ничего не форматируем. Заходим на диск BOOT и создаем пустой файл SSH без расширения.
На данном этапе с диском все. Отключаем плату от ПК, не забываем пользоваться безопасным извлечением.
С помощью комплектных стоек собираем бутерброд из плат (x862 и Raspberry Pi)
Внимание! Платы не соединяем USB перемычкой. Это важно. Так сказать, пока еще не время.
Вставляем в Raspberry Pi карту памяти
Подключаем Raspberry Pi кабелем к локальной сети или напрямую к маршрутизатору.
Подключаем кабель питания и включаем систему.
В консоли вашего маршрутизатора смотрим какой IP адрес получила наша Raspberry PI. В виду того, что маршрутизаторов (роутеров) великое множество, то рекомендую выяснить этот вопрос самостоятельно.
Далее нам понадобится SSH клиент Putty. (приведена ссылка на скачивание актуальной версии). Вы можете использовать любой удобный Вам SSH клиент. Если у вас его нет. Скачайте версию Putty которая не требует установки.
И запустите скачанный файл (putty.exe).
В поле HostName (or IP Adress) введите IP адрес который получила наша Raspberry Pi.
В поле Port должно быть указано 22
В разделе Connection type должен быть выбран пункт SSH
Теперь, когда все поля заполнены, то можно нажать кнопку Open
Если все было сделано верно, то появится вот такое вот уведомление:
Нажимаем ДА.
Теперь в окне Putty отобразится консоль входа.
Вводим имя пользователя pi
Нажимаем Enter
Вводим пароль raspberry
Нажимаем Enter
И попадаем в операционную систему нашего одноплатного компьютера.
Теперь обновляем список пакетов командой
1 | sudo apt-get update |
Дожидаемся окончания процедуры.
Обновляем установленные пакеты командой
1 | sudo apt-get upgrade |
Готово.
Теперь командой
1 | sudo rpi-update |
обновим прошивку Raspberry Pi
После установки обновлений прошивки необходимо перезагрузить одноплатник командой
1 | sudo reboot |
После ввода команды сессия с одноплатником разорвется. Необходимо подождать несколько минут и подключиться снова.
После перезагрузки снова подключаемся к малинке и выполняем команду
1 | sudo apt install rpi-eeprom |
В моем случае стоят все последние обновления.
Вводим команду
1 | sudo rpi-eeprom-update -d -a |
и убеждаемся, что у нас последняя версия bootloader
Ну а теперь приятная новость. С сентября 2020 года в Raspberry Pi 4 появилась поддержка загрузки с USB накопителей и накопителей подключенных по USB. Так что ставить всякие беты загрузчиков нам не понадобится.
Непосредственно перейдем к настройке процесса загрузки с USB. Для тех кто не догадался, наш SSD тож по USB подключен.
Выполним команду
1 | sudo raspi-config |
Выбираем пункт 6 Advanced Options
Выбираем пункт A7 Bootloader Version
Выбираем пункт E1 Latest Use the latest version boot ROM software
В следующем окне выбираем пункт <No>
В следующем окне выбираем пункт <Ok>
Выбираем пункт 6 Advanced Options
Выбираем пункт A6 Boot Order
Выбираем пункт B1 USB Boot Boot from USB device if SD card boot fails
Клавишей TAB перемещаемся на пункт <Ok> и нажимаем Enter
Если все было сделано верно, то нас ожидает вот такое вот сообщение:
Нажимаем Enter
Перемещаемся на пункт меню <Finish> и нажимаем Enter тем самым выходим из утилиты raspi-config
От перезагрузки отказываемся выбрав пункт <NO> и нажимаемEnter
Теперь устанавливаем перемычку USB-USB между Raspberry Pi и платой с SSD диском.
Командой
1 | sudo mkdir /mnt/ssd |
создаем пустой каталог
Командой
1 | sudo mount /dev/sda1 /mnt/ssd/ |
монтируем наш SSD диск
Командами:
1 2 | sudo cp /boot/*.elf /mnt/ssd/ sudo cp /boot/*.dat /mnt/ssd/ |
Переписываем с SD карты на SSD диск все файлы с расширением *.elf и *.dat
Теперь командой sudo halt выключаем наш одноплатник.
Ждем 2-3 минуты. Отключаем кабель питания и вынимаем SD Карту.
Теперь снова включаем питание и минут через 5 пробуем подключиться. Почему так долго? Малине необходимо произвести ряд сервисных операций на новом SSD диске.
Подключаемся к малинке.
Если все было сделано верно, то нас встретит окно:
Нажимаем “ДА” и авторизуемся в терминале.
Первым делом командой
1 | passwd |
сменим пароль поумолачнию от учетной запиcи pi на свой.
Вводим текущий пароль raspberry нажимаем ENTER и дважды вводим новый пароль. После каждого раза нажимаем ENTER
Теперь, как и в прошлый раз установим все обновления на малинку. Скрины можете посмотреть выше. Вот используемые команды:
1 2 3 | sudo apt-get update sudo apt-get upgrade |
Если ОС малинки попросит, для подтверждения нажимаем Y.
Добавим нового пользователя командой
1 | sudo adduser имя_пользователя |
Назначаем пользователю пароль и заполняем или не заполняем дополнительные поля. Так сказать по вкусу.
Добавляем нового пользователя в группу sudo (для тех кто не в теме, даем права админа) командой
1 | sudo usermod -aG sudo имя_пользователя |
Теперь командой
1 | su имя_пользователя |
можно приключаться между пользователями.
Теперь установим файловый менежер mc
Делается это командой
1 | sudo apt-get install mc |
Кому-то это может не понравится, но мне так работать удобнее.
Займемся настройкой сети.
Откроем конфигурационный файл командой
1 | sudo mcedit /etc/network/interfaces |
И добавим в файл следующие строки
1 2 3 4 5 6 7 8 9 10 | auto lo iface lo inet loopback #iface eth0 inet manual allow-hotplug eth0 iface eth0 inet static address 192.168.0.100 #меняем на адрес своей малинки netmask 255.255.255.0 gateway 192.168.0.1 #меняем на адрес своего роутера |
Еще раз на всякий случай напоминаю, что вместо 192.168.0.100 пишем адрес, который вы хотите присвоить своей малине, а вместо 192.168.0.1 пишем адрес своего роутера. Иначе сеть перестанет работать.
Изменения в файле сохраняем клавишей F2, закрываем текстовый редактор клавишей F10.
Выполним команду
1 | sudo raspi-config |
И через пункт 8 Update Update this tool to the latest version проверяем обновления
Переходим в пункт 5 Localisation Options Configure language and regional settings
Потом в пункт L1 Locale Configure language and regional settings
Выбираем локаль [*] ru_RU.UTF-8 UTF-8
Выбираем пункт <OK>
На следующем окне снова выбираем ru_RU.UTF-8
Выбираем пункт <OK>
Переходим в пункт 5 Localisation Options Configure language and regional settings
Выбираем пункт L2 Timezone Configure time zone
И выбираем свой часовой пояс. Вот так выбирается часовой пояс города Минск.
На этом подготовка Raspberry Pi 4 для установки Home Assistant завершена. Переходим непосредственно к самой установке.
Устанавливаем необходимые пакеты следующей командой:
1 | sudo apt-get install -y bash curl git jq avahi-daemon dbus apparmor-utils network-manager libavahi-compat-libdnssd-dev libatlas3-base apt-transport-https ca-certificates socat software-properties-common ftpd |
После установки пакетов перезагружаемся командой:
1 | sudo reboot |
После перезагрузки подключаемся к малинке используя IP адрес прописанный на этапе настройки сети.
Если все было сделано верно, то нас встретит окно:
Ну а дальше авторизуемся в консоли малинки. Хотите – авторизуйтесь учетной записью pi, а хотите – своей собственной, которую вы создали ранее.
Командой
1 | sudo curl -fsSL get.docker.com -o get-docker.sh && sh get-docker.sh |
устанавливаем docker
Создаем группу docker, если она не создалась автоматически:
1 | sudo groupadd docker |
Добавляем туда текущего пользователя
1 2 3 | sudo gpasswd -a $USER docker newgrp docker |
Теперь займемся установкой Portainer
Для этого выполним команды:
1 2 3 4 5 | docker pull portainer/portainer docker volume create portainer_data docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer |
После указанных действий Portainer запустится.
Далее необходимо перейти по адресу http://IP_малины:9000
На открывшейся страничке задаем пароль администратора
Кстати, не обязательно использовать имя пользователя admin. Можно использовать то, которое нравится больше. Рекомендую использовать латиницу. После того как задали имя пользователя и пароль, нужно нажать кнопку Create.
На следующей странице выбираем пункт LOCAL и жмем кнопку Connect
Возвращаемся к консоли малинки (putty).
Повышаем себе права до уровня root командой:
1 | sudo su |
Проверим разрядность установленной ОС на малине командой:
1 | getconf LONG_BIT |
Разрядность системы должна быть 32 бит, соответственно, команда вернет значение 32
Теперь непосредственно к установке Home Assistant. Выполним команду для скачивания скрипта установки:
1 | curl -Lo installer.sh https://raw.githubusercontent.com/home-assistant/supervised-installer/master/installer.sh |
И запустим его командой
1 | bash installer.sh --machine raspberrypi4 |
Подтверждаем свои действия нажав Y
После окончания работы скрипта в докере появились новые контейнеры
А по адресу http://IP_малины:8123 стал доступен web интерфейс home assistant.
Требуется подождать некоторое время до завершения автоматической конфигурации Home Assistant
После завершения сервисных задач Web интерфейс home assistant будет иметь следующий вид.
На этом установку Home Assistant на внешний SSD накопитель Raspberry Pi 4 B можно считать оконченной.
Надеюсь, что данная статья будет для Вас полезной.
В части перевода Raspberry Pi на загрузку с USB накопителя, статья может применяться не только для развертывания серверов умного дома, но и для других задач, где раньше узким местом являлась пропускная способность MicroSD картридера, либо где требовался интенсивный обмен данными от которого карты памяти быстро помирали.
Если вам понравилась статья и вы хотите поддержать сайт, вступите в нашу группу Вконтакте: https://vk.com/ionline_by
Если вы хотите оперативно получать уведомления о выходе новых статей, подключите себе PUSH уведомления по ссылке: https://ionlineby.pushassist.com/
А еще не забывайте подписываться на инстаграмм сайта https://www.instagram.com/ionline.by/