From b53d0d8e5f1216393c04c9c1a7907ef8f6b4fdc3 Mon Sep 17 00:00:00 2001 From: Stefan Agner Date: Fri, 19 Jul 2019 23:18:23 +0200 Subject: [PATCH] allow to customize prefix and sysconfdir Follow GNU directory variable names and allow to specify PREFIX (by default /usr) and sysconfdir (by default /etc). This allows to install hassio scripts and service to alternative locations. --- README.md | 8 +++--- files/hassio-apparmor.service | 2 +- files/hassio-supervisor.service | 3 ++- hassio_install.sh | 44 ++++++++++++++++++++++----------- 4 files changed, 38 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 38957ed..1e5d2b1 100644 --- a/README.md +++ b/README.md @@ -32,9 +32,11 @@ curl -sL https://raw.githubusercontent.com/home-assistant/hassio-installer/maste ### Command line arguments | argument | default | description | -|--------------------|-------------------|--------------------------------------------------------| -| -m \| --machine | | On a special platform they need set a machine type use | -| -d \| --data-share | /usr/share/hassio | data folder for hass.io installation | +|--------------------|----------------------|--------------------------------------------------------| +| -m \| --machine | | On a special platform they need set a machine type use | +| -d \| --data-share | $PREFIX/share/hassio | data folder for hass.io installation | +| -p \| --prefix | /usr | Binary prefix for hass.io installation | +| -s \| --sysconfdir | /etc | Configuration directory for hass.io installation | you can set these parameters by appending ` -- ` like: diff --git a/files/hassio-apparmor.service b/files/hassio-apparmor.service index 058642b..d945cdb 100644 --- a/files/hassio-apparmor.service +++ b/files/hassio-apparmor.service @@ -6,7 +6,7 @@ Before=%%DOCKER_SERVICE%% hassio-supervisor.service [Service] Type=oneshot RemainAfterExit=true -ExecStart=/usr/sbin/hassio-apparmor +ExecStart=%%HASSIO_APPARMOR_BINARY%% [Install] WantedBy=multi-user.target diff --git a/files/hassio-supervisor.service b/files/hassio-supervisor.service index 77c7ba8..15a8772 100644 --- a/files/hassio-supervisor.service +++ b/files/hassio-supervisor.service @@ -8,7 +8,8 @@ Type=simple Restart=always RestartSec=5s ExecStartPre=-%%DOCKER_BINARY%% stop hassio_supervisor -ExecStart=/usr/sbin/hassio-supervisor +ExecStartPre=-%%DOCKER_BINARY%% stop hassio_supervisor +ExecStart=%%HASSIO_BINARY%% ExecStop=-%%DOCKER_BINARY%% stop hassio_supervisor [Install] diff --git a/hassio_install.sh b/hassio_install.sh index ff90506..eadef7c 100755 --- a/hassio_install.sh +++ b/hassio_install.sh @@ -6,8 +6,6 @@ DOCKER_DAEMON_CONFIG=/etc/docker/daemon.json DOCKER_BINARY=/usr/bin/docker DOCKER_REPO=homeassistant DOCKER_SERVICE=docker.service -DATA_SHARE=/usr/share/hassio -CONFIG=/etc/hassio.json URL_VERSION="https://version.home-assistant.io/stable.json" URL_BIN_HASSIO="https://raw.githubusercontent.com/home-assistant/hassio-installer/master/files/hassio-supervisor" URL_BIN_APPARMOR="https://raw.githubusercontent.com/home-assistant/hassio-installer/master/files/hassio-apparmor" @@ -49,6 +47,14 @@ while [[ $# -gt 0 ]]; do DATA_SHARE=$2 shift ;; + -p|--prefix) + PREFIX=$2 + shift + ;; + -s|--sysconfdir) + SYSCONFDIR=$2 + shift + ;; *) echo "[Error] Unrecognized option $1" exit 1 @@ -57,6 +63,11 @@ while [[ $# -gt 0 ]]; do shift done +PREFIX=${PREFIX:-/usr} +SYSCONFDIR=${SYSCONFDIR:-/etc} +DATA_SHARE=${DATA_SHARE:-$PREFIX/share/hassio} +CONFIG=$SYSCONFDIR/hassio.json + # Generate hardware options case $ARCH in "i386" | "i686") @@ -115,7 +126,7 @@ HASSIO_VERSION=$(curl -s $URL_VERSION | jq -e -r '.supervisor') ## # Write config -cat > $CONFIG <<- EOF +cat > "$CONFIG" <<- EOF { "supervisor": "${HASSIO_DOCKER}", "homeassistant": "${HOMEASSISTANT_DOCKER}", @@ -128,7 +139,7 @@ EOF DOCKER_VERSION="$(docker --version | grep -Po "\d{2}\.\d{2}\.\d")" if version_gt "18.09.0" "${DOCKER_VERSION}" && [ ! -e "$DOCKER_DAEMON_CONFIG" ]; then echo "[Warning] Create DNS settings for Docker to avoid systemd bug!" - mkdir -p $(dirname ${DOCKER_DAEMON_CONFIG}) + mkdir -p "$(dirname ${DOCKER_DAEMON_CONFIG})" echo '{"dns": ["8.8.8.8", "8.8.4.4"]}' > $DOCKER_DAEMON_CONFIG echo "[Info] Restart Docker and wait 30 seconds" @@ -144,13 +155,16 @@ 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 +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" /usr/sbin/hassio-supervisor -sed -i "s,%%DOCKER_BINARY%%,${DOCKER_BINARY},g; s,%%DOCKER_SERVICE%%,${DOCKER_SERVICE},g" /etc/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" \ + "${SYSCONFDIR}"/systemd/system/hassio-supervisor.service -chmod a+x /usr/sbin/hassio-supervisor +chmod a+x "${PREFIX}"/sbin/hassio-supervisor systemctl enable hassio-supervisor.service # @@ -158,14 +172,16 @@ systemctl enable hassio-supervisor.service 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_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" /usr/sbin/hassio-apparmor - sed -i "s,%%DOCKER_SERVICE%%,${DOCKER_SERVICE},g" /etc/systemd/system/hassio-apparmor.service + 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 - chmod a+x /usr/sbin/hassio-apparmor + chmod a+x "${PREFIX}"/sbin/hassio-apparmor systemctl enable hassio-apparmor.service systemctl start hassio-apparmor.service fi