Add changes
This commit is contained in:
parent
c384c3bee2
commit
98599e99d4
6 changed files with 112 additions and 55 deletions
11
files/NetworkManager.conf
Normal file
11
files/NetworkManager.conf
Normal 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
4
files/docker_daemon.json
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"log-driver": "journald",
|
||||||
|
"storage-driver": "overlay2"
|
||||||
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Hass.io AppArmor
|
Description=Hass.io AppArmor
|
||||||
Wants=hassio-supervisor.service
|
Wants=hassio-supervisor.service
|
||||||
Before=%%DOCKER_SERVICE%% hassio-supervisor.service
|
Before=%%SERVICE_DOCKER%% hassio-supervisor.service
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=oneshot
|
Type=oneshot
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Hass.io supervisor
|
Description=Hass.io supervisor
|
||||||
Requires=%%DOCKER_SERVICE%%
|
Requires=%%SERVICE_DOCKER%%
|
||||||
After=%%DOCKER_SERVICE%% dbus.socket
|
After=%%SERVICE_DOCKER%% dbus.socket
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=simple
|
Type=simple
|
||||||
Restart=always
|
Restart=always
|
||||||
RestartSec=5s
|
RestartSec=5s
|
||||||
ExecStartPre=-%%DOCKER_BINARY%% stop hassio_supervisor
|
ExecStartPre=-%%BINARY_DOCKER%% stop hassio_supervisor
|
||||||
ExecStart=%%HASSIO_BINARY%%
|
ExecStart=%%BINARY_HASSIO%%
|
||||||
ExecStop=-%%DOCKER_BINARY%% stop hassio_supervisor
|
ExecStop=-%%BINARY_DOCKER%% stop hassio_supervisor
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
|
|
6
files/system-connection-default
Normal file
6
files/system-connection-default
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
[ipv4]
|
||||||
|
method=auto
|
||||||
|
|
||||||
|
[ipv6]
|
||||||
|
addr-gen-mode=stable-privacy
|
||||||
|
method=auto
|
130
installer.sh
130
installer.sh
|
@ -1,58 +1,80 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
function info { echo -e "[Info] $*"; }
|
declare -a MISSING_PACAKGES
|
||||||
function error { echo -e "[Error] $*"; exit 1; }
|
|
||||||
function warn { echo -e "[Warning] $*"; }
|
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 ""
|
||||||
warn "If you want more control over your own system, run"
|
warn "If you want more control over your own system, run"
|
||||||
warn "Home Assistant as a VM or run Home Assistant Core"
|
warn "Home Assistant as a VM or run Home Assistant Core"
|
||||||
warn "via a Docker container."
|
warn "via a Docker container."
|
||||||
warn ""
|
warn ""
|
||||||
|
warn "If you want to abort, hit ctrl+c within 10 seconds..."
|
||||||
|
warn ""
|
||||||
|
|
||||||
|
sleep 10
|
||||||
|
|
||||||
ARCH=$(uname -m)
|
ARCH=$(uname -m)
|
||||||
DOCKER_BINARY=/usr/bin/docker
|
|
||||||
|
IP_ADDRESS=$(hostname -I | awk '{ print $1 }')
|
||||||
|
|
||||||
|
BINARY_DOCKER=/usr/bin/docker
|
||||||
|
|
||||||
DOCKER_REPO=homeassistant
|
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_VERSION="https://version.home-assistant.io/stable.json"
|
||||||
URL_HA="https://raw.githubusercontent.com/home-assistant/supervised-installer/master/files/ha"
|
URL_DOCKER_DAEMON="${URL_RAW_BASE}/docker_daemon.json"
|
||||||
URL_BIN_HASSIO="https://raw.githubusercontent.com/home-assistant/supervised-installer/master/files/hassio-supervisor"
|
URL_NM_CONF="${URL_RAW_BASE}/NetworkManager.conf"
|
||||||
URL_BIN_APPARMOR="https://raw.githubusercontent.com/home-assistant/supervised-installer/master/files/hassio-apparmor"
|
URL_NM_CONNECTION="${URL_RAW_BASE}/system-connection-default"
|
||||||
URL_SERVICE_HASSIO="https://raw.githubusercontent.com/home-assistant/supervised-installer/master/files/hassio-supervisor.service"
|
URL_HA="${URL_RAW_BASE}/ha"
|
||||||
URL_SERVICE_APPARMOR="https://raw.githubusercontent.com/home-assistant/supervised-installer/master/files/hassio-apparmor.service"
|
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"
|
URL_APPARMOR_PROFILE="https://version.home-assistant.io/apparmor.txt"
|
||||||
|
|
||||||
# Check env
|
# Check env
|
||||||
command -v systemctl > /dev/null 2>&1 || error "Only systemd is supported!"
|
command -v systemctl > /dev/null 2>&1 || MISSING_PACAKGES+=("systemd")
|
||||||
command -v docker > /dev/null 2>&1 || error "Please install docker first"
|
command -v nmcli > /dev/null 2>&1 || MISSING_PACAKGES+=("NetworkManager")
|
||||||
command -v jq > /dev/null 2>&1 || error "Please install jq first"
|
command -v apparmor_parser > /dev/null 2>&1 || MISSING_PACAKGES+=("AppArmor")
|
||||||
command -v curl > /dev/null 2>&1 || error "Please install curl first"
|
command -v docker > /dev/null 2>&1 || MISSING_PACAKGES+=("docker")
|
||||||
command -v avahi-daemon > /dev/null 2>&1 || error "Please install avahi first"
|
command -v jq > /dev/null 2>&1 || MISSING_PACAKGES+=("jq")
|
||||||
command -v dbus-daemon > /dev/null 2>&1 || error "Please install dbus first"
|
command -v curl > /dev/null 2>&1 || MISSING_PACAKGES+=("curl")
|
||||||
command -v nmcli > /dev/null 2>&1 || error "No NetworkManager support on host."
|
command -v avahi-daemon > /dev/null 2>&1 || MISSING_PACAKGES+=("avahi")
|
||||||
command -v apparmor_parser > /dev/null 2>&1 || error "No AppArmor support on host."
|
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
|
# 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."
|
warn "ModemManager service is enabled. This might cause issue when using serial devices."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Detect wrong docker logger config
|
# Detect wrong docker logger config
|
||||||
if [ ! -f "$DOCKER_DAEMON_CONFIG" ]; then
|
if [ ! -f "$FILE_DOCKER_CONF" ]; then
|
||||||
# Write default configuration
|
# Write default configuration
|
||||||
info "Creating default docker deamon configuration $DOCKER_DAEMON_CONFIG"
|
info "Creating default docker deamon configuration $FILE_DOCKER_CONF"
|
||||||
cat > "$DOCKER_DAEMON_CONFIG" <<- EOF
|
curl -sL ${URL_DOCKER_DAEMON} > "${FILE_DOCKER_CONF}"
|
||||||
{
|
|
||||||
"log-driver": "journald",
|
|
||||||
"storage-driver": "overlay2"
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
# Restart Docker service
|
# Restart Docker service
|
||||||
info "Restarting docker service"
|
info "Restarting docker service"
|
||||||
systemctl restart "$DOCKER_SERVICE"
|
systemctl restart "$SERVICE_DOCKER"
|
||||||
else
|
else
|
||||||
STORAGE_DRIVER=$(docker info -f "{{json .}}" | jq -r -e .Driver)
|
STORAGE_DRIVER=$(docker info -f "{{json .}}" | jq -r -e .Driver)
|
||||||
LOGGING_DRIVER=$(docker info -f "{{json .}}" | jq -r -e .LoggingDriver)
|
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
|
echo "kernel.dmesg_restrict=0" >> /etc/sysctl.conf
|
||||||
fi
|
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
|
# Parse command line parameters
|
||||||
while [[ $# -gt 0 ]]; do
|
while [[ $# -gt 0 ]]; do
|
||||||
arg="$1"
|
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"
|
curl -sL ${URL_SERVICE_HASSIO} > "${SYSCONFDIR}/systemd/system/hassio-supervisor.service"
|
||||||
|
|
||||||
sed -i "s,%%HASSIO_CONFIG%%,${CONFIG},g" "${PREFIX}"/sbin/hassio-supervisor
|
sed -i "s,%%HASSIO_CONFIG%%,${CONFIG},g" "${PREFIX}"/sbin/hassio-supervisor
|
||||||
sed -i -e "s,%%DOCKER_BINARY%%,${DOCKER_BINARY},g" \
|
sed -i -e "s,%%BINARY_DOCKER%%,${BINARY_DOCKER},g" \
|
||||||
-e "s,%%DOCKER_SERVICE%%,${DOCKER_SERVICE},g" \
|
-e "s,%%SERVICE_DOCKER%%,${SERVICE_DOCKER},g" \
|
||||||
-e "s,%%HASSIO_BINARY%%,${PREFIX}/sbin/hassio-supervisor,g" \
|
-e "s,%%BINARY_HASSIO%%,${PREFIX}/sbin/hassio-supervisor,g" \
|
||||||
"${SYSCONFDIR}/systemd/system/hassio-supervisor.service"
|
"${SYSCONFDIR}/systemd/system/hassio-supervisor.service"
|
||||||
|
|
||||||
chmod a+x "${PREFIX}/sbin/hassio-supervisor"
|
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
|
# Install Hass.io AppArmor
|
||||||
if command -v apparmor_parser > /dev/null 2>&1; then
|
info "Install AppArmor scripts"
|
||||||
info "Install AppArmor scripts"
|
mkdir -p "${DATA_SHARE}/apparmor"
|
||||||
mkdir -p "${DATA_SHARE}/apparmor"
|
curl -sL ${URL_BIN_APPARMOR} > "${PREFIX}/sbin/hassio-apparmor"
|
||||||
curl -sL ${URL_BIN_APPARMOR} > "${PREFIX}/sbin/hassio-apparmor"
|
curl -sL ${URL_SERVICE_APPARMOR} > "${SYSCONFDIR}/systemd/system/hassio-apparmor.service"
|
||||||
curl -sL ${URL_SERVICE_APPARMOR} > "${SYSCONFDIR}/systemd/system/hassio-apparmor.service"
|
curl -sL ${URL_APPARMOR_PROFILE} > "${DATA_SHARE}/apparmor/hassio-supervisor"
|
||||||
curl -sL ${URL_APPARMOR_PROFILE} > "${DATA_SHARE}/apparmor/hassio-supervisor"
|
|
||||||
|
|
||||||
sed -i "s,%%HASSIO_CONFIG%%,${CONFIG},g" "${PREFIX}/sbin/hassio-apparmor"
|
sed -i "s,%%HASSIO_CONFIG%%,${CONFIG},g" "${PREFIX}/sbin/hassio-apparmor"
|
||||||
sed -i -e "s,%%DOCKER_SERVICE%%,${DOCKER_SERVICE},g" \
|
sed -i -e "s,%%SERVICE_DOCKER%%,${SERVICE_DOCKER},g" \
|
||||||
-e "s,%%HASSIO_APPARMOR_BINARY%%,${PREFIX}/sbin/hassio-apparmor,g" \
|
-e "s,%%HASSIO_APPARMOR_BINARY%%,${PREFIX}/sbin/hassio-apparmor,g" \
|
||||||
"${SYSCONFDIR}/systemd/system/hassio-apparmor.service"
|
"${SYSCONFDIR}/systemd/system/hassio-apparmor.service"
|
||||||
|
|
||||||
chmod a+x "${PREFIX}/sbin/hassio-apparmor"
|
chmod a+x "${PREFIX}/sbin/hassio-apparmor"
|
||||||
systemctl enable hassio-apparmor.service
|
systemctl enable hassio-apparmor.service > /dev/null 2>&1;
|
||||||
systemctl start hassio-apparmor.service
|
systemctl start hassio-apparmor.service
|
||||||
fi
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# Init system
|
# Init system
|
||||||
info "Run Home Assistant Supervised"
|
info "Start Home Assistant Supervised"
|
||||||
systemctl start hassio-supervisor.service
|
systemctl start hassio-supervisor.service
|
||||||
|
|
||||||
##
|
##
|
||||||
# Setup CLI
|
# Setup CLI
|
||||||
info "Install cli 'ha'"
|
info "Installing the 'ha' cli"
|
||||||
curl -sL ${URL_HA} > "${PREFIX}/bin/ha"
|
curl -sL ${URL_HA} > "${PREFIX}/bin/ha"
|
||||||
chmod a+x "${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
|
Loading…
Reference in a new issue