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] [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

View file

@ -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

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 #!/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"
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 # 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