Установка Home Assistant на FreeBSD
В FreeBSD установка программ может происходить из пакетов и из портов. Установка из портов - это теплый ламповый метод построения своего внутреннего мира, но этот метод требует гораздо больше времени.
Установка Home Assistant
Первым делом, при установке программ из портов, обновляем порты. Про использование и обновление портов хорошо расписано в документации на сайте FreeBSD.
Обновление портов:
# svn update /usr/ports или # portsnap fetch update
На сайте Home Assistant рекомендован python версии 3.8, работу на версии 3.7 обещали выпилить после 07.12.2020. Устанавливаем необходимые программы, при сборке py-sqlite3
указываем версию python. В процессе первого запуска выяснилось, что для работы frontend'а необходим компонент py-pillow
, для версии 3.8 его нет, но есть для версии 3.7 и с ним всё работает, единственное, что py37-pillow
притаскивает за собой в систему и python 3.7.
# cd /usr/ports/security/ca_root_nss && make install clean # cd /usr/ports/shells/bash && make install clean # cd /usr/ports/databases/sqlite3 && make install clean # cd /usr/ports/lang/python38 && make install clean # cd /usr/ports/databases/py-sqlite3 && make FLAVOR=py38 install clean # cd /usr/ports/graphics/py-pillow && make install clean
Альтернативный вариант для тех кто предпочитает ставить из пакетов и дорожит временем и нервами:
# pkg install ca_root_nss bash python38 py38-sqlite3 py37-pillow sqlite3
Создание нового пользователя homeassistant
от имени которого будет работать сервис, основным командным интерпритатором указываем Bash
, не зря же ждали его сборки из пакетов :). У пользователя будет домашний каталог и отключен парольный доступ, для взаимодействия с устройствами Z-Wave и ZigBee добавляем его в группу dialer
.
# pw useradd -n homeassistant -G dialer <span class="enlighter-text">-s /usr/local/bin/bash </span>-m -w no
Создаем папку для ядра Home Assistant и устанавливаем пользователя homeassistant
для неё владельцем.
# mkdir /usr/local/homeassistant # chown homeassistant:homeassistant /usr/local/homeassistant/
Теперь создаем виртуальное окружение для ядра Home Assistant, делаем это для учетной записи homeassistant
.
# su homeassistant $ cd /usr/local/homeassistant/ $ python3.8 -m venv . $ source ./bin/activate $ pip install --upgrade pip wheel $ pip install homeassistant --use-feature=2020-resolver
Создаем начальную конфигурацию в домашнем каталоге /home/homeassistant
$ hass --script ensure_config
Запускаем наш Home Assistant в первый раз.
$ hass
Проверяем доступность установленной системы через браузер, первый запуск может занять какое то время.
http://ha_ip_address:8123
Прерываем работу запущенной системы.
Ctrl+C
Выходим из учетной записи пользователя homeassistant
.
$ deactivate && exit
Создаем файл для запуска сервиса при старте системы.
# touch /usr/local/etc/rc.d/homeassistant
Заполняем созданный файл. Оригинал скрипта и последние его изменения лежат здесь. При использовании оригинального скрита необходимо подправить в переменной homeassistant_venv
путь к папке с установленным ядром Home Assistant
#!/bin/sh # # https://github.com/tprelog/iocage-homeassistant/blob/master/overlay/usr/local/etc/rc.d/homeassistant # # PROVIDE: homeassistant # REQUIRE: LOGIN # KEYWORD: shutdown # # homeassistant_enable: Set to YES to enable the homeassistant service. # Default: NO # # homeassistant_user: The user account used to run the homeassistant daemon. # This is optional, however do not specifically set this to an # empty string as this will cause the daemon to run as root. # Default: "homeassistant" # # homeassistant_group: The group account used to run the homeassistant daemon. # Default: "homeassistant" # # homeassistant_config_dir: Directory where the homeassistant `configuration.yaml` is located. # Default: "$HOME/.homeassistant" # Change: `sysrc homeassistant_config_dir="/usr/local/etc/homeassistant"` # Reset to default: `sysrc -x homeassistant_config_dir` # # homeassistant_venv: Directory where the homeassistant virtualenv is located. # Default: "/usr/local/share/homeassistant" # Change: `sysrc homeassistant_venv="/srv/homeassistant"` # Reset to default: `sysrc -x homeassistant_venv` # ------------------------------------------------------- # Copy this file to '/usr/local/etc/rc.d/homeassistant' # `chmod +x /usr/local/etc/rc.d/homeassistant` # `sysrc homeassistant_enable=yes` # `service homeassistant start` # ------------------------------------------------------- . /etc/rc.subr name=homeassistant rcvar=${name}_enable pidfile_child="/var/run/${name}.pid" pidfile="/var/run/${name}_daemon.pid" logfile="/var/log/${name}.log" load_rc_config ${name} : ${homeassistant_enable:="NO"} : ${homeassistant_user:="homeassistant"} : ${homeassistant_group:="homeassistant"} : ${homeassistant_config_dir:="/home/homeassistant/.homeassistant"} : ${homeassistant_venv:="/usr/local/homeassistant"} command="/usr/sbin/daemon" start_precmd=${name}_prestart homeassistant_prestart() { install -g ${homeassistant_group} -m 664 -o ${homeassistant_user} -- /dev/null "${logfile}" \ && install -g ${homeassistant_group} -m 664 -o ${homeassistant_user} -- /dev/null "${pidfile}" \ && install -g ${homeassistant_group} -m 664 -o ${homeassistant_user} -- /dev/null "${pidfile_child}" \ || return 1 if [ ! -d "${homeassistant_config_dir}" ]; then install -d -g ${homeassistant_group} -m 775 -o ${homeassistant_user} -- "${homeassistant_config_dir}" \ || return 1 fi HA_CMD="${homeassistant_venv}/bin/hass" HA_ARGS="--config ${homeassistant_config_dir}" if [ -n "${homeassistant_log_file}" ]; then install -g ${homeassistant_group} -m 664 -o ${homeassistant_user} -- /dev/null "${homeassistant_log_file}" \ && HA_ARGS="${HA_ARGS} --log-file ${homeassistant_log_file}" fi if [ -n "${homeassistant_log_rotate_days}" ]; then HA_ARGS="${HA_ARGS} --log-rotate-days ${homeassistant_log_rotate_days}" fi rc_flags="-f -o ${logfile} -P ${pidfile} -p ${pidfile_child} ${HA_CMD} ${HA_ARGS}" } start_postcmd=${name}_poststart homeassistant_poststart() { sleep 1 run_rc_command status } restart_precmd="${name}_prerestart" homeassistant_prerestart() { eval "${homeassistant_venv}/bin/hass" --config "${homeassistant_config_dir}" --script check_config } status_cmd=${name}_status homeassistant_status() { if [ -n "$rc_pid" ]; then echo "${name} is running as pid $rc_pid." echo "http://`ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'`:8123" else echo "${name} is not running." return 1 fi } stop_postcmd=${name}_postcmd homeassistant_postcmd() { rm -f -- "${pidfile}" rm -f -- "${pidfile_child}" } run_rc_command "$1"
Устанавливаем права на запуск скрипта:
# chmod 755 /usr/local/etc/rc.d/homeassistant
Добавляем скрипт в автозапуск и стартуем сервис:
# sysrc homeassistant_enable="YES" # service homeassistant start
Через Web браузер проверяем работу Home Assistant.
http://ha_ip_address:8123
Обновление Home Assistant
Для обновления до последней версии необходимо выполнить следующие команды.
# su homeassistant $ cd /usr/local/homeassistant/ $ source ./bin/activate $ pip install --upgrade homeassistant $ deactivate && exit # service homeassistant restart
Обратите внимание, что первый запуск Home Assistant после обновления может занять некоторое время.
Комментарии
Я, как новичок в HomeAssistant по данной статье смог установить и настроить HASS. Спасибо автору.
Буду признателен, если автор порекомендует под FreeBSD координатор в USB :)
А как можно установить на FreeBSD HA c Supervisorом?
На сколько я понимаю Supervisor это фишка Docker контейнеров, вам надо копать в эту сторону.