Приветствую!
На днях решил попробовать установить Home Assistant на операционную систему FreeBSD.
Home Assistant написан на языке Python, что позволяет запустить его практически на всех платформах в которых можно установить интерпретатор Python.
Я буду устанавливать на версии FreeBSD 12.1.
Предполагаем, что система у нас девственно чистая, установим с помощью pkg нужный нам софт:
pkg install python37 py37-sqlite3 sudo
Установим PIP
python3.7 -m ensurepip
Для безопасности создадим пользователя hass под которым будем устанавливать и запускать Home Assistant:
pw useradd -n hass -c "Home Assistant" -L russian -s /bin/tcsh -m -w random
Где:
- -n — имя пользователя hass;
- -с — комментарий Home Assistant;
- -L указываем класс, для поддержки русского языка russian;
- -s — указываем какой шелл будет у пользователя по умолчанию tcsh;
- -m — данный ключ создаст пользовательскую директорию /home/hass;
- -w — указываем чтобы пароль сгенерировался случайным образом random
Группу мы не указывали (ключ -g), поэтому будет создана группа — hass.
Пока мы root, создадим сразу файл для лога Home Assistant и дадим на него разрешение пользователю hass:
touch /var/log/home-assistant.log && chown hass /var/log/home-assistant.log
Авторизуемся пользователем hass:
sudo -u hass tcsh
Перейдем в домашний каталог пользователя:
cd /home/hass
Установим для данного пользователя виртуальное окружение Python:
% python3.7 -m venv env
Активируем данное окружение:
% source env/bin/activate.csh
Установим Home Assistant:
% pip3 install homeassistant
Запускаем:
% hass
Home Assistant при первом запуске будет докачивать нужные ему библиотеки, не знаю почему не реализовано закачивание всех зависимостей через pip.
Через какое-то время он поднимет веб-интерфейс на 8123 порту.
# sockstat | grep 8123 hass python3.7 750 31 tcp4 *:8123 *:*
Можем зайти через браузер на указанный порт, где будет предложено создать учетную запись:

После того, как создадим запись, гасим сервер командой в терминале Ctrl+c
Внесем в cron команду на запуск hass после перезагрузки:
crontab -u hass -e @reboot /usr/home/hass/env/bin/python3.7 /usr/home/hass/env/bin/hass -v -c /home/hass/.homeassistant/ --pid-file /tmp/hass.pid --daemon --log-file /var/log/home-assistant.log --log-rotate-days 3
Либо лучший вариант — создадим скрипт автозапуска:
# vi /usr/local/etc/rc.d/hass
#!/bin/sh
# $FreeBSD$
#
# PROVIDE: hass
# REQUIRE: LOGIN
# KEYWORD: shutdown
# Add these lines to /etc/rc.conf.local or /etc/rc.conf
# to enable this service:
#
# hass_enable (bool): Set to NO by default.
# Set it to YES to enable home-assistant.
# hass_pidfile (path): Set to /var/run/home-assistant/hass.pid by default.
# hass_user (user): Set to hass by default.
# hass_config_dir (path): Set to /usr/local/etc/home-assistant/ by default.
# hass_logfile (path): Set to /var/log/home-assistant.log by default.
. /etc/rc.subr
name=hass
rcvar=${name}_enable
start_cmd=${name}_start
stop_cmd=${name}_stop
status_cmd=${name}_status
load_rc_config $name
: ${hass_enable:=NO}
: ${hass_pidfile:=/tmp/hass.pid}
: ${hass_user:=hass}
: ${hass_config_dir:=/home/hass/.homeassistant/}
: ${hass_logfile:=/var/log/home-assistant.log}
sudo=/usr/local/bin/sudo
command=/usr/home/hass/env/bin/hass
command_args="-v -c $hass_config_dir --pid-file $hass_pidfile --daemon --log-file $hass_logfile --log-rotate-days 3"
hass_start()
{
if [ -f $hass_pidfile ] && kill -0 $(cat $hass_pidfile) >/dev/null 2>&1 ; then
echo 'Service already running'
return 1
fi
echo 'Starting service'
$sudo -u $hass_user $command $command_args
echo 'Service started'
}
hass_status()
{
if [ -f $hass_pidfile ] ; then
echo 'Hass already running!'
else
echo 'Hass is not running!'
fi
}
hass_stop()
{
if [ ! -f $hass_pidfile ] || ! kill -0 $(cat $hass_pidfile) >/dev/null 2>&1 ; then
echo 'Service not running'
return 1
fi
echo 'Stopping service'
kill $(cat $hass_pidfile)
while ps -p $(cat $hass_pidfile) >/dev/null 2>&1 ; do sleep 1;done
rm /tmp/hass.pid
echo 'Service stopped'
}
run_rc_command "$1"
Делаем его исполняемым и разрешаем запуск:
chmod +x /usr/local/etc/rc.d/hass echo hass_enable=\"YES\" >> /etc/rc.conf
Запустим:
# service hass start Starting service Service started
Последняя проверка:)
# sockstat | grep hass hass python3.7 3344 4 stream -> ?? hass python3.7 3344 5 stream -> ?? hass python3.7 3344 10 udp4 *:5353 *:* hass python3.7 3344 11 udp4 *:5353 *:* hass python3.7 3344 12 udp4 *:5353 *:* hass python3.7 3344 13 stream -> ?? hass python3.7 3344 14 stream -> ?? hass python3.7 3344 31 tcp4 *:8123 *:*
Вроде все, в следующей заметке пожалуй рассмотрим как это все убрать за NGINX с бесплатными сертификатами от Let’s Encrypt.
Привет! Спасибо за материал.
Вы получили HA с Supervisor?
Нет, только Home Assistant