From a2de1a79f2af7eb2ffd0ab4cf66c1ff784ae1487 Mon Sep 17 00:00:00 2001 From: Thomas Orozco Date: Sat, 28 Jan 2017 15:11:43 +0100 Subject: [PATCH 1/3] Build i386 binary Fixes https://github.com/krallin/tini/issues/30 --- .travis.yml | 1 + Dockerfile | 2 ++ ci/install_deps.sh | 25 +++++++++++++++++++------ ci/run_build.sh | 26 +++++++++++++++----------- ddist.sh | 13 ++++++++++--- dtest.sh | 9 +++++++-- 6 files changed, 54 insertions(+), 22 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4720717..70b0178 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,6 +8,7 @@ env: - CC=gcc ARCH_SUFFIX=amd64 ARCH_NATIVE=1 MINIMAL= - CC=arm-linux-gnueabihf-gcc ARCH_SUFFIX=armhf ARCH_NATIVE= MINIMAL= - CC=aarch64-linux-gnu-gcc ARCH_SUFFIX=arm64 ARCH_NATIVE= MINIMAL= + - CFLAGS="-m32" ARCH_SUFFIX=i386 ARCH_NATIVE= MINIMAL= - CC=gcc ARCH_SUFFIX=amd64 ARCH_NATIVE=1 MINIMAL=1 global: - SIGN_BINARIES=1 diff --git a/Dockerfile b/Dockerfile index 48ae4a5..a71d0d6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,7 @@ FROM ubuntu:trusty +ARG ARCH_SUFFIX + COPY ci/install_deps.sh /install_deps.sh RUN /install_deps.sh diff --git a/ci/install_deps.sh b/ci/install_deps.sh index ce5d104..b83637d 100755 --- a/ci/install_deps.sh +++ b/ci/install_deps.sh @@ -1,14 +1,27 @@ #!/bin/bash set -o errexit set -o nounset +set -o xtrace -apt-get update - -apt-get install --no-install-recommends --yes \ +DEPS=( build-essential git gdb valgrind cmake rpm \ python-dev libcap-dev python-pip python-virtualenv \ - hardening-includes gnupg \ - gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu libc6-dev-arm64-cross \ - gcc-arm-linux-gnueabihf binutils-arm-linux-gnueabi libc6-dev-armhf-cross + hardening-includes gnupg +) +if [[ "$ARCH_SUFFIX" = "amd64" ]]; then + true +elif [[ "$ARCH_SUFFIX" = "armhf" ]]; then + DEPS+=(gcc-arm-linux-gnueabihf binutils-arm-linux-gnueabi libc6-dev-armhf-cross) +elif [[ "$ARCH_SUFFIX" = "arm64" ]]; then + DEPS+=(gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu libc6-dev-arm64-cross) +elif [[ "$ARCH_SUFFIX" = "i386" ]]; then + DEPS+=(libc6-dev-i386 gcc-multilib) +else + echo "Unknown ARCH_SUFFIX=${ARCH_SUFFIX}" + exit 1 +fi + +apt-get update +apt-get install --no-install-recommends --yes "${DEPS[@]}" rm -rf /var/lib/apt/lists/* diff --git a/ci/run_build.sh b/ci/run_build.sh index 7658ac7..6eaa35b 100755 --- a/ci/run_build.sh +++ b/ci/run_build.sh @@ -7,7 +7,6 @@ set -o pipefail # Default compiler : ${CC:="gcc"} -echo "CC=${CC}" # Paths : ${SOURCE_DIR:="."} @@ -30,12 +29,17 @@ export FORCE_SUBREAPER # Our build platform doesn't have those newer Linux flags, but we want Tini to have subreaper support # We also use those in our tests -CFLAGS="-DPR_SET_CHILD_SUBREAPER=36 -DPR_GET_CHILD_SUBREAPER=37" +CFLAGS="${CFLAGS-} -DPR_SET_CHILD_SUBREAPER=36 -DPR_GET_CHILD_SUBREAPER=37" if [[ "${FORCE_SUBREAPER}" -eq 1 ]]; then # If FORCE_SUBREAPER is requested, then we set those CFLAGS for the Tini build export CFLAGS fi +echo "CC=${CC}" +echo "CFLAGS=${CFLAGS}" +echo "ARCH_SUFFIX=${ARCH_SUFFIX-}" +echo "ARCH_NATIVE=${ARCH_NATIVE-}" + # Ensure Python output is not buffered (to make tests output clearer) export PYTHONUNBUFFERED=1 @@ -53,7 +57,7 @@ cmake "${CMAKE_ARGS[@]}" pushd "${BUILD_DIR}" make clean make -if [[ -n "${ARCH_NATIVE:=}" ]]; then +if [[ -n "${ARCH_NATIVE-}" ]]; then make package fi popd @@ -61,8 +65,8 @@ popd pkg_version="$(cat "${BUILD_DIR}/VERSION")" -if [[ -n "${ARCH_NATIVE:=}" ]]; then - echo "Built native package (ARCH_NATIVE=${ARCH_NATIVE})" +if [[ -n "${ARCH_NATIVE-}" ]]; then + echo "Built native package (ARCH_NATIVE=${ARCH_NATIVE-})" echo "Running smoke and internal tests" BIN_TEST_DIR="${BUILD_DIR}/bin-test" @@ -194,7 +198,7 @@ if [[ -n "${ARCH_NATIVE:=}" ]]; then # Run tests python "${SOURCE_DIR}/test/run_inner_tests.py" else - if [[ ! -n "${ARCH_SUFFIX:=}" ]]; then + if [[ ! -n "${ARCH_SUFFIX-}" ]]; then echo "Built cross package, but $ARCH_SUFFIX is empty!" exit 1 fi @@ -210,30 +214,30 @@ mkdir -p "${DIST_DIR}" TINIS=() for tini in tini tini-static; do - if [[ -n "${ARCH_SUFFIX:=}" ]]; then + if [[ -n "${ARCH_SUFFIX-}" ]]; then to="${DIST_DIR}/${tini}-${ARCH_SUFFIX}" TINIS+=("$to") cp "${BUILD_DIR}/${tini}" "$to" fi - if [[ -n "${ARCH_NATIVE:=}" ]]; then + if [[ -n "${ARCH_NATIVE-}" ]]; then to="${DIST_DIR}/${tini}" TINIS+=("$to") cp "${BUILD_DIR}/${tini}" "$to" fi done -if [[ -n "${ARCH_NATIVE:=}" ]]; then +if [[ -n "${ARCH_NATIVE-}" ]]; then for pkg_format in deb rpm; do src="${BUILD_DIR}/tini_${pkg_version}.${pkg_format}" - if [[ -n "${ARCH_SUFFIX:=}" ]]; then + if [[ -n "${ARCH_SUFFIX-}" ]]; then to="${DIST_DIR}/tini_${pkg_version}-${ARCH_SUFFIX}.${pkg_format}" TINIS+=("$to") cp "$src" "$to" fi - if [[ -n "${ARCH_NATIVE:=}" ]]; then + if [[ -n "${ARCH_NATIVE-}" ]]; then to="${DIST_DIR}/tini_${pkg_version}.${pkg_format}" TINIS+=("$to") cp "$src" "$to" diff --git a/ddist.sh b/ddist.sh index 9370912..8d576b0 100755 --- a/ddist.sh +++ b/ddist.sh @@ -2,17 +2,23 @@ set -o errexit set -o nounset +if [[ "$#" != 1 ]]; then + echo "Usage: $0 ARCH_SUFFIX" + exit 1 +fi +suffix="$1" + REL_HERE=$(dirname "${BASH_SOURCE}") HERE=$(cd "${REL_HERE}"; pwd) -IMG="tini" +IMG="tini-build-${suffix}" SRC="/tini" # Cleanup the build dir rm -f "${HERE}/dist"/* # Create the build image -docker build -t "${IMG}" . +docker build --build-arg "ARCH_SUFFIX=${suffix}" -t "${IMG}" . # Run test without subreaper support, don't copy build files here docker run -it --rm \ @@ -22,7 +28,8 @@ docker run -it --rm \ -e FORCE_SUBREAPER="${FORCE_SUBREAPER:="1"}" \ -e GPG_PASSPHRASE="${GPG_PASSPHRASE:=}" \ -e CC="${CC:=gcc}" \ + -e CFLAGS="${CFLAGS-}" \ -e ARCH_NATIVE="${ARCH_NATIVE-1}" \ - -e ARCH_SUFFIX="${ARCH_SUFFIX-}" \ + -e ARCH_SUFFIX="${suffix}" \ -e MINIMAL="${MINIMAL-}" \ "${IMG}" "${SRC}/ci/run_build.sh" diff --git a/dtest.sh b/dtest.sh index 00e0894..fa0f4aa 100755 --- a/dtest.sh +++ b/dtest.sh @@ -4,6 +4,11 @@ set -o nounset IMG="tini" +if [[ "$#" != 1 ]]; then + echo "Usage: $0 ARCH_SUFFIX" + exit 1 +fi +suffix="$1" -docker build -t "${IMG}" . -python test/run_outer_tests.py "${IMG}" +IMG="tini-build-${suffix}" +python test/run_outer_tests.py "${IMG}" From 8d569f04191fb15693b19c07a60c54c4043825f1 Mon Sep 17 00:00:00 2001 From: Thomas Orozco Date: Sat, 28 Jan 2017 15:28:22 +0100 Subject: [PATCH 2/3] Update docs to mention 32-bit build --- README.md | 7 ++++--- tpl/README.md.in | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index e5d5bc3..7231ca0 100644 --- a/README.md +++ b/README.md @@ -102,10 +102,10 @@ Using Nix, you can use the following command to install Tini: nix-env --install tini -### ARM ### +### Other Platforms ### -ARM images are available! Find the list of available platforms under the -releases tab. +ARM and 32-bit binaries are available! You can find the complete list of +available binaries under [the releases tab][11]. Options @@ -245,6 +245,7 @@ Special thanks to: [0]: https://github.com/krallin/tini/issues/8 [10]: https://github.com/krallin/tini-images + [11]: https://github.com/krallin/tini/releases [20]: https://github.com/krallin/ [30]: https://github.com/tianon [31]: https://github.com/dpw diff --git a/tpl/README.md.in b/tpl/README.md.in index 0b307bc..f6c6c15 100644 --- a/tpl/README.md.in +++ b/tpl/README.md.in @@ -102,10 +102,10 @@ Using Nix, you can use the following command to install Tini: nix-env --install tini -### ARM ### +### Other Platforms ### -ARM images are available! Find the list of available platforms under the -releases tab. +ARM and 32-bit binaries are available! You can find the complete list of +available binaries under [the releases tab][11]. Options @@ -245,6 +245,7 @@ Special thanks to: [0]: https://github.com/krallin/tini/issues/8 [10]: https://github.com/krallin/tini-images + [11]: https://github.com/krallin/tini/releases [20]: https://github.com/krallin/ [30]: https://github.com/tianon [31]: https://github.com/dpw From 41cc6b38dd968ad53c2c48a622039ad1c2bf127a Mon Sep 17 00:00:00 2001 From: Thomas Orozco Date: Sun, 5 Feb 2017 13:31:47 +0100 Subject: [PATCH 3/3] Bump version to v0.14.0 --- CMakeLists.txt | 4 ++-- README.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6261566..8936f18 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,8 +3,8 @@ project (tini C) # Config set (tini_VERSION_MAJOR 0) -set (tini_VERSION_MINOR 13) -set (tini_VERSION_PATCH 2) +set (tini_VERSION_MINOR 14) +set (tini_VERSION_PATCH 0) # Build options option(MINIMAL "Disable argument parsing and verbose output" OFF) diff --git a/README.md b/README.md index 7231ca0..596b3ca 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ In Docker, you will want to use an entrypoint so you don't have to remember to manually invoke Tini: # Add Tini - ENV TINI_VERSION v0.13.2 + ENV TINI_VERSION v0.14.0 ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini RUN chmod +x /tini ENTRYPOINT ["/tini", "--"] @@ -81,7 +81,7 @@ The `tini` and `tini-static` binaries are signed using the key `595E85A6B1B4779E You can verify their signatures using `gpg` (which you may install using your package manager): - ENV TINI_VERSION v0.13.2 + ENV TINI_VERSION v0.14.0 ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini.asc /tini.asc RUN gpg --keyserver ha.pool.sks-keyservers.net --recv-keys 595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7 \