FreeBSD: устанавливаем Home Assistant

Приветствую!
На днях решил попробовать установить 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                *:*

Можем зайти через браузер на указанный порт, где будет предложено создать учетную запись:
FreeBSD: устанавливаем Home Assistant

После того, как создадим запись, гасим сервер командой в терминале 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.

2 комментария к “FreeBSD: устанавливаем Home Assistant”

Оставьте комментарий