Add changes

This commit is contained in:
Ludeeus 2020-09-18 11:53:48 +02:00
parent c384c3bee2
commit 98599e99d4
6 changed files with 112 additions and 55 deletions

11
files/NetworkManager.conf Normal file
View file

@ -0,0 +1,11 @@
[main]
dns=default
plugins=keyfile
autoconnect-retries-default=0
rc-manager=file
[keyfile]
unmanaged-devices=type:bridge;type:tun;type:veth
[logging]
backend=journal

4
files/docker_daemon.json Normal file
View file

@ -0,0 +1,4 @@
{
"log-driver": "journald",
"storage-driver": "overlay2"
}

View file

@ -1,7 +1,7 @@
[Unit]
Description=Hass.io AppArmor
Wants=hassio-supervisor.service
Before=%%DOCKER_SERVICE%% hassio-supervisor.service
Before=%%SERVICE_DOCKER%% hassio-supervisor.service
[Service]
Type=oneshot

View file

@ -1,15 +1,15 @@
[Unit]
Description=Hass.io supervisor
Requires=%%DOCKER_SERVICE%%
After=%%DOCKER_SERVICE%% dbus.socket
Requires=%%SERVICE_DOCKER%%
After=%%SERVICE_DOCKER%% dbus.socket
[Service]
Type=simple
Restart=always
RestartSec=5s
ExecStartPre=-%%DOCKER_BINARY%% stop hassio_supervisor
ExecStart=%%HASSIO_BINARY%%
ExecStop=-%%DOCKER_BINARY%% stop hassio_supervisor
ExecStartPre=-%%BINARY_DOCKER%% stop hassio_supervisor
ExecStart=%%BINARY_HASSIO%%
ExecStop=-%%BINARY_DOCKER%% stop hassio_supervisor
[Install]
WantedBy=multi-user.target

View file

@ -0,0 +1,6 @@
[ipv4]
method=auto
[ipv6]
addr-gen-mode=stable-privacy
method=auto

View file

@ -1,58 +1,80 @@
#!/usr/bin/env bash
set -e
function info { echo -e "[Info] $*"; }
function error { echo -e "[Error] $*"; exit 1; }
function warn { echo -e "[Warning] $*"; }
declare -a MISSING_PACAKGES
function info { echo -e "\e[32m[info] $*\e[39m"; }
function warn { echo -e "\e[33m[warn] $*\e[39m"; }
function error { echo -e "\e[31m[error] $*\e[39m"; exit 1; }
warn ""
warn "If you want more control over your own system, run"
warn "Home Assistant as a VM or run Home Assistant Core"
warn "via a Docker container."
warn ""
warn "If you want to abort, hit ctrl+c within 10 seconds..."
warn ""
sleep 10
ARCH=$(uname -m)
DOCKER_BINARY=/usr/bin/docker
IP_ADDRESS=$(hostname -I | awk '{ print $1 }')
BINARY_DOCKER=/usr/bin/docker
DOCKER_REPO=homeassistant
DOCKER_SERVICE=docker.service
DOCKER_DAEMON_CONFIG=/etc/docker/daemon.json
SERVICE_DOCKER="docker.service"
SERVICE_NM="NetworkManager.service"
FILE_DOCKER_CONF="/etc/docker/daemon.json"
FILE_NM_CONF="/etc/NetworkManager/NetworkManager.conf"
FILE_NM_CONNECTION="/etc/NetworkManager/system-connections/default"
URL_RAW_BASE="https://raw.githubusercontent.com/home-assistant/supervised-installer/nmconfig/files"
URL_VERSION="https://version.home-assistant.io/stable.json"
URL_HA="https://raw.githubusercontent.com/home-assistant/supervised-installer/master/files/ha"
URL_BIN_HASSIO="https://raw.githubusercontent.com/home-assistant/supervised-installer/master/files/hassio-supervisor"
URL_BIN_APPARMOR="https://raw.githubusercontent.com/home-assistant/supervised-installer/master/files/hassio-apparmor"
URL_SERVICE_HASSIO="https://raw.githubusercontent.com/home-assistant/supervised-installer/master/files/hassio-supervisor.service"
URL_SERVICE_APPARMOR="https://raw.githubusercontent.com/home-assistant/supervised-installer/master/files/hassio-apparmor.service"
URL_DOCKER_DAEMON="${URL_RAW_BASE}/docker_daemon.json"
URL_NM_CONF="${URL_RAW_BASE}/NetworkManager.conf"
URL_NM_CONNECTION="${URL_RAW_BASE}/system-connection-default"
URL_HA="${URL_RAW_BASE}/ha"
URL_BIN_HASSIO="${URL_RAW_BASE}/hassio-supervisor"
URL_BIN_APPARMOR="${URL_RAW_BASE}/hassio-apparmor"
URL_SERVICE_HASSIO="${URL_RAW_BASE}/hassio-supervisor.service"
URL_SERVICE_APPARMOR="${URL_RAW_BASE}/hassio-apparmor.service"
URL_APPARMOR_PROFILE="https://version.home-assistant.io/apparmor.txt"
# Check env
command -v systemctl > /dev/null 2>&1 || error "Only systemd is supported!"
command -v docker > /dev/null 2>&1 || error "Please install docker first"
command -v jq > /dev/null 2>&1 || error "Please install jq first"
command -v curl > /dev/null 2>&1 || error "Please install curl first"
command -v avahi-daemon > /dev/null 2>&1 || error "Please install avahi first"
command -v dbus-daemon > /dev/null 2>&1 || error "Please install dbus first"
command -v nmcli > /dev/null 2>&1 || error "No NetworkManager support on host."
command -v apparmor_parser > /dev/null 2>&1 || error "No AppArmor support on host."
command -v systemctl > /dev/null 2>&1 || MISSING_PACAKGES+=("systemd")
command -v nmcli > /dev/null 2>&1 || MISSING_PACAKGES+=("NetworkManager")
command -v apparmor_parser > /dev/null 2>&1 || MISSING_PACAKGES+=("AppArmor")
command -v docker > /dev/null 2>&1 || MISSING_PACAKGES+=("docker")
command -v jq > /dev/null 2>&1 || MISSING_PACAKGES+=("jq")
command -v curl > /dev/null 2>&1 || MISSING_PACAKGES+=("curl")
command -v avahi-daemon > /dev/null 2>&1 || MISSING_PACAKGES+=("avahi")
command -v dbus-daemon > /dev/null 2>&1 || MISSING_PACAKGES+=("dbus")
if [ ! -z "${MISSING_PACAKGES}" ]; then
warn "The folowing is missing on the host and needs "
warn "to be installed and configured before running this script again"
error "missing: ${MISSING_PACAKGES[@]}"
fi
# Check if Modem Manager is enabled
if systemctl list-unit-files ModemManager.service | grep enabled; then
if systemctl list-unit-files ModemManager.service | grep enabled > /dev/null 2>&1; then
warn "ModemManager service is enabled. This might cause issue when using serial devices."
fi
# Detect wrong docker logger config
if [ ! -f "$DOCKER_DAEMON_CONFIG" ]; then
if [ ! -f "$FILE_DOCKER_CONF" ]; then
# Write default configuration
info "Creating default docker deamon configuration $DOCKER_DAEMON_CONFIG"
cat > "$DOCKER_DAEMON_CONFIG" <<- EOF
{
"log-driver": "journald",
"storage-driver": "overlay2"
}
EOF
info "Creating default docker deamon configuration $FILE_DOCKER_CONF"
curl -sL ${URL_DOCKER_DAEMON} > "${FILE_DOCKER_CONF}"
# Restart Docker service
info "Restarting docker service"
systemctl restart "$DOCKER_SERVICE"
systemctl restart "$SERVICE_DOCKER"
else
STORAGE_DRIVER=$(docker info -f "{{json .}}" | jq -r -e .Driver)
LOGGING_DRIVER=$(docker info -f "{{json .}}" | jq -r -e .LoggingDriver)
@ -71,6 +93,16 @@ if [[ "$(sysctl --values kernel.dmesg_restrict)" != "0" ]]; then
echo "kernel.dmesg_restrict=0" >> /etc/sysctl.conf
fi
# Create config for NetworkManager
info "Creating NetworkManager configuration"
rm -f /etc/network/interfaces
curl -sL "${URL_NM_CONF}" > "${FILE_NM_CONF}"
if [ ! -f "$FILE_NM_CONNECTION" ]; then
curl -sL "${URL_NM_CONNECTION}" > "${FILE_NM_CONNECTION}"
fi
info "Restarting NetworkManager"
systemctl restart "${SERVICE_NM}"
# Parse command line parameters
while [[ $# -gt 0 ]]; do
arg="$1"
@ -174,40 +206,44 @@ curl -sL ${URL_BIN_HASSIO} > "${PREFIX}/sbin/hassio-supervisor"
curl -sL ${URL_SERVICE_HASSIO} > "${SYSCONFDIR}/systemd/system/hassio-supervisor.service"
sed -i "s,%%HASSIO_CONFIG%%,${CONFIG},g" "${PREFIX}"/sbin/hassio-supervisor
sed -i -e "s,%%DOCKER_BINARY%%,${DOCKER_BINARY},g" \
-e "s,%%DOCKER_SERVICE%%,${DOCKER_SERVICE},g" \
-e "s,%%HASSIO_BINARY%%,${PREFIX}/sbin/hassio-supervisor,g" \
sed -i -e "s,%%BINARY_DOCKER%%,${BINARY_DOCKER},g" \
-e "s,%%SERVICE_DOCKER%%,${SERVICE_DOCKER},g" \
-e "s,%%BINARY_HASSIO%%,${PREFIX}/sbin/hassio-supervisor,g" \
"${SYSCONFDIR}/systemd/system/hassio-supervisor.service"
chmod a+x "${PREFIX}/sbin/hassio-supervisor"
systemctl enable hassio-supervisor.service
systemctl enable hassio-supervisor.service > /dev/null 2>&1;
#
# Install Hass.io AppArmor
if command -v apparmor_parser > /dev/null 2>&1; then
info "Install AppArmor scripts"
mkdir -p "${DATA_SHARE}/apparmor"
curl -sL ${URL_BIN_APPARMOR} > "${PREFIX}/sbin/hassio-apparmor"
curl -sL ${URL_SERVICE_APPARMOR} > "${SYSCONFDIR}/systemd/system/hassio-apparmor.service"
curl -sL ${URL_APPARMOR_PROFILE} > "${DATA_SHARE}/apparmor/hassio-supervisor"
info "Install AppArmor scripts"
mkdir -p "${DATA_SHARE}/apparmor"
curl -sL ${URL_BIN_APPARMOR} > "${PREFIX}/sbin/hassio-apparmor"
curl -sL ${URL_SERVICE_APPARMOR} > "${SYSCONFDIR}/systemd/system/hassio-apparmor.service"
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,%%DOCKER_SERVICE%%,${DOCKER_SERVICE},g" \
-e "s,%%HASSIO_APPARMOR_BINARY%%,${PREFIX}/sbin/hassio-apparmor,g" \
"${SYSCONFDIR}/systemd/system/hassio-apparmor.service"
sed -i "s,%%HASSIO_CONFIG%%,${CONFIG},g" "${PREFIX}/sbin/hassio-apparmor"
sed -i -e "s,%%SERVICE_DOCKER%%,${SERVICE_DOCKER},g" \
-e "s,%%HASSIO_APPARMOR_BINARY%%,${PREFIX}/sbin/hassio-apparmor,g" \
"${SYSCONFDIR}/systemd/system/hassio-apparmor.service"
chmod a+x "${PREFIX}/sbin/hassio-apparmor"
systemctl enable hassio-apparmor.service > /dev/null 2>&1;
systemctl start hassio-apparmor.service
chmod a+x "${PREFIX}/sbin/hassio-apparmor"
systemctl enable hassio-apparmor.service
systemctl start hassio-apparmor.service
fi
##
# Init system
info "Run Home Assistant Supervised"
info "Start Home Assistant Supervised"
systemctl start hassio-supervisor.service
##
# Setup CLI
info "Install cli 'ha'"
info "Installing the 'ha' cli"
curl -sL ${URL_HA} > "${PREFIX}/bin/ha"
chmod a+x "${PREFIX}/bin/ha"
info "Home Assistant supervised is now installed"
info "First setup will take some time, when it's ready you can reach it here:"
info "http://${IP_ADDRESS}:8123"
info