143 lines
6.2 KiB
Markdown
143 lines
6.2 KiB
Markdown
---
|
||
layout: post
|
||
title: "Using Fedora Atomic with Home Assistant"
|
||
description: "Running Home Assistant on a Fedora Atomic host."
|
||
date: 2018-03-29 22:00:00
|
||
date_formatted: "March 29, 2018"
|
||
author: Fabian Affolter
|
||
author_twitter: fabaff
|
||
comments: true
|
||
categories: Announcements
|
||
og_image: /images/blog/2018-03-fedora-atomic/social.png
|
||
---
|
||
|
||
|
||
The Hackerspace [Eastermundigen](http://www.eastermundigen.ch/) is often my real-world playground for Home Assistant-related topics which sometimes more belong in the industrial automation area than in a home. Also, it gives me access to devices which I don't have like 3D printers, laser cutters, connected power strips and a like. In the past the local Home Assistant instance there was running on an old [CubieBoard2](http://cubieboard.org/) with [Fedora ARM](https://arm.fedoraproject.org/). It was one of several systems which were running 24/7. To reduce the electricity costs we decided to consolidate the physical systems to only two. One for storage and one for all other services.
|
||
|
||
<!--more-->
|
||
|
||
This blog post contains the details of the setup. They may be useful for others as well. Our new system is running Fedora 27 from [Project Atomic](http://www.projectatomic.io). We will not cover the setup of an Atomic host and the details of Project Atomic itself. For more details, have a look at [Benjamin Affolter](https://twitter.com/bliemli)'s [blog post](https://www.puzzle.ch/blog/articles/2017/09/28/atomic-host-basic-setup-and-usage) which also covers some of the basics.
|
||
|
||
The installation process of an Atomic host is pretty much the same as for Fedora Server or Fedora Workstation. Either create a Live USB device or use PXE to get the installation going. E.g., lauch iPXE and chainload [netboot.yxz](https://netboot.xyz/) with `chain --autofree https://boot.netboot.xyz`. Then let `anaconda` guide you through the setup.
|
||
|
||
After the first boot, copy the SSH keys, use `visudo` to add users and perform the usual steps you do for a new system. We only allow SSH with keys, are enforcing the usage of `sudo`, need special network settings and a couple of other things. But those configuration settings are irrelevant for a setup in a local network.
|
||
|
||
If the system is up and running then check if you are using the latest release.
|
||
|
||
```bash
|
||
$ sudo atomic host status
|
||
State: idle; auto updates disabled
|
||
Deployments:
|
||
● ostree://fedora-atomic:fedora/27/x86_64/atomic-host
|
||
Version: 27.100 (2018-03-13 17:19:44)
|
||
Commit: 326f62b93a5cc836c97d31e73a71b6b6b6955c0f225f7651b52a693718e6aa91
|
||
GPGSignature: Valid signature by 860E19B0AFA800A1751881A6F55E7430F5282EE4
|
||
```
|
||
|
||
The release is 27.100. The latest is 27.105. So, let's update the host and reboot it.
|
||
|
||
```bash
|
||
$ sudo atomic host upgrade
|
||
$ sudo systemctl reboot
|
||
```
|
||
|
||
You can also see that Docker is already running. No installation needed.
|
||
|
||
```bash
|
||
$ sudo systemctl status docker
|
||
● docker.service - Docker Application Container Engine
|
||
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
|
||
Active: active (running) since Thu 2018-03-28 15:44:04 CEST; 35min ago
|
||
...
|
||
```
|
||
|
||
Further we will cover how it works for Home Assistant and [Mosquitto](https://mosquitto.org/). For a small setup using [kubernetes](https://kubernetes.io) seems a bit overkill. Thus, we decided to stick to `systemd`.
|
||
|
||
Instead of `docker` we can use the command-line tool [`atomic`](http://www.projectatomic.io/docs/usr-bin-atomic/) to perform a lot of tasks. Download the images for the containers. We are pulling the images from [Docker Hub](https://hub.docker.com/), thus we need to add the registry to use.
|
||
|
||
```bash
|
||
$ sudo atomic install docker.io/homeassistant/home-assistant
|
||
$ sudo atomic install docker.io/eclipse-mosquitto
|
||
```
|
||
|
||
Both containers need additional directories for persistent storage.
|
||
|
||
```bash
|
||
$ sudo mkdir -p /opt/home-assistant
|
||
$ sudo mkdir -p /opt/mosquitto/{config,data,log}
|
||
```
|
||
|
||
We need a copy of `mosquitto.conf` to run Mosquitto later:
|
||
|
||
```bash
|
||
$ sudo curl -o /opt/mosquitto/config/mosquitto.conf \
|
||
https://raw.githubusercontent.com/eclipse/mosquitto/master/mosquitto.conf
|
||
```
|
||
|
||
To handle the containers we created service unit files for the [Home Assistant](https://hub.docker.com/r/homeassistant/home-assistant/) and the [Mosquitto](https://hub.docker.com/_/eclipse-mosquitto/) container. For Home Assistant and Mosquitto the file can looks like the sample below. Further details about the `ExecStart` line can be found in the documentation about a [Docker](/docs/installation/docker/) setup. For Home Assistant
|
||
|
||
```bash
|
||
$ su
|
||
# cat <<'EOF' >> /etc/systemd/system/home-assistant.service
|
||
[Unit]
|
||
Description=Home Assistant
|
||
Requires=docker.service
|
||
Wants=docker.service
|
||
After=docker.service
|
||
|
||
[Service]
|
||
Restart=on-failure
|
||
RestartSec=10
|
||
ExecStart=/usr/bin/docker run --rm --name %p -v /opt/home-assistant:/config:Z -v /etc/localtime:/etc/localtime:ro --network host homeassistant/home-assistant
|
||
ExecStop=-/usr/bin/docker stop -t 30 %p
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
EOF
|
||
```
|
||
|
||
and for Mosquitto.
|
||
|
||
```bash
|
||
# cat <<'EOF' >> /etc/systemd/system/mosquitto.service
|
||
[Unit]
|
||
Description=Mosquitto MQTT docker container
|
||
Requires=docker.service
|
||
Wants=docker.service
|
||
After=docker.service
|
||
|
||
[Service]
|
||
Restart=on-failure
|
||
RestartSec=10
|
||
ExecStart=/usr/bin/docker run --name %p -v mosquitto.conf:/opt/mosquitto/config/mosquitto.conf -v /opt/mosquitto/data:/opt/mosquitto/data -v /opt/mosquitto/log:/mosquitto/log -p 1883:1883 -p 9001:9001 eclipse-mosquitto
|
||
ExecStop=/usr/bin/docker stop -t 2 %p
|
||
ExecStopPost=/usr/bin/docker rm -f %p
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
EOF
|
||
```
|
||
|
||
Exit to be not longer `root`.
|
||
|
||
```bash
|
||
# exit
|
||
```
|
||
|
||
Reload `systemd` to make it aware of the new configurations.
|
||
|
||
```bash
|
||
$ sudo systemctl daemon-reload
|
||
```
|
||
|
||
Now, both container can be controlled by `systemctl`.
|
||
|
||
```bash
|
||
$ sudo systemctl enable home-assistant.service --now
|
||
$ sudo systemctl enable mosquitto.service --now
|
||
```
|
||
|
||
Check with `$ sudo systemctl status [name].service` if there are error or the services are running.
|
||
|
||
The deployment of [NGINX](https://nginx.org/en/) as webserver for static content, [grafana](https://grafana.com/) and [InfluxBD](https://www.influxdata.com/) works the same way as for Home Assistant and Mosquitto. To get a proper [traefik](https://traefik.io/) setup additional reading and work is required.
|
||
|