Skip to content

Instantly share code, notes, and snippets.

@fredrike
Last active December 1, 2021 13:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fredrike/b23aacac7bd2d386ea00e138320202df to your computer and use it in GitHub Desktop.
Save fredrike/b23aacac7bd2d386ea00e138320202df to your computer and use it in GitHub Desktop.
#!/bin/sh
CONFIG_FILE="/usr/local/hassio/etc/hassio.json"
fix_usb_devices() {
USB_FILE="${HASSIO_DATA}/usb_devices.txt"
docker cp hassio_supervisor:/lib/udev/rules.d/60-serial.rules /lib/udev/rules.d/60-serial-hassio.rules
docker cp hassio_supervisor:/lib/udev/rules.d/60-input-id.rules /lib/udev/rules.d/60-input-id-hassio.rules
udevadm control --reload && udevadm trigger
# Add entries to file
ls /dev/serial/by_id/* >$USB_FILE
}
fix_envs() {
if docker --version|grep 18.09.6 >/dev/null; then
NEWENV="\"TZ=`date +"%Z"`\""
NEWENV+=",\"HASSIO=hassio\""
NEWENV+=",\"HASSIO_TOKEN=$(jq -r .access_token "$(jq -r .data ${CONFIG_FILE})/homeassistant.json")\""
DOCKER_JSON="/var/packages/Docker/target/docker/containers/$(docker inspect homeassistant |jq -r '.[0].Id')/hostconfig.json"
TMP_FILE=$(mktemp)
jq --argjson newenvs "[${NEWENV}]" '.Env += $newenvs' ${DOCKER_JSON} > $TMP_FILE
docker stop homeassistant
mv $TMP_FILE $DOCKER_JSON
docker start homeassistant
fi
}
runSupervisor() {
HOMEASSISTANT="$(jq --raw-output '.homeassistant' ${CONFIG_FILE})"
HASSIO_DATA="$(jq --raw-output '.data // "/usr/share/hassio"' ${CONFIG_FILE})"
APPARMOR="--security-opt apparmor=unconfined"
/usr/local/bin/docker rm --force hassio_supervisor >/dev/null || true
/usr/local/bin/docker run --name hassio_supervisor \
--privileged \
$APPARMOR \
--security-opt seccomp=unconfined \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /var/run/dbus:/var/run/dbus \
-v ${HASSIO_DATA}:/data \
-e SUPERVISOR_SHARE=${HASSIO_DATA} \
-e SUPERVISOR_NAME=hassio_supervisor \
-e HOMEASSISTANT_REPOSITORY=${HOMEASSISTANT} \
${SUPERVISOR}
}
start_hassio() {
fix_usb_devices
SUPERVISOR="$(jq --raw-output '.supervisor' ${CONFIG_FILE})"
HASSIO_IMAGE_ID=$(/usr/local/bin/docker inspect --format='{{.Id}}' ${SUPERVISOR})
HASSIO_CONTAINER_ID=$(/usr/local/bin/docker inspect --format='{{.Image}}' hassio_supervisor || echo "--")
# Fix routing
route -vn | grep 172.30.32.0 >/dev/null ||
route add -net 172.30.32.0/23 gw 172.30.32.1
# Fix envs
fix_envs
# Run supervisor
([ "${HASSIO_IMAGE_ID}" = "${HASSIO_CONTAINER_ID}" ] && /usr/local/bin/docker start --attach hassio_supervisor) || runSupervisor
}
while true; do
start_hassio
sleep 1
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment