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

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.

Рейтинг
( 4 оценки, среднее 5 из 5 )
Понравилась статья? Поделиться с друзьями:
Комментарии: 2
  1. Alex013

    Привет! Спасибо за материал.
    Вы получили HA с Supervisor?

    1. Vladimir (автор)

      Нет, только Home Assistant

Добавить комментарий

Этот сайт защищен reCAPTCHA и применяются Политика конфиденциальности и Условия обслуживания применять.

:) :D :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.