Установка 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 контейнеров, вам надо копать в эту сторону.