Created
May 17, 2018 14:48
-
-
Save petonic/d04c91420a6645d7f0a9d326e2b08d13 to your computer and use it in GitHub Desktop.
Shellscript to set up Hassio on a Odroid XU4 Ubuntu server
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# | |
# Run this as root with the following parameters for the Odroid XU4 and | |
# the docker library directory at /z/dockerLib: | |
# | |
# sudo ./hassio_install.sh -d /z/hass -m qemuarm | |
# | |
# After it's done, it takes several minutes for Hassio-Supervisor and then | |
# Homeassistant docker containers to run and populate their configurations. | |
# You may see spurious errors in the various containers until around 5mins or | |
# so. | |
set -ex # Show what's happening. | |
# | |
ARCH=$(uname -m) | |
DOCKER_REPO=homeassistant | |
DATA_SHARE=/usr/share/hassio | |
URL_VERSION="https://raw.githubusercontent.com/home-assistant/hassio/master/version.json" | |
URL_BIN_HASSIO="https://raw.githubusercontent.com/home-assistant/hassio-build/master/install/files/hassio-supervisor" | |
URL_BIN_APPARMOR="https://raw.githubusercontent.com/home-assistant/hassio-build/master/install/files/hassio-apparmor" | |
URL_SERVICE_HASSIO="https://raw.githubusercontent.com/home-assistant/hassio-build/master/install/files/hassio-supervisor.service" | |
URL_SERVICE_APPARMOR="https://raw.githubusercontent.com/home-assistant/hassio-build/master/install/files/hassio-apparmor.service" | |
URL_APPARMOR_PROFILE="https://raw.githubusercontent.com/home-assistant/hassio-build/master/install/files/apparmor-profile" | |
# Check env | |
command -v systemctl > /dev/null 2>&1 || { echo "[Error] Only systemd is supported!"; exit 1; } | |
command -v docker > /dev/null 2>&1 || { echo "[Error] Please install docker first"; exit 1; } | |
command -v jq > /dev/null 2>&1 || { echo "[Error] Please install jq first"; exit 1; } | |
command -v curl > /dev/null 2>&1 || { echo "[Error] Please install curl first"; exit 1; } | |
command -v avahi-daemon > /dev/null 2>&1 || { echo "[Error] Please install avahi first"; exit 1; } | |
command -v dbus-daemon > /dev/null 2>&1 || { echo "[Error] Please install dbus first"; exit 1; } | |
command -v apparmor_parser > /dev/null 2>&1 || echo "[Warning] No AppArmor support on Host." | |
command -v nmcli > /dev/null 2>&1 || echo "[Warning] No NetworkManager support on Host." | |
# Parse command line parameters | |
while [[ $# > 0 ]]; do | |
arg="$1" | |
case $arg in | |
-m|--machine) | |
MACHINE=$2 | |
shift | |
;; | |
-d|--data-share) | |
DATA_SHARE=$2 | |
shift | |
;; | |
*) | |
echo "[Error] Unrecognized option $1" | |
exit 1 | |
;; | |
esac | |
shift | |
done | |
# Generate hardware options | |
case $ARCH in | |
"i386" | "i686") | |
MACHINE=${MACHINE:=qemux86} | |
HOMEASSISTANT_DOCKER="$DOCKER_REPO/$MACHINE-homeassistant" | |
HASSIO_DOCKER="$DOCKER_REPO/i386-hassio-supervisor" | |
;; | |
"x86_64") | |
MACHINE=${MACHINE:=qemux86-64} | |
HOMEASSISTANT_DOCKER="$DOCKER_REPO/$MACHINE-homeassistant" | |
HASSIO_DOCKER="$DOCKER_REPO/amd64-hassio-supervisor" | |
;; | |
"arm" | "armv7l" | "armv6l") | |
if [ -z $MACHINE ]; then | |
echo "[ERROR] Please set machine for $ARCH" | |
exit 1 | |
fi | |
HOMEASSISTANT_DOCKER="$DOCKER_REPO/$MACHINE-homeassistant" | |
HASSIO_DOCKER="$DOCKER_REPO/armhf-hassio-supervisor" | |
;; | |
"aarch64") | |
if [ -z $MACHINE ]; then | |
echo "[ERROR] Please set machine for $ARCH" | |
exit 1 | |
fi | |
HOMEASSISTANT_DOCKER="$DOCKER_REPO/$MACHINE-homeassistant" | |
HASSIO_DOCKER="$DOCKER_REPO/aarch64-hassio-supervisor" | |
;; | |
*) | |
echo "[Error] $ARCH unknown!" | |
exit 1 | |
;; | |
esac | |
if [ -z "${HOMEASSISTANT_DOCKER}" ]; then | |
echo "[Error] Found no Home Assistant docker images for this host!" | |
fi | |
### Main | |
# Init folders | |
if [ ! -d "$DATA_SHARE" ]; then | |
mkdir -p "$DATA_SHARE" | |
fi | |
# Read infos from web | |
HASSIO_VERSION=$(curl -s $URL_VERSION | jq -e -r '.hassio') | |
## | |
# Write config | |
cat > /etc/hassio.json <<- EOF | |
{ | |
"supervisor": "${HASSIO_DOCKER}", | |
"homeassistant": "${HOMEASSISTANT_DOCKER}", | |
"data": "${DATA_SHARE}" | |
} | |
EOF | |
## | |
# Pull supervisor image | |
echo "[Info] Install supervisor docker" | |
docker pull "$HASSIO_DOCKER:$HASSIO_VERSION" > /dev/null | |
docker tag "$HASSIO_DOCKER:$HASSIO_VERSION" "$HASSIO_DOCKER:latest" > /dev/null | |
## | |
# Install Hass.io Supervisor | |
echo "[Info] Install supervisor startup scripts" | |
curl -sL ${URL_BIN_HASSIO} > /usr/sbin/hassio-supervisor | |
curl -sL ${URL_SERVICE_HASSIO} > /etc/systemd/system/hassio-supervisor.service | |
chmod a+x /usr/sbin/hassio-supervisor | |
systemctl enable hassio-supervisor.service | |
# | |
# Install Hass.io AppArmor | |
if command -v apparmor_parser > /dev/null 2>&1; then | |
echo "[Info] Install AppArmor scripts" | |
mkdir -p ${DATA_SHARE}/apparmor | |
curl -sL ${URL_BIN_APPARMOR} > /usr/sbin/hassio-apparmor | |
curl -sL ${URL_SERVICE_APPARMOR} > /etc/systemd/system/hassio-apparmor.service | |
curl -sL ${URL_APPARMOR_PROFILE} > ${DATA_SHARE}/apparmor/hassio-supervisor | |
chmod a+x /usr/sbin/hassio-apparmor | |
systemctl enable hassio-apparmor.service | |
systemctl start hassio-apparmor.service | |
fi | |
## | |
# Init system | |
echo "[Info] Run Hass.io" | |
systemctl start hassio-supervisor.service |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment