From 8f1daedad8e82507a0501ab36efd81cfa39c9c2d Mon Sep 17 00:00:00 2001 From: Nabil Servais Date: Tue, 7 Jun 2016 17:08:51 +0200 Subject: [PATCH 1/2] Add alpine variant for logstash --- .travis.yml | 6 +++++ 1.5/alpine/Dockerfile | 33 ++++++++++++++++++++++++++ 1.5/alpine/docker-entrypoint-alpine.sh | 15 ++++++++++++ 1.5/alpine/docker-entrypoint.sh | 15 ++++++++++++ 2.0/alpine/Dockerfile | 33 ++++++++++++++++++++++++++ 2.0/alpine/docker-entrypoint-alpine.sh | 15 ++++++++++++ 2.0/alpine/docker-entrypoint.sh | 15 ++++++++++++ 2.1/alpine/Dockerfile | 33 ++++++++++++++++++++++++++ 2.1/alpine/docker-entrypoint-alpine.sh | 15 ++++++++++++ 2.1/alpine/docker-entrypoint.sh | 15 ++++++++++++ 2.2/alpine/Dockerfile | 33 ++++++++++++++++++++++++++ 2.2/alpine/docker-entrypoint-alpine.sh | 15 ++++++++++++ 2.2/alpine/docker-entrypoint.sh | 15 ++++++++++++ 2.3/alpine/Dockerfile | 33 ++++++++++++++++++++++++++ 2.3/alpine/docker-entrypoint-alpine.sh | 15 ++++++++++++ 2.3/alpine/docker-entrypoint.sh | 15 ++++++++++++ 5.0/alpine/Dockerfile | 33 ++++++++++++++++++++++++++ 5.0/alpine/docker-entrypoint-alpine.sh | 15 ++++++++++++ 5.0/alpine/docker-entrypoint.sh | 15 ++++++++++++ Dockerfile-alpine.template | 33 ++++++++++++++++++++++++++ docker-entrypoint-alpine.sh | 15 ++++++++++++ update.sh | 22 ++++++++++++++++- 22 files changed, 453 insertions(+), 1 deletion(-) create mode 100644 1.5/alpine/Dockerfile create mode 100644 1.5/alpine/docker-entrypoint-alpine.sh create mode 100755 1.5/alpine/docker-entrypoint.sh create mode 100644 2.0/alpine/Dockerfile create mode 100644 2.0/alpine/docker-entrypoint-alpine.sh create mode 100755 2.0/alpine/docker-entrypoint.sh create mode 100644 2.1/alpine/Dockerfile create mode 100644 2.1/alpine/docker-entrypoint-alpine.sh create mode 100755 2.1/alpine/docker-entrypoint.sh create mode 100644 2.2/alpine/Dockerfile create mode 100644 2.2/alpine/docker-entrypoint-alpine.sh create mode 100755 2.2/alpine/docker-entrypoint.sh create mode 100644 2.3/alpine/Dockerfile create mode 100644 2.3/alpine/docker-entrypoint-alpine.sh create mode 100755 2.3/alpine/docker-entrypoint.sh create mode 100644 5.0/alpine/Dockerfile create mode 100644 5.0/alpine/docker-entrypoint-alpine.sh create mode 100755 5.0/alpine/docker-entrypoint.sh create mode 100644 Dockerfile-alpine.template create mode 100644 docker-entrypoint-alpine.sh diff --git a/.travis.yml b/.travis.yml index 7f74970f0..8386d0e0e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,12 +3,18 @@ services: docker env: - VERSION=5.0 + - VERSION=5.0/alpine - VERSION=2.4 - VERSION=2.3 + - VERSION=2.3/alpine - VERSION=2.2 + - VERSION=2.2/alpine - VERSION=2.1 + - VERSION=2.1/alpine - VERSION=2.0 + - VERSION=2.0/alpine - VERSION=1.5 + - VERSION=1.5/alpine install: - git clone https://github.com/docker-library/official-images.git ~/official-images diff --git a/1.5/alpine/Dockerfile b/1.5/alpine/Dockerfile new file mode 100644 index 000000000..2d85949bb --- /dev/null +++ b/1.5/alpine/Dockerfile @@ -0,0 +1,33 @@ +FROM alpine:3.4 + +RUN addgroup -S logstash && adduser -S -G logstash logstash + +RUN echo '@testing http://nl.alpinelinux.org/alpine/edge/testing' >> '/etc/apk/repositories' + +RUN apk update +RUN apk add --no-cache ca-certificates curl openjdk8 gosu@testing libzmq + +# the "ffi-rzmq-core" gem is very picky about where it looks for libzmq.so +RUN mkdir -p /usr/local/lib \ + && ln -s /usr/lib/*/libzmq.so.3 /usr/local/lib/libzmq.so + +ENV LOGSTASH_MAJOR 1.5 +ENV LOGSTASH_VERSION 1.5.6 +ENV LOGSTASH_TAR_SHA1 f3e4342f496e0d7e709de231daf624eb1fd80873 + +RUN \ + adduser -D -S elasticsearch +RUN \ + mkdir -p /opt && \ + cd /tmp && \ + curl -L https://download.elastic.co/logstash/logstash/logstash-$LOGSTASH_VERSION.tar.gz > logstash-$LOGSTASH_VERSION.tar.gz && \ + echo "$LOGSTASH_TAR_SHA1 logstash-$LOGSTASH_VERSION.tar.gz" | sha1sum -c - && \ + tar -xzf logstash-$LOGSTASH_VERSION.tar.gz && \ + rm -rf logstash-$LOGSTASH_VERSION.tar.gz && \ + mv logstash-$LOGSTASH_VERSION /opt/logstash && \ + ln -s /opt/logstash/bin/logstash /usr/local/bin/logstash + +COPY docker-entrypoint.sh / + +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["logstash", "agent"] diff --git a/1.5/alpine/docker-entrypoint-alpine.sh b/1.5/alpine/docker-entrypoint-alpine.sh new file mode 100644 index 000000000..47b18bba0 --- /dev/null +++ b/1.5/alpine/docker-entrypoint-alpine.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +set -e + +# Add logstash as command if needed +if [ "${1:0:1}" = '-' ]; then + set -- logstash "$@" +fi + +# Run as user "logstash" if the command is "logstash" +if [ "$1" = 'logstash' ]; then + set -- gosu logstash "$@" +fi + +exec "$@" diff --git a/1.5/alpine/docker-entrypoint.sh b/1.5/alpine/docker-entrypoint.sh new file mode 100755 index 000000000..47b18bba0 --- /dev/null +++ b/1.5/alpine/docker-entrypoint.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +set -e + +# Add logstash as command if needed +if [ "${1:0:1}" = '-' ]; then + set -- logstash "$@" +fi + +# Run as user "logstash" if the command is "logstash" +if [ "$1" = 'logstash' ]; then + set -- gosu logstash "$@" +fi + +exec "$@" diff --git a/2.0/alpine/Dockerfile b/2.0/alpine/Dockerfile new file mode 100644 index 000000000..b287dea8a --- /dev/null +++ b/2.0/alpine/Dockerfile @@ -0,0 +1,33 @@ +FROM alpine:3.4 + +RUN addgroup -S logstash && adduser -S -G logstash logstash + +RUN echo '@testing http://nl.alpinelinux.org/alpine/edge/testing' >> '/etc/apk/repositories' + +RUN apk update +RUN apk add --no-cache ca-certificates curl openjdk8 gosu@testing libzmq + +# the "ffi-rzmq-core" gem is very picky about where it looks for libzmq.so +RUN mkdir -p /usr/local/lib \ + && ln -s /usr/lib/*/libzmq.so.3 /usr/local/lib/libzmq.so + +ENV LOGSTASH_MAJOR 2.0 +ENV LOGSTASH_VERSION 2.0.0-rc1 +ENV LOGSTASH_TAR_SHA1 5d3a311d83dfba7e37c1bb48879fbcc59690f7cd + +RUN \ + adduser -D -S elasticsearch +RUN \ + mkdir -p /opt && \ + cd /tmp && \ + curl -L https://download.elastic.co/logstash/logstash/logstash-$LOGSTASH_VERSION.tar.gz > logstash-$LOGSTASH_VERSION.tar.gz && \ + echo "$LOGSTASH_TAR_SHA1 logstash-$LOGSTASH_VERSION.tar.gz" | sha1sum -c - && \ + tar -xzf logstash-$LOGSTASH_VERSION.tar.gz && \ + rm -rf logstash-$LOGSTASH_VERSION.tar.gz && \ + mv logstash-$LOGSTASH_VERSION /opt/logstash && \ + ln -s /opt/logstash/bin/logstash /usr/local/bin/logstash + +COPY docker-entrypoint.sh / + +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["logstash", "agent"] diff --git a/2.0/alpine/docker-entrypoint-alpine.sh b/2.0/alpine/docker-entrypoint-alpine.sh new file mode 100644 index 000000000..47b18bba0 --- /dev/null +++ b/2.0/alpine/docker-entrypoint-alpine.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +set -e + +# Add logstash as command if needed +if [ "${1:0:1}" = '-' ]; then + set -- logstash "$@" +fi + +# Run as user "logstash" if the command is "logstash" +if [ "$1" = 'logstash' ]; then + set -- gosu logstash "$@" +fi + +exec "$@" diff --git a/2.0/alpine/docker-entrypoint.sh b/2.0/alpine/docker-entrypoint.sh new file mode 100755 index 000000000..47b18bba0 --- /dev/null +++ b/2.0/alpine/docker-entrypoint.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +set -e + +# Add logstash as command if needed +if [ "${1:0:1}" = '-' ]; then + set -- logstash "$@" +fi + +# Run as user "logstash" if the command is "logstash" +if [ "$1" = 'logstash' ]; then + set -- gosu logstash "$@" +fi + +exec "$@" diff --git a/2.1/alpine/Dockerfile b/2.1/alpine/Dockerfile new file mode 100644 index 000000000..eb6feec10 --- /dev/null +++ b/2.1/alpine/Dockerfile @@ -0,0 +1,33 @@ +FROM alpine:3.4 + +RUN addgroup -S logstash && adduser -S -G logstash logstash + +RUN echo '@testing http://nl.alpinelinux.org/alpine/edge/testing' >> '/etc/apk/repositories' + +RUN apk update +RUN apk add --no-cache ca-certificates curl openjdk8 gosu@testing libzmq + +# the "ffi-rzmq-core" gem is very picky about where it looks for libzmq.so +RUN mkdir -p /usr/local/lib \ + && ln -s /usr/lib/*/libzmq.so.3 /usr/local/lib/libzmq.so + +ENV LOGSTASH_MAJOR 2.1 +ENV LOGSTASH_VERSION 2.1.3 +ENV LOGSTASH_TAR_SHA1 283f6d8842df52c7d69f77b5c6d4755ee942b291 + +RUN \ + adduser -D -S elasticsearch +RUN \ + mkdir -p /opt && \ + cd /tmp && \ + curl -L https://download.elastic.co/logstash/logstash/logstash-$LOGSTASH_VERSION.tar.gz > logstash-$LOGSTASH_VERSION.tar.gz && \ + echo "$LOGSTASH_TAR_SHA1 logstash-$LOGSTASH_VERSION.tar.gz" | sha1sum -c - && \ + tar -xzf logstash-$LOGSTASH_VERSION.tar.gz && \ + rm -rf logstash-$LOGSTASH_VERSION.tar.gz && \ + mv logstash-$LOGSTASH_VERSION /opt/logstash && \ + ln -s /opt/logstash/bin/logstash /usr/local/bin/logstash + +COPY docker-entrypoint.sh / + +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["logstash", "agent"] diff --git a/2.1/alpine/docker-entrypoint-alpine.sh b/2.1/alpine/docker-entrypoint-alpine.sh new file mode 100644 index 000000000..47b18bba0 --- /dev/null +++ b/2.1/alpine/docker-entrypoint-alpine.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +set -e + +# Add logstash as command if needed +if [ "${1:0:1}" = '-' ]; then + set -- logstash "$@" +fi + +# Run as user "logstash" if the command is "logstash" +if [ "$1" = 'logstash' ]; then + set -- gosu logstash "$@" +fi + +exec "$@" diff --git a/2.1/alpine/docker-entrypoint.sh b/2.1/alpine/docker-entrypoint.sh new file mode 100755 index 000000000..47b18bba0 --- /dev/null +++ b/2.1/alpine/docker-entrypoint.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +set -e + +# Add logstash as command if needed +if [ "${1:0:1}" = '-' ]; then + set -- logstash "$@" +fi + +# Run as user "logstash" if the command is "logstash" +if [ "$1" = 'logstash' ]; then + set -- gosu logstash "$@" +fi + +exec "$@" diff --git a/2.2/alpine/Dockerfile b/2.2/alpine/Dockerfile new file mode 100644 index 000000000..5e68c2355 --- /dev/null +++ b/2.2/alpine/Dockerfile @@ -0,0 +1,33 @@ +FROM alpine:3.4 + +RUN addgroup -S logstash && adduser -S -G logstash logstash + +RUN echo '@testing http://nl.alpinelinux.org/alpine/edge/testing' >> '/etc/apk/repositories' + +RUN apk update +RUN apk add --no-cache ca-certificates curl openjdk8 gosu@testing libzmq + +# the "ffi-rzmq-core" gem is very picky about where it looks for libzmq.so +RUN mkdir -p /usr/local/lib \ + && ln -s /usr/lib/*/libzmq.so.3 /usr/local/lib/libzmq.so + +ENV LOGSTASH_MAJOR 2.2 +ENV LOGSTASH_VERSION 2.2.4 +ENV LOGSTASH_TAR_SHA1 4e64cbc617d1b9cbf20869daab22cb4df68895ed + +RUN \ + adduser -D -S elasticsearch +RUN \ + mkdir -p /opt && \ + cd /tmp && \ + curl -L https://download.elastic.co/logstash/logstash/logstash-$LOGSTASH_VERSION.tar.gz > logstash-$LOGSTASH_VERSION.tar.gz && \ + echo "$LOGSTASH_TAR_SHA1 logstash-$LOGSTASH_VERSION.tar.gz" | sha1sum -c - && \ + tar -xzf logstash-$LOGSTASH_VERSION.tar.gz && \ + rm -rf logstash-$LOGSTASH_VERSION.tar.gz && \ + mv logstash-$LOGSTASH_VERSION /opt/logstash && \ + ln -s /opt/logstash/bin/logstash /usr/local/bin/logstash + +COPY docker-entrypoint.sh / + +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["logstash", "agent"] diff --git a/2.2/alpine/docker-entrypoint-alpine.sh b/2.2/alpine/docker-entrypoint-alpine.sh new file mode 100644 index 000000000..47b18bba0 --- /dev/null +++ b/2.2/alpine/docker-entrypoint-alpine.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +set -e + +# Add logstash as command if needed +if [ "${1:0:1}" = '-' ]; then + set -- logstash "$@" +fi + +# Run as user "logstash" if the command is "logstash" +if [ "$1" = 'logstash' ]; then + set -- gosu logstash "$@" +fi + +exec "$@" diff --git a/2.2/alpine/docker-entrypoint.sh b/2.2/alpine/docker-entrypoint.sh new file mode 100755 index 000000000..47b18bba0 --- /dev/null +++ b/2.2/alpine/docker-entrypoint.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +set -e + +# Add logstash as command if needed +if [ "${1:0:1}" = '-' ]; then + set -- logstash "$@" +fi + +# Run as user "logstash" if the command is "logstash" +if [ "$1" = 'logstash' ]; then + set -- gosu logstash "$@" +fi + +exec "$@" diff --git a/2.3/alpine/Dockerfile b/2.3/alpine/Dockerfile new file mode 100644 index 000000000..207e7c88c --- /dev/null +++ b/2.3/alpine/Dockerfile @@ -0,0 +1,33 @@ +FROM alpine:3.4 + +RUN addgroup -S logstash && adduser -S -G logstash logstash + +RUN echo '@testing http://nl.alpinelinux.org/alpine/edge/testing' >> '/etc/apk/repositories' + +RUN apk update +RUN apk add --no-cache ca-certificates curl openjdk8 gosu@testing libzmq + +# the "ffi-rzmq-core" gem is very picky about where it looks for libzmq.so +RUN mkdir -p /usr/local/lib \ + && ln -s /usr/lib/*/libzmq.so.3 /usr/local/lib/libzmq.so + +ENV LOGSTASH_MAJOR 2.3 +ENV LOGSTASH_VERSION 2.3.2 +ENV LOGSTASH_TAR_SHA1 64e04e6a4a3e9fe9e731a76e173d5f4bdf035cc6 + +RUN \ + adduser -D -S elasticsearch +RUN \ + mkdir -p /opt && \ + cd /tmp && \ + curl -L https://download.elastic.co/logstash/logstash/logstash-$LOGSTASH_VERSION.tar.gz > logstash-$LOGSTASH_VERSION.tar.gz && \ + echo "$LOGSTASH_TAR_SHA1 logstash-$LOGSTASH_VERSION.tar.gz" | sha1sum -c - && \ + tar -xzf logstash-$LOGSTASH_VERSION.tar.gz && \ + rm -rf logstash-$LOGSTASH_VERSION.tar.gz && \ + mv logstash-$LOGSTASH_VERSION /opt/logstash && \ + ln -s /opt/logstash/bin/logstash /usr/local/bin/logstash + +COPY docker-entrypoint.sh / + +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["logstash", "agent"] diff --git a/2.3/alpine/docker-entrypoint-alpine.sh b/2.3/alpine/docker-entrypoint-alpine.sh new file mode 100644 index 000000000..47b18bba0 --- /dev/null +++ b/2.3/alpine/docker-entrypoint-alpine.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +set -e + +# Add logstash as command if needed +if [ "${1:0:1}" = '-' ]; then + set -- logstash "$@" +fi + +# Run as user "logstash" if the command is "logstash" +if [ "$1" = 'logstash' ]; then + set -- gosu logstash "$@" +fi + +exec "$@" diff --git a/2.3/alpine/docker-entrypoint.sh b/2.3/alpine/docker-entrypoint.sh new file mode 100755 index 000000000..47b18bba0 --- /dev/null +++ b/2.3/alpine/docker-entrypoint.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +set -e + +# Add logstash as command if needed +if [ "${1:0:1}" = '-' ]; then + set -- logstash "$@" +fi + +# Run as user "logstash" if the command is "logstash" +if [ "$1" = 'logstash' ]; then + set -- gosu logstash "$@" +fi + +exec "$@" diff --git a/5.0/alpine/Dockerfile b/5.0/alpine/Dockerfile new file mode 100644 index 000000000..272cf4a78 --- /dev/null +++ b/5.0/alpine/Dockerfile @@ -0,0 +1,33 @@ +FROM alpine:3.4 + +RUN addgroup -S logstash && adduser -S -G logstash logstash + +RUN echo '@testing http://nl.alpinelinux.org/alpine/edge/testing' >> '/etc/apk/repositories' + +RUN apk update +RUN apk add --no-cache ca-certificates curl openjdk8 gosu@testing libzmq + +# the "ffi-rzmq-core" gem is very picky about where it looks for libzmq.so +RUN mkdir -p /usr/local/lib \ + && ln -s /usr/lib/*/libzmq.so.3 /usr/local/lib/libzmq.so + +ENV LOGSTASH_MAJOR 5.0 +ENV LOGSTASH_VERSION 5.0.0-alpha3 +ENV LOGSTASH_TAR_SHA1 e25ccaa25ef0ba4e7491f9cca1abba1675752d3c + +RUN \ + adduser -D -S elasticsearch +RUN \ + mkdir -p /opt && \ + cd /tmp && \ + curl -L https://download.elastic.co/logstash/logstash/logstash-$LOGSTASH_VERSION.tar.gz > logstash-$LOGSTASH_VERSION.tar.gz && \ + echo "$LOGSTASH_TAR_SHA1 logstash-$LOGSTASH_VERSION.tar.gz" | sha1sum -c - && \ + tar -xzf logstash-$LOGSTASH_VERSION.tar.gz && \ + rm -rf logstash-$LOGSTASH_VERSION.tar.gz && \ + mv logstash-$LOGSTASH_VERSION /opt/logstash && \ + ln -s /opt/logstash/bin/logstash /usr/local/bin/logstash + +COPY docker-entrypoint.sh / + +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["logstash", "agent"] diff --git a/5.0/alpine/docker-entrypoint-alpine.sh b/5.0/alpine/docker-entrypoint-alpine.sh new file mode 100644 index 000000000..47b18bba0 --- /dev/null +++ b/5.0/alpine/docker-entrypoint-alpine.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +set -e + +# Add logstash as command if needed +if [ "${1:0:1}" = '-' ]; then + set -- logstash "$@" +fi + +# Run as user "logstash" if the command is "logstash" +if [ "$1" = 'logstash' ]; then + set -- gosu logstash "$@" +fi + +exec "$@" diff --git a/5.0/alpine/docker-entrypoint.sh b/5.0/alpine/docker-entrypoint.sh new file mode 100755 index 000000000..47b18bba0 --- /dev/null +++ b/5.0/alpine/docker-entrypoint.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +set -e + +# Add logstash as command if needed +if [ "${1:0:1}" = '-' ]; then + set -- logstash "$@" +fi + +# Run as user "logstash" if the command is "logstash" +if [ "$1" = 'logstash' ]; then + set -- gosu logstash "$@" +fi + +exec "$@" diff --git a/Dockerfile-alpine.template b/Dockerfile-alpine.template new file mode 100644 index 000000000..5b6f4d935 --- /dev/null +++ b/Dockerfile-alpine.template @@ -0,0 +1,33 @@ +FROM alpine:3.4 + +RUN addgroup -S logstash && adduser -S -G logstash logstash + +RUN echo '@testing http://nl.alpinelinux.org/alpine/edge/testing' >> '/etc/apk/repositories' + +RUN apk update +RUN apk add --no-cache ca-certificates curl openjdk8 gosu@testing libzmq + +# the "ffi-rzmq-core" gem is very picky about where it looks for libzmq.so +RUN mkdir -p /usr/local/lib \ + && ln -s /usr/lib/*/libzmq.so.3 /usr/local/lib/libzmq.so + +ENV LOGSTASH_MAJOR %%LOGSTASH_MAJOR%% +ENV LOGSTASH_VERSION %%LOGSTASH_VERSION%% +ENV LOGSTASH_TAR_SHA1 %%LOGSTASH_TAR_SHA1%% + +RUN \ + adduser -D -S elasticsearch +RUN \ + mkdir -p /opt && \ + cd /tmp && \ + curl -L https://download.elastic.co/logstash/logstash/logstash-$LOGSTASH_VERSION.tar.gz > logstash-$LOGSTASH_VERSION.tar.gz && \ + echo "$LOGSTASH_TAR_SHA1 logstash-$LOGSTASH_VERSION.tar.gz" | sha1sum -c - && \ + tar -xzf logstash-$LOGSTASH_VERSION.tar.gz && \ + rm -rf logstash-$LOGSTASH_VERSION.tar.gz && \ + mv logstash-$LOGSTASH_VERSION /opt/logstash && \ + ln -s /opt/logstash/bin/logstash /usr/local/bin/logstash + +COPY docker-entrypoint.sh / + +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["logstash", "agent"] diff --git a/docker-entrypoint-alpine.sh b/docker-entrypoint-alpine.sh new file mode 100644 index 000000000..47b18bba0 --- /dev/null +++ b/docker-entrypoint-alpine.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +set -e + +# Add logstash as command if needed +if [ "${1:0:1}" = '-' ]; then + set -- logstash "$@" +fi + +# Run as user "logstash" if the command is "logstash" +if [ "$1" = 'logstash' ]; then + set -- gosu logstash "$@" +fi + +exec "$@" diff --git a/update.sh b/update.sh index 4dd7bee5a..00bd3a59b 100755 --- a/update.sh +++ b/update.sh @@ -11,7 +11,7 @@ versions=( "${versions[@]%/}" ) travisEnv= for version in "${versions[@]}"; do - travisEnv='\n - VERSION='"$version$travisEnv" + travisEnv='\n - VERSION='"$version\n - VERSION=$version"'/alpine'"$travisEnv" major="${version%%.*}" debRepo="https://artifacts.elastic.co/packages/${major}.x/apt" @@ -35,6 +35,26 @@ for version in "${versions[@]}"; do s!%%LOGSTASH_PATH%%!'"$logstashPath"'!g; ' Dockerfile.template > "$version/Dockerfile" ) + + fullVersionAlpine="$(curl -fsSL https://www.elastic.co/downloads/past-releases/feed | xmlstarlet sel -t -v 'rss/channel/item/title'|grep 'Logstash '$version| awk -F' ' '{print $2}'|sort -rV |head -n1)" + echo $fullVersionAlpine + echo https://download.elastic.co/logstash/logstash/logstash-$fullVersionAlpine.tar.gz.sha1.txt + sha1="$(curl -fsSL "https://download.elastic.co/logstash/logstash/logstash-$fullVersionAlpine.tar.gz.sha1.txt" | grep -o -E -e "[0-9a-f]{40}")" + + if [ -z "$fullVersionAlpine" ]; then + echo >&2 "warning: cannot find full version for $version" + continue + fi + ( + [ -d "$version/alpine" ] || mkdir "$version/alpine" + set -x + cp docker-entrypoint-alpine.sh "$version/alpine/" + sed ' + s/%%LOGSTASH_MAJOR%%/'"$version"'/g; + s/%%LOGSTASH_VERSION%%/'"$fullVersionAlpine"'/g; + s/%%LOGSTASH_TAR_SHA1%%/'"$sha1"'/g; + ' Dockerfile-alpine.template > "$version/alpine/Dockerfile" + ) done travis="$(awk -v 'RS=\n\n' '$1 == "env:" { $0 = "env:'"$travisEnv"'" } { printf "%s%s", $0, RS }' .travis.yml)" From 93d338f878f4adb1e4e8fa31407d9b4263c41932 Mon Sep 17 00:00:00 2001 From: Tianon Gravi Date: Tue, 6 Dec 2016 14:27:33 -0800 Subject: [PATCH 2/2] Switch a few bits for cross-variant consistency --- .travis.yml | 31 +++--- 1.5/Dockerfile | 5 +- 1.5/alpine/Dockerfile | 96 ++++++++++++++----- 1.5/alpine/docker-entrypoint-alpine.sh | 15 --- 1.5/alpine/docker-entrypoint.sh | 12 +-- 1.5/docker-entrypoint.sh | 5 +- 2.0/Dockerfile | 5 +- 2.0/alpine/Dockerfile | 96 ++++++++++++++----- 2.0/alpine/docker-entrypoint-alpine.sh | 15 --- 2.0/alpine/docker-entrypoint.sh | 12 +-- 2.0/docker-entrypoint.sh | 5 +- 2.1/Dockerfile | 5 +- 2.1/alpine/Dockerfile | 96 ++++++++++++++----- 2.1/alpine/docker-entrypoint-alpine.sh | 15 --- 2.1/alpine/docker-entrypoint.sh | 12 +-- 2.1/docker-entrypoint.sh | 5 +- 2.2/Dockerfile | 5 +- 2.2/alpine/Dockerfile | 96 ++++++++++++++----- 2.2/alpine/docker-entrypoint-alpine.sh | 15 --- 2.2/alpine/docker-entrypoint.sh | 12 +-- 2.2/docker-entrypoint.sh | 5 +- 2.3/Dockerfile | 5 +- 2.3/alpine/Dockerfile | 96 ++++++++++++++----- 2.3/alpine/docker-entrypoint-alpine.sh | 15 --- 2.3/alpine/docker-entrypoint.sh | 12 +-- 2.3/docker-entrypoint.sh | 5 +- 2.4/Dockerfile | 5 +- 2.4/alpine/Dockerfile | 85 ++++++++++++++++ 2.4/alpine/docker-entrypoint.sh | 15 +++ 2.4/docker-entrypoint.sh | 5 +- 5.0/Dockerfile | 5 +- 5.0/alpine/Dockerfile | 96 ++++++++++++++----- 5.0/alpine/docker-entrypoint-alpine.sh | 15 --- 5.0/alpine/docker-entrypoint.sh | 12 +-- 5.0/docker-entrypoint.sh | 5 +- Dockerfile-alpine.template | 96 ++++++++++++++----- ...ile.template => Dockerfile-debian.template | 3 +- docker-entrypoint-alpine.sh | 15 --- docker-entrypoint.sh | 5 +- generate-stackbrew-library.sh | 21 +++- update.sh | 59 +++++++----- 41 files changed, 766 insertions(+), 372 deletions(-) delete mode 100644 1.5/alpine/docker-entrypoint-alpine.sh delete mode 100644 2.0/alpine/docker-entrypoint-alpine.sh delete mode 100644 2.1/alpine/docker-entrypoint-alpine.sh delete mode 100644 2.2/alpine/docker-entrypoint-alpine.sh delete mode 100644 2.3/alpine/docker-entrypoint-alpine.sh create mode 100644 2.4/alpine/Dockerfile create mode 100755 2.4/alpine/docker-entrypoint.sh delete mode 100644 5.0/alpine/docker-entrypoint-alpine.sh rename Dockerfile.template => Dockerfile-debian.template (94%) delete mode 100644 docker-entrypoint-alpine.sh diff --git a/.travis.yml b/.travis.yml index 8386d0e0e..965120727 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,19 +2,20 @@ language: bash services: docker env: - - VERSION=5.0 - - VERSION=5.0/alpine - - VERSION=2.4 - - VERSION=2.3 - - VERSION=2.3/alpine - - VERSION=2.2 - - VERSION=2.2/alpine - - VERSION=2.1 - - VERSION=2.1/alpine - - VERSION=2.0 - - VERSION=2.0/alpine - - VERSION=1.5 - - VERSION=1.5/alpine + - VERSION=5.0 VARIANT= + - VERSION=5.0 VARIANT=alpine + - VERSION=2.4 VARIANT= + - VERSION=2.4 VARIANT=alpine + - VERSION=2.3 VARIANT= + - VERSION=2.3 VARIANT=alpine + - VERSION=2.2 VARIANT= + - VERSION=2.2 VARIANT=alpine + - VERSION=2.1 VARIANT= + - VERSION=2.1 VARIANT=alpine + - VERSION=2.0 VARIANT= + - VERSION=2.0 VARIANT=alpine + - VERSION=1.5 VARIANT= + - VERSION=1.5 VARIANT=alpine install: - git clone https://github.com/docker-library/official-images.git ~/official-images @@ -22,10 +23,10 @@ install: before_script: - env | sort - cd "$VERSION" - - image="logstash:$VERSION" + - image="logstash:${VERSION}${VARIANT:+-$VARIANT}" script: - - docker build -t "$image" . + - docker build -t "$image" "${VARIANT:-.}" - ~/official-images/test/run.sh "$image" after_script: diff --git a/1.5/Dockerfile b/1.5/Dockerfile index 445f8a59a..61c13ab34 100644 --- a/1.5/Dockerfile +++ b/1.5/Dockerfile @@ -28,11 +28,12 @@ RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys 46095ACC85485 RUN echo 'deb http://packages.elastic.co/logstash/1.5/debian stable main' > /etc/apt/sources.list.d/logstash.list -ENV LOGSTASH_VERSION 1:1.5.6-1 +ENV LOGSTASH_VERSION 1.5.6 +ENV LOGSTASH_DEB_VERSION 1:1.5.6-1 RUN set -x \ && apt-get update \ - && apt-get install -y --no-install-recommends logstash=$LOGSTASH_VERSION \ + && apt-get install -y --no-install-recommends "logstash=$LOGSTASH_DEB_VERSION" \ && rm -rf /var/lib/apt/lists/* ENV PATH /opt/logstash/bin:$PATH diff --git a/1.5/alpine/Dockerfile b/1.5/alpine/Dockerfile index 2d85949bb..b6c3d062d 100644 --- a/1.5/alpine/Dockerfile +++ b/1.5/alpine/Dockerfile @@ -1,33 +1,85 @@ -FROM alpine:3.4 +FROM openjdk:8-jre-alpine +# ensure logstash user exists RUN addgroup -S logstash && adduser -S -G logstash logstash -RUN echo '@testing http://nl.alpinelinux.org/alpine/edge/testing' >> '/etc/apk/repositories' +# install plugin dependencies +RUN apk add --no-cache \ +# env: can't execute 'bash': No such file or directory + bash \ + libzmq -RUN apk update -RUN apk add --no-cache ca-certificates curl openjdk8 gosu@testing libzmq +# grab su-exec for easy step-down from root +RUN apk add --no-cache 'su-exec>=0.2' -# the "ffi-rzmq-core" gem is very picky about where it looks for libzmq.so -RUN mkdir -p /usr/local/lib \ - && ln -s /usr/lib/*/libzmq.so.3 /usr/local/lib/libzmq.so +# https://www.elastic.co/guide/en/logstash/5.0/installing-logstash.html#_apt +# https://artifacts.elastic.co/GPG-KEY-elasticsearch +ENV GPG_KEY 46095ACC8548582C1A2699A9D27D666CD88E42B4 + +ENV LOGSTASH_PATH /opt/logstash/bin +ENV PATH $LOGSTASH_PATH:$PATH -ENV LOGSTASH_MAJOR 1.5 ENV LOGSTASH_VERSION 1.5.6 -ENV LOGSTASH_TAR_SHA1 f3e4342f496e0d7e709de231daf624eb1fd80873 - -RUN \ - adduser -D -S elasticsearch -RUN \ - mkdir -p /opt && \ - cd /tmp && \ - curl -L https://download.elastic.co/logstash/logstash/logstash-$LOGSTASH_VERSION.tar.gz > logstash-$LOGSTASH_VERSION.tar.gz && \ - echo "$LOGSTASH_TAR_SHA1 logstash-$LOGSTASH_VERSION.tar.gz" | sha1sum -c - && \ - tar -xzf logstash-$LOGSTASH_VERSION.tar.gz && \ - rm -rf logstash-$LOGSTASH_VERSION.tar.gz && \ - mv logstash-$LOGSTASH_VERSION /opt/logstash && \ - ln -s /opt/logstash/bin/logstash /usr/local/bin/logstash +ENV LOGSTASH_TARBALL="https://download.elastic.co/logstash/logstash/logstash-1.5.6.tar.gz" \ + LOGSTASH_TARBALL_ASC="" \ + LOGSTASH_TARBALL_SHA1="f3e4342f496e0d7e709de231daf624eb1fd80873" + +RUN set -ex; \ + \ + if [ -z "$LOGSTASH_TARBALL_SHA1" ] && [ -z "$LOGSTASH_TARBALL_ASC" ]; then \ + echo >&2 'error: have neither a SHA1 _or_ a signature file -- cannot verify download!'; \ + exit 1; \ + fi; \ + \ + apk add --no-cache --virtual .fetch-deps \ + ca-certificates \ + gnupg \ + openssl \ + tar \ + ; \ + \ + wget -O logstash.tar.gz "$LOGSTASH_TARBALL"; \ + \ + if [ "$LOGSTASH_TARBALL_SHA1" ]; then \ + echo "$LOGSTASH_TARBALL_SHA1 *logstash.tar.gz" | sha1sum -c -; \ + fi; \ + \ + if [ "$LOGSTASH_TARBALL_ASC" ]; then \ + wget -O logstash.tar.gz.asc "$LOGSTASH_TARBALL_ASC"; \ + export GNUPGHOME="$(mktemp -d)"; \ + gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$GPG_KEY"; \ + gpg --batch --verify logstash.tar.gz.asc logstash.tar.gz; \ + rm -r "$GNUPGHOME" logstash.tar.gz.asc; \ + fi; \ + \ + dir="$(dirname "$LOGSTASH_PATH")"; \ + \ + mkdir -p "$dir"; \ + tar -xf logstash.tar.gz --strip-components=1 -C "$dir"; \ + rm logstash.tar.gz; \ + \ + apk del .fetch-deps; \ + \ + export LS_SETTINGS_DIR="$dir/config"; \ +# if the "log4j2.properties" file exists (logstash 5.x), let's empty it out so we get the default: "logging only errors to the console" + if [ -f "$LS_SETTINGS_DIR/log4j2.properties" ]; then \ + cp "$LS_SETTINGS_DIR/log4j2.properties" "$LS_SETTINGS_DIR/log4j2.properties.dist"; \ + truncate -s 0 "$LS_SETTINGS_DIR/log4j2.properties"; \ + fi; \ + \ +# set up some file permissions + for userDir in \ + "$dir/config" \ + "$dir/data" \ + ; do \ + if [ -d "$userDir" ]; then \ + chown -R logstash:logstash "$userDir"; \ + fi; \ + done; \ + \ + logstash --version COPY docker-entrypoint.sh / ENTRYPOINT ["/docker-entrypoint.sh"] -CMD ["logstash", "agent"] +CMD ["-e", ""] diff --git a/1.5/alpine/docker-entrypoint-alpine.sh b/1.5/alpine/docker-entrypoint-alpine.sh deleted file mode 100644 index 47b18bba0..000000000 --- a/1.5/alpine/docker-entrypoint-alpine.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh - -set -e - -# Add logstash as command if needed -if [ "${1:0:1}" = '-' ]; then - set -- logstash "$@" -fi - -# Run as user "logstash" if the command is "logstash" -if [ "$1" = 'logstash' ]; then - set -- gosu logstash "$@" -fi - -exec "$@" diff --git a/1.5/alpine/docker-entrypoint.sh b/1.5/alpine/docker-entrypoint.sh index 47b18bba0..1d67a9f49 100755 --- a/1.5/alpine/docker-entrypoint.sh +++ b/1.5/alpine/docker-entrypoint.sh @@ -1,15 +1,15 @@ -#!/bin/sh - +#!/bin/bash set -e -# Add logstash as command if needed -if [ "${1:0:1}" = '-' ]; then +# first arg is `-f` or `--some-option` +if [ "${1#-}" != "$1" ]; then set -- logstash "$@" fi # Run as user "logstash" if the command is "logstash" -if [ "$1" = 'logstash' ]; then - set -- gosu logstash "$@" +# allow the container to be started with `--user` +if [ "$1" = 'logstash' -a "$(id -u)" = '0' ]; then + set -- su-exec logstash "$@" fi exec "$@" diff --git a/1.5/docker-entrypoint.sh b/1.5/docker-entrypoint.sh index dea4db59b..4b65b4212 100755 --- a/1.5/docker-entrypoint.sh +++ b/1.5/docker-entrypoint.sh @@ -1,9 +1,8 @@ #!/bin/bash - set -e -# Add logstash as command if needed -if [ "${1:0:1}" = '-' ]; then +# first arg is `-f` or `--some-option` +if [ "${1#-}" != "$1" ]; then set -- logstash "$@" fi diff --git a/2.0/Dockerfile b/2.0/Dockerfile index 8b3d411ca..87662798f 100644 --- a/2.0/Dockerfile +++ b/2.0/Dockerfile @@ -28,11 +28,12 @@ RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys 46095ACC85485 RUN echo 'deb http://packages.elastic.co/logstash/2.0/debian stable main' > /etc/apt/sources.list.d/logstash.list -ENV LOGSTASH_VERSION 1:2.0.0-1 +ENV LOGSTASH_VERSION 2.0.0 +ENV LOGSTASH_DEB_VERSION 1:2.0.0-1 RUN set -x \ && apt-get update \ - && apt-get install -y --no-install-recommends logstash=$LOGSTASH_VERSION \ + && apt-get install -y --no-install-recommends "logstash=$LOGSTASH_DEB_VERSION" \ && rm -rf /var/lib/apt/lists/* ENV PATH /opt/logstash/bin:$PATH diff --git a/2.0/alpine/Dockerfile b/2.0/alpine/Dockerfile index b287dea8a..3dcb2f36c 100644 --- a/2.0/alpine/Dockerfile +++ b/2.0/alpine/Dockerfile @@ -1,33 +1,85 @@ -FROM alpine:3.4 +FROM openjdk:8-jre-alpine +# ensure logstash user exists RUN addgroup -S logstash && adduser -S -G logstash logstash -RUN echo '@testing http://nl.alpinelinux.org/alpine/edge/testing' >> '/etc/apk/repositories' +# install plugin dependencies +RUN apk add --no-cache \ +# env: can't execute 'bash': No such file or directory + bash \ + libzmq -RUN apk update -RUN apk add --no-cache ca-certificates curl openjdk8 gosu@testing libzmq +# grab su-exec for easy step-down from root +RUN apk add --no-cache 'su-exec>=0.2' -# the "ffi-rzmq-core" gem is very picky about where it looks for libzmq.so -RUN mkdir -p /usr/local/lib \ - && ln -s /usr/lib/*/libzmq.so.3 /usr/local/lib/libzmq.so +# https://www.elastic.co/guide/en/logstash/5.0/installing-logstash.html#_apt +# https://artifacts.elastic.co/GPG-KEY-elasticsearch +ENV GPG_KEY 46095ACC8548582C1A2699A9D27D666CD88E42B4 -ENV LOGSTASH_MAJOR 2.0 -ENV LOGSTASH_VERSION 2.0.0-rc1 -ENV LOGSTASH_TAR_SHA1 5d3a311d83dfba7e37c1bb48879fbcc59690f7cd +ENV LOGSTASH_PATH /opt/logstash/bin +ENV PATH $LOGSTASH_PATH:$PATH -RUN \ - adduser -D -S elasticsearch -RUN \ - mkdir -p /opt && \ - cd /tmp && \ - curl -L https://download.elastic.co/logstash/logstash/logstash-$LOGSTASH_VERSION.tar.gz > logstash-$LOGSTASH_VERSION.tar.gz && \ - echo "$LOGSTASH_TAR_SHA1 logstash-$LOGSTASH_VERSION.tar.gz" | sha1sum -c - && \ - tar -xzf logstash-$LOGSTASH_VERSION.tar.gz && \ - rm -rf logstash-$LOGSTASH_VERSION.tar.gz && \ - mv logstash-$LOGSTASH_VERSION /opt/logstash && \ - ln -s /opt/logstash/bin/logstash /usr/local/bin/logstash +ENV LOGSTASH_VERSION 2.0.0 +ENV LOGSTASH_TARBALL="https://download.elastic.co/logstash/logstash/logstash-2.0.0.tar.gz" \ + LOGSTASH_TARBALL_ASC="" \ + LOGSTASH_TARBALL_SHA1="f0961520dd9590d3b600c877be66f79f94a05f80" + +RUN set -ex; \ + \ + if [ -z "$LOGSTASH_TARBALL_SHA1" ] && [ -z "$LOGSTASH_TARBALL_ASC" ]; then \ + echo >&2 'error: have neither a SHA1 _or_ a signature file -- cannot verify download!'; \ + exit 1; \ + fi; \ + \ + apk add --no-cache --virtual .fetch-deps \ + ca-certificates \ + gnupg \ + openssl \ + tar \ + ; \ + \ + wget -O logstash.tar.gz "$LOGSTASH_TARBALL"; \ + \ + if [ "$LOGSTASH_TARBALL_SHA1" ]; then \ + echo "$LOGSTASH_TARBALL_SHA1 *logstash.tar.gz" | sha1sum -c -; \ + fi; \ + \ + if [ "$LOGSTASH_TARBALL_ASC" ]; then \ + wget -O logstash.tar.gz.asc "$LOGSTASH_TARBALL_ASC"; \ + export GNUPGHOME="$(mktemp -d)"; \ + gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$GPG_KEY"; \ + gpg --batch --verify logstash.tar.gz.asc logstash.tar.gz; \ + rm -r "$GNUPGHOME" logstash.tar.gz.asc; \ + fi; \ + \ + dir="$(dirname "$LOGSTASH_PATH")"; \ + \ + mkdir -p "$dir"; \ + tar -xf logstash.tar.gz --strip-components=1 -C "$dir"; \ + rm logstash.tar.gz; \ + \ + apk del .fetch-deps; \ + \ + export LS_SETTINGS_DIR="$dir/config"; \ +# if the "log4j2.properties" file exists (logstash 5.x), let's empty it out so we get the default: "logging only errors to the console" + if [ -f "$LS_SETTINGS_DIR/log4j2.properties" ]; then \ + cp "$LS_SETTINGS_DIR/log4j2.properties" "$LS_SETTINGS_DIR/log4j2.properties.dist"; \ + truncate -s 0 "$LS_SETTINGS_DIR/log4j2.properties"; \ + fi; \ + \ +# set up some file permissions + for userDir in \ + "$dir/config" \ + "$dir/data" \ + ; do \ + if [ -d "$userDir" ]; then \ + chown -R logstash:logstash "$userDir"; \ + fi; \ + done; \ + \ + logstash --version COPY docker-entrypoint.sh / ENTRYPOINT ["/docker-entrypoint.sh"] -CMD ["logstash", "agent"] +CMD ["-e", ""] diff --git a/2.0/alpine/docker-entrypoint-alpine.sh b/2.0/alpine/docker-entrypoint-alpine.sh deleted file mode 100644 index 47b18bba0..000000000 --- a/2.0/alpine/docker-entrypoint-alpine.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh - -set -e - -# Add logstash as command if needed -if [ "${1:0:1}" = '-' ]; then - set -- logstash "$@" -fi - -# Run as user "logstash" if the command is "logstash" -if [ "$1" = 'logstash' ]; then - set -- gosu logstash "$@" -fi - -exec "$@" diff --git a/2.0/alpine/docker-entrypoint.sh b/2.0/alpine/docker-entrypoint.sh index 47b18bba0..1d67a9f49 100755 --- a/2.0/alpine/docker-entrypoint.sh +++ b/2.0/alpine/docker-entrypoint.sh @@ -1,15 +1,15 @@ -#!/bin/sh - +#!/bin/bash set -e -# Add logstash as command if needed -if [ "${1:0:1}" = '-' ]; then +# first arg is `-f` or `--some-option` +if [ "${1#-}" != "$1" ]; then set -- logstash "$@" fi # Run as user "logstash" if the command is "logstash" -if [ "$1" = 'logstash' ]; then - set -- gosu logstash "$@" +# allow the container to be started with `--user` +if [ "$1" = 'logstash' -a "$(id -u)" = '0' ]; then + set -- su-exec logstash "$@" fi exec "$@" diff --git a/2.0/docker-entrypoint.sh b/2.0/docker-entrypoint.sh index dea4db59b..4b65b4212 100755 --- a/2.0/docker-entrypoint.sh +++ b/2.0/docker-entrypoint.sh @@ -1,9 +1,8 @@ #!/bin/bash - set -e -# Add logstash as command if needed -if [ "${1:0:1}" = '-' ]; then +# first arg is `-f` or `--some-option` +if [ "${1#-}" != "$1" ]; then set -- logstash "$@" fi diff --git a/2.1/Dockerfile b/2.1/Dockerfile index 2d58f3f47..411814f32 100644 --- a/2.1/Dockerfile +++ b/2.1/Dockerfile @@ -28,11 +28,12 @@ RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys 46095ACC85485 RUN echo 'deb http://packages.elastic.co/logstash/2.1/debian stable main' > /etc/apt/sources.list.d/logstash.list -ENV LOGSTASH_VERSION 1:2.1.3-1 +ENV LOGSTASH_VERSION 2.1.3 +ENV LOGSTASH_DEB_VERSION 1:2.1.3-1 RUN set -x \ && apt-get update \ - && apt-get install -y --no-install-recommends logstash=$LOGSTASH_VERSION \ + && apt-get install -y --no-install-recommends "logstash=$LOGSTASH_DEB_VERSION" \ && rm -rf /var/lib/apt/lists/* ENV PATH /opt/logstash/bin:$PATH diff --git a/2.1/alpine/Dockerfile b/2.1/alpine/Dockerfile index eb6feec10..bfa7016be 100644 --- a/2.1/alpine/Dockerfile +++ b/2.1/alpine/Dockerfile @@ -1,33 +1,85 @@ -FROM alpine:3.4 +FROM openjdk:8-jre-alpine +# ensure logstash user exists RUN addgroup -S logstash && adduser -S -G logstash logstash -RUN echo '@testing http://nl.alpinelinux.org/alpine/edge/testing' >> '/etc/apk/repositories' +# install plugin dependencies +RUN apk add --no-cache \ +# env: can't execute 'bash': No such file or directory + bash \ + libzmq -RUN apk update -RUN apk add --no-cache ca-certificates curl openjdk8 gosu@testing libzmq +# grab su-exec for easy step-down from root +RUN apk add --no-cache 'su-exec>=0.2' -# the "ffi-rzmq-core" gem is very picky about where it looks for libzmq.so -RUN mkdir -p /usr/local/lib \ - && ln -s /usr/lib/*/libzmq.so.3 /usr/local/lib/libzmq.so +# https://www.elastic.co/guide/en/logstash/5.0/installing-logstash.html#_apt +# https://artifacts.elastic.co/GPG-KEY-elasticsearch +ENV GPG_KEY 46095ACC8548582C1A2699A9D27D666CD88E42B4 + +ENV LOGSTASH_PATH /opt/logstash/bin +ENV PATH $LOGSTASH_PATH:$PATH -ENV LOGSTASH_MAJOR 2.1 ENV LOGSTASH_VERSION 2.1.3 -ENV LOGSTASH_TAR_SHA1 283f6d8842df52c7d69f77b5c6d4755ee942b291 - -RUN \ - adduser -D -S elasticsearch -RUN \ - mkdir -p /opt && \ - cd /tmp && \ - curl -L https://download.elastic.co/logstash/logstash/logstash-$LOGSTASH_VERSION.tar.gz > logstash-$LOGSTASH_VERSION.tar.gz && \ - echo "$LOGSTASH_TAR_SHA1 logstash-$LOGSTASH_VERSION.tar.gz" | sha1sum -c - && \ - tar -xzf logstash-$LOGSTASH_VERSION.tar.gz && \ - rm -rf logstash-$LOGSTASH_VERSION.tar.gz && \ - mv logstash-$LOGSTASH_VERSION /opt/logstash && \ - ln -s /opt/logstash/bin/logstash /usr/local/bin/logstash +ENV LOGSTASH_TARBALL="https://download.elastic.co/logstash/logstash/logstash-2.1.3.tar.gz" \ + LOGSTASH_TARBALL_ASC="" \ + LOGSTASH_TARBALL_SHA1="283f6d8842df52c7d69f77b5c6d4755ee942b291" + +RUN set -ex; \ + \ + if [ -z "$LOGSTASH_TARBALL_SHA1" ] && [ -z "$LOGSTASH_TARBALL_ASC" ]; then \ + echo >&2 'error: have neither a SHA1 _or_ a signature file -- cannot verify download!'; \ + exit 1; \ + fi; \ + \ + apk add --no-cache --virtual .fetch-deps \ + ca-certificates \ + gnupg \ + openssl \ + tar \ + ; \ + \ + wget -O logstash.tar.gz "$LOGSTASH_TARBALL"; \ + \ + if [ "$LOGSTASH_TARBALL_SHA1" ]; then \ + echo "$LOGSTASH_TARBALL_SHA1 *logstash.tar.gz" | sha1sum -c -; \ + fi; \ + \ + if [ "$LOGSTASH_TARBALL_ASC" ]; then \ + wget -O logstash.tar.gz.asc "$LOGSTASH_TARBALL_ASC"; \ + export GNUPGHOME="$(mktemp -d)"; \ + gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$GPG_KEY"; \ + gpg --batch --verify logstash.tar.gz.asc logstash.tar.gz; \ + rm -r "$GNUPGHOME" logstash.tar.gz.asc; \ + fi; \ + \ + dir="$(dirname "$LOGSTASH_PATH")"; \ + \ + mkdir -p "$dir"; \ + tar -xf logstash.tar.gz --strip-components=1 -C "$dir"; \ + rm logstash.tar.gz; \ + \ + apk del .fetch-deps; \ + \ + export LS_SETTINGS_DIR="$dir/config"; \ +# if the "log4j2.properties" file exists (logstash 5.x), let's empty it out so we get the default: "logging only errors to the console" + if [ -f "$LS_SETTINGS_DIR/log4j2.properties" ]; then \ + cp "$LS_SETTINGS_DIR/log4j2.properties" "$LS_SETTINGS_DIR/log4j2.properties.dist"; \ + truncate -s 0 "$LS_SETTINGS_DIR/log4j2.properties"; \ + fi; \ + \ +# set up some file permissions + for userDir in \ + "$dir/config" \ + "$dir/data" \ + ; do \ + if [ -d "$userDir" ]; then \ + chown -R logstash:logstash "$userDir"; \ + fi; \ + done; \ + \ + logstash --version COPY docker-entrypoint.sh / ENTRYPOINT ["/docker-entrypoint.sh"] -CMD ["logstash", "agent"] +CMD ["-e", ""] diff --git a/2.1/alpine/docker-entrypoint-alpine.sh b/2.1/alpine/docker-entrypoint-alpine.sh deleted file mode 100644 index 47b18bba0..000000000 --- a/2.1/alpine/docker-entrypoint-alpine.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh - -set -e - -# Add logstash as command if needed -if [ "${1:0:1}" = '-' ]; then - set -- logstash "$@" -fi - -# Run as user "logstash" if the command is "logstash" -if [ "$1" = 'logstash' ]; then - set -- gosu logstash "$@" -fi - -exec "$@" diff --git a/2.1/alpine/docker-entrypoint.sh b/2.1/alpine/docker-entrypoint.sh index 47b18bba0..1d67a9f49 100755 --- a/2.1/alpine/docker-entrypoint.sh +++ b/2.1/alpine/docker-entrypoint.sh @@ -1,15 +1,15 @@ -#!/bin/sh - +#!/bin/bash set -e -# Add logstash as command if needed -if [ "${1:0:1}" = '-' ]; then +# first arg is `-f` or `--some-option` +if [ "${1#-}" != "$1" ]; then set -- logstash "$@" fi # Run as user "logstash" if the command is "logstash" -if [ "$1" = 'logstash' ]; then - set -- gosu logstash "$@" +# allow the container to be started with `--user` +if [ "$1" = 'logstash' -a "$(id -u)" = '0' ]; then + set -- su-exec logstash "$@" fi exec "$@" diff --git a/2.1/docker-entrypoint.sh b/2.1/docker-entrypoint.sh index dea4db59b..4b65b4212 100755 --- a/2.1/docker-entrypoint.sh +++ b/2.1/docker-entrypoint.sh @@ -1,9 +1,8 @@ #!/bin/bash - set -e -# Add logstash as command if needed -if [ "${1:0:1}" = '-' ]; then +# first arg is `-f` or `--some-option` +if [ "${1#-}" != "$1" ]; then set -- logstash "$@" fi diff --git a/2.2/Dockerfile b/2.2/Dockerfile index 3e87f8e85..7fef69af7 100644 --- a/2.2/Dockerfile +++ b/2.2/Dockerfile @@ -28,11 +28,12 @@ RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys 46095ACC85485 RUN echo 'deb http://packages.elastic.co/logstash/2.2/debian stable main' > /etc/apt/sources.list.d/logstash.list -ENV LOGSTASH_VERSION 1:2.2.4-1 +ENV LOGSTASH_VERSION 2.2.4 +ENV LOGSTASH_DEB_VERSION 1:2.2.4-1 RUN set -x \ && apt-get update \ - && apt-get install -y --no-install-recommends logstash=$LOGSTASH_VERSION \ + && apt-get install -y --no-install-recommends "logstash=$LOGSTASH_DEB_VERSION" \ && rm -rf /var/lib/apt/lists/* ENV PATH /opt/logstash/bin:$PATH diff --git a/2.2/alpine/Dockerfile b/2.2/alpine/Dockerfile index 5e68c2355..1b72f067a 100644 --- a/2.2/alpine/Dockerfile +++ b/2.2/alpine/Dockerfile @@ -1,33 +1,85 @@ -FROM alpine:3.4 +FROM openjdk:8-jre-alpine +# ensure logstash user exists RUN addgroup -S logstash && adduser -S -G logstash logstash -RUN echo '@testing http://nl.alpinelinux.org/alpine/edge/testing' >> '/etc/apk/repositories' +# install plugin dependencies +RUN apk add --no-cache \ +# env: can't execute 'bash': No such file or directory + bash \ + libzmq -RUN apk update -RUN apk add --no-cache ca-certificates curl openjdk8 gosu@testing libzmq +# grab su-exec for easy step-down from root +RUN apk add --no-cache 'su-exec>=0.2' -# the "ffi-rzmq-core" gem is very picky about where it looks for libzmq.so -RUN mkdir -p /usr/local/lib \ - && ln -s /usr/lib/*/libzmq.so.3 /usr/local/lib/libzmq.so +# https://www.elastic.co/guide/en/logstash/5.0/installing-logstash.html#_apt +# https://artifacts.elastic.co/GPG-KEY-elasticsearch +ENV GPG_KEY 46095ACC8548582C1A2699A9D27D666CD88E42B4 + +ENV LOGSTASH_PATH /opt/logstash/bin +ENV PATH $LOGSTASH_PATH:$PATH -ENV LOGSTASH_MAJOR 2.2 ENV LOGSTASH_VERSION 2.2.4 -ENV LOGSTASH_TAR_SHA1 4e64cbc617d1b9cbf20869daab22cb4df68895ed - -RUN \ - adduser -D -S elasticsearch -RUN \ - mkdir -p /opt && \ - cd /tmp && \ - curl -L https://download.elastic.co/logstash/logstash/logstash-$LOGSTASH_VERSION.tar.gz > logstash-$LOGSTASH_VERSION.tar.gz && \ - echo "$LOGSTASH_TAR_SHA1 logstash-$LOGSTASH_VERSION.tar.gz" | sha1sum -c - && \ - tar -xzf logstash-$LOGSTASH_VERSION.tar.gz && \ - rm -rf logstash-$LOGSTASH_VERSION.tar.gz && \ - mv logstash-$LOGSTASH_VERSION /opt/logstash && \ - ln -s /opt/logstash/bin/logstash /usr/local/bin/logstash +ENV LOGSTASH_TARBALL="https://download.elastic.co/logstash/logstash/logstash-2.2.4.tar.gz" \ + LOGSTASH_TARBALL_ASC="" \ + LOGSTASH_TARBALL_SHA1="4e64cbc617d1b9cbf20869daab22cb4df68895ed" + +RUN set -ex; \ + \ + if [ -z "$LOGSTASH_TARBALL_SHA1" ] && [ -z "$LOGSTASH_TARBALL_ASC" ]; then \ + echo >&2 'error: have neither a SHA1 _or_ a signature file -- cannot verify download!'; \ + exit 1; \ + fi; \ + \ + apk add --no-cache --virtual .fetch-deps \ + ca-certificates \ + gnupg \ + openssl \ + tar \ + ; \ + \ + wget -O logstash.tar.gz "$LOGSTASH_TARBALL"; \ + \ + if [ "$LOGSTASH_TARBALL_SHA1" ]; then \ + echo "$LOGSTASH_TARBALL_SHA1 *logstash.tar.gz" | sha1sum -c -; \ + fi; \ + \ + if [ "$LOGSTASH_TARBALL_ASC" ]; then \ + wget -O logstash.tar.gz.asc "$LOGSTASH_TARBALL_ASC"; \ + export GNUPGHOME="$(mktemp -d)"; \ + gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$GPG_KEY"; \ + gpg --batch --verify logstash.tar.gz.asc logstash.tar.gz; \ + rm -r "$GNUPGHOME" logstash.tar.gz.asc; \ + fi; \ + \ + dir="$(dirname "$LOGSTASH_PATH")"; \ + \ + mkdir -p "$dir"; \ + tar -xf logstash.tar.gz --strip-components=1 -C "$dir"; \ + rm logstash.tar.gz; \ + \ + apk del .fetch-deps; \ + \ + export LS_SETTINGS_DIR="$dir/config"; \ +# if the "log4j2.properties" file exists (logstash 5.x), let's empty it out so we get the default: "logging only errors to the console" + if [ -f "$LS_SETTINGS_DIR/log4j2.properties" ]; then \ + cp "$LS_SETTINGS_DIR/log4j2.properties" "$LS_SETTINGS_DIR/log4j2.properties.dist"; \ + truncate -s 0 "$LS_SETTINGS_DIR/log4j2.properties"; \ + fi; \ + \ +# set up some file permissions + for userDir in \ + "$dir/config" \ + "$dir/data" \ + ; do \ + if [ -d "$userDir" ]; then \ + chown -R logstash:logstash "$userDir"; \ + fi; \ + done; \ + \ + logstash --version COPY docker-entrypoint.sh / ENTRYPOINT ["/docker-entrypoint.sh"] -CMD ["logstash", "agent"] +CMD ["-e", ""] diff --git a/2.2/alpine/docker-entrypoint-alpine.sh b/2.2/alpine/docker-entrypoint-alpine.sh deleted file mode 100644 index 47b18bba0..000000000 --- a/2.2/alpine/docker-entrypoint-alpine.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh - -set -e - -# Add logstash as command if needed -if [ "${1:0:1}" = '-' ]; then - set -- logstash "$@" -fi - -# Run as user "logstash" if the command is "logstash" -if [ "$1" = 'logstash' ]; then - set -- gosu logstash "$@" -fi - -exec "$@" diff --git a/2.2/alpine/docker-entrypoint.sh b/2.2/alpine/docker-entrypoint.sh index 47b18bba0..1d67a9f49 100755 --- a/2.2/alpine/docker-entrypoint.sh +++ b/2.2/alpine/docker-entrypoint.sh @@ -1,15 +1,15 @@ -#!/bin/sh - +#!/bin/bash set -e -# Add logstash as command if needed -if [ "${1:0:1}" = '-' ]; then +# first arg is `-f` or `--some-option` +if [ "${1#-}" != "$1" ]; then set -- logstash "$@" fi # Run as user "logstash" if the command is "logstash" -if [ "$1" = 'logstash' ]; then - set -- gosu logstash "$@" +# allow the container to be started with `--user` +if [ "$1" = 'logstash' -a "$(id -u)" = '0' ]; then + set -- su-exec logstash "$@" fi exec "$@" diff --git a/2.2/docker-entrypoint.sh b/2.2/docker-entrypoint.sh index dea4db59b..4b65b4212 100755 --- a/2.2/docker-entrypoint.sh +++ b/2.2/docker-entrypoint.sh @@ -1,9 +1,8 @@ #!/bin/bash - set -e -# Add logstash as command if needed -if [ "${1:0:1}" = '-' ]; then +# first arg is `-f` or `--some-option` +if [ "${1#-}" != "$1" ]; then set -- logstash "$@" fi diff --git a/2.3/Dockerfile b/2.3/Dockerfile index 761c96aa7..94e83effb 100644 --- a/2.3/Dockerfile +++ b/2.3/Dockerfile @@ -28,11 +28,12 @@ RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys 46095ACC85485 RUN echo 'deb http://packages.elastic.co/logstash/2.3/debian stable main' > /etc/apt/sources.list.d/logstash.list -ENV LOGSTASH_VERSION 1:2.3.4-1 +ENV LOGSTASH_VERSION 2.3.4 +ENV LOGSTASH_DEB_VERSION 1:2.3.4-1 RUN set -x \ && apt-get update \ - && apt-get install -y --no-install-recommends logstash=$LOGSTASH_VERSION \ + && apt-get install -y --no-install-recommends "logstash=$LOGSTASH_DEB_VERSION" \ && rm -rf /var/lib/apt/lists/* ENV PATH /opt/logstash/bin:$PATH diff --git a/2.3/alpine/Dockerfile b/2.3/alpine/Dockerfile index 207e7c88c..2665fe360 100644 --- a/2.3/alpine/Dockerfile +++ b/2.3/alpine/Dockerfile @@ -1,33 +1,85 @@ -FROM alpine:3.4 +FROM openjdk:8-jre-alpine +# ensure logstash user exists RUN addgroup -S logstash && adduser -S -G logstash logstash -RUN echo '@testing http://nl.alpinelinux.org/alpine/edge/testing' >> '/etc/apk/repositories' +# install plugin dependencies +RUN apk add --no-cache \ +# env: can't execute 'bash': No such file or directory + bash \ + libzmq -RUN apk update -RUN apk add --no-cache ca-certificates curl openjdk8 gosu@testing libzmq +# grab su-exec for easy step-down from root +RUN apk add --no-cache 'su-exec>=0.2' -# the "ffi-rzmq-core" gem is very picky about where it looks for libzmq.so -RUN mkdir -p /usr/local/lib \ - && ln -s /usr/lib/*/libzmq.so.3 /usr/local/lib/libzmq.so +# https://www.elastic.co/guide/en/logstash/5.0/installing-logstash.html#_apt +# https://artifacts.elastic.co/GPG-KEY-elasticsearch +ENV GPG_KEY 46095ACC8548582C1A2699A9D27D666CD88E42B4 -ENV LOGSTASH_MAJOR 2.3 -ENV LOGSTASH_VERSION 2.3.2 -ENV LOGSTASH_TAR_SHA1 64e04e6a4a3e9fe9e731a76e173d5f4bdf035cc6 +ENV LOGSTASH_PATH /opt/logstash/bin +ENV PATH $LOGSTASH_PATH:$PATH -RUN \ - adduser -D -S elasticsearch -RUN \ - mkdir -p /opt && \ - cd /tmp && \ - curl -L https://download.elastic.co/logstash/logstash/logstash-$LOGSTASH_VERSION.tar.gz > logstash-$LOGSTASH_VERSION.tar.gz && \ - echo "$LOGSTASH_TAR_SHA1 logstash-$LOGSTASH_VERSION.tar.gz" | sha1sum -c - && \ - tar -xzf logstash-$LOGSTASH_VERSION.tar.gz && \ - rm -rf logstash-$LOGSTASH_VERSION.tar.gz && \ - mv logstash-$LOGSTASH_VERSION /opt/logstash && \ - ln -s /opt/logstash/bin/logstash /usr/local/bin/logstash +ENV LOGSTASH_VERSION 2.3.4 +ENV LOGSTASH_TARBALL="https://download.elastic.co/logstash/logstash/logstash-2.3.4.tar.gz" \ + LOGSTASH_TARBALL_ASC="" \ + LOGSTASH_TARBALL_SHA1="5fc3fc36752018c66a476068f2c1cc61e96b09cb" + +RUN set -ex; \ + \ + if [ -z "$LOGSTASH_TARBALL_SHA1" ] && [ -z "$LOGSTASH_TARBALL_ASC" ]; then \ + echo >&2 'error: have neither a SHA1 _or_ a signature file -- cannot verify download!'; \ + exit 1; \ + fi; \ + \ + apk add --no-cache --virtual .fetch-deps \ + ca-certificates \ + gnupg \ + openssl \ + tar \ + ; \ + \ + wget -O logstash.tar.gz "$LOGSTASH_TARBALL"; \ + \ + if [ "$LOGSTASH_TARBALL_SHA1" ]; then \ + echo "$LOGSTASH_TARBALL_SHA1 *logstash.tar.gz" | sha1sum -c -; \ + fi; \ + \ + if [ "$LOGSTASH_TARBALL_ASC" ]; then \ + wget -O logstash.tar.gz.asc "$LOGSTASH_TARBALL_ASC"; \ + export GNUPGHOME="$(mktemp -d)"; \ + gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$GPG_KEY"; \ + gpg --batch --verify logstash.tar.gz.asc logstash.tar.gz; \ + rm -r "$GNUPGHOME" logstash.tar.gz.asc; \ + fi; \ + \ + dir="$(dirname "$LOGSTASH_PATH")"; \ + \ + mkdir -p "$dir"; \ + tar -xf logstash.tar.gz --strip-components=1 -C "$dir"; \ + rm logstash.tar.gz; \ + \ + apk del .fetch-deps; \ + \ + export LS_SETTINGS_DIR="$dir/config"; \ +# if the "log4j2.properties" file exists (logstash 5.x), let's empty it out so we get the default: "logging only errors to the console" + if [ -f "$LS_SETTINGS_DIR/log4j2.properties" ]; then \ + cp "$LS_SETTINGS_DIR/log4j2.properties" "$LS_SETTINGS_DIR/log4j2.properties.dist"; \ + truncate -s 0 "$LS_SETTINGS_DIR/log4j2.properties"; \ + fi; \ + \ +# set up some file permissions + for userDir in \ + "$dir/config" \ + "$dir/data" \ + ; do \ + if [ -d "$userDir" ]; then \ + chown -R logstash:logstash "$userDir"; \ + fi; \ + done; \ + \ + logstash --version COPY docker-entrypoint.sh / ENTRYPOINT ["/docker-entrypoint.sh"] -CMD ["logstash", "agent"] +CMD ["-e", ""] diff --git a/2.3/alpine/docker-entrypoint-alpine.sh b/2.3/alpine/docker-entrypoint-alpine.sh deleted file mode 100644 index 47b18bba0..000000000 --- a/2.3/alpine/docker-entrypoint-alpine.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh - -set -e - -# Add logstash as command if needed -if [ "${1:0:1}" = '-' ]; then - set -- logstash "$@" -fi - -# Run as user "logstash" if the command is "logstash" -if [ "$1" = 'logstash' ]; then - set -- gosu logstash "$@" -fi - -exec "$@" diff --git a/2.3/alpine/docker-entrypoint.sh b/2.3/alpine/docker-entrypoint.sh index 47b18bba0..1d67a9f49 100755 --- a/2.3/alpine/docker-entrypoint.sh +++ b/2.3/alpine/docker-entrypoint.sh @@ -1,15 +1,15 @@ -#!/bin/sh - +#!/bin/bash set -e -# Add logstash as command if needed -if [ "${1:0:1}" = '-' ]; then +# first arg is `-f` or `--some-option` +if [ "${1#-}" != "$1" ]; then set -- logstash "$@" fi # Run as user "logstash" if the command is "logstash" -if [ "$1" = 'logstash' ]; then - set -- gosu logstash "$@" +# allow the container to be started with `--user` +if [ "$1" = 'logstash' -a "$(id -u)" = '0' ]; then + set -- su-exec logstash "$@" fi exec "$@" diff --git a/2.3/docker-entrypoint.sh b/2.3/docker-entrypoint.sh index dea4db59b..4b65b4212 100755 --- a/2.3/docker-entrypoint.sh +++ b/2.3/docker-entrypoint.sh @@ -1,9 +1,8 @@ #!/bin/bash - set -e -# Add logstash as command if needed -if [ "${1:0:1}" = '-' ]; then +# first arg is `-f` or `--some-option` +if [ "${1#-}" != "$1" ]; then set -- logstash "$@" fi diff --git a/2.4/Dockerfile b/2.4/Dockerfile index 5359a403c..5cedd0d90 100644 --- a/2.4/Dockerfile +++ b/2.4/Dockerfile @@ -28,11 +28,12 @@ RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys 46095ACC85485 RUN echo 'deb http://packages.elastic.co/logstash/2.4/debian stable main' > /etc/apt/sources.list.d/logstash.list -ENV LOGSTASH_VERSION 1:2.4.1-1 +ENV LOGSTASH_VERSION 2.4.1 +ENV LOGSTASH_DEB_VERSION 1:2.4.1-1 RUN set -x \ && apt-get update \ - && apt-get install -y --no-install-recommends logstash=$LOGSTASH_VERSION \ + && apt-get install -y --no-install-recommends "logstash=$LOGSTASH_DEB_VERSION" \ && rm -rf /var/lib/apt/lists/* ENV PATH /opt/logstash/bin:$PATH diff --git a/2.4/alpine/Dockerfile b/2.4/alpine/Dockerfile new file mode 100644 index 000000000..6633185f7 --- /dev/null +++ b/2.4/alpine/Dockerfile @@ -0,0 +1,85 @@ +FROM openjdk:8-jre-alpine + +# ensure logstash user exists +RUN addgroup -S logstash && adduser -S -G logstash logstash + +# install plugin dependencies +RUN apk add --no-cache \ +# env: can't execute 'bash': No such file or directory + bash \ + libzmq + +# grab su-exec for easy step-down from root +RUN apk add --no-cache 'su-exec>=0.2' + +# https://www.elastic.co/guide/en/logstash/5.0/installing-logstash.html#_apt +# https://artifacts.elastic.co/GPG-KEY-elasticsearch +ENV GPG_KEY 46095ACC8548582C1A2699A9D27D666CD88E42B4 + +ENV LOGSTASH_PATH /opt/logstash/bin +ENV PATH $LOGSTASH_PATH:$PATH + +ENV LOGSTASH_VERSION 2.4.1 +ENV LOGSTASH_TARBALL="https://download.elastic.co/logstash/logstash/logstash-2.4.1.tar.gz" \ + LOGSTASH_TARBALL_ASC="" \ + LOGSTASH_TARBALL_SHA1="5ee4f3fa0ad4b182b3f00b4181a20c4e31a907b4" + +RUN set -ex; \ + \ + if [ -z "$LOGSTASH_TARBALL_SHA1" ] && [ -z "$LOGSTASH_TARBALL_ASC" ]; then \ + echo >&2 'error: have neither a SHA1 _or_ a signature file -- cannot verify download!'; \ + exit 1; \ + fi; \ + \ + apk add --no-cache --virtual .fetch-deps \ + ca-certificates \ + gnupg \ + openssl \ + tar \ + ; \ + \ + wget -O logstash.tar.gz "$LOGSTASH_TARBALL"; \ + \ + if [ "$LOGSTASH_TARBALL_SHA1" ]; then \ + echo "$LOGSTASH_TARBALL_SHA1 *logstash.tar.gz" | sha1sum -c -; \ + fi; \ + \ + if [ "$LOGSTASH_TARBALL_ASC" ]; then \ + wget -O logstash.tar.gz.asc "$LOGSTASH_TARBALL_ASC"; \ + export GNUPGHOME="$(mktemp -d)"; \ + gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$GPG_KEY"; \ + gpg --batch --verify logstash.tar.gz.asc logstash.tar.gz; \ + rm -r "$GNUPGHOME" logstash.tar.gz.asc; \ + fi; \ + \ + dir="$(dirname "$LOGSTASH_PATH")"; \ + \ + mkdir -p "$dir"; \ + tar -xf logstash.tar.gz --strip-components=1 -C "$dir"; \ + rm logstash.tar.gz; \ + \ + apk del .fetch-deps; \ + \ + export LS_SETTINGS_DIR="$dir/config"; \ +# if the "log4j2.properties" file exists (logstash 5.x), let's empty it out so we get the default: "logging only errors to the console" + if [ -f "$LS_SETTINGS_DIR/log4j2.properties" ]; then \ + cp "$LS_SETTINGS_DIR/log4j2.properties" "$LS_SETTINGS_DIR/log4j2.properties.dist"; \ + truncate -s 0 "$LS_SETTINGS_DIR/log4j2.properties"; \ + fi; \ + \ +# set up some file permissions + for userDir in \ + "$dir/config" \ + "$dir/data" \ + ; do \ + if [ -d "$userDir" ]; then \ + chown -R logstash:logstash "$userDir"; \ + fi; \ + done; \ + \ + logstash --version + +COPY docker-entrypoint.sh / + +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["-e", ""] diff --git a/2.4/alpine/docker-entrypoint.sh b/2.4/alpine/docker-entrypoint.sh new file mode 100755 index 000000000..1d67a9f49 --- /dev/null +++ b/2.4/alpine/docker-entrypoint.sh @@ -0,0 +1,15 @@ +#!/bin/bash +set -e + +# first arg is `-f` or `--some-option` +if [ "${1#-}" != "$1" ]; then + set -- logstash "$@" +fi + +# Run as user "logstash" if the command is "logstash" +# allow the container to be started with `--user` +if [ "$1" = 'logstash' -a "$(id -u)" = '0' ]; then + set -- su-exec logstash "$@" +fi + +exec "$@" diff --git a/2.4/docker-entrypoint.sh b/2.4/docker-entrypoint.sh index dea4db59b..4b65b4212 100755 --- a/2.4/docker-entrypoint.sh +++ b/2.4/docker-entrypoint.sh @@ -1,9 +1,8 @@ #!/bin/bash - set -e -# Add logstash as command if needed -if [ "${1:0:1}" = '-' ]; then +# first arg is `-f` or `--some-option` +if [ "${1#-}" != "$1" ]; then set -- logstash "$@" fi diff --git a/5.0/Dockerfile b/5.0/Dockerfile index 9b44e4cfa..866bde1c6 100644 --- a/5.0/Dockerfile +++ b/5.0/Dockerfile @@ -28,11 +28,12 @@ RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys 46095ACC85485 RUN echo 'deb https://artifacts.elastic.co/packages/5.x/apt stable main' > /etc/apt/sources.list.d/logstash.list -ENV LOGSTASH_VERSION 1:5.0.2-1 +ENV LOGSTASH_VERSION 5.0.2 +ENV LOGSTASH_DEB_VERSION 1:5.0.2-1 RUN set -x \ && apt-get update \ - && apt-get install -y --no-install-recommends logstash=$LOGSTASH_VERSION \ + && apt-get install -y --no-install-recommends "logstash=$LOGSTASH_DEB_VERSION" \ && rm -rf /var/lib/apt/lists/* ENV PATH /usr/share/logstash/bin:$PATH diff --git a/5.0/alpine/Dockerfile b/5.0/alpine/Dockerfile index 272cf4a78..463289db4 100644 --- a/5.0/alpine/Dockerfile +++ b/5.0/alpine/Dockerfile @@ -1,33 +1,85 @@ -FROM alpine:3.4 +FROM openjdk:8-jre-alpine +# ensure logstash user exists RUN addgroup -S logstash && adduser -S -G logstash logstash -RUN echo '@testing http://nl.alpinelinux.org/alpine/edge/testing' >> '/etc/apk/repositories' +# install plugin dependencies +RUN apk add --no-cache \ +# env: can't execute 'bash': No such file or directory + bash \ + libzmq -RUN apk update -RUN apk add --no-cache ca-certificates curl openjdk8 gosu@testing libzmq +# grab su-exec for easy step-down from root +RUN apk add --no-cache 'su-exec>=0.2' -# the "ffi-rzmq-core" gem is very picky about where it looks for libzmq.so -RUN mkdir -p /usr/local/lib \ - && ln -s /usr/lib/*/libzmq.so.3 /usr/local/lib/libzmq.so +# https://www.elastic.co/guide/en/logstash/5.0/installing-logstash.html#_apt +# https://artifacts.elastic.co/GPG-KEY-elasticsearch +ENV GPG_KEY 46095ACC8548582C1A2699A9D27D666CD88E42B4 -ENV LOGSTASH_MAJOR 5.0 -ENV LOGSTASH_VERSION 5.0.0-alpha3 -ENV LOGSTASH_TAR_SHA1 e25ccaa25ef0ba4e7491f9cca1abba1675752d3c +ENV LOGSTASH_PATH /usr/share/logstash/bin +ENV PATH $LOGSTASH_PATH:$PATH -RUN \ - adduser -D -S elasticsearch -RUN \ - mkdir -p /opt && \ - cd /tmp && \ - curl -L https://download.elastic.co/logstash/logstash/logstash-$LOGSTASH_VERSION.tar.gz > logstash-$LOGSTASH_VERSION.tar.gz && \ - echo "$LOGSTASH_TAR_SHA1 logstash-$LOGSTASH_VERSION.tar.gz" | sha1sum -c - && \ - tar -xzf logstash-$LOGSTASH_VERSION.tar.gz && \ - rm -rf logstash-$LOGSTASH_VERSION.tar.gz && \ - mv logstash-$LOGSTASH_VERSION /opt/logstash && \ - ln -s /opt/logstash/bin/logstash /usr/local/bin/logstash +ENV LOGSTASH_VERSION 5.0.2 +ENV LOGSTASH_TARBALL="https://artifacts.elastic.co/downloads/logstash/logstash-5.0.2.tar.gz" \ + LOGSTASH_TARBALL_ASC="https://artifacts.elastic.co/downloads/logstash/logstash-5.0.2.tar.gz.asc" \ + LOGSTASH_TARBALL_SHA1="e344558d0e8e964a66cbe67ec09f506b7a8be2e7" + +RUN set -ex; \ + \ + if [ -z "$LOGSTASH_TARBALL_SHA1" ] && [ -z "$LOGSTASH_TARBALL_ASC" ]; then \ + echo >&2 'error: have neither a SHA1 _or_ a signature file -- cannot verify download!'; \ + exit 1; \ + fi; \ + \ + apk add --no-cache --virtual .fetch-deps \ + ca-certificates \ + gnupg \ + openssl \ + tar \ + ; \ + \ + wget -O logstash.tar.gz "$LOGSTASH_TARBALL"; \ + \ + if [ "$LOGSTASH_TARBALL_SHA1" ]; then \ + echo "$LOGSTASH_TARBALL_SHA1 *logstash.tar.gz" | sha1sum -c -; \ + fi; \ + \ + if [ "$LOGSTASH_TARBALL_ASC" ]; then \ + wget -O logstash.tar.gz.asc "$LOGSTASH_TARBALL_ASC"; \ + export GNUPGHOME="$(mktemp -d)"; \ + gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$GPG_KEY"; \ + gpg --batch --verify logstash.tar.gz.asc logstash.tar.gz; \ + rm -r "$GNUPGHOME" logstash.tar.gz.asc; \ + fi; \ + \ + dir="$(dirname "$LOGSTASH_PATH")"; \ + \ + mkdir -p "$dir"; \ + tar -xf logstash.tar.gz --strip-components=1 -C "$dir"; \ + rm logstash.tar.gz; \ + \ + apk del .fetch-deps; \ + \ + export LS_SETTINGS_DIR="$dir/config"; \ +# if the "log4j2.properties" file exists (logstash 5.x), let's empty it out so we get the default: "logging only errors to the console" + if [ -f "$LS_SETTINGS_DIR/log4j2.properties" ]; then \ + cp "$LS_SETTINGS_DIR/log4j2.properties" "$LS_SETTINGS_DIR/log4j2.properties.dist"; \ + truncate -s 0 "$LS_SETTINGS_DIR/log4j2.properties"; \ + fi; \ + \ +# set up some file permissions + for userDir in \ + "$dir/config" \ + "$dir/data" \ + ; do \ + if [ -d "$userDir" ]; then \ + chown -R logstash:logstash "$userDir"; \ + fi; \ + done; \ + \ + logstash --version COPY docker-entrypoint.sh / ENTRYPOINT ["/docker-entrypoint.sh"] -CMD ["logstash", "agent"] +CMD ["-e", ""] diff --git a/5.0/alpine/docker-entrypoint-alpine.sh b/5.0/alpine/docker-entrypoint-alpine.sh deleted file mode 100644 index 47b18bba0..000000000 --- a/5.0/alpine/docker-entrypoint-alpine.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh - -set -e - -# Add logstash as command if needed -if [ "${1:0:1}" = '-' ]; then - set -- logstash "$@" -fi - -# Run as user "logstash" if the command is "logstash" -if [ "$1" = 'logstash' ]; then - set -- gosu logstash "$@" -fi - -exec "$@" diff --git a/5.0/alpine/docker-entrypoint.sh b/5.0/alpine/docker-entrypoint.sh index 47b18bba0..1d67a9f49 100755 --- a/5.0/alpine/docker-entrypoint.sh +++ b/5.0/alpine/docker-entrypoint.sh @@ -1,15 +1,15 @@ -#!/bin/sh - +#!/bin/bash set -e -# Add logstash as command if needed -if [ "${1:0:1}" = '-' ]; then +# first arg is `-f` or `--some-option` +if [ "${1#-}" != "$1" ]; then set -- logstash "$@" fi # Run as user "logstash" if the command is "logstash" -if [ "$1" = 'logstash' ]; then - set -- gosu logstash "$@" +# allow the container to be started with `--user` +if [ "$1" = 'logstash' -a "$(id -u)" = '0' ]; then + set -- su-exec logstash "$@" fi exec "$@" diff --git a/5.0/docker-entrypoint.sh b/5.0/docker-entrypoint.sh index dea4db59b..4b65b4212 100755 --- a/5.0/docker-entrypoint.sh +++ b/5.0/docker-entrypoint.sh @@ -1,9 +1,8 @@ #!/bin/bash - set -e -# Add logstash as command if needed -if [ "${1:0:1}" = '-' ]; then +# first arg is `-f` or `--some-option` +if [ "${1#-}" != "$1" ]; then set -- logstash "$@" fi diff --git a/Dockerfile-alpine.template b/Dockerfile-alpine.template index 5b6f4d935..df886373f 100644 --- a/Dockerfile-alpine.template +++ b/Dockerfile-alpine.template @@ -1,33 +1,85 @@ -FROM alpine:3.4 +FROM openjdk:8-jre-alpine +# ensure logstash user exists RUN addgroup -S logstash && adduser -S -G logstash logstash -RUN echo '@testing http://nl.alpinelinux.org/alpine/edge/testing' >> '/etc/apk/repositories' +# install plugin dependencies +RUN apk add --no-cache \ +# env: can't execute 'bash': No such file or directory + bash \ + libzmq -RUN apk update -RUN apk add --no-cache ca-certificates curl openjdk8 gosu@testing libzmq +# grab su-exec for easy step-down from root +RUN apk add --no-cache 'su-exec>=0.2' -# the "ffi-rzmq-core" gem is very picky about where it looks for libzmq.so -RUN mkdir -p /usr/local/lib \ - && ln -s /usr/lib/*/libzmq.so.3 /usr/local/lib/libzmq.so +# https://www.elastic.co/guide/en/logstash/5.0/installing-logstash.html#_apt +# https://artifacts.elastic.co/GPG-KEY-elasticsearch +ENV GPG_KEY 46095ACC8548582C1A2699A9D27D666CD88E42B4 + +ENV LOGSTASH_PATH %%LOGSTASH_PATH%% +ENV PATH $LOGSTASH_PATH:$PATH -ENV LOGSTASH_MAJOR %%LOGSTASH_MAJOR%% ENV LOGSTASH_VERSION %%LOGSTASH_VERSION%% -ENV LOGSTASH_TAR_SHA1 %%LOGSTASH_TAR_SHA1%% - -RUN \ - adduser -D -S elasticsearch -RUN \ - mkdir -p /opt && \ - cd /tmp && \ - curl -L https://download.elastic.co/logstash/logstash/logstash-$LOGSTASH_VERSION.tar.gz > logstash-$LOGSTASH_VERSION.tar.gz && \ - echo "$LOGSTASH_TAR_SHA1 logstash-$LOGSTASH_VERSION.tar.gz" | sha1sum -c - && \ - tar -xzf logstash-$LOGSTASH_VERSION.tar.gz && \ - rm -rf logstash-$LOGSTASH_VERSION.tar.gz && \ - mv logstash-$LOGSTASH_VERSION /opt/logstash && \ - ln -s /opt/logstash/bin/logstash /usr/local/bin/logstash +ENV LOGSTASH_TARBALL="%%LOGSTASH_TARBALL%%" \ + LOGSTASH_TARBALL_ASC="%%LOGSTASH_TARBALL_ASC%%" \ + LOGSTASH_TARBALL_SHA1="%%LOGSTASH_TARBALL_SHA1%%" + +RUN set -ex; \ + \ + if [ -z "$LOGSTASH_TARBALL_SHA1" ] && [ -z "$LOGSTASH_TARBALL_ASC" ]; then \ + echo >&2 'error: have neither a SHA1 _or_ a signature file -- cannot verify download!'; \ + exit 1; \ + fi; \ + \ + apk add --no-cache --virtual .fetch-deps \ + ca-certificates \ + gnupg \ + openssl \ + tar \ + ; \ + \ + wget -O logstash.tar.gz "$LOGSTASH_TARBALL"; \ + \ + if [ "$LOGSTASH_TARBALL_SHA1" ]; then \ + echo "$LOGSTASH_TARBALL_SHA1 *logstash.tar.gz" | sha1sum -c -; \ + fi; \ + \ + if [ "$LOGSTASH_TARBALL_ASC" ]; then \ + wget -O logstash.tar.gz.asc "$LOGSTASH_TARBALL_ASC"; \ + export GNUPGHOME="$(mktemp -d)"; \ + gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$GPG_KEY"; \ + gpg --batch --verify logstash.tar.gz.asc logstash.tar.gz; \ + rm -r "$GNUPGHOME" logstash.tar.gz.asc; \ + fi; \ + \ + dir="$(dirname "$LOGSTASH_PATH")"; \ + \ + mkdir -p "$dir"; \ + tar -xf logstash.tar.gz --strip-components=1 -C "$dir"; \ + rm logstash.tar.gz; \ + \ + apk del .fetch-deps; \ + \ + export LS_SETTINGS_DIR="$dir/config"; \ +# if the "log4j2.properties" file exists (logstash 5.x), let's empty it out so we get the default: "logging only errors to the console" + if [ -f "$LS_SETTINGS_DIR/log4j2.properties" ]; then \ + cp "$LS_SETTINGS_DIR/log4j2.properties" "$LS_SETTINGS_DIR/log4j2.properties.dist"; \ + truncate -s 0 "$LS_SETTINGS_DIR/log4j2.properties"; \ + fi; \ + \ +# set up some file permissions + for userDir in \ + "$dir/config" \ + "$dir/data" \ + ; do \ + if [ -d "$userDir" ]; then \ + chown -R logstash:logstash "$userDir"; \ + fi; \ + done; \ + \ + logstash --version COPY docker-entrypoint.sh / ENTRYPOINT ["/docker-entrypoint.sh"] -CMD ["logstash", "agent"] +CMD ["-e", ""] diff --git a/Dockerfile.template b/Dockerfile-debian.template similarity index 94% rename from Dockerfile.template rename to Dockerfile-debian.template index e7c997e6f..dbbc6720a 100644 --- a/Dockerfile.template +++ b/Dockerfile-debian.template @@ -29,10 +29,11 @@ RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys 46095ACC85485 RUN echo 'deb %%LOGSTASH_DEB_REPO%% stable main' > /etc/apt/sources.list.d/logstash.list ENV LOGSTASH_VERSION %%LOGSTASH_VERSION%% +ENV LOGSTASH_DEB_VERSION %%LOGSTASH_DEB_VERSION%% RUN set -x \ && apt-get update \ - && apt-get install -y --no-install-recommends logstash=$LOGSTASH_VERSION \ + && apt-get install -y --no-install-recommends "logstash=$LOGSTASH_DEB_VERSION" \ && rm -rf /var/lib/apt/lists/* ENV PATH %%LOGSTASH_PATH%%:$PATH diff --git a/docker-entrypoint-alpine.sh b/docker-entrypoint-alpine.sh deleted file mode 100644 index 47b18bba0..000000000 --- a/docker-entrypoint-alpine.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh - -set -e - -# Add logstash as command if needed -if [ "${1:0:1}" = '-' ]; then - set -- logstash "$@" -fi - -# Run as user "logstash" if the command is "logstash" -if [ "$1" = 'logstash' ]; then - set -- gosu logstash "$@" -fi - -exec "$@" diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index dea4db59b..4b65b4212 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -1,9 +1,8 @@ #!/bin/bash - set -e -# Add logstash as command if needed -if [ "${1:0:1}" = '-' ]; then +# first arg is `-f` or `--some-option` +if [ "${1#-}" != "$1" ]; then set -- logstash "$@" fi diff --git a/generate-stackbrew-library.sh b/generate-stackbrew-library.sh index 273a28dc6..c367bffb1 100755 --- a/generate-stackbrew-library.sh +++ b/generate-stackbrew-library.sh @@ -13,6 +13,9 @@ cd "$(dirname "$(readlink -f "$BASH_SOURCE")")" versions=( */ ) versions=( "${versions[@]%/}" ) +# sort version numbers with highest first +IFS=$'\n'; versions=( $(echo "${versions[*]}" | sort -rV) ); unset IFS + # get the most recent commit which modified any of "$@" fileCommit() { git log -1 --format='format:%H' HEAD -- "$@" @@ -53,7 +56,7 @@ join() { for version in "${versions[@]}"; do commit="$(dirCommit "$version")" - fullVersion="$(git show "$commit":"$version/Dockerfile" | awk '$1 == "ENV" && $2 == "LOGSTASH_VERSION" { gsub(/^.*:/, "", $3); gsub(/~/, "-", $3); print $3; exit }')" + fullVersion="$(git show "$commit":"$version/Dockerfile" | awk '$1 == "ENV" && $2 == "LOGSTASH_VERSION" { print $3; exit }')" versionAliases=() while [ "$fullVersion" != "$version" -a "${fullVersion%[.-]*}" != "$fullVersion" ]; do @@ -71,4 +74,20 @@ for version in "${versions[@]}"; do GitCommit: $commit Directory: $version EOE + + for variant in alpine; do + [ -f "$version/$variant/Dockerfile" ] || continue + + commit="$(dirCommit "$version/$variant")" + + variantAliases=( "${versionAliases[@]/%/-$variant}" ) + variantAliases=( "${variantAliases[@]//latest-/}" ) + + echo + cat <<-EOE + Tags: $(join ', ' "${variantAliases[@]}") + GitCommit: $commit + Directory: $version/$variant + EOE + done done diff --git a/update.sh b/update.sh index 00bd3a59b..bc756ea73 100755 --- a/update.sh +++ b/update.sh @@ -11,14 +11,14 @@ versions=( "${versions[@]%/}" ) travisEnv= for version in "${versions[@]}"; do - travisEnv='\n - VERSION='"$version\n - VERSION=$version"'/alpine'"$travisEnv" - major="${version%%.*}" debRepo="https://artifacts.elastic.co/packages/${major}.x/apt" logstashPath='/usr/share/logstash/bin' + tarballUrlBase='https://artifacts.elastic.co/downloads' if [ "$major" -lt 5 ]; then debRepo="http://packages.elastic.co/logstash/$version/debian" logstashPath='/opt/logstash/bin' + tarballUrlBase='https://download.elastic.co/logstash' fi fullVersion="$(curl -fsSL "$debRepo/dists/stable/main/binary-amd64/Packages.gz" | gunzip | awk -F ': ' '$1 == "Package" { pkg = $2 } pkg == "logstash" && $1 == "Version" { print $2 }' | sort -rV | head -n1)" @@ -26,35 +26,50 @@ for version in "${versions[@]}"; do echo >&2 "warning: cannot find full version for $version" continue fi + # convert "1:5.0.2-1" over to "5.0.2" + plainVersion="${fullVersion%%-*}" # strip non-upstream-version + plainVersion="${plainVersion##*:}" # strip epoch + tilde='~'; plainVersion="${plainVersion//$tilde/-}" # replace '~' with '-' + ( set -x cp docker-entrypoint.sh "$version/" sed ' + s!%%LOGSTASH_VERSION%%!'"$plainVersion"'!g; s!%%LOGSTASH_DEB_REPO%%!'"$debRepo"'!g; - s!%%LOGSTASH_VERSION%%!'"$fullVersion"'!g; + s!%%LOGSTASH_DEB_VERSION%%!'"$fullVersion"'!g; s!%%LOGSTASH_PATH%%!'"$logstashPath"'!g; - ' Dockerfile.template > "$version/Dockerfile" + ' Dockerfile-debian.template > "$version/Dockerfile" ) - - fullVersionAlpine="$(curl -fsSL https://www.elastic.co/downloads/past-releases/feed | xmlstarlet sel -t -v 'rss/channel/item/title'|grep 'Logstash '$version| awk -F' ' '{print $2}'|sort -rV |head -n1)" - echo $fullVersionAlpine - echo https://download.elastic.co/logstash/logstash/logstash-$fullVersionAlpine.tar.gz.sha1.txt - sha1="$(curl -fsSL "https://download.elastic.co/logstash/logstash/logstash-$fullVersionAlpine.tar.gz.sha1.txt" | grep -o -E -e "[0-9a-f]{40}")" - if [ -z "$fullVersionAlpine" ]; then - echo >&2 "warning: cannot find full version for $version" - continue + if [ -d "$version/alpine" ]; then + tarball="$tarballUrlBase/logstash/logstash-${plainVersion}.tar.gz" + tarballAsc="${tarball}.asc" + if ! wget --quiet --spider "$tarballAsc"; then + tarballAsc= + fi + tarballSha1= + for sha1Url in "${tarball}.sha1" "${tarball}.sha1.txt"; do + if sha1="$(wget -qO- "$sha1Url")"; then + tarballSha1="${sha1%% *}" + break + fi + done + ( + set -x + cp docker-entrypoint.sh "$version/alpine/" + sed -i 's/gosu/su-exec/g' "$version/alpine/docker-entrypoint.sh" + sed \ + -e 's!%%LOGSTASH_VERSION%%!'"$plainVersion"'!g' \ + -e 's!%%LOGSTASH_PATH%%!'"$logstashPath"'!g' \ + -e 's!%%LOGSTASH_TARBALL%%!'"$tarball"'!g' \ + -e 's!%%LOGSTASH_TARBALL_ASC%%!'"$tarballAsc"'!g' \ + -e 's!%%LOGSTASH_TARBALL_SHA1%%!'"$tarballSha1"'!g' \ + Dockerfile-alpine.template > "$version/alpine/Dockerfile" + ) + travisEnv='\n - VERSION='"$version VARIANT=alpine$travisEnv" fi - ( - [ -d "$version/alpine" ] || mkdir "$version/alpine" - set -x - cp docker-entrypoint-alpine.sh "$version/alpine/" - sed ' - s/%%LOGSTASH_MAJOR%%/'"$version"'/g; - s/%%LOGSTASH_VERSION%%/'"$fullVersionAlpine"'/g; - s/%%LOGSTASH_TAR_SHA1%%/'"$sha1"'/g; - ' Dockerfile-alpine.template > "$version/alpine/Dockerfile" - ) + travisEnv='\n - VERSION='"$version VARIANT=$travisEnv" done travis="$(awk -v 'RS=\n\n' '$1 == "env:" { $0 = "env:'"$travisEnv"'" } { printf "%s%s", $0, RS }' .travis.yml)"