diff --git a/build-scripts/docker-build-env/Dockerfile b/build-scripts/docker-build-env/Dockerfile deleted file mode 100644 index 40de9ae..0000000 --- a/build-scripts/docker-build-env/Dockerfile +++ /dev/null @@ -1,34 +0,0 @@ -FROM ubuntu:16.04 - -# setup locals -RUN apt-get update && apt-get install -y \ - locales \ - && rm -rf /var/lib/apt/lists/* -RUN locale-gen en_US.UTF-8 -ENV LANG en_US.UTF-8 - -# Install docker -# https://docs.docker.com/engine/installation/linux/ubuntu/#install-using-the-repository -RUN apt-get update && apt-get install -y \ - apt-transport-https \ - ca-certificates \ - curl \ - software-properties-common \ - && rm -rf /var/lib/apt/lists/* -VOLUME /var/lib/docker -RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - -RUN add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" -RUN apt-get update && apt-get install -y \ - docker-ce \ - && rm -rf /var/lib/apt/lists/* - -# setup arm binary support -RUN apt-get update && apt-get install -y \ - qemu-user-static \ - binfmt-support \ - && rm -rf /var/lib/apt/lists/* - -COPY run-docker.sh / -RUN chmod a+x /run-docker.sh - -WORKDIR /docker diff --git a/build-scripts/docker-build-env/create_build_env.sh b/build-scripts/docker-build-env/create_build_env.sh deleted file mode 100755 index 48a2356..0000000 --- a/build-scripts/docker-build-env/create_build_env.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash -set -e - -DOCKER_IMAGE=${DOCKER_IMAGE:="homeassistant/docker-build-env"} -DOCKER_TAG="$(date +%Y%m%d)" -DOCKER_PUSH="false" - -# Get the absolute script location -pushd "$(dirname "$0")" > /dev/null 2>&1 -SCRIPTPATH=$(pwd) -popd > /dev/null 2>&1 - -help () { - cat << EOF -Script for hassio docker build environment -create_build_env [options] - -Options: - -h, --help - Display this help and exit. - - -p, --push - Upload the build to docker hub. -EOF -} - -# Parse arguments -while [[ $# -gt 0 ]]; do - key=$1 - case $key in - -h|--help) - help - exit 0 - ;; - -p|--push) - DOCKER_PUSH="true" - ;; - *) - echo "[WARNING] $0 : Argument '$1' unknown. Ignoring." - ;; - esac - shift -done - -# Build -docker build --pull --tag "$DOCKER_IMAGE:$DOCKER_TAG" -f "$SCRIPTPATH/Dockerfile" "$SCRIPTPATH" - -# Tag -docker tag "$DOCKER_IMAGE:$DOCKER_TAG" "$DOCKER_IMAGE:latest" - -if [ "$DOCKER_PUSH" == "true" ]; then - docker push "$DOCKER_IMAGE:$DOCKER_TAG" - docker push "$DOCKER_IMAGE:latest" -fi diff --git a/build-scripts/docker-build-env/run-docker.sh b/build-scripts/docker-build-env/run-docker.sh deleted file mode 100755 index 3cf32a1..0000000 --- a/build-scripts/docker-build-env/run-docker.sh +++ /dev/null @@ -1,87 +0,0 @@ -#!/bin/bash -set -e - -DOCKER_TIMEOUT=20 # Wait 20 seconds for docker to start - -cleanup() { - echo "[INFO] Running cleanup..." - - # Stop docker gracefully - echo "[INFO] Stopping in container docker..." - DOCKERPIDFILE=/var/run/docker.pid - if [ -f $DOCKERPIDFILE ] && [ -s $DOCKERPIDFILE ] && pgrep -F $DOCKERPIDFILE > /dev/null; then - kill "$(cat $DOCKERPIDFILE)" - # Now wait for it to die - STARTTIME=$(date +%s) - ENDTIME=$(date +%s) - while [ -f $DOCKERPIDFILE ] && [ -s $DOCKERPIDFILE ] && pgrep -F $DOCKERPIDFILE > /dev/null; do - if [ $((ENDTIME - STARTTIME)) -le $DOCKER_TIMEOUT ]; then - sleep 1 - ENDTIME=$(date +%s) - else - echo "[ERROR] Timeout while waiting for in container docker to die" - exit 1 - fi - done - else - echo "[WARN] Can't stop docker container" - echo "[WARN] Your host might have been left with unreleased resources (ex. loop devices)" - fi - - if [ "$1" == "fail" ]; then - exit 1 - fi -} -trap 'cleanup fail' SIGINT SIGTERM - -# Start docker -echo "[INFO] Setup crosscompiling feature" -mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc -update-binfmts --enable qemu-arm -update-binfmts --enable qemu-aarch64 - -# Start docker -echo "[INFO] Starting docker." -dockerd 2> /dev/null & -echo "[INFO] Waiting for docker to initialize..." -STARTTIME=$(date +%s) -ENDTIME=$(date +%s) -until docker info >/dev/null 2>&1; do - if [ $((ENDTIME - STARTTIME)) -le $DOCKER_TIMEOUT ]; then - sleep 1 - ENDTIME=$(date +%s) - else - echo "[ERROR] Timeout while waiting for docker to come up" - exit 1 - fi -done -echo "[INFO] Docker was initialized" - -# Start barys with all the arguments requested -echo "[INFO] Running build..." - -if "$DOCKER_CACHE" == "true" && docker pull "$DOCKER_IMAGE:latest" > /dev/null 2>&1 -then - docker build --pull --tag "$DOCKER_IMAGE:$DOCKER_TAG" --cache-from "$DOCKER_IMAGE:latest" . -else - docker build --pull --tag "$DOCKER_IMAGE:$DOCKER_TAG" . -fi - -# tag as latest -if [ "$DOCKER_WITH_LATEST" == "true" ]; then - docker tag "$DOCKER_IMAGE:$DOCKER_TAG" "$DOCKER_IMAGE:latest" -fi - -echo "[INFO] Push image" -if [ "$DOCKER_PUSH" == "true" ]; then - # push - docker push "$DOCKER_IMAGE:$DOCKER_TAG" - - # latest - if [ "$DOCKER_WITH_LATEST" == "true" ]; then - docker push "$DOCKER_IMAGE:latest" - fi -fi - -cleanup "okay" -exit 0 diff --git a/build-scripts/hassio-cluster/create_all.sh b/build-scripts/hassio-cluster/create_all.sh deleted file mode 100755 index d5848f3..0000000 --- a/build-scripts/hassio-cluster/create_all.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash -set -e - -for arch in "armhf" "aarch64" "i386" "amd64" -do - ./create_hassio_cluster.sh -a $arch "$@" & -done -wait diff --git a/build-scripts/hassio-cluster/create_hassio_cluster.sh b/build-scripts/hassio-cluster/create_hassio_cluster.sh deleted file mode 100755 index f6930ef..0000000 --- a/build-scripts/hassio-cluster/create_hassio_cluster.sh +++ /dev/null @@ -1,135 +0,0 @@ -#!/bin/bash -set -e - -BUILD_CONTAINER_NAME=hassio-cluster-build-$$ -DOCKER_PUSH="true" -DOCKER_CACHE="true" -DOCKER_WITH_LATEST="true" -DOCKER_HUB=homeassistant - -cleanup() { - echo "[INFO] Cleanup." - - # Stop docker container - echo "[INFO] Cleaning up hassio-cluster-build container." - docker stop $BUILD_CONTAINER_NAME 2> /dev/null || true - docker rm --volumes $BUILD_CONTAINER_NAME 2> /dev/null || true - - if [ "$1" == "fail" ]; then - exit 1 - fi -} -trap 'cleanup fail' SIGINT SIGTERM - -help () { - cat << EOF -Script for hassio docker build -create_hassio_cluster [options] - -Options: - -h, --help - Display this help and exit. - - -v, --version xy - Set version of cluster image from. - - -d, --dockerhub hubname - Set user of dockerhub build. - - -a, --arch armhf|aarch64|i386|amd64 - Arch for Hass.IO build. - -t, --test - Don't upload the build to docker hub. - -n, --no-cache - Disable build from cache -EOF -} - -# Parse arguments -while [[ $# -gt 0 ]]; do - key=$1 - case $key in - -h|--help) - help - exit 0 - ;; - -d|--dockerhub) - DOCKER_HUB=$2 - shift - ;; - -v|--version) - DOCKER_TAG=$2 - shift - ;; - -a|--arch) - ARCH=$2 - shift - ;; - -t|--test) - DOCKER_PUSH="false" - ;; - -n|--no-cache) - DOCKER_CACHE="false" - ;; - *) - echo "[WARNING] $0 : Argument '$1' unknown. Ignoring." - ;; - esac - shift -done - -# Sanity checks -if [ "$ARCH" != 'armhf' ] && [ "$ARCH" != 'aarch64' ] && [ "$ARCH" != 'i386' ] && [ "$ARCH" != 'amd64' ]; then - echo "Error: $ARCH is not a supported platform for hassio-cluster!" - help - exit 1 -fi -if [ -z "$DOCKER_TAG" ]; then - echo "Error: need set a version!" - help - exit 1 -fi - -# Get the absolute script location -pushd "$(dirname "$0")" > /dev/null 2>&1 -SCRIPTPATH=$(pwd) -popd > /dev/null 2>&1 - -BASE_IMAGE="homeassistant\/$ARCH-base:latest" -DOCKER_IMAGE=$DOCKER_HUB/$ARCH-hassio-cluster -BUILD_DIR=${BUILD_DIR:=$SCRIPTPATH} -WORKSPACE=${BUILD_DIR:=$SCRIPTPATH}/hassio-cluster-$ARCH - -# setup docker -echo "[INFO] Setup docker for cluster" -mkdir -p "$BUILD_DIR" - -cp -r ../../cluster "$WORKSPACE" -sed -i "s/%%BASE_IMAGE%%/${BASE_IMAGE}/g" "$WORKSPACE/Dockerfile" - -echo "LABEL io.hass.version=\"$DOCKER_TAG\" io.hass.arch=\"$ARCH\" io.hass.type=\"cluster\"" >> "$WORKSPACE/Dockerfile" -echo "[INFO] prepare $DOCKER_IMAGE:$DOCKER_TAG done" - -# Run build -echo "[INFO] start docker build" -docker stop $BUILD_CONTAINER_NAME 2> /dev/null || true -docker rm --volumes $BUILD_CONTAINER_NAME 2> /dev/null || true -docker run --rm \ - -v "$WORKSPACE":/docker \ - -v ~/.docker:/root/.docker \ - -e DOCKER_PUSH=$DOCKER_PUSH \ - -e DOCKER_CACHE=$DOCKER_CACHE \ - -e DOCKER_WITH_LATEST=$DOCKER_WITH_LATEST \ - -e DOCKER_IMAGE="$DOCKER_IMAGE" \ - -e DOCKER_TAG="$DOCKER_TAG" \ - --name $BUILD_CONTAINER_NAME \ - --privileged \ - homeassistant/docker-build-env \ - /run-docker.sh - -echo "[INFO] cleanup WORKSPACE" -cd "$BUILD_DIR" -rm -rf "$WORKSPACE" - -cleanup "okay" -exit 0 diff --git a/build-scripts/homeassistant/create_all.sh b/build-scripts/homeassistant/create_all.sh deleted file mode 100755 index 6512936..0000000 --- a/build-scripts/homeassistant/create_all.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash -set -e - -for machine in "raspberrypi3" "raspberrypi2" "raspberrypi" "qemux86" "qemux86-64" "intel-nuc" -do - ./create_homeassistant.sh -m $machine "$@" & -done -wait diff --git a/build-scripts/homeassistant/create_homeassistant.sh b/build-scripts/homeassistant/create_homeassistant.sh deleted file mode 100755 index 2355469..0000000 --- a/build-scripts/homeassistant/create_homeassistant.sh +++ /dev/null @@ -1,129 +0,0 @@ -#!/bin/bash -set -e - -BUILD_CONTAINER_NAME=homeassistant-build-$$ -DOCKER_PUSH="true" -DOCKER_CACHE="false" -DOCKER_WITH_LATEST="true" -DOCKER_HUB=homeassistant - -cleanup() { - echo "[INFO] Cleanup." - - # Stop docker container - echo "[INFO] Cleaning up homeassistant-build container." - docker stop $BUILD_CONTAINER_NAME 2> /dev/null || true - docker rm --volumes $BUILD_CONTAINER_NAME 2> /dev/null || true - - if [ "$1" == "fail" ]; then - exit 1 - fi -} -trap 'cleanup fail' SIGINT SIGTERM - -help () { - cat << EOF -Script for homeassistant docker build -create_homeassistant [options] - -Options: - -h, --help - Display this help and exit. - - -h, --hub hubname - Set user of dockerhub build. - - -m, --machine name - Machine type for HomeAssistant build. - -v, --version X.Y - Version/Tag/branch of HomeAssistant build. - -t, --test - Don't upload the build to docker hub. -EOF -} - -# Parse arguments -while [[ $# -gt 0 ]]; do - key=$1 - case $key in - -h|--help) - help - exit 0 - ;; - -h|--hub) - DOCKER_HUB=$2 - shift - ;; - -m|--machine) - MACHINE=$2 - shift - ;; - -v|--version) - DOCKER_TAG=$2 - shift - ;; - -t|--test) - DOCKER_PUSH="false" - ;; - *) - echo "[WARNING] $0 : Argument '$1' unknown. Ignoring." - ;; - esac - shift -done - -# Sanity checks -if [ -z "$MACHINE" ]; then - echo "[ERROR] please set a machine!" - help - exit 1 -fi -if [ -z "$DOCKER_TAG" ]; then - echo "[ERROR] please set a version/branch!" - help - exit 1 -fi - -# Get the absolute script location -pushd "$(dirname "$0")" > /dev/null 2>&1 -SCRIPTPATH=$(pwd) -popd > /dev/null 2>&1 - -DOCKER_IMAGE=$DOCKER_HUB/$MACHINE-homeassistant -BUILD_DIR=${BUILD_DIR:=$SCRIPTPATH} -WORKSPACE=$BUILD_DIR/hass-$MACHINE - -# setup docker -echo "[INFO] Setup docker for homeassistant" -mkdir -p "$BUILD_DIR" -mkdir -p "$WORKSPACE" - -echo "[INFO] load homeassistant" -cp "../../homeassistant/machine/$MACHINE" "$WORKSPACE/Dockerfile" - -sed -i "s/%%VERSION%%/${DOCKER_TAG}/g" "$WORKSPACE/Dockerfile" -echo "[INFO] prepare done for $DOCKER_IMAGE:$DOCKER_TAG" - -# Run build -echo "[INFO] start docker build" -docker stop $BUILD_CONTAINER_NAME 2> /dev/null || true -docker rm --volumes $BUILD_CONTAINER_NAME 2> /dev/null || true -docker run --rm \ - -v "$WORKSPACE":/docker \ - -v ~/.docker:/root/.docker \ - -e DOCKER_PUSH=$DOCKER_PUSH \ - -e DOCKER_CACHE=$DOCKER_CACHE \ - -e DOCKER_WITH_LATEST=$DOCKER_WITH_LATEST \ - -e DOCKER_IMAGE="$DOCKER_IMAGE" \ - -e DOCKER_TAG="$DOCKER_TAG" \ - --name $BUILD_CONTAINER_NAME \ - --privileged \ - homeassistant/docker-build-env \ - /run-docker.sh - -echo "[INFO] cleanup WORKSPACE" -cd "$BUILD_DIR" -rm -rf "$WORKSPACE" - -cleanup "okay" -exit 0 diff --git a/builder/builder.sh b/builder/builder.sh index e354062..8b27b1e 100644 --- a/builder/builder.sh +++ b/builder/builder.sh @@ -145,10 +145,9 @@ function run_build() { local repository=$2 local image=$3 local version=$4 - local build_type=$5 - local build_from=$6 - local build_arch=$7 - local docker_cli=("${!8}") + local build_from=$5 + local build_arch=$6 + local docker_cli=("${!7}") local push_images=() @@ -170,15 +169,18 @@ function run_build() { fi fi + # do we know the arch of build? + if [ ! -z "$build_arch" ]; then + docker_cli+=("--label" "io.hass.arch=$build_arch") + docker_cli+=("--build-arg" "BUILD_ARCH=$build_arch") + fi + # Build image echo "[INFO] Run build for $repository/$image:$version" docker build -t "$repository/$image:$version" \ --label "io.hass.version=$version" \ - --label "io.hass.type=$build_type" \ - --label "io.hass.arch=$build_arch" \ --build-arg "BUILD_FROM=$build_from" \ --build-arg "BUILD_VERSION=$version" \ - --build-arg "BUILD_ARCH=$build_arch" \ "${docker_cli[@]}" \ "$build_dir" @@ -246,6 +248,7 @@ function build_addon() { # Set additional labels docker_cli+=("--label" "io.hass.name=$name") docker_cli+=("--label" "io.hass.description=$description") + docker_cli+=("--label" "io.hass.type=addon") if [ ! -z "$url" ]; then docker_cli+=("--label" "io.hass.url=$url") @@ -253,7 +256,7 @@ function build_addon() { # Start build run_build "$TARGET" "$repository" "$image" "$version" \ - "addon" "$build_from" "$build_arch" docker_cli[@] + "$build_from" "$build_arch" docker_cli[@] } @@ -267,10 +270,11 @@ function build_supervisor() { # Read version version="$(python3 "$TARGET/setup.py" -V)" + docker_cli+=("--label" "io.hass.type=supervisor") # Start build run_build "$TARGET" "$DOCKER_HUB" "$image" "$version" \ - "supervisor" "$build_from" "$build_arch" docker_cli[@] + "$build_from" "$build_arch" docker_cli[@] } @@ -281,12 +285,34 @@ function build_homeassistant() { local build_from="homeassistant/${build_arch}-homeassistant-base:latest" local docker_cli=() + # Set labels + docker_cli+=("--label" "io.hass.type=homeassistant") + # Start build run_build "$TARGET" "$DOCKER_HUB" "$image" "$VERSION" \ - "homeassistant" "$build_from" "$build_arch" docker_cli[@] + "$build_from" "$build_arch" docker_cli[@] } +function build_homeassistant_machine() { + local build_machine=$1 + + local image="${build_machine}-homeassistant" + local build_from="" + local docker_cli=() + local dockerfile="$TARGET/$build_machine" + + # Set labels + docker_cli+=("--label" "io.hass.machine=$build_machine") + docker_cli+=("--file" "$dockerfile") + + # Start build + run_build "$TARGET" "$DOCKER_HUB" "$image" "$VERSION" \ + "$build_from" "" docker_cli[@] +} + + + function extract_machine_build() { local list=$1 @@ -419,7 +445,7 @@ while [[ $# -gt 0 ]]; do done # Check if a architecture is available -if [ "${#BUILD_LIST[@]}" -eq 0 ] && [ "$BUILT_TYPE" != "homeassistant-machine" ]; then +if [ "${#BUILD_LIST[@]}" -eq 0 ] && [ "$BUILD_TYPE" != "homeassistant-machine" ]; then echo "[ERROR] You need select a architecture for build!" exit 1 fi @@ -430,16 +456,6 @@ if [ "$BUILD_TYPE" != "addon" ] && [ -z "$DOCKER_HUB" ]; then exit 1 fi -if [ "$BUILD_TYPE" == "homeassistant" ] && [ -z "$VERSION" ]; then - echo "[ERROR] Please set a version for home-assistant!" - exit 1 -fi - -if [ "$BUILD_TYPE" == "homeassistant-machine" ] && [ -z "$VERSION" ]; then - echo "[ERROR] Please set a version for home-assistant!" - exit 1 -fi - #### Main #### @@ -456,7 +472,7 @@ if [ ! -z "$GIT_REPOSITORY" ]; then TARGET="/data/git/$TARGET" fi -# Select addon build +# Select arch build echo "[INFO] Run $BUILD_TYPE build for: ${BUILD_LIST[*]}" for arch in "${BUILD_LIST[@]}"; do if [ "$BUILD_TYPE" == "addon" ]; then @@ -469,6 +485,15 @@ for arch in "${BUILD_LIST[@]}"; do BUILD_TASKS+=($!) done +# Select machine build +if [ "$BUILD_TYPE" == "homeassistant-machine" ]; then + echo "[INFO] Machine builds: ${BUILD_MACHINE[*]}" + for machine in "${BUILD_MACHINE[@]}"; do + (build_homeassistant_machine "$machine") & + BUILD_TASKS+=($!) + done +fi + # Wait until all build jobs are done wait "${BUILD_TASKS[@]}" diff --git a/cluster/Dockerfile b/cluster/Dockerfile deleted file mode 100644 index fd5b92f..0000000 --- a/cluster/Dockerfile +++ /dev/null @@ -1,13 +0,0 @@ -FROM %%BASE_IMAGE%% - -# add env -ENV LANG C.UTF-8 - -# setup base -RUN apk add --no-cache socat - -# install scripts -COPY run.sh / -RUN chmod a+x /run.sh - -CMD [ "/run.sh" ] diff --git a/cluster/run.sh b/cluster/run.sh deleted file mode 100644 index cbc8b61..0000000 --- a/cluster/run.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash -set -e - -# check env -if [ -z "$HASSIO" ]; then - echo "[ERROR] Need set \$HASSIO env!" - exit 1 -fi - -echo "[INFO] Start cluster proxy" -exec socat TCP-LISTEN:9123,fork TCP:$HASSIO:9123 < /dev/null