Compare commits

..

No commits in common. "main" and "1.0.2" have entirely different histories.
main ... 1.0.2

22 changed files with 112 additions and 566 deletions

View file

@ -13,7 +13,7 @@ body:
attributes:
label: OS Version
description: Please Insert the output of `lsb_release -d`
placeholder: Debian GNU/Linux 12 (bookworm)
placeholder: Debian GNU/Linux 11 (bullseye)
validations:
required: true
- type: input
@ -21,7 +21,7 @@ body:
attributes:
label: System Information
description: Please Insert the output of `uname -a`
placeholder: 'Linux ha 6.1.0-26-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.112-1 (2024-09-30) x86_64 GNU/Linux'
placeholder: 'Linux ha-su-deb 5.10.0-9-amd64 #1 SMP Debian 5.10.70-1 (2021-09-30) x86_64 GNU/Linux'
validations:
required: true
- type: textarea
@ -46,7 +46,6 @@ body:
- generic-x86-64
- khadas-vim3
- odroid-c2
- odroid-c4
- odroid-n2
- odroid-xu
- qemuarm
@ -59,7 +58,6 @@ body:
- raspberrypi3-64
- raspberrypi4
- raspberrypi4-64
- raspberrypi5-64
- tinker
validations:
required: true

View file

@ -1,8 +0,0 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: weekly
time: "06:00"
open-pull-requests-limit: 10

17
.github/stale.yml vendored Normal file
View file

@ -0,0 +1,17 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 30
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- pinned
- security
# Label to use when marking an issue as stale
staleLabel: wontfix
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false

View file

@ -1,23 +0,0 @@
name: Build Test Deb Package
on:
pull_request:
branches:
- main
jobs:
build-test-deb-package:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
- name: Build Debian Package in Docker
run: |
docker run --rm -v $(pwd):/tmp debian:bookworm-slim bash -c \
"cd /tmp \
&& chmod 555 homeassistant-supervised/DEBIAN/p* \
&& dpkg-deb --build --root-owner-group homeassistant-supervised"
- name: Upload
uses: actions/upload-artifact@v4
with:
name: homeassistant-supervised.deb
path: homeassistant-supervised.deb

View file

@ -11,15 +11,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
- name: Build Debian Package in Docker
run: |
docker run --rm -v $(pwd):/tmp debian:bookworm-slim bash -c \
"cd /tmp \
&& chmod 555 homeassistant-supervised/DEBIAN/p* \
&& dpkg-deb --build --root-owner-group homeassistant-supervised"
uses: actions/checkout@v2
- run: chmod 755 homeassistant-supervised/DEBIAN/p*
- run: dpkg-deb --build --root-owner-group homeassistant-supervised
- name: Release
uses: softprops/action-gh-release@v2
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/')
with:
files: homeassistant-supervised.deb

View file

@ -1,39 +0,0 @@
name: Stale
# yamllint disable-line rule:truthy
on:
schedule:
- cron: "0 * * * *"
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v9.0.0
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
days-before-stale: 60
days-before-close: 7
stale-issue-label: "stale"
exempt-issue-labels: "no-stale,Help%20wanted,help-wanted,pinned,rfc,security"
stale-issue-message: >
There hasn't been any activity on this issue recently. Due to the
high number of incoming GitHub notifications, we have to clean some
of the old issues, as many of them have already been resolved with
the latest updates.
Please make sure to update to the latest version and check if that
solves the issue. Let us know if that works for you by
adding a comment 👍
This issue has now been marked as stale and will be closed if no
further activity occurs. Thank you for your contributions.
stale-pr-label: "stale"
exempt-pr-labels: "no-stale,pinned,rfc,security"
stale-pr-message: >
There hasn't been any activity on this pull request recently. This
pull request has been automatically marked as stale because of that
and will be closed if no further activity occurs within 7 days.
Thank you for your contributions.

17
.vscode/tasks.json vendored
View file

@ -1,17 +0,0 @@
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "Build Debian Package",
"type": "shell",
"command": "chmod 555 homeassistant-supervised/DEBIAN/p* && dpkg-deb --build --root-owner-group homeassistant-supervised",
"problemMatcher": [],
"group": {
"kind": "test",
"isDefault": true
}
}
]
}

View file

@ -1,62 +0,0 @@
INSTALLAZIONE HOME ASSISTEANT SUPERVISED
seguire il github https://github.com/home-assistant/supervised-installer
andare come utente root
su -
poi
apt install \
apparmor \
bluez \
cifs-utils \
curl \
dbus \
jq \
libglib2.0-bin \
lsb-release \
network-manager \
nfs-common \
systemd-journal-remote \
systemd-resolved \
udisks2 \
wget -y
e probabilmente vi verrà chiesto di riavviare per far funzionare NetworkManager al posto del normale programma di manager di debian
controllare che funzioni come scritto in https://wiki.debian.org/NetworkManager
nel file /etc/NetworkManager/NetworkManager.conf ci dovrà essere
[ifupdown]
managed=false
altrimenti settare come definito nel sito
il precedente file di configurazione si trova
/etc/network/interfaces
verificare se Docker-ce è installato con
docker -v
altrimenti installarlo con
curl -fsSL get.docker.com | sh
installare OS-Agent usando l'ultima versione da https://github.com/home-assistant/os-agent/releases/latest
wget https://github.com/home-assistant/os-agent/releases/download/1.6.0/os-agent_1.6.0_linux_aarch64.deb
sudo dpkg -i os-agent_1.6.0_linux_aarch64.deb
wget -O homeassistant-supervised.deb https://github.com/home-assistant/supervised-installer/releases/latest/download/homeassistant-supervised.deb
BYPASS_OS_CHECK=true apt install ./homeassistant-supervised.deb
NOTE
verificare i servizi in systemd di Home assistant
haos-agent.service Home Assistant OS Agent
hassio-apparmor.service Hass.io AppArmor
hassio-supervisor.service Hass.io supervisor
es
systemctl status hassio-supervisor.service

104
README.md
View file

@ -1,8 +1,6 @@
# This installation method is for advanced users only
### Make sure you understand [the requirements](https://github.com/home-assistant/architecture/blob/master/adr/0014-home-assistant-supervised.md)
qui il file semplificato [Hassio installer.txt](Hassio%20installer.txt)
## Make sure you understand [the requirements](https://github.com/home-assistant/architecture/blob/master/adr/0014-home-assistant-supervised.md)
# Install Home Assistant Supervised
@ -16,85 +14,40 @@ This method is considered advanced and should only be used if one is an expert i
Run the following commands as root (`su -` or `sudo su -` on machines with sudo installed):
Step 1: Install the following dependencies with this command:
Step 1: Install the following dependacy's with this command:
```bash
apt install \
apparmor \
bluez \
cifs-utils \
curl \
dbus \
apt-get install \
jq \
libglib2.0-bin \
lsb-release \
network-manager \
nfs-common \
systemd-journal-remote \
systemd-resolved \
wget \
curl \
udisks2 \
wget -y
libglib2.0-bin \
network-manager \
dbus -y
```
If you haven't been using NetworkManager before, you might see instructions on how to let NetworkManager manage the current network interface.
Step 2: Install Docker-CE with the following command:
### NetworkManager
probabilmente vi verrà chiesto di riavviare per far funzionare NetworkManager al posto del normale programma di manager di debian
controllare che funzioni come scritto in https://wiki.debian.org/NetworkManager
nel file ```/etc/NetworkManager/NetworkManager.conf``` ci dovrà essere
```
[ifupdown]
managed=false
```
altrimenti settare come definito nel sito
il precedente file di configurazione si trova
```
/etc/network/interfaces
```
### Step 2: Docker-CE:
verificare se è installato Docker-CE
```bash
docker -v
```
altrimenti va installato
```bash
curl -fsSL get.docker.com | sh
```
### Step 3: Install the OS-Agent:
Step 3: Install the OS-Agent:
Instructions for installing the OS-Agent can be found [here](https://github.com/home-assistant/os-agent/tree/main#using-home-assistant-supervised-on-debian)
Step 4: Install the Home Assistant Supervised Debian Package:
Step 4: Install the Home Assisistant Supervised Debian Package:
```bash
wget -O homeassistant-supervised.deb https://github.com/home-assistant/supervised-installer/releases/latest/download/homeassistant-supervised.deb
apt install ./homeassistant-supervised.deb
wget https://github.com/home-assistant/supervised-installer/releases/latest/download/homeassistant-supervised.deb
dpkg -i homeassistant-supervised.deb
```
Orange Pi5 Plus is not supported so you must use
```bash
BYPASS_OS_CHECK=true apt install ./homeassistant-supervised.deb
```
## Supported Machine types
- generic-x86-64
- odroid-c2
- odroid-c4
- odroid-n2
- odroid-xu
- qemuarm
@ -107,38 +60,9 @@ BYPASS_OS_CHECK=true apt install ./homeassistant-supervised.deb
- raspberrypi4
- raspberrypi3-64
- raspberrypi4-64
- raspberrypi5-64
- tinker
- khadas-vim3
## Configuration
The default path for our `$DATA_SHARE` is `/usr/share/hassio`.
This path is used to store all home assistant related things.
You can reconfigure this path during installation with
```bash
DATA_SHARE=/my/own/homeassistant dpkg --force-confdef --force-confold -i homeassistant-supervised.deb
```
## Troubleshooting
If something's going wrong, use `journalctl -f` to get your system logs. If you are not familiar with Linux and how you can fix issues, we recommend to use our Home Assistant OS.
[![Home Assistant - A project from the Open Home Foundation](https://www.openhomefoundation.org/badges/home-assistant.png)](https://www.openhomefoundation.org/)
## NOTE
verificare i servizi in systemd di Home assistant
```haos-agent.service``` Home Assistant OS Agent
```hassio-apparmor.service``` Hass.io AppArmor
```hassio-supervisor.service``` Hass.io supervisor
es
```
systemctl status hassio-supervisor.service
```
If somethings going wrong, use `journalctl -f` to get your system logs. If you are not familiar with Linux and how you can fix issues, we recommend to use our Home Assistant OS.

View file

@ -1,10 +1,9 @@
Package: homeassistant-supervised
Section: base
Version: 2.0.0
Version: 1.0.2
Priority: optional
Architecture: all
Pre-Depends: curl, bash, docker-ce, dbus, network-manager, apparmor, jq, systemd, os-agent, systemd-journal-remote, systemd-resolved
Depends: bluez, cifs-utils, nfs-common
Depends: curl, bash, docker-ce, dbus, network-manager, apparmor, jq, systemd, os-agent
Maintainer: Matheson Steplock <https://mathesonsteplock.ca/>
Homepage: https://www.home-assistant.io/
Description: Home Assistant Supervised

View file

@ -8,121 +8,81 @@ ARCH=$(uname -m)
BINARY_DOCKER=/usr/bin/docker
DOCKER_REPO="ghcr.io/home-assistant"
DOCKER_REPO=homeassistant
SERVICE_DOCKER="docker.service"
SERVICE_NM="NetworkManager.service"
# Read infos from web
URL_CHECK_ONLINE="https://checkonline.home-assistant.io/online.txt"
URL_VERSION_HOST="version.home-assistant.io"
URL_VERSION="https://version.home-assistant.io/stable.json"
HASSIO_VERSION=$(curl -s ${URL_VERSION} | jq -e -r '.supervisor')
HASSIO_VERSION=$(curl -s $URL_VERSION | jq -e -r '.supervisor')
URL_APPARMOR_PROFILE="https://version.home-assistant.io/apparmor.txt"
# reload systemd
info "Reload systemd"
systemctl daemon-reload
# Restart NetworkManager
info "Restarting NetworkManager"
systemctl restart "${SERVICE_NM}"
# Set permissions of /etc/systemd/resolved.conf
# check if file has correct permissions
if [ "$(stat -c %a /etc/systemd/resolved.conf)" != "644" ]; then
info "Setting permissions of /etc/systemd/resolved.conf"
chmod 644 /etc/systemd/resolved.conf
fi
# Enable and restart systemd-resolved
info "Enable systemd-resolved"
systemctl enable systemd-resolved.service> /dev/null 2>&1;
info "Restarting systemd-resolved"
systemctl restart systemd-resolved.service
# Check and fix systemd-journal-gatewayd socket location
if [ ! -S "/run/systemd-journal-gatewayd.sock" ]; then
info "Set up systemd-journal-gatewayd socket file"
if [ "$(systemctl is-active systemd-journal-gatewayd.socket)" = 'active' ]; then
systemctl stop systemd-journal-gatewayd.socket
fi
rm -rf "/run/systemd-journal-gatewayd.sock";
fi
# Enable and start systemd-journal-gatewayd
if [ "$(systemctl is-active systemd-journal-gatewayd.socket)" = 'inactive' ]; then
info "Enable systemd-journal-gatewayd"
systemctl enable systemd-journal-gatewayd.socket> /dev/null 2>&1;
systemctl start systemd-journal-gatewayd.socket
fi
# Start nfs-utils.service for nfs mounts
if [ "$(systemctl is-active nfs-utils.service)" = 'inactive' ]; then
info "Start nfs-utils.service"
systemctl start nfs-utils.service
fi
# Restart Docker service
info "Restarting docker service"
systemctl restart "${SERVICE_DOCKER}"
systemctl restart "$SERVICE_DOCKER"
# Check network connection
while ! curl -q ${URL_CHECK_ONLINE} >/dev/null 2>&1 ; do
info "Waiting for ${URL_CHECK_ONLINE} - network interface might be down..."
while ! ping -c 1 -W 1 ${URL_VERSION_HOST}; do
info "Waiting for ${URL_VERSION_HOST} - network interface might be down..."
sleep 2
done
# Get primary network interface
PRIMARY_INTERFACE=$(ip route | awk '/^default/ { print $5; exit }')
IP_ADDRESS=$(ip -4 addr show dev "${PRIMARY_INTERFACE}" | awk '/inet / { sub("/.*", "", $2); print $2 }')
case ${ARCH} in
case $ARCH in
"i386" | "i686")
MACHINE=${MACHINE:=qemux86}
HASSIO_DOCKER="${DOCKER_REPO}/i386-hassio-supervisor"
HASSIO_DOCKER="$DOCKER_REPO/i386-hassio-supervisor"
;;
"x86_64")
MACHINE=${MACHINE:=qemux86-64}
HASSIO_DOCKER="${DOCKER_REPO}/amd64-hassio-supervisor"
HASSIO_DOCKER="$DOCKER_REPO/amd64-hassio-supervisor"
;;
"arm" |"armv6l")
if [ -z "${MACHINE}" ]; then
db_input critical ha/machine-type || true
if [ -z $MACHINE ]; then
db_input critical ha/machine-type | true
db_go || true
db_get ha/machine-type || true
MACHINE="${RET}"
MACHINE="$RET"
db_stop
fi
HASSIO_DOCKER="${DOCKER_REPO}/armhf-hassio-supervisor"
HASSIO_DOCKER="$DOCKER_REPO/armhf-hassio-supervisor"
;;
"armv7l")
if [ -z "${MACHINE}" ]; then
db_input critical ha/machine-type || true
if [ -z $MACHINE ]; then
db_input critical ha/machine-type | true
db_go || true
db_get ha/machine-type || true
MACHINE="${RET}"
MACHINE="$RET"
db_stop
fi
HASSIO_DOCKER="${DOCKER_REPO}/armv7-hassio-supervisor"
HASSIO_DOCKER="$DOCKER_REPO/armv7-hassio-supervisor"
;;
"aarch64")
if [ -z "${MACHINE}" ]; then
db_input critical ha/machine-type || true
if [ -z $MACHINE ]; then
db_input critical ha/machine-type | true
db_go || true
db_get ha/machine-type || true
MACHINE="${RET}"
MACHINE="$RET"
db_stop
fi
HASSIO_DOCKER="${DOCKER_REPO}/aarch64-hassio-supervisor"
HASSIO_DOCKER="$DOCKER_REPO/aarch64-hassio-supervisor"
;;
*)
error "${ARCH} unknown!"
error "$ARCH unknown!"
;;
esac
PREFIX=${PREFIX:-/usr}
SYSCONFDIR=${SYSCONFDIR:-/etc}
DATA_SHARE=${DATA_SHARE:-$PREFIX/share/hassio}
CONFIG="${SYSCONFDIR}/hassio.json"
cat > "${CONFIG}" <<- EOF
CONFIG=$SYSCONFDIR/hassio.json
cat > "$CONFIG" <<- EOF
{
"supervisor": "${HASSIO_DOCKER}",
"machine": "${MACHINE}",
@ -130,6 +90,10 @@ cat > "${CONFIG}" <<- EOF
}
EOF
# Pull Supervisor image
info "Install supervisor Docker container"
docker pull "$HASSIO_DOCKER:$HASSIO_VERSION" > /dev/null
docker tag "$HASSIO_DOCKER:$HASSIO_VERSION" "$HASSIO_DOCKER:latest" > /dev/null
# Install Supervisor
info "Install supervisor startup scripts"
@ -144,7 +108,6 @@ systemctl enable hassio-supervisor.service > /dev/null 2>&1;
# Install AppArmor
info "Install AppArmor scripts"
mkdir -p "${DATA_SHARE}/apparmor"
curl -sL ${URL_APPARMOR_PROFILE} > "${DATA_SHARE}/apparmor/hassio-supervisor"
sed -i "s,%%HASSIO_CONFIG%%,${CONFIG},g" "${PREFIX}/sbin/hassio-apparmor"
sed -i -e "s,%%SERVICE_DOCKER%%,${SERVICE_DOCKER},g" \
@ -159,34 +122,8 @@ systemctl start hassio-apparmor.service
info "Start Home Assistant Supervised"
systemctl start hassio-supervisor.service
# Install HA CLI
info "Installing the 'ha' cli"
chmod a+x "${PREFIX}/bin/ha"
# Switch to cgroup v1
if [ -f /etc/default/grub ]
then
if ! grep -q "systemd.unified_cgroup_hierarchy=false" /etc/default/grub; then
info "Switching to cgroup v1"
cp /etc/default/grub /etc/default/grub.bak
sed -i 's/^GRUB_CMDLINE_LINUX_DEFAULT="/&systemd.unified_cgroup_hierarchy=false /' /etc/default/grub
update-grub
touch /var/run/reboot-required
fi
elif [ -f /boot/firmware/cmdline.txt ]
then
if ! grep -q "systemd.unified_cgroup_hierarchy=false" /boot/firmware/cmdline.txt; then
info "Switching to cgroup v1"
sed -i.bak 's/$/ systemd.unified_cgroup_hierarchy=false/' /boot/firmware/cmdline.txt
touch /var/run/reboot-required
fi
else
warn "Could not find /etc/default/grub or /boot/firmware/cmdline.txt failed to switch to cgroup v1"
fi
info "Within a few minutes you will be able to reach Home Assistant at:"
info "http://homeassistant.local:8123 or using the IP address of your"
info "machine: http://${IP_ADDRESS}:8123"
if [ -f /var/run/reboot-required ]
then
warn "A reboot is required to apply changes to grub."
fi

8
homeassistant-supervised/DEBIAN/postrm Executable file → Normal file
View file

@ -20,17 +20,9 @@ function undo_divert () {
--divert /etc/network/interfaces.real /etc/network/interfaces
}
function reset_debconf_selections () {
info "Resetting debconf selections"
echo PURGE | debconf-communicate homeassistant-supervised >/dev/null
}
case "$1" in
remove|abort-install|disappear)
info Undo divert on "$@"
undo_divert
reset_debconf_selections
info "Removal complete, due to the complexity of this installation method,"
info "you will need to manually remove the containers created by the supervisor"
;;
esac

View file

@ -10,35 +10,6 @@ warn "Home Assistant as a VM or run Home Assistant Core"
warn "via a Docker container."
warn ""
# Check if we are running on a supported OS
BYPASS_OS_CHECK=${BYPASS_OS_CHECK:-false}
supported_os=("Debian GNU/Linux 12 (bookworm)")
CURRENT_OS=$(lsb_release -d | awk -F"\t" '{print $2}')
os_supported=false
for os in "${supported_os[@]}"; do
if [[ $os == "$CURRENT_OS" ]]; then
os_supported=true
break
fi
done
if [[ $os_supported == false ]]; then
if [[ $BYPASS_OS_CHECK != "true" ]]; then
error "${CURRENT_OS} is not supported!"
fi
warn "Bypassing OS check..."
warn "${CURRENT_OS} is not supported!"
warn "Please DO NOT report issues regarding this OS!"
fi
# Check if we are running on a supported architecture
ARCH=$(uname -m)
if [[ ! "i386|i686|x86_64|arm|armv6l|armv7l|aarch64" == *"$ARCH"* ]]; then
error "${ARCH} is not supported!"
fi
# Check if Modem Manager is enabled
if systemctl is-enabled ModemManager.service &> /dev/null; then
warn "ModemManager service is enabled. This might cause issue when using serial devices."
@ -51,24 +22,6 @@ if [[ "$(sysctl --values kernel.dmesg_restrict)" != "0" ]]; then
echo "kernel.dmesg_restrict=0" >> /etc/sysctl.conf
fi
# If the hassio_supervisor service is running or exists, stop it
if [[ "$(systemctl is-active hassio-supervisor.service)" == "active" ]]; then
info "Stopping hassio_supervisor service"
systemctl stop hassio-supervisor.service
fi
# If the hassio_apparmor service is running or exists, stop it
if [[ "$(systemctl is-active hassio-apparmor.service)" == "active" ]]; then
info "Stopping hassio_apparmor service"
systemctl stop hassio-apparmor.service
fi
# Check for existing hassio_supervisor container and destroy it
if [[ "$(docker ps -aq -f name=hassio_supervisor)" ]]; then
# ensure the hassio_supervisor service is stopped
info "Removing existing hassio_supervisor container"
docker container rm --force hassio_supervisor > /dev/null
fi
dpkg-divert --package homeassistant-supervised --add --rename \
--divert /etc/NetworkManager/NetworkManager.conf.real /etc/NetworkManager/NetworkManager.conf
@ -81,6 +34,3 @@ dpkg-divert --package homeassistant-supervised --add --rename \
dpkg-divert --package homeassistant-supervised --add --rename \
--divert /etc/network/interfaces.real /etc/network/interfaces
dpkg-divert --package homeassistant-supervised --add --rename \
--divert /etc/systemd/resolved.conf.real /etc/systemd/resolved.conf

View file

@ -1,4 +1,4 @@
Template: ha/machine-type
Type: Select
Choices: generic-x86-64, odroid-c2, odroid-c4, odroid-n2, odroid-xu, qemuarm, qemuarm-64, qemux86, qemux86-64, raspberrypi, raspberrypi2, raspberrypi3, raspberrypi4, raspberrypi3-64, raspberrypi4-64, raspberrypi5-64, tinker, khadas-vim3
Choices: generic-x86-64, odroid-c2, odroid-n2, odroid-xu, qemuarm, qemuarm-64, qemux86, qemux86-64, raspberrypi, raspberrypi2, raspberrypi3, raspberrypi4, raspberrypi3-64, raspberrypi4-64, tinker, khadas-vim3
Description: Select machine type

View file

@ -5,18 +5,7 @@ autoconnect-retries-default=0
rc-manager=file
[keyfile]
unmanaged-devices=type:bridge;type:tun;driver:veth
unmanaged-devices=type:bridge;type:tun;type:veth
[logging]
backend=journal
[connection]
connection.mdns=2
connection.llmnr=2
[connectivity]
uri=http://checkonline.home-assistant.io/online.txt
interval=600
[device]
wifi.scan-rand-mac-address=no

View file

@ -0,0 +1,13 @@
[connection]
id=Supervisor default
uuid=f35ac84e-420b-4003-a6d9-9700e8a32e54
type=802-3-ethernet
llmnr=2
mdns=2
[ipv4]
method=auto
[ipv6]
addr-gen-mode=stable-privacy
method=auto

View file

@ -1,9 +1,4 @@
{
"log-driver": "journald",
"storage-driver": "overlay2",
"ip6tables": true,
"experimental": true,
"log-opts": {
"tag": "{{.Name}}"
}
"storage-driver": "overlay2"
}

View file

@ -1,25 +0,0 @@
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See resolved.conf(5) for details
[Resolve]
#DNS=
#FallbackDNS=1.1.1.1 8.8.8.8 1.0.0.1 8.8.4.4 2606:4700:4700::1111 2001:4860:4860::8888 2606:4700:4700::1001 2001:4860:4860::8844
#Domains=
DNSSEC=no
DNSOverTLS=no
#MulticastDNS=yes
#LLMNR=yes
#Cache=yes
DNSStubListener=no
#ReadEtcHosts=yes
#ResolveUnicastSingleLabel=no

View file

@ -1,12 +1,7 @@
[Unit]
Description=Hass.io supervisor
Requires=docker.service dbus.service
Wants=network-online.target hassio-apparmor.service time-sync.target systemd-journal-gatewayd.socket systemd-resolved.service
After=docker.service dbus.service network-online.target hassio-apparmor.service time-sync.target systemd-journal-gatewayd.socket systemd-resolved.service
StartLimitIntervalSec=60
StartLimitBurst=5
ConditionPathExists=/run/dbus/system_bus_socket
ConditionPathExists=/run/docker.sock
Requires=%%SERVICE_DOCKER%%
After=%%SERVICE_DOCKER%% dbus.socket
[Service]
Type=simple

View file

@ -1,3 +0,0 @@
[Socket]
ListenStream=
ListenStream=/run/systemd-journal-gatewayd.sock

View file

@ -1,10 +1,4 @@
#!/usr/bin/env bash
# shellcheck disable=SC2048,SC2086
if [ "$1" != "__complete" ]; then
use_tty="-t"
else
use_tty=""
fi
docker exec ${use_tty} hassio_cli ha $*
docker exec hassio_cli ha $*

View file

@ -1,113 +1,37 @@
#!/bin/sh
# shellcheck disable=SC1091
# ==============================================================================
# Supervisor Docker container
# ==============================================================================
#!/usr/bin/env bash
set -e
# Load configs
CONFIG_FILE=%%HASSIO_CONFIG%%
SUPERVISOR="$(jq --raw-output '.supervisor' ${CONFIG_FILE})"
MACHINE="$(jq --raw-output '.machine' ${CONFIG_FILE})"
DATA="$(jq --raw-output '.data // "/usr/share/hassio"' ${CONFIG_FILE})"
# Init supervisor
SUPERVISOR_DATA="$(jq --raw-output '.data // "/usr/share/hassio"' ${CONFIG_FILE})"
SUPERVISOR_STARTUP_MARKER="/run/supervisor/startup-marker"
SUPERVISOR_STARTSCRIPT_VERSION="${SUPERVISOR_DATA}/supervisor-version"
SUPERVISOR_MACHINE="$(jq --raw-output '.machine' ${CONFIG_FILE})"
SUPERVISOR_IMAGE="$(jq --raw-output '.supervisor' ${CONFIG_FILE})"
HASSIO_DATA=${DATA}
HASSIO_IMAGE_ID=$(docker inspect --format='{{.Id}}' "${SUPERVISOR}")
HASSIO_CONTAINER_ID=$(docker inspect --format='{{.Image}}' hassio_supervisor || echo "")
SUPERVISOR_IMAGE_ID=$(docker images --no-trunc --filter "reference=${SUPERVISOR_IMAGE}:latest" --format "{{.ID}}" || echo "")
SUPERVISOR_CONTAINER_ID=$(docker inspect --format='{{.Image}}' hassio_supervisor || echo "")
runSupervisor() {
docker rm --force hassio_supervisor || true
# Check if previous run left the startup-marker in place. If so, we assume the
# Container image or container is somehow corrupted.
# Delete the container, delete the image, pull a fresh one
if [ -f "${SUPERVISOR_STARTUP_MARKER}" ]; then
echo "[WARNING] Supervisor container did not remove the startup marker file. Assuming container image or container corruption."
docker container rm --force hassio_supervisor || true
SUPERVISOR_CONTAINER_ID=""
# Make sure we delete all supervisor images
SUPERVISOR_IMAGE_IDS=$(docker images --no-trunc --filter "reference=${SUPERVISOR_IMAGE}" --format "{{.ID}}" | uniq || echo "")
docker image rm --force "${SUPERVISOR_IMAGE_IDS}" || true
SUPERVISOR_IMAGE_ID=""
fi
# If Supervisor image is missing, pull it
mkdir -p "$(dirname ${SUPERVISOR_STARTUP_MARKER})"
touch ${SUPERVISOR_STARTUP_MARKER}
if [ -z "${SUPERVISOR_IMAGE_ID}" ]; then
# Get the latest from update information
# Using updater information instead of config. If the config version is
# broken, this creates a way back (e.g., bad release).
SUPERVISOR_VERSION=$(jq -r '.supervisor // "stable"' "${SUPERVISOR_DATA}/updater.json" || echo "stable")
# Get version from stable channel in case we have no local version
# information.
if [ "${SUPERVISOR_VERSION}" = "stable" ]; then
SUPERVISOR_VERSION="$(curl -s --location https://version.home-assistant.io/stable.json | jq -e -r '.supervisor')"
fi
echo "[WARNING] Supervisor image missing, downloading a fresh one: ${SUPERVISOR_VERSION}"
# Pull in the Supervisor
if docker pull "${SUPERVISOR_IMAGE}:${SUPERVISOR_VERSION}"; then
# Tag as latest
docker tag "${SUPERVISOR_IMAGE}:${SUPERVISOR_VERSION}" "${SUPERVISOR_IMAGE}:latest"
else
# Pull failed, updater info might be corrupted or the release might have
# been removed from the container registry, delete the updater info
# to start from scratch on next try.
echo "[ERROR] Supervisor downloading failed."
rm -f "${SUPERVISOR_DATA}/updater.json"
exit 1
fi
SUPERVISOR_IMAGE_ID=$(docker inspect --format='{{.Id}}' "${SUPERVISOR_IMAGE}" || echo "")
fi
if [ -n "${SUPERVISOR_CONTAINER_ID}" ]; then
# Image changed, remove previous container
if [ "${SUPERVISOR_IMAGE_ID}" != "${SUPERVISOR_CONTAINER_ID}" ]; then
echo "[INFO] Supervisor image has been updated, destroying previous container..."
docker container rm --force hassio_supervisor || true
SUPERVISOR_CONTAINER_ID=""
fi
# Start script changed, remove previous container
# shellcheck disable=SC3013
if [ ! -f "${SUPERVISOR_STARTSCRIPT_VERSION}" ] || [ "${SUPERVISOR_STARTSCRIPT_VERSION}" -nt "$0" ] || [ "${SUPERVISOR_STARTSCRIPT_VERSION}" -ot "$0" ]; then
echo "[INFO] Supervisor start script has changed, destroying previous container..."
docker container rm --force hassio_supervisor || true
SUPERVISOR_CONTAINER_ID=""
fi
fi
# If Supervisor container is missing, create it
if [ -z "${SUPERVISOR_CONTAINER_ID}" ]; then
echo "[INFO] Creating a new Supervisor container..."
# shellcheck disable=SC2086
docker container create \
--name hassio_supervisor \
--privileged --security-opt apparmor="hassio-supervisor" \
docker run --name hassio_supervisor \
--privileged \
--security-opt apparmor=hassio-supervisor \
--security-opt seccomp=unconfined \
-v /run/docker.sock:/run/docker.sock:rw \
-v /run/containerd/containerd.sock:/run/containerd/containerd.sock:rw \
-v /run/systemd-journal-gatewayd.sock:/run/systemd-journal-gatewayd.sock:rw \
-v /run/dbus:/run/dbus:ro \
-v /run/supervisor:/run/os:rw \
-v /run/udev:/run/udev:ro \
-v /etc/machine-id:/etc/machine-id:ro \
-v ${SUPERVISOR_DATA}:/data:rw,slave \
-e SUPERVISOR_SHARE=${SUPERVISOR_DATA} \
-v "${HASSIO_DATA}":/data:rw \
-e SUPERVISOR_SHARE="${HASSIO_DATA}" \
-e SUPERVISOR_NAME=hassio_supervisor \
-e SUPERVISOR_MACHINE=${SUPERVISOR_MACHINE} \
"${SUPERVISOR_IMAGE}:latest"
# Store the timestamp of this script. If the script changed, let's
# recreate the container automatically.
touch --reference="$0" "${SUPERVISOR_STARTSCRIPT_VERSION}"
fi
-e SUPERVISOR_MACHINE="${MACHINE}" \
"${SUPERVISOR}"
}
# Run supervisor
mkdir -p ${SUPERVISOR_DATA}
echo "[INFO] Starting the Supervisor..."
docker container start hassio_supervisor
exec docker container wait hassio_supervisor
mkdir -p "${HASSIO_DATA}"
([ "${HASSIO_IMAGE_ID}" = "${HASSIO_CONTAINER_ID}" ] && docker start --attach hassio_supervisor) || runSupervisor