From a3b0bf7e91e655f487a9af91d612df293e20d03d Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Wed, 15 Mar 2017 01:32:13 +0100 Subject: [PATCH] Use dockerfiles for supervisor --- .gitmodules | 11 --- build-scripts/yocto-build-env/Dockerfile | 2 +- .../src/run-supervisor-base.sh | 12 ---- .../yocto-build-env/src/run-supervisor.sh | 68 +++++++++++++++++++ supervisor-base/bitbake | 1 - supervisor-base/meta-openembedded | 1 - supervisor-base/openembedded-core | 1 - supervisor/Dockerfile | 1 + 8 files changed, 70 insertions(+), 27 deletions(-) delete mode 100644 .gitmodules delete mode 100644 build-scripts/yocto-build-env/src/run-supervisor-base.sh create mode 100644 build-scripts/yocto-build-env/src/run-supervisor.sh delete mode 160000 supervisor-base/bitbake delete mode 160000 supervisor-base/meta-openembedded delete mode 160000 supervisor-base/openembedded-core create mode 100644 supervisor/Dockerfile diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 38b1bea30..000000000 --- a/.gitmodules +++ /dev/null @@ -1,11 +0,0 @@ -[submodule "supervisor-base/openembedded-core"] - path = supervisor-base/openembedded-core - url = git://git.openembedded.org/openembedded-core - branch = morty -[submodule "supervisor-base/bitbake"] - path = supervisor-base/bitbake - url = git://git.openembedded.org/bitbake -[submodule "supervisor-base/meta-openembedded"] - path = supervisor-base/meta-openembedded - url = git://git.openembedded.org/meta-openembedded - branch = morty diff --git a/build-scripts/yocto-build-env/Dockerfile b/build-scripts/yocto-build-env/Dockerfile index ec4da748f..ea003e230 100644 --- a/build-scripts/yocto-build-env/Dockerfile +++ b/build-scripts/yocto-build-env/Dockerfile @@ -25,6 +25,6 @@ RUN add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubunt RUN apt-get update && apt-get install -y docker-ce && rm -rf /var/lib/apt/lists/* COPY src/run-resinos.sh / -COPY src/run-supervisor-base.sh / +COPY src/run-supervisor.sh / WORKDIR /yocto/image diff --git a/build-scripts/yocto-build-env/src/run-supervisor-base.sh b/build-scripts/yocto-build-env/src/run-supervisor-base.sh deleted file mode 100644 index b7933a4e1..000000000 --- a/build-scripts/yocto-build-env/src/run-supervisor-base.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -set -o errexit - -groupadd -g $BUILDER_GID builder -useradd -m -u $BUILDER_UID -g $BUILDER_GID builder - -sudo -H -u builder /bin/bash -c "cd /yocto/image \ - && source oe-core/oe-init-build-env build bitbake \ - && DL_DIR=/yocto/shared-downloads SSTATE_DIR=/yocto/shared-sstate MACHINE=$TARGET_MACHINE /yocto/image/bitbake/bin/bitbake core-image-minimal" - -cp --dereference /yocto/image/build/tmp-glibc/deploy/images/$TARGET_MACHINE/core-image-minimal-$TARGET_MACHINE.tar.gz /yocto/image/rootfs.tar.gz diff --git a/build-scripts/yocto-build-env/src/run-supervisor.sh b/build-scripts/yocto-build-env/src/run-supervisor.sh new file mode 100644 index 000000000..baed0ec57 --- /dev/null +++ b/build-scripts/yocto-build-env/src/run-supervisor.sh @@ -0,0 +1,68 @@ +#!/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 ] && ps $(cat $DOCKERPIDFILE) | grep -q docker; then + kill $(cat $DOCKERPIDFILE) + # Now wait for it to die + STARTTIME=$(date +%s) + ENDTIME=$(date +%s) + while [ -f $DOCKERPIDFILE ] && [ -s $DOCKERPIDFILE ] && ps $(cat $DOCKERPIDFILE) | grep -q docker; 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 + +# Create the normal user to be used for bitbake (barys) +echo "[INFO] Creating and setting builder user $BUILDER_UID:$BUILDER_GID." +groupadd -g $BUILDER_GID builder +groupadd docker || true +useradd -m -u $BUILDER_UID -g $BUILDER_GID -G docker builder + +# 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 as builder user..." +sudo -H -u builder /yocto/image/resin-yocto-scripts/build/barys $@ & +barys_pid=$! +wait $barys_pid || true + +cleanup +exit 0 diff --git a/supervisor-base/bitbake b/supervisor-base/bitbake deleted file mode 160000 index acd2fd74e..000000000 --- a/supervisor-base/bitbake +++ /dev/null @@ -1 +0,0 @@ -Subproject commit acd2fd74ed467dc85ec75d5d0815f43e493f29bf diff --git a/supervisor-base/meta-openembedded b/supervisor-base/meta-openembedded deleted file mode 160000 index 1dff2351a..000000000 --- a/supervisor-base/meta-openembedded +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 1dff2351aa6cdafa5a501e8956cb853ab17ed9ae diff --git a/supervisor-base/openembedded-core b/supervisor-base/openembedded-core deleted file mode 160000 index 477805b91..000000000 --- a/supervisor-base/openembedded-core +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 477805b913a6c4b4b630e42f08cd9e59f1e4e254 diff --git a/supervisor/Dockerfile b/supervisor/Dockerfile new file mode 100644 index 000000000..7938b4083 --- /dev/null +++ b/supervisor/Dockerfile @@ -0,0 +1 @@ +FROM %%BASE_IMAGE%%