Skip to content

Instantly share code, notes, and snippets.

@akozlenkov
Last active March 23, 2021 09:13
Show Gist options
  • Select an option

  • Save akozlenkov/cfada81c99d2d04e88b47960ac77e674 to your computer and use it in GitHub Desktop.

Select an option

Save akozlenkov/cfada81c99d2d04e88b47960ac77e674 to your computer and use it in GitHub Desktop.
Установка home-assistant на wirenboard
FROM arm32v7/debian:stretch as builder
RUN apt-get update && apt-get install -y wget build-essential libffi-dev zlib1g-dev libncurses5-dev libncursesw5-dev libreadline-dev libsqlite3-dev libgdbm-dev libdb5.3-dev libbz2-dev libexpat1-dev liblzma-dev libffi-dev uuid-dev tk-dev
RUN wget -qO- https://github.com/openssl/openssl/archive/OpenSSL_1_1_1j.tar.gz | tar -xz -C /usr/src/
RUN cd /usr/src/openssl-OpenSSL_1_1_1j && ./config -Wl,-Bsymbolic-functions -fPIC shared --prefix=/usr/local/openssl && make && make install && tar cvfz /openssl-1.1.1j.tar.gz /usr/local/openssl
ENV CFLAGS="-I/usr/local/openssl/include" LDFLAGS="-L/usr/local/openssl/lib" LD_LIBRARY_PATH="/usr/local/openssl/lib" PATH="/usr/local/openssl/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
RUN wget -qO- https://www.python.org/ftp/python/3.9.2/Python-3.9.2.tgz | tar -xz -C /usr/src/
RUN cd /usr/src/Python-3.9.2 && ./configure --prefix=/usr/local/python3.9 --with-openssl=/usr/local/openssl --with-ensurepip=install --enable-optimizations && make && make install && tar cvfz /python-3.9.2.tar.gz /usr/local/python3.9
FROM scratch as artifacts
COPY --from=builder /openssl-1.1.1j.tar.gz .
COPY --from=builder /python-3.9.2.tar.gz .

Для установки home-assistant нам понадобится собрать openssl-1.1.1g+ и python-3.9.2+. Чтобы не захламлять wirenboard лишними пакетами и ускорить сборку, будем собирать в docker. Для этого устанавливаем на любую рабочую машину docker и создаем рабочий каталог:

$ mkdir -p /Users/someuser/WB && cd $_

Скачиваем Dockerfile для сборки пакетов:

$ wget https://gist.githubusercontent.com/akozlenkov/cfada81c99d2d04e88b47960ac77e674/raw/8767d00638e8ccea7825357efaf3ab757984f356/Dockerfile

Запускаем сборку пакетов:

$ DOCKER_BUILDKIT=1 docker build --target artifacts --output type=local,dest=. .

PS: Если лень собирать, то скачать архивы можно тут

По завершению сборки переносим архивы openssl-1.1.1j.tar.gz и python-3.9.2.tar.gz на wirenboard в директорию /mnt/data .

# scp openssl-1.1.1j.tar.gz wirenboard.local:/mnt/data && scp python-3.9.2.tar.gz wirenboard.local:/mnt/data // Либо другим удобным способом.

Распаковываем архивы в /mnt/data:

# tar xvfz openssl-1.1.1j.tar.gz && tar xvfz python-3.9.2.tar.gz

Создаем симлинки:

# ln -s /mnt/data/usr/local/openssl /usr/local/openssl && ln -s /mnt/data/usr/local/python3.9 /usr/local/python3.9 && ln -s /usr/local/python3.9 /usr/local/python3

Добавляем необходимые переменные:

# echo -e 'export CFLAGS="-I/usr/local/openssl/include"\nexport LDFLAGS="-L/usr/local/openssl/lib"\nexport LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/openssl/lib\nexport PATH=/usr/local/openssl/bin:/usr/local/python3/bin:${PATH}' >> ~/.bashrc && source ~/.bashrc

Проверяем, что openssl работает:

# openssl version // Должно показать что то вроде - OpenSSL 1.1.1j 16 Feb 2021

Проверяем, что python работает:

# python3 -V // Должно показать версию нашего python - 3.9.2

Создаем директории для home-assistant:

# mkdir -p /mnt/data/{tmp,home-assistant}

Создаем виртуальное окружение python для home-assistant:

# cd /mnt/data/home-assistant && python3 -m venv .venv && source .venv/bin/activate

Устанавливаем зависимости home-assistant:

(.venv) # apt-get update && apt-get install -y gcc make ffmpeg libffi-dev libsqlite3-dev zlib1g-dev libjpeg-dev

Устанавливаем home-assistant:

(.venv) # TMPDIR=/mnt/data/tmp pip3 install homeassistant

Скачиваем systemd unit и запускаем сервис:

(.venv) # wget https://gist.githubusercontent.com/akozlenkov/cfada81c99d2d04e88b47960ac77e674/raw/edd73dd67f36f948a9a95cc24714dc759d6ecdbc/home-assistant.service -O /lib/systemd/system/home-assistant.service && systemctl daemon-reload && systemctl enable home-assistant && systemctl start home-assistant

[Unit]
Description=Home Assistant
Requires=network.target
Documentation=https://www.home-assistant.io/
[Service]
Type=forking
PIDFile=/var/run/home-assistant.pid
Environment="LD_LIBRARY_PATH=/usr/local/openssl/lib"
ExecStart=/mnt/data/home-assistant/.venv/bin/python3 /mnt/data/home-assistant/.venv/bin/hass -c /mnt/data/home-assistant --pid-file /var/run/home-assistant.pid --log-rotate-days 1 --log-file /var/log/home-assistant.log --daemon
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /var/run/home-assistant.pid
TimeoutStopSec=5
KillMode=mixed
Restart=on-failure
[Install]
WantedBy=multi-user.target
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment