From 13f0a30fff89b9d981576301009c4f4d5f49ac6b Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Sun, 19 Mar 2017 01:17:13 +0100 Subject: [PATCH] Add homeassistant repository to build / init hassio python script --- build-scripts/resinos-build/create_resinos.sh | 15 ++++++- hassio_api/hassio/bootstrap.py | 40 +++++++++++++++++++ hassio_api/hassio/const.py | 18 +++++++++ .../docker-resin-supervisor-disk.bbappend | 13 ++++++ .../docker-resin-supervisor-disk/hassio.conf | 1 + .../start-resin-supervisor | 3 ++ .../update-resin-supervisor | 24 +++-------- supervisor/Dockerfile | 2 +- 8 files changed, 94 insertions(+), 22 deletions(-) create mode 100644 hassio_api/hassio/bootstrap.py create mode 100644 hassio_api/hassio/const.py create mode 100644 meta-hassio/recipes-containers/docker-disk/docker-resin-supervisor-disk/hassio.conf diff --git a/build-scripts/resinos-build/create_resinos.sh b/build-scripts/resinos-build/create_resinos.sh index 7c76009f9..82c4626fa 100755 --- a/build-scripts/resinos-build/create_resinos.sh +++ b/build-scripts/resinos-build/create_resinos.sh @@ -43,9 +43,20 @@ RESIN_BRANCH=${RESIN_BRANCH:=master} # evaluate git repo and arch case $MACHINE in - "raspberrypi3" | "raspberrypi2" | "raspberrypi") + "raspberrypi") ARCH="armhf" RESIN_REPO="https://github.com/resin-os/resin-raspberrypi" + HOMEASSISTANT_REPOSITORY="$DOCKER_REPO/raspberrypi-homeassistant" + ;; + "raspberrypi2") + ARCH="armhf" + RESIN_REPO="https://github.com/resin-os/resin-raspberrypi" + HOMEASSISTANT_REPOSITORY="$DOCKER_REPO/raspberrypi2-homeassistant" + ;; + "raspberrypi3") + ARCH="armhf" + RESIN_REPO="https://github.com/resin-os/resin-raspberrypi" + HOMEASSISTANT_REPOSITORY="$DOCKER_REPO/raspberrypi3-homeassistant" ;; *) echo "[ERROR] ${MACHINE} unknown!" @@ -67,7 +78,7 @@ echo "[INFO] Inject HassIO yocto layer" cp -fr $HASSIO_ROOT/meta-hassio $WORKSPACE/layers/ # Additional variables -BARYS_ARGUMENTS_VAR="-a HASSIO_SUPERVISOR_TAG=$SUPERVISOR_TAG" +BARYS_ARGUMENTS_VAR="-a HASSIO_SUPERVISOR_TAG=$SUPERVISOR_TAG -a HOMEASSISTANT_REPOSITORY=$HOMEASSISTANT_REPOSITORY" # Make sure shared directories are in place mkdir -p $DOWNLOAD_DIR diff --git a/hassio_api/hassio/bootstrap.py b/hassio_api/hassio/bootstrap.py new file mode 100644 index 000000000..68ff7ddce --- /dev/null +++ b/hassio_api/hassio/bootstrap.py @@ -0,0 +1,40 @@ +"""Bootstrap HassIO.""" +import asyncio +import json +import os + +from .const import ( + FILE_HASSIO_ADDONS, FILE_HASSIO_VERSION, FILE_RESIN_CONFIG, + HOMEASSISTANT_CONFIG, CONF_SUPERVISOR_TAG, CONF_SUPERVISOR_IMAGE) + + +def initialize_system_data(): + """Setup default config and create folders.""" + # homeassistant config folder + if not os.path.isdir(HOMEASSISTANT_CONFIG): + os.mkdir(HOMEASSISTANT_CONFIG) + + # installed addons + if not os.path.isfile(FILE_HASSIO_ADDONS): + with open(FILE_HASSIO_ADDONS) as addons_file: + addons_file.write(json.dumps({})) + + # supervisor/homeassistant image/tag versions + versions = {} + if not os.path.isfile(FILE_HASSIO_VERSION): + versions.update({ + CONF_HOMEASSISTANT_IMAGE: os.environ['HOMEASSISTANT_REPOSITORY'], + CONF_HOMEASSISTANT_TAG: '', + }) + else: + with open(FILE_HASSIO_VERSION, 'r') as conf_file: + versions = json.loads(conf_file.read()) + + # update version + versions.update({ + CONF_SUPERVISOR_IMAGE: os.environ['SUPERVISOR_IMAGE'], + CONF_SUPERVISOR_TAG: os.environ['SUPERVISOR_TAG'], + }) + + with open(FILE_HASSIO_VERSION, 'w') as conf_file: + conf_file.write(json.dumps(versions)) diff --git a/hassio_api/hassio/const.py b/hassio_api/hassio/const.py new file mode 100644 index 000000000..1e6e08c4d --- /dev/null +++ b/hassio_api/hassio/const.py @@ -0,0 +1,18 @@ +"""Const file for HassIO.""" +URL_SUPERVISOR_VERSION = \ + 'https://raw.githubusercontent.com/pvizeli/hassio/master/version.json' + +URL_ADDONS_REPO = 'https://github.com/pvizeli/hassio-addons' + +FILE_RESIN_CONFIG = '/boot/config.json' +FILE_HASSIO_ADDONS = '/data/addons.json' +FILE_HASSIO_VERSION = '/data/version.json' + +HOMEASSISTANT_CONFIG = '/resin-data/config' + +HTTP_PORT = 9123 + +CONF_SUPERVISOR_IMAGE = 'supervisor_image' +CONF_SUPERVISOR_TAG = 'supervisor_tag' +CONF_HOMEASSISTANT_IMAGE = 'homeassistant_image' +CONF_HOMEASSISTANT_TAG = 'homeassistant_tag' diff --git a/meta-hassio/recipes-containers/docker-disk/docker-resin-supervisor-disk.bbappend b/meta-hassio/recipes-containers/docker-disk/docker-resin-supervisor-disk.bbappend index d4cd2e717..fcf876335 100644 --- a/meta-hassio/recipes-containers/docker-disk/docker-resin-supervisor-disk.bbappend +++ b/meta-hassio/recipes-containers/docker-disk/docker-resin-supervisor-disk.bbappend @@ -12,3 +12,16 @@ SUPERVISOR_REPOSITORY_x86-64 = "pvizeli/amd64-hassio-supervisor" SUPERVISOR_TAG = "${HASSIO_SUPERVISOR_TAG}" TARGET_REPOSITORY = "${SUPERVISOR_REPOSITORY}" TARGET_TAG = "${SUPERVISOR_TAG}" + +SRC_URI += " \ + file://hassio.conf \ + " + +FILES_${PN} += " \ + ${sysconfdir} \ + " + +do_install_append () { + install -m 0755 ${WORKDIR}/hassio.conf ${D}${sysconfdir}/ + sed -i -e 's:@HOMEASSISTANT_REPOSITORY@:${HOMEASSISTANT_REPOSITORY}:g' ${D}${sysconfdir}/hassio.conf +} diff --git a/meta-hassio/recipes-containers/docker-disk/docker-resin-supervisor-disk/hassio.conf b/meta-hassio/recipes-containers/docker-disk/docker-resin-supervisor-disk/hassio.conf new file mode 100644 index 000000000..8b121bbe9 --- /dev/null +++ b/meta-hassio/recipes-containers/docker-disk/docker-resin-supervisor-disk/hassio.conf @@ -0,0 +1 @@ +HOMEASSISTANT_REPOSITORY=@HOMEASSISTANT_REPOSITORY@ diff --git a/meta-hassio/recipes-containers/docker-disk/docker-resin-supervisor-disk/start-resin-supervisor b/meta-hassio/recipes-containers/docker-disk/docker-resin-supervisor-disk/start-resin-supervisor index 5afd548da..3c89cec50 100644 --- a/meta-hassio/recipes-containers/docker-disk/docker-resin-supervisor-disk/start-resin-supervisor +++ b/meta-hassio/recipes-containers/docker-disk/docker-resin-supervisor-disk/start-resin-supervisor @@ -1,6 +1,7 @@ #!/bin/sh -e source /usr/sbin/resin-vars +source /etc/hassio.conf SUPERVISOR_IMAGE_ID=$(docker inspect --format='{{.Id}}' $SUPERVISOR_IMAGE) SUPERVISOR_CONTAINER_IMAGE_ID=$(docker inspect --format='{{.Image}}' resin_supervisor || echo "") @@ -11,6 +12,7 @@ runSupervisor() { -v /var/run/docker.sock:/var/run/docker.sock \ -v $CONFIG_PATH:/boot/config.json \ -v /resin-data/resin-supervisor:/data \ + -v /resin-data:/resin-data \ -v /proc/net/fib_trie:/mnt/fib_trie \ -v /var/log/supervisor-log:/var/log \ -v /:/mnt/root \ @@ -20,6 +22,7 @@ runSupervisor() { -e LED_FILE=${LED_FILE} \ -e SUPERVISOR_IMAGE=${SUPERVISOR_IMAGE} \ -e SUPERVISOR_TAG=${SUPERVISOR_TAG} \ + -e HOMEASSISTANT_REPOSITORY=${HOMEASSISTANT_REPOSITORY} \ ${SUPERVISOR_IMAGE} } diff --git a/meta-hassio/recipes-containers/docker-disk/docker-resin-supervisor-disk/update-resin-supervisor b/meta-hassio/recipes-containers/docker-disk/docker-resin-supervisor-disk/update-resin-supervisor index fc89daa67..91f2d13a3 100644 --- a/meta-hassio/recipes-containers/docker-disk/docker-resin-supervisor-disk/update-resin-supervisor +++ b/meta-hassio/recipes-containers/docker-disk/docker-resin-supervisor-disk/update-resin-supervisor @@ -69,28 +69,14 @@ function error_handler { trap 'error_handler $LINENO' ERR -request=$(curl -X PUT $API_ENDPOINT/supervisor | jq -e -r '.message') -if [ request != "ok" ]; then - error_handler $LINENO $request -fi +if request=$(curl -X PUT $API_ENDPOINT/supervisor | jq -e -r '.image,.tag') + read image_name, tag <<<$request -# reload supervisor config -source /etc/resin-supervisor/supervisor.conf -if [ -z "$UPDATER_SUPERVISOR_TAG" ]; then - # Try to get the tag from supervisor.conf - if [ -n "$SUPERVISOR_TAG" ]; then - UPDATER_SUPERVISOR_TAG=$SUPERVISOR_TAG - else - echo "ERROR: No tag argument provided." - error_handler $LINENO "no tag argument provided" + # Check that we didn't somehow get an empty tag version. + if [ -z "$tag" ]; then + error_handler $LINENO "no tag received" fi fi -if [ -z "$UPDATER_SUPERVISOR_IMAGE" ]; then - UPDATER_SUPERVISOR_IMAGE=$SUPERVISOR_IMAGE -fi -echo "Set based on arguments image=$UPDATER_SUPERVISOR_IMAGE and tag=$UPDATER_SUPERVISOR_TAG." -image_name=$UPDATER_SUPERVISOR_IMAGE -tag=$UPDATER_SUPERVISOR_TAG # Get image id of tag. This will be non-empty only in case it's already downloaded. echo "Getting image id..." diff --git a/supervisor/Dockerfile b/supervisor/Dockerfile index 0b26aa90e..2b546f342 100644 --- a/supervisor/Dockerfile +++ b/supervisor/Dockerfile @@ -8,7 +8,7 @@ RUN apk del --no-cache python* ENV LANG C.UTF-8 # setup base -RUN apk add --no-cache python3 +RUN apk add --no-cache python3 git # install aiohttp RUN pip3 install pip --no-cache --upgrade && pip3 install --no-cache aiohttp && pip3 install --no-cache docker