1
0
mirror of https://github.com/falk-werner/webfuse-provider synced 2026-03-02 04:09:18 +00:00

chore(webfuse): debian build support (#22)

* adds debian builder image

* adds arm32v7 debian based builder image

* sets the default build target to amd64-ubuntu-builder if MARCH is unset

* adds distro filter and set default to ubuntu for travis

disables debian builds for now

* fixes wrapper for non container hosts

* fixes distro selection and parallel mflags

* changes parallelization option

* fixes parallel flags and variable names

* enhances makefile

adds checksum for fetch dependencies

discovers necessary commands

fixes error when script get_container_id not found

* fixes copy artifacts to image

* fixes typo

* fixes another typo

* 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

* adds docker-compose wrapper

* adds ability to start wrapper in namespace of another container

* renames compose wrapper script

* adds support to retrieve source epoch date for svn

* fixes handling for positional arguments

* removes docker connection options

* removes dependency to readlink

* removes duplicate options
This commit is contained in:
nosamad
2019-04-06 08:09:21 +02:00
committed by Falk Werner
parent b1527d5581
commit 500353115c
11 changed files with 498 additions and 109 deletions

View File

@@ -0,0 +1,104 @@
ARG REGISTRY_PREFIX=''
ARG CODENAME=testing-slim
FROM ${REGISTRY_PREFIX}debian:${CODENAME} as builder
RUN set -x \
&& apt update \
&& apt upgrade -y \
&& apt install --yes --no-install-recommends \
build-essential \
cmake \
ninja-build \
pkg-config \
rsync \
gdb \
gdbserver \
valgrind
COPY src /usr/local/src
ARG PARALLELMFLAGS=-j2
ARG DUMB_INIT_VERSION=1.2.2
RUN set -x \
&& builddeps="xxd" \
&& apt install --yes --no-install-recommends $builddeps \
&& builddir="/tmp/out" \
&& mkdir -p "$builddir" \
&& cd "$builddir" \
&& cp -R "/usr/local/src/dumb-init-$DUMB_INIT_VERSION" . \
&& cd "dumb-init-$DUMB_INIT_VERSION" \
&& make "$PARALLELMFLAGS" \
&& chmod +x dumb-init \
&& mv dumb-init /usr/local/bin/dumb-init \
&& dumb-init --version \
&& rm -rf "$builddir" \
&& apt purge -y $builddeps
ARG GTEST_VERSION=1.8.1
RUN set -x \
&& builddir="/tmp/out" \
&& mkdir -p "$builddir" \
&& cd "$builddir" \
&& cmake "/usr/local/src/googletest-release-$GTEST_VERSION" \
&& make "$PARALLELMFLAGS" install \
&& rm -rf "$builddir"
ARG FUSE_VERSION=3.1.1
RUN set -x \
&& builddeps="libtool automake gettext" \
&& apt install --yes --no-install-recommends $builddeps \
&& cd "/usr/local/src/libfuse-fuse-$FUSE_VERSION" \
&& ./makeconf.sh \
&& builddir="/tmp/out" \
&& mkdir -p "$builddir" \
&& cd "$builddir" \
&& "/usr/local/src/libfuse-fuse-$FUSE_VERSION/configure" \
&& make "$PARALLELMFLAGS" install \
&& rm -rf "$builddir" \
&& apt purge -y $builddeps
ARG WEBSOCKETS_VERSION=3.1.0
RUN set -x \
&& apt install --yes --no-install-recommends \
ca-certificates \
openssl \
libssl-dev \
&& builddir="/tmp/out" \
&& mkdir -p "$builddir" \
&& cd "$builddir" \
&& cmake "/usr/local/src/libwebsockets-$WEBSOCKETS_VERSION" \
&& make "$PARALLELMFLAGS" install \
&& rm -rf "$builddir"
ARG JANSSON_VERSION=2.12
RUN set -x \
&& builddir="/tmp/out" \
&& mkdir -p "$builddir" \
&& cd "$builddir" \
&& cmake -DJANSSON_BUILD_DOCS=OFF "/usr/local/src/jansson-$JANSSON_VERSION" \
&& make "$PARALLELMFLAGS" install \
&& rm -rf "$builddir"
ENV LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib"
ARG USERID=1000
ARG PROJECT_ROOT=/workspace/src
ARG OUT=/workspace/out
RUN set -x \
&& useradd -u "$USERID" -ms /bin/bash user \
&& mkdir -p "$PROJECT_ROOT" "$OUT" \
&& chown user:user "$PROJECT_ROOT" "$OUT"
WORKDIR "$OUT"
ENTRYPOINT ["dumb-init", "--"]

View File

@@ -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 \
@@ -19,7 +20,7 @@ COPY src /usr/local/src
ARG PARALLELMFLAGS=-j2
ARG DUMB_INIT_VERISON=1.2.2
ARG DUMB_INIT_VERSION=1.2.2
RUN set -x \
&& builddeps="xxd" \
@@ -27,8 +28,8 @@ RUN set -x \
&& builddir="/tmp/out" \
&& mkdir -p "$builddir" \
&& cd "$builddir" \
&& cp -R "/usr/local/src/dumb-init-$DUMB_INIT_VERISON" . \
&& cd dumb-init-$DUMB_INIT_VERISON \
&& cp -R "/usr/local/src/dumb-init-$DUMB_INIT_VERSION" . \
&& cd "dumb-init-$DUMB_INIT_VERSION" \
&& make "$PARALLELMFLAGS" \
&& chmod +x dumb-init \
&& mv dumb-init /usr/local/bin/dumb-init \

View File

@@ -0,0 +1,107 @@
ARG REGISTRY_PREFIX=''
ARG CODENAME=testing-slim
FROM ${REGISTRY_PREFIX}arm32v7/debian:${CODENAME} as builder
ARG QEMU_VERSION_=v3.1.0-2
COPY docker/qemu-arm-static-$QEMU_VERSION_ /usr/bin/qemu-arm-static
RUN set -x \
&& apt update \
&& apt upgrade -y \
&& apt install --yes --no-install-recommends \
build-essential \
cmake \
ninja-build \
pkg-config \
rsync \
gdb \
gdbserver
COPY src /usr/local/src
ARG PARALLELMFLAGS=-j2
ARG DUMB_INIT_VERSION=1.2.2
RUN set -x \
&& builddeps="xxd" \
&& apt install --yes --no-install-recommends $builddeps \
&& builddir="/tmp/out" \
&& mkdir -p "$builddir" \
&& cd "$builddir" \
&& cp -R "/usr/local/src/dumb-init-$DUMB_INIT_VERSION" . \
&& cd "dumb-init-$DUMB_INIT_VERSION" \
&& make "$PARALLELMFLAGS" \
&& chmod +x dumb-init \
&& mv dumb-init /usr/local/bin/dumb-init \
&& dumb-init --version \
&& rm -rf "$builddir" \
&& apt purge -y $builddeps
ARG GTEST_VERSION=1.8.1
RUN set -x \
&& builddir="/tmp/out" \
&& mkdir -p "$builddir" \
&& cd "$builddir" \
&& cmake "/usr/local/src/googletest-release-$GTEST_VERSION" \
&& make "$PARALLELMFLAGS" install \
&& rm -rf "$builddir"
ARG FUSE_VERSION=3.1.1
RUN set -x \
&& builddeps="libtool automake gettext" \
&& apt install --yes --no-install-recommends $builddeps \
&& cd "/usr/local/src/libfuse-fuse-$FUSE_VERSION" \
&& ./makeconf.sh \
&& builddir="/tmp/out" \
&& mkdir -p "$builddir" \
&& cd "$builddir" \
&& "/usr/local/src/libfuse-fuse-$FUSE_VERSION/configure" \
&& make "$PARALLELMFLAGS" install \
&& rm -rf "$builddir" \
&& apt purge -y $builddeps
ARG WEBSOCKETS_VERSION=3.1.0
RUN set -x \
&& apt install --yes --no-install-recommends \
ca-certificates \
openssl \
libssl-dev \
&& builddir="/tmp/out" \
&& mkdir -p "$builddir" \
&& cd "$builddir" \
&& cmake "/usr/local/src/libwebsockets-$WEBSOCKETS_VERSION" \
&& make "$PARALLELMFLAGS" install \
&& rm -rf "$builddir"
ARG JANSSON_VERSION=2.12
RUN set -x \
&& builddir="/tmp/out" \
&& mkdir -p "$builddir" \
&& cd "$builddir" \
&& cmake -DJANSSON_BUILD_DOCS=OFF "/usr/local/src/jansson-$JANSSON_VERSION" \
&& make "$PARALLELMFLAGS" install \
&& rm -rf "$builddir"
ENV LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib"
ARG USERID=1000
ARG PROJECT_ROOT=/workspace/src
ARG OUT=/workspace/out
RUN set -x \
&& useradd -u "$USERID" -ms /bin/bash user \
&& mkdir -p "$PROJECT_ROOT" "$OUT" \
&& chown user:user "$PROJECT_ROOT" "$OUT"
WORKDIR "$OUT"
ENTRYPOINT ["dumb-init", "--"]

View File

@@ -1,8 +1,11 @@
ARG REGISTRY_PREFIX=''
ARG CODENAME=bionic
FROM arm32v7/ubuntu:$CODENAME as builder
FROM ${REGISTRY_PREFIX}arm32v7/ubuntu:${CODENAME} as builder
COPY docker/qemu-arm-static-* /usr/bin/qemu-arm-static
ARG QEMU_VERSION_=v3.1.0-2
COPY docker/qemu-arm-static-$QEMU_VERSION_ /usr/bin/qemu-arm-static
RUN set -x \
&& apt update \
@@ -20,7 +23,7 @@ COPY src /usr/local/src
ARG PARALLELMFLAGS=-j2
ARG DUMB_INIT_VERISON=1.2.2
ARG DUMB_INIT_VERSION=1.2.2
RUN set -x \
&& builddeps="xxd" \
@@ -28,8 +31,8 @@ RUN set -x \
&& builddir="/tmp/out" \
&& mkdir -p "$builddir" \
&& cd "$builddir" \
&& cp -R "/usr/local/src/dumb-init-$DUMB_INIT_VERISON" . \
&& cd dumb-init-$DUMB_INIT_VERISON \
&& cp -R "/usr/local/src/dumb-init-$DUMB_INIT_VERSION" . \
&& cd "dumb-init-$DUMB_INIT_VERSION" \
&& make "$PARALLELMFLAGS" \
&& chmod +x dumb-init \
&& mv dumb-init /usr/local/bin/dumb-init \

51
build/docker_compose.sh Executable file
View File

@@ -0,0 +1,51 @@
#!/bin/sh
set -e
DOCKER="${DOCKER:-docker}"
DOCKER_HOST="${DOCKER_HOST:-/var/run/docker.sock}"
IMAGE="${IMAGE:-${REGISTRY_PREFIX}docker/compose:1.24.0}"
NETWORK="${NETWORK:-host}"
USERID="${USERID:-$(id -u)}"
SCRIPT_ROOT="${SCRIPT_ROOT:-"$(cd "$(dirname "$0")" && echo "$PWD")"}"
ENTRYPOINT="${ENTRYPOINT:-docker-compose}"
HOST_ENVFILTER="${HOST_ENVFILTER:-^DOCKER_\|^COMPOSE_}"
set -- --entrypoint "$ENTRYPOINT" "$IMAGE" "$@"
set -- --user "$USERID:$USERID" --network "$NETWORK" --workdir "$PWD" "$@"
ENVFLAGS="$(printenv | grep -e "$HOST_ENVFILTER" | sed -n -e 's/\([^=]*\)=.*/-e \1/p')" || true
#shellcheck disable=SC2086
set -- $ENVFLAGS "$@"
if [ -n "$CONTAINER_CGROUP_PARENT" ]; then
set -- --cgroup-parent "$CONTAINER_CGROUP_PARENT" "$@"
fi
HOST_CONTAINER="${HOST_CONTAINER:-"$("$SCRIPT_ROOT/get_container_id.sh")"}" || true
if [ -n "$HOST_CONTAINER" ]; then
set -- --volumes-from "$HOST_CONTAINER" "$@"
fi
# setup options for connection to docker host
if [ -S "$DOCKER_HOST" ]; then
DOCKER_SOCK_GROUP="$(stat -c '%g' "$DOCKER_HOST")"
set -- -e DOCKER_SOCK_GROUP="$DOCKER_SOCK_GROUP" --group-add "$DOCKER_SOCK_GROUP" "$@"
else
set -- -e DOCKER_HOST -e DOCKER_TLS_VERIFY -e DOCKER_CERT_PATH "$@"
fi
if [ -t 0 ] && ! "$SCRIPT_ROOT/is_running_in_bg.sh" $$; then
set -- --interactive "$@"
fi
# if STDIN piped or redirected
if [ -p /dev/stdin ] || { [ ! -t 0 ] && [ ! -p /dev/stdin ]; }; then
set -- --interactive "$@"
elif [ -t 1 ]; then
set -- --tty "$@"
fi
set -- --rm "$@"
exec "$DOCKER" run "$@"

View File

@@ -13,6 +13,12 @@ try_git() {
[ -n "$SOURCE_DATE_EPOCH" ]
}
try_svn() {
[ -d .svn ] || return 1
SOURCE_DATE_EPOCH="$(date -d "$(svn info | sed -n -e 's/^Last Changed Date: //p')" +%s)"
[ -n "$SOURCE_DATE_EPOCH" ]
}
try_hg() {
[ -d .hg ] || return 1
SOURCE_DATE_EPOCH="$(hg log --template '{date}' -l 1 | cut -d. -f1)"
@@ -24,5 +30,5 @@ try_mtime() {
[ -n "$SOURCE_DATE_EPOCH" ]
}
try_git || try_hg || try_mtime || SOURCE_DATE_EPOCH=""
try_git || try_svn || try_hg || try_mtime || SOURCE_DATE_EPOCH=""
echo "$SOURCE_DATE_EPOCH"

18
build/is_running_in_bg.sh Executable file
View File

@@ -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 "$@"

View File

@@ -0,0 +1,52 @@
#!/bin/sh
set -e
DOCKER="${DOCKER:-%DOCKER%}"
IMAGE="${IMAGE:-%IMAGE%}"
NETWORK="${NETWORK:-host}"
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
set -- --entrypoint "$ENTRYPOINT" "$IMAGE" "$@"
set -- --network "$NETWORK" --workdir "$PWD" "$@"
if [ -n "$USERID" ]; then
set -- --user "$USERID:$USERID" "$@"
fi
if [ -n "$PID" ]; then
set -- --pid "$PID" "$@"
fi
if [ -n "$CONTAINER_CGROUP_PARENT" ]; then
set -- --cgroup-parent "$CONTAINER_CGROUP_PARENT" "$@"
fi
HOST_CONTAINER="${HOST_CONTAINER:-"$("$SCRIPT_ROOT/get_container_id.sh")"}" || true
if [ -n "$HOST_CONTAINER" ]; then
set -- --volumes-from "$HOST_CONTAINER" "$@"
fi
set -- %RUNFLAGS% "$@"
if [ -t 0 ] && ! "$SCRIPT_ROOT/is_running_in_bg.sh" $$; then
set -- --interactive "$@"
fi
# if STDIN piped or redirected
if [ -p /dev/stdin ] || { [ ! -t 0 ] && [ ! -p /dev/stdin ]; }; then
set -- --interactive "$@"
elif [ -t 1 ]; then
set -- --tty "$@"
fi
set -- --rm "$@"
exec "$DOCKER" run "$@"

View File

@@ -1,36 +0,0 @@
#!/usr/bin/env bash
set -e
PROJECT_ROOT="${PROJECT_ROOT:-%PROJECT_ROOT%}"
DOCKER="${DOCKER:-%DOCKER%}"
IMAGE="${IMAGE:-%IMAGE%}"
NETWORK="${NETWORK:-host}"
HOST_CONTAINER="${HOST_CONTAINER:-"$("$PROJECT_ROOT/build/get_container_id.sh")"}"
# 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 "$@"