From 9d0cffb31d19f0e05e7a1c0ba8193deb5db74b05 Mon Sep 17 00:00:00 2001 From: nosamad Date: Fri, 5 Apr 2019 18:03:48 +0200 Subject: [PATCH] removes bash dependency - simplifies scripts to support posix shell - adds REGISTERY_PREFIX to support usage of local docker registry - renames wrapper template - adds discovery for tty and interactive for wrappers --- Makefile | 9 +++-- build/amd64-debian-builder.dockerfile | 3 +- build/amd64-ubuntu-builder.dockerfile | 3 +- build/arm32v7-debian-builder.dockerfile | 3 +- build/arm32v7-ubuntu-builder.dockerfile | 3 +- build/is_running_in_bg.sh | 18 +++++++++ build/run_image.sh.template | 50 +++++++++++++++++++++++++ build/run_image.template | 41 -------------------- 8 files changed, 81 insertions(+), 49 deletions(-) create mode 100755 build/is_running_in_bg.sh create mode 100644 build/run_image.sh.template delete mode 100644 build/run_image.template diff --git a/Makefile b/Makefile index 857ac60..a067660 100644 --- a/Makefile +++ b/Makefile @@ -26,8 +26,8 @@ OUT ?= $(PROJECT_ROOT)/.build VERSION ?= $(shell cat $(PROJECT_ROOT)/VERSION) VERSION := $(VERSION) -UID ?= $(shell id -u) -UID := $(UID) +USERID ?= $(shell id -u) +USERID := $(USERID) CONTAINER_USER ?= user CONTAINER_GROUP ?= user @@ -158,9 +158,10 @@ DOCKER_RUNFLAGS += --env NINJA_STATUS DOCKER_BUILDARGS += CODENAME=$(CODENAME) DOCKER_BUILDARGS += PARALLELMFLAGS=$(_PARALLELMFLAGS) -DOCKER_BUILDARGS += USERID=$(UID) +DOCKER_BUILDARGS += USERID=$(USERID) DOCKER_BUILDARGS += PROJECT_ROOT=$(CONTAINER_PROJECT_ROOT) DOCKER_BUILDARGS += OUT=$(CONTAINER_OUT) +DOCKER_BUILDARGS += REGISTRY_PREFIX=$(REGISTRY_PREFIX) DOCKER_BUILDFLAGS += --rm DOCKER_BUILDFLAGS += $(addprefix --build-arg ,$(DOCKER_BUILDARGS)) @@ -277,7 +278,7 @@ discover_cc_rule = \ discover_cc = cat $< wrapper_rule = \ - $$(OUT)/$1/$$(BUILDTYPE)/gdbserver: $$(PROJECT_ROOT)/build/run_image.template $$(OUT)/docker/$1; \ + $$(OUT)/$1/$$(BUILDTYPE)/gdbserver: $$(PROJECT_ROOT)/build/run_image.sh.template $$(OUT)/docker/$1; \ $$(SILENT)$$(call wrapper,$1) wrapper = \ $(call echo_if_silent,generating $@) \ diff --git a/build/amd64-debian-builder.dockerfile b/build/amd64-debian-builder.dockerfile index f579585..ea3c6b8 100644 --- a/build/amd64-debian-builder.dockerfile +++ b/build/amd64-debian-builder.dockerfile @@ -1,6 +1,7 @@ +ARG REGISTRY_PREFIX='' ARG CODENAME=testing-slim -FROM debian:$CODENAME as builder +FROM ${REGISTRY_PREFIX}debian:${CODENAME} as builder RUN set -x \ && apt update \ diff --git a/build/amd64-ubuntu-builder.dockerfile b/build/amd64-ubuntu-builder.dockerfile index 184b821..46780fe 100644 --- a/build/amd64-ubuntu-builder.dockerfile +++ b/build/amd64-ubuntu-builder.dockerfile @@ -1,6 +1,7 @@ +ARG REGISTRY_PREFIX='' ARG CODENAME=bionic -FROM ubuntu:$CODENAME as builder +FROM ${REGISTRY_PREFIX}ubuntu:${CODENAME} as builder RUN set -x \ && apt update \ diff --git a/build/arm32v7-debian-builder.dockerfile b/build/arm32v7-debian-builder.dockerfile index 5143d93..4d856af 100644 --- a/build/arm32v7-debian-builder.dockerfile +++ b/build/arm32v7-debian-builder.dockerfile @@ -1,6 +1,7 @@ +ARG REGISTRY_PREFIX='' ARG CODENAME=testing-slim -FROM arm32v7/debian:$CODENAME as builder +FROM ${REGISTRY_PREFIX}arm32v7/debian:${CODENAME} as builder ARG QEMU_VERSION_=v3.1.0-2 diff --git a/build/arm32v7-ubuntu-builder.dockerfile b/build/arm32v7-ubuntu-builder.dockerfile index ec507e7..f1f88bb 100644 --- a/build/arm32v7-ubuntu-builder.dockerfile +++ b/build/arm32v7-ubuntu-builder.dockerfile @@ -1,6 +1,7 @@ +ARG REGISTRY_PREFIX='' ARG CODENAME=bionic -FROM arm32v7/ubuntu:$CODENAME as builder +FROM ${REGISTRY_PREFIX}arm32v7/ubuntu:${CODENAME} as builder ARG QEMU_VERSION_=v3.1.0-2 diff --git a/build/is_running_in_bg.sh b/build/is_running_in_bg.sh new file mode 100755 index 0000000..e749227 --- /dev/null +++ b/build/is_running_in_bg.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +set -e + +running_in_background() { + pid="$1" + + case "$("$PS" -o stat= -p "$pid" 2>/dev/null || echo '+')" in + *+*) ;; + *) return 0 ;; + esac + + return 1 +} + +PS="${PS:-ps}" + +running_in_background "$@" diff --git a/build/run_image.sh.template b/build/run_image.sh.template new file mode 100644 index 0000000..33448b4 --- /dev/null +++ b/build/run_image.sh.template @@ -0,0 +1,50 @@ +#!/bin/sh + +set -e + +DOCKER="${DOCKER:-%DOCKER%}" +IMAGE="${IMAGE:-%IMAGE%}" +NETWORK="${NETWORK:-host}" +USERID="${USERID:-$(id -u)}" +PROJECT_ROOT="${PROJECT_ROOT:-%PROJECT_ROOT%}" +SCRIPT_ROOT="${SCRIPT_ROOT:-"$PROJECT_ROOT/build"}" +ENTRYPOINT="${ENTRYPOINT:-%RUNCMD%}" + +if [ ! -d "$SCRIPT_ROOT" ]; then + echo "error:$0: $SCRIPT_ROOT not found; set project root (PROJECT_ROOT=)" 1>&2 + exit 1 +fi + +HOST_CONTAINER="${HOST_CONTAINER:-"$("$SCRIPT_ROOT/get_container_id.sh")"}" || true + +RUNFLAGS='%RUNFLAGS%' + +if [ -n "$HOST_CONTAINER" ]; then + RUNFLAGS="$RUNFLAGS --volumes-from $HOST_CONTAINER" +fi + +RUNFLAGS="$RUNFLAGS --network $NETWORK" + +if [ -n "$CONTAINER_CGROUP_PARENT" ]; then + RUNFLAGS="$RUNFLAGS --cgroup-parent $CONTAINER_CGROUP_PARENT" +fi + +RUNFLAGS="$RUNFLAGS --workdir $PWD" + +# if STDIN piped or redirected +if [ -p /dev/stdin ] || { [ ! -t 0 ] && [ ! -p /dev/stdin ]; }; then + RUNFLAGS="$RUNFLAGS --interactive" +elif [ -t 1 ]; then + RUNFLAGS="$RUNFLAGS --tty" +fi + +if [ -t 0 ] && ! "$SCRIPT_ROOT/is_running_in_bg.sh" $$; then + RUNFLAGS="$RUNFLAGS --interactive" +fi + +RUNFLAGS="$RUNFLAGS --user $USERID:$USERID" + +# shellcheck disable=SC2086 +set -- $RUNFLAGS --entrypoint "$ENTRYPOINT" "$IMAGE" "$@" + +exec "$DOCKER" run "$@" diff --git a/build/run_image.template b/build/run_image.template deleted file mode 100644 index 7c3225b..0000000 --- a/build/run_image.template +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env bash - -set -e - -DOCKER="${DOCKER:-%DOCKER%}" -IMAGE="${IMAGE:-%IMAGE%}" -NETWORK="${NETWORK:-host}" -PROJECT_ROOT="${PROJECT_ROOT:-%PROJECT_ROOT%}" -CONTAINER_ID_CMD="$PROJECT_ROOT/build/get_container_id.sh" - -if command -v "$CONTAINER_ID_CMD" 2>&1 1>/dev/null; then - HOST_CONTAINER="${HOST_CONTAINER:-"$("$CONTAINER_ID_CMD")"}" || true -else - echo "warning:$0: failed to discover host environment" 1>&2 -fi - -# shellcheck disable=SC2162 -read -a ADDITIONAL_RUNFLAGS <<< "$RUNFLAGS" - -RUNFLAGS=() - -# shellcheck disable=SC2191 -RUNFLAGS+=( %RUNFLAGS% ) - -if [[ -n "$HOST_CONTAINER" ]]; then - RUNFLAGS+=( --volumes-from "$HOST_CONTAINER" ) -fi - -RUNFLAGS+=( --network "$NETWORK" ) - -if [[ -n "$CONTAINER_CGROUP_PARENT" ]]; then - RUNFLAGS+=( --cgroup-parent "$CONTAINER_CGROUP_PARENT" ) -fi - -RUNFLAGS+=( --workdir "$PWD" ) - -RUNCMD=( %RUNCMD% ) - -set -- "${RUNFLAGS[@]}" "${ADDITIONAL_RUNFLAGS[@]}" "$IMAGE" "${RUNCMD[@]}" "$@" - -exec "$DOCKER" run "$@"