From c49af55df42014c066f5fa577ab3306eb379f3d3 Mon Sep 17 00:00:00 2001 From: Tianon Gravi Date: Wed, 12 Aug 2015 12:51:14 -0700 Subject: [PATCH] Modify to support multiple major versions of logstash --- .travis.yml | 25 +++++++++++++++++++++++++ 1.4/Dockerfile | 32 ++++++++++++++++++++++++++++++++ 1.4/docker-entrypoint.sh | 15 +++++++++++++++ Dockerfile => 1.5/Dockerfile | 4 ++-- 1.5/docker-entrypoint.sh | 15 +++++++++++++++ Dockerfile.template | 32 ++++++++++++++++++++++++++++++++ docker-entrypoint.sh | 4 ++-- generate-stackbrew-library.sh | 35 +++++++++++++++++++++++++---------- update.sh | 31 ++++++++++++++++++++++++++----- 9 files changed, 174 insertions(+), 19 deletions(-) create mode 100644 .travis.yml create mode 100644 1.4/Dockerfile create mode 100755 1.4/docker-entrypoint.sh rename Dockerfile => 1.5/Dockerfile (95%) create mode 100755 1.5/docker-entrypoint.sh create mode 100644 Dockerfile.template diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..2bf37a3cc --- /dev/null +++ b/.travis.yml @@ -0,0 +1,25 @@ +language: bash + +# for secret experimental features ;) +sudo: 9000 + +env: + - VERSION=1.5 + - VERSION=1.4 + +install: + - git clone https://github.com/docker-library/official-images.git ~/official-images + +before_script: + - env | sort + - cd "$VERSION" + - image="logstash:$VERSION" + +script: + - docker build -t "$image" . + - ~/official-images/test/run.sh "$image" + +after_script: + - docker images + +# vim:set et ts=2 sw=2: diff --git a/1.4/Dockerfile b/1.4/Dockerfile new file mode 100644 index 000000000..0dbaa00df --- /dev/null +++ b/1.4/Dockerfile @@ -0,0 +1,32 @@ +FROM java:8-jre + +# grab gosu for easy step-down from root +RUN gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 +RUN arch="$(dpkg --print-architecture)" \ + && set -x \ + && curl -o /usr/local/bin/gosu -SL "https://github.com/tianon/gosu/releases/download/1.3/gosu-$arch" \ + && curl -o /usr/local/bin/gosu.asc -SL "https://github.com/tianon/gosu/releases/download/1.3/gosu-$arch.asc" \ + && gpg --verify /usr/local/bin/gosu.asc \ + && rm /usr/local/bin/gosu.asc \ + && chmod +x /usr/local/bin/gosu + +# http://www.logstash.net/docs/1.4.2/repositories +# http://packages.elasticsearch.org/GPG-KEY-elasticsearch +RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys 46095ACC8548582C1A2699A9D27D666CD88E42B4 + +ENV LOGSTASH_MAJOR 1.4 +ENV LOGSTASH_VERSION 1.4.4-1-5608c19 + +RUN echo "deb http://packages.elasticsearch.org/logstash/${LOGSTASH_MAJOR}/debian stable main" > /etc/apt/sources.list.d/logstash.list + +RUN set -x \ + && apt-get update \ + && apt-get install -y --no-install-recommends logstash=$LOGSTASH_VERSION \ + && rm -rf /var/lib/apt/lists/* + +ENV PATH /opt/logstash/bin:$PATH + +COPY docker-entrypoint.sh / + +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["logstash", "agent"] diff --git a/1.4/docker-entrypoint.sh b/1.4/docker-entrypoint.sh new file mode 100755 index 000000000..025932786 --- /dev/null +++ b/1.4/docker-entrypoint.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +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 b/1.5/Dockerfile similarity index 95% rename from Dockerfile rename to 1.5/Dockerfile index 09c7dd0b5..59d487bc8 100644 --- a/Dockerfile +++ b/1.5/Dockerfile @@ -26,7 +26,7 @@ RUN set -x \ ENV PATH /opt/logstash/bin:$PATH -COPY ./docker-entrypoint.sh / +COPY docker-entrypoint.sh / ENTRYPOINT ["/docker-entrypoint.sh"] -CMD ["logstash"] +CMD ["logstash", "agent"] diff --git a/1.5/docker-entrypoint.sh b/1.5/docker-entrypoint.sh new file mode 100755 index 000000000..025932786 --- /dev/null +++ b/1.5/docker-entrypoint.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +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.template b/Dockerfile.template new file mode 100644 index 000000000..08b70c89e --- /dev/null +++ b/Dockerfile.template @@ -0,0 +1,32 @@ +FROM java:8-jre + +# grab gosu for easy step-down from root +RUN gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 +RUN arch="$(dpkg --print-architecture)" \ + && set -x \ + && curl -o /usr/local/bin/gosu -SL "https://github.com/tianon/gosu/releases/download/1.3/gosu-$arch" \ + && curl -o /usr/local/bin/gosu.asc -SL "https://github.com/tianon/gosu/releases/download/1.3/gosu-$arch.asc" \ + && gpg --verify /usr/local/bin/gosu.asc \ + && rm /usr/local/bin/gosu.asc \ + && chmod +x /usr/local/bin/gosu + +# http://www.logstash.net/docs/1.4.2/repositories +# http://packages.elasticsearch.org/GPG-KEY-elasticsearch +RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys 46095ACC8548582C1A2699A9D27D666CD88E42B4 + +ENV LOGSTASH_MAJOR %%LOGSTASH_MAJOR%% +ENV LOGSTASH_VERSION %%LOGSTASH_VERSION%% + +RUN echo "deb http://packages.elasticsearch.org/logstash/${LOGSTASH_MAJOR}/debian stable main" > /etc/apt/sources.list.d/logstash.list + +RUN set -x \ + && apt-get update \ + && apt-get install -y --no-install-recommends logstash=$LOGSTASH_VERSION \ + && rm -rf /var/lib/apt/lists/* + +ENV PATH /opt/logstash/bin:$PATH + +COPY docker-entrypoint.sh / + +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["logstash", "agent"] diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 01333510b..025932786 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -3,12 +3,12 @@ set -e # Add logstash as command if needed -if [[ "$1" == -* ]]; then +if [ "${1:0:1}" = '-' ]; then set -- logstash "$@" fi # Run as user "logstash" if the command is "logstash" -if [ "$1" == logstash ]; then +if [ "$1" = 'logstash' ]; then set -- gosu logstash "$@" fi diff --git a/generate-stackbrew-library.sh b/generate-stackbrew-library.sh index b9398cb4b..6518c10a1 100755 --- a/generate-stackbrew-library.sh +++ b/generate-stackbrew-library.sh @@ -1,18 +1,33 @@ #!/bin/bash set -e +declare -A aliases +aliases=( + [1.5]='1 latest' +) + cd "$(dirname "$(readlink -f "$BASH_SOURCE")")" + +versions=( */ ) +versions=( "${versions[@]%/}" ) url='git://github.com/docker-library/logstash' -commit="$(git log -1 --format='format:%H' -- Dockerfile $(awk 'toupper($1) == "COPY" { for (i = 2; i < NF; i++) { print $i } }' Dockerfile))" -debVersion="$(grep -m1 'ENV LOGSTASH_VERSION' Dockerfile | cut -d' ' -f3)" -fullVersion="${debVersion%%[-]*}" # strip "debian version" -fullVersion="${fullVersion##*:}" # strip epoch -version="${fullVersion%[.]*}" echo '# maintainer: InfoSiftr (@infosiftr)' -echo -#echo "$debVersion: ${url}@${commit}" -echo "$fullVersion: ${url}@${commit}" -echo "$version: ${url}@${commit}" -echo "latest: ${url}@${commit}" +for version in "${versions[@]}"; do + commit="$(cd "$version" && git log -1 --format='format:%H' -- Dockerfile $(awk 'toupper($1) == "COPY" { for (i = 2; i < NF; i++) { print $i } }' Dockerfile))" + fullVersion="$(grep -m1 'ENV LOGSTASH_VERSION' "$version/Dockerfile" | cut -d' ' -f3)" + fullVersion="${fullVersion#*:}" # cut off the Debian epoch + + versionAliases=() + while [ "$fullVersion" != "$version" -a "${fullVersion%[.-]*}" != "$fullVersion" ]; do + versionAliases+=( $fullVersion ) + fullVersion="${fullVersion%[.-]*}" + done + versionAliases+=( $version ${aliases[$version]} ) + + echo + for va in "${versionAliases[@]}"; do + echo "$va: ${url}@${commit} $version" + done +done diff --git a/update.sh b/update.sh index 805f49875..6f216a7e3 100755 --- a/update.sh +++ b/update.sh @@ -3,10 +3,31 @@ set -e cd "$(dirname "$(readlink -f "$BASH_SOURCE")")" -version='1.5' -fullVersion="$(curl -sSL "http://packages.elasticsearch.org/logstash/$version/debian/dists/stable/main/binary-amd64/Packages.gz" | gunzip | awk -F ': +' '$1 == "Package" { pkg = $2 } pkg == "logstash" && $1 == "Version" { print $2 }' | sort -V | tail -1)" +versions=( "$@" ) +if [ ${#versions[@]} -eq 0 ]; then + versions=( */ ) +fi +versions=( "${versions[@]%/}" ) -sed -ri \ - -e 's/^(ENV LOGSTASH_MAJOR) .*/\1 '"$version"'/' \ - -e 's/^(ENV LOGSTASH_VERSION) .*/\1 '"$fullVersion"'/' Dockerfile +travisEnv= +for version in "${versions[@]}"; do + travisEnv='\n - VERSION='"$version$travisEnv" + + fullVersion="$(curl -fsSL "http://packages.elasticsearch.org/logstash/$version/debian/dists/stable/main/binary-amd64/Packages" | awk -F ': ' '$1 == "Package" { pkg = $2 } pkg == "logstash" && $1 == "Version" { print $2 }' | sort -rV | head -n1)" + if [ -z "$fullVersion" ]; then + echo >&2 "warning: cannot find full version for $version" + continue + fi + ( + set -x + cp docker-entrypoint.sh Dockerfile.template "$version/" + mv "$version/Dockerfile.template" "$version/Dockerfile" + sed -i ' + s/%%LOGSTASH_MAJOR%%/'"$version"'/g; + s/%%LOGSTASH_VERSION%%/'"$fullVersion"'/g; + ' "$version/Dockerfile" + ) +done +travis="$(awk -v 'RS=\n\n' '$1 == "env:" { $0 = "env:'"$travisEnv"'" } { printf "%s%s", $0, RS }' .travis.yml)" +echo "$travis" > .travis.yml