diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..78dc3427 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,23 @@ +--- +language: bash + +dist: trusty + +env: + - VERSION=9.2-jre8 + - VERSION=9.3-jre8 + - VERSION=9.4-jre8 + - VERSION=9.4-jre11 + +install: + - git clone https://github.com/docker-library/official-images.git ~/official-images + +before_script: + - env | sort + - wget -qO- 'https://github.com/tianon/pgp-happy-eyeballs/raw/master/hack-my-builds.sh' | bash + - cd "${VERSION}${VARIANT:+/$VARIANT}" + - image="jetty:${VERSION}${VARIANT:+-$VARIANT}" + +script: + - docker build --pull -t "$image" . + - ~/official-images/test/run.sh "$image" diff --git a/9.2-jre8/Dockerfile b/9.2-jre8/Dockerfile new file mode 100644 index 00000000..10cfeb4f --- /dev/null +++ b/9.2-jre8/Dockerfile @@ -0,0 +1,67 @@ +FROM openjdk:8-jre + +ENV JETTY_VERSION 9.2.29.v20191105 +ENV JETTY_HOME /usr/local/jetty +ENV JETTY_BASE /var/lib/jetty +ENV TMPDIR /tmp/jetty +ENV PATH $JETTY_HOME/bin:$PATH +ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/$JETTY_VERSION/jetty-distribution-$JETTY_VERSION.tar.gz + +# GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt) +ENV JETTY_GPG_KEYS \ + # Jan Bartel + AED5EE6C45D0FE8D5D1B164F27DED4BF6216DB8F \ + # Jesse McConnell + 2A684B57436A81FA8706B53C61C3351A438A3B7D \ + # Joakim Erdfelt + 5989BAF76217B843D66BE55B2D0E1FB8FE4B68B4 \ + # Joakim Erdfelt + B59B67FD7904984367F931800818D9D68FB67BAC \ + # Joakim Erdfelt + BFBB21C246D7776836287A48A04E0C74ABB35FEA \ + # Simone Bordet + 8B096546B1A8F02656B15D3B1677D141BCF3584D \ + # Greg Wilkins + FBA2B18D238AB852DF95745C76157BDF03D0DCD6 \ + # Greg Wilkins + 5C9579B3DB2E506429319AAEF33B071B29559E1E + +RUN set -xe \ + && mkdir /jetty-keys \ + && export GNUPGHOME=/jetty-keys; \ + for key in $JETTY_GPG_KEYS; do \ + for server in \ + ha.pool.sks-keyservers.net \ + p80.pool.sks-keyservers.net:80 \ + ipv4.pool.sks-keyservers.net \ + pgp.mit.edu ; \ + do \ + if gpg --batch --keyserver "$server" --recv-keys "$key"; then \ + break; \ + fi; \ + done; \ + done \ + && mkdir -p "$JETTY_HOME" \ + && cd $JETTY_HOME \ + && curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz \ + && curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc \ + && gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz \ + && tar -xvf jetty.tar.gz --strip-components=1 \ + && sed -i '/jetty-logging/d' etc/jetty.conf \ + && rm -fr jetty.tar.gz* \ + && mkdir -p "$JETTY_BASE" \ + && cd $JETTY_BASE \ + && modules="$(grep -- ^--module= "$JETTY_HOME/start.ini" | cut -d= -f2 | paste -d, -s)" \ + && java -jar "$JETTY_HOME/start.jar" --add-to-startd="$modules" \ + && mkdir -p "$TMPDIR" \ + && groupadd -r jetty && useradd -r -g jetty jetty \ + && chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" \ + && rm -rf /tmp/hsperfdata_root + +WORKDIR $JETTY_BASE +COPY docker-entrypoint.sh generate-jetty-start.sh / + +USER jetty +EXPOSE 8080 +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["java","-jar","/usr/local/jetty/start.jar"] diff --git a/9.2-jre8/arches b/9.2-jre8/arches new file mode 100644 index 00000000..21d5bd8c --- /dev/null +++ b/9.2-jre8/arches @@ -0,0 +1 @@ +amd64 diff --git a/9.2-jre8/docker-entrypoint.sh b/9.2-jre8/docker-entrypoint.sh new file mode 100755 index 00000000..41ccbe44 --- /dev/null +++ b/9.2-jre8/docker-entrypoint.sh @@ -0,0 +1,113 @@ +#!/bin/sh + +set -e + +if [ "$1" = jetty.sh ]; then + if ! command -v bash >/dev/null 2>&1 ; then + cat >&2 <<- 'EOWARN' + ******************************************************************** + ERROR: bash not found. Use of jetty.sh requires bash. + ******************************************************************** + EOWARN + exit 1 + fi + cat >&2 <<- 'EOWARN' + ******************************************************************** + WARNING: Use of jetty.sh from this image is deprecated and may + be removed at some point in the future. + + See the documentation for guidance on extending this image: + https://github.com/docker-library/docs/tree/master/jetty + ******************************************************************** + EOWARN +fi + +if ! command -v -- "$1" >/dev/null 2>&1 ; then + set -- java -jar "$JETTY_HOME/start.jar" "$@" +fi + +: ${TMPDIR:=/tmp/jetty} +[ -d "$TMPDIR" ] || mkdir -p $TMPDIR 2>/dev/null + +: ${JETTY_START:=$JETTY_BASE/jetty.start} + +case "$JAVA_OPTIONS" in + *-Djava.io.tmpdir=*) ;; + *) JAVA_OPTIONS="-Djava.io.tmpdir=$TMPDIR $JAVA_OPTIONS" ;; +esac + +if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then + # this is a command to run jetty + + # check if it is a terminating command + for A in "$@" ; do + case $A in + --add-to-start* |\ + --create-files |\ + --create-startd |\ + --download |\ + --dry-run |\ + --exec-print |\ + --help |\ + --info |\ + --list-all-modules |\ + --list-classpath |\ + --list-config |\ + --list-modules* |\ + --stop |\ + --update-ini |\ + --version |\ + -v )\ + # It is a terminating command, so exec directly + JAVA="$1" + shift + exec $JAVA $JAVA_OPTIONS "$@" + esac + done + + if [ $(whoami) != "jetty" ]; then + cat >&2 <<- EOWARN + ******************************************************************** + WARNING: User is $(whoami) + The user should be (re)set to 'jetty' in the Dockerfile + ******************************************************************** + EOWARN + fi + + if [ -f $JETTY_START ] ; then + if [ $JETTY_BASE/start.d -nt $JETTY_START ] ; then + cat >&2 <<- EOWARN + ******************************************************************** + WARNING: The $JETTY_BASE/start.d directory has been modified since + the $JETTY_START files was generated. Either delete + the $JETTY_START file or re-run + /generate-jetty.start.sh + from a Dockerfile + ******************************************************************** + EOWARN + fi + echo $(date +'%Y-%m-%d %H:%M:%S.000'):INFO:docker-entrypoint:jetty start from $JETTY_START + set -- $(cat $JETTY_START) + else + # Do a jetty dry run to set the final command + JAVA="$1" + shift + $JAVA $JAVA_OPTIONS "$@" --dry-run > $JETTY_START + if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then + # command was more than a dry-run + cat $JETTY_START \ + | awk '/\\$/ { printf "%s", substr($0, 1, length($0)-1); next } 1' \ + | egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration ' + exit + fi + set -- $(sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' $JETTY_START) + fi +fi + +if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then + JAVA="$1" + shift + set -- "$JAVA" $JAVA_OPTIONS "$@" +fi + +exec "$@" diff --git a/9.2-jre8/generate-jetty-start.sh b/9.2-jre8/generate-jetty-start.sh new file mode 100755 index 00000000..5895278f --- /dev/null +++ b/9.2-jre8/generate-jetty-start.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +if [ -z "$JETTY_START" ] ; then + JETTY_START=$JETTY_BASE/jetty.start +fi +rm -f $JETTY_START +/docker-entrypoint.sh --dry-run | sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' > $JETTY_START diff --git a/9.3-jre8/Dockerfile b/9.3-jre8/Dockerfile new file mode 100644 index 00000000..1ff04d48 --- /dev/null +++ b/9.3-jre8/Dockerfile @@ -0,0 +1,67 @@ +FROM openjdk:8-jre + +ENV JETTY_VERSION 9.3.28.v20191105 +ENV JETTY_HOME /usr/local/jetty +ENV JETTY_BASE /var/lib/jetty +ENV TMPDIR /tmp/jetty +ENV PATH $JETTY_HOME/bin:$PATH +ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/$JETTY_VERSION/jetty-distribution-$JETTY_VERSION.tar.gz + +# GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt) +ENV JETTY_GPG_KEYS \ + # Jan Bartel + AED5EE6C45D0FE8D5D1B164F27DED4BF6216DB8F \ + # Jesse McConnell + 2A684B57436A81FA8706B53C61C3351A438A3B7D \ + # Joakim Erdfelt + 5989BAF76217B843D66BE55B2D0E1FB8FE4B68B4 \ + # Joakim Erdfelt + B59B67FD7904984367F931800818D9D68FB67BAC \ + # Joakim Erdfelt + BFBB21C246D7776836287A48A04E0C74ABB35FEA \ + # Simone Bordet + 8B096546B1A8F02656B15D3B1677D141BCF3584D \ + # Greg Wilkins + FBA2B18D238AB852DF95745C76157BDF03D0DCD6 \ + # Greg Wilkins + 5C9579B3DB2E506429319AAEF33B071B29559E1E + +RUN set -xe \ + && mkdir /jetty-keys \ + && export GNUPGHOME=/jetty-keys; \ + for key in $JETTY_GPG_KEYS; do \ + for server in \ + ha.pool.sks-keyservers.net \ + p80.pool.sks-keyservers.net:80 \ + ipv4.pool.sks-keyservers.net \ + pgp.mit.edu ; \ + do \ + if gpg --batch --keyserver "$server" --recv-keys "$key"; then \ + break; \ + fi; \ + done; \ + done \ + && mkdir -p "$JETTY_HOME" \ + && cd $JETTY_HOME \ + && curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz \ + && curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc \ + && gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz \ + && tar -xvf jetty.tar.gz --strip-components=1 \ + && sed -i '/jetty-logging/d' etc/jetty.conf \ + && rm -fr jetty.tar.gz* \ + && mkdir -p "$JETTY_BASE" \ + && cd $JETTY_BASE \ + && modules="$(grep -- ^--module= "$JETTY_HOME/start.ini" | cut -d= -f2 | paste -d, -s)" \ + && java -jar "$JETTY_HOME/start.jar" --add-to-startd="$modules" \ + && mkdir -p "$TMPDIR" \ + && groupadd -r jetty && useradd -r -g jetty jetty \ + && chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" \ + && rm -rf /tmp/hsperfdata_root + +WORKDIR $JETTY_BASE +COPY docker-entrypoint.sh generate-jetty-start.sh / + +USER jetty +EXPOSE 8080 +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["java","-jar","/usr/local/jetty/start.jar"] diff --git a/9.3-jre8/arches b/9.3-jre8/arches new file mode 100644 index 00000000..21d5bd8c --- /dev/null +++ b/9.3-jre8/arches @@ -0,0 +1 @@ +amd64 diff --git a/9.3-jre8/docker-entrypoint.sh b/9.3-jre8/docker-entrypoint.sh new file mode 100755 index 00000000..41ccbe44 --- /dev/null +++ b/9.3-jre8/docker-entrypoint.sh @@ -0,0 +1,113 @@ +#!/bin/sh + +set -e + +if [ "$1" = jetty.sh ]; then + if ! command -v bash >/dev/null 2>&1 ; then + cat >&2 <<- 'EOWARN' + ******************************************************************** + ERROR: bash not found. Use of jetty.sh requires bash. + ******************************************************************** + EOWARN + exit 1 + fi + cat >&2 <<- 'EOWARN' + ******************************************************************** + WARNING: Use of jetty.sh from this image is deprecated and may + be removed at some point in the future. + + See the documentation for guidance on extending this image: + https://github.com/docker-library/docs/tree/master/jetty + ******************************************************************** + EOWARN +fi + +if ! command -v -- "$1" >/dev/null 2>&1 ; then + set -- java -jar "$JETTY_HOME/start.jar" "$@" +fi + +: ${TMPDIR:=/tmp/jetty} +[ -d "$TMPDIR" ] || mkdir -p $TMPDIR 2>/dev/null + +: ${JETTY_START:=$JETTY_BASE/jetty.start} + +case "$JAVA_OPTIONS" in + *-Djava.io.tmpdir=*) ;; + *) JAVA_OPTIONS="-Djava.io.tmpdir=$TMPDIR $JAVA_OPTIONS" ;; +esac + +if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then + # this is a command to run jetty + + # check if it is a terminating command + for A in "$@" ; do + case $A in + --add-to-start* |\ + --create-files |\ + --create-startd |\ + --download |\ + --dry-run |\ + --exec-print |\ + --help |\ + --info |\ + --list-all-modules |\ + --list-classpath |\ + --list-config |\ + --list-modules* |\ + --stop |\ + --update-ini |\ + --version |\ + -v )\ + # It is a terminating command, so exec directly + JAVA="$1" + shift + exec $JAVA $JAVA_OPTIONS "$@" + esac + done + + if [ $(whoami) != "jetty" ]; then + cat >&2 <<- EOWARN + ******************************************************************** + WARNING: User is $(whoami) + The user should be (re)set to 'jetty' in the Dockerfile + ******************************************************************** + EOWARN + fi + + if [ -f $JETTY_START ] ; then + if [ $JETTY_BASE/start.d -nt $JETTY_START ] ; then + cat >&2 <<- EOWARN + ******************************************************************** + WARNING: The $JETTY_BASE/start.d directory has been modified since + the $JETTY_START files was generated. Either delete + the $JETTY_START file or re-run + /generate-jetty.start.sh + from a Dockerfile + ******************************************************************** + EOWARN + fi + echo $(date +'%Y-%m-%d %H:%M:%S.000'):INFO:docker-entrypoint:jetty start from $JETTY_START + set -- $(cat $JETTY_START) + else + # Do a jetty dry run to set the final command + JAVA="$1" + shift + $JAVA $JAVA_OPTIONS "$@" --dry-run > $JETTY_START + if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then + # command was more than a dry-run + cat $JETTY_START \ + | awk '/\\$/ { printf "%s", substr($0, 1, length($0)-1); next } 1' \ + | egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration ' + exit + fi + set -- $(sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' $JETTY_START) + fi +fi + +if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then + JAVA="$1" + shift + set -- "$JAVA" $JAVA_OPTIONS "$@" +fi + +exec "$@" diff --git a/9.3-jre8/generate-jetty-start.sh b/9.3-jre8/generate-jetty-start.sh new file mode 100755 index 00000000..5895278f --- /dev/null +++ b/9.3-jre8/generate-jetty-start.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +if [ -z "$JETTY_START" ] ; then + JETTY_START=$JETTY_BASE/jetty.start +fi +rm -f $JETTY_START +/docker-entrypoint.sh --dry-run | sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' > $JETTY_START diff --git a/9.4-jdk13-slim/Dockerfile b/9.4-jdk13-slim/Dockerfile new file mode 100644 index 00000000..66e8be8b --- /dev/null +++ b/9.4-jdk13-slim/Dockerfile @@ -0,0 +1,102 @@ +# DO NOT EDIT. Edit Dockerfile-9.4 and use update.sh +FROM openjdk:13-jdk-slim + +ENV JETTY_VERSION 9.4.27.v20200227 +ENV JETTY_HOME /usr/local/jetty +ENV JETTY_BASE /var/lib/jetty +ENV TMPDIR /tmp/jetty +ENV PATH $JETTY_HOME/bin:$PATH +ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/$JETTY_VERSION/jetty-home-$JETTY_VERSION.tar.gz + +# GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt) +ENV JETTY_GPG_KEYS \ + # Jan Bartel + AED5EE6C45D0FE8D5D1B164F27DED4BF6216DB8F \ + # Jesse McConnell + 2A684B57436A81FA8706B53C61C3351A438A3B7D \ + # Joakim Erdfelt + 5989BAF76217B843D66BE55B2D0E1FB8FE4B68B4 \ + # Joakim Erdfelt + B59B67FD7904984367F931800818D9D68FB67BAC \ + # Joakim Erdfelt + BFBB21C246D7776836287A48A04E0C74ABB35FEA \ + # Simone Bordet + 8B096546B1A8F02656B15D3B1677D141BCF3584D \ + # Greg Wilkins + FBA2B18D238AB852DF95745C76157BDF03D0DCD6 \ + # Greg Wilkins + 5C9579B3DB2E506429319AAEF33B071B29559E1E + +RUN set -xe ; \ + # Save initial installatin state + export savedAptMark="$(apt-mark showmanual)" ; \ + # + # Install utils needed to verify keys + apt-get update ; \ + apt-get install -y --no-install-recommends \ + ca-certificates p11-kit \ + gnupg \ + curl \ + ; \ + # + # fetch GPG keys + export GNUPGHOME=/jetty-keys ; \ + mkdir -p "$GNUPGHOME" ; \ + for key in $JETTY_GPG_KEYS; do \ + for server in \ + ha.pool.sks-keyservers.net \ + p80.pool.sks-keyservers.net:80 \ + ipv4.pool.sks-keyservers.net \ + pgp.mit.edu ; \ + do \ + if gpg --batch --keyserver "$server" --recv-keys "$key"; then \ + break; \ + fi; \ + done; \ + done ; \ + # + # Fetch jetty release into JETTY_HOME + mkdir -p "$JETTY_HOME" ; \ + cd $JETTY_HOME ; \ + curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz ; \ + curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc ; \ + # + # Verify GPG signatures + gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz ; \ + # + # Unpack jetty + tar -xvf jetty.tar.gz --strip-components=1 ; \ + sed -i '/jetty-logging/d' etc/jetty.conf ; \ + # + # Create and configure the JETTY_HOME directory + mkdir -p "$JETTY_BASE" ; \ + cd $JETTY_BASE ; \ + java -jar "$JETTY_HOME/start.jar" --create-startd \ + --add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" ; \ + mkdir -p "$TMPDIR" ; \ + groupadd -r jetty && useradd -r -g jetty jetty ; \ + chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" ; \ + # + # Cleanup any apt + apt-mark auto '.*' > /dev/null ; \ + [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark > /dev/null ; \ + apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false ; \ + rm -rf /var/lib/apt/lists/* ; \ + # + # Cleanup + rm -rf /tmp/hsperfdata_root ; \ + rm -fr $JETTY_HOME/jetty.tar.gz* ; \ + rm -fr /jetty-keys $GNUPGHOME ; \ + rm -rf /tmp/hsperfdata_root ; \ + # + # Basic smoke test + java -jar "$JETTY_HOME/start.jar" --list-config ; + +WORKDIR $JETTY_BASE +COPY docker-entrypoint.sh generate-jetty-start.sh / + +USER jetty +EXPOSE 8080 +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["java","-jar","/usr/local/jetty/start.jar"] + diff --git a/9.4-jdk13-slim/arches b/9.4-jdk13-slim/arches new file mode 100644 index 00000000..21d5bd8c --- /dev/null +++ b/9.4-jdk13-slim/arches @@ -0,0 +1 @@ +amd64 diff --git a/9.4-jdk13-slim/docker-entrypoint.sh b/9.4-jdk13-slim/docker-entrypoint.sh new file mode 100755 index 00000000..41ccbe44 --- /dev/null +++ b/9.4-jdk13-slim/docker-entrypoint.sh @@ -0,0 +1,113 @@ +#!/bin/sh + +set -e + +if [ "$1" = jetty.sh ]; then + if ! command -v bash >/dev/null 2>&1 ; then + cat >&2 <<- 'EOWARN' + ******************************************************************** + ERROR: bash not found. Use of jetty.sh requires bash. + ******************************************************************** + EOWARN + exit 1 + fi + cat >&2 <<- 'EOWARN' + ******************************************************************** + WARNING: Use of jetty.sh from this image is deprecated and may + be removed at some point in the future. + + See the documentation for guidance on extending this image: + https://github.com/docker-library/docs/tree/master/jetty + ******************************************************************** + EOWARN +fi + +if ! command -v -- "$1" >/dev/null 2>&1 ; then + set -- java -jar "$JETTY_HOME/start.jar" "$@" +fi + +: ${TMPDIR:=/tmp/jetty} +[ -d "$TMPDIR" ] || mkdir -p $TMPDIR 2>/dev/null + +: ${JETTY_START:=$JETTY_BASE/jetty.start} + +case "$JAVA_OPTIONS" in + *-Djava.io.tmpdir=*) ;; + *) JAVA_OPTIONS="-Djava.io.tmpdir=$TMPDIR $JAVA_OPTIONS" ;; +esac + +if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then + # this is a command to run jetty + + # check if it is a terminating command + for A in "$@" ; do + case $A in + --add-to-start* |\ + --create-files |\ + --create-startd |\ + --download |\ + --dry-run |\ + --exec-print |\ + --help |\ + --info |\ + --list-all-modules |\ + --list-classpath |\ + --list-config |\ + --list-modules* |\ + --stop |\ + --update-ini |\ + --version |\ + -v )\ + # It is a terminating command, so exec directly + JAVA="$1" + shift + exec $JAVA $JAVA_OPTIONS "$@" + esac + done + + if [ $(whoami) != "jetty" ]; then + cat >&2 <<- EOWARN + ******************************************************************** + WARNING: User is $(whoami) + The user should be (re)set to 'jetty' in the Dockerfile + ******************************************************************** + EOWARN + fi + + if [ -f $JETTY_START ] ; then + if [ $JETTY_BASE/start.d -nt $JETTY_START ] ; then + cat >&2 <<- EOWARN + ******************************************************************** + WARNING: The $JETTY_BASE/start.d directory has been modified since + the $JETTY_START files was generated. Either delete + the $JETTY_START file or re-run + /generate-jetty.start.sh + from a Dockerfile + ******************************************************************** + EOWARN + fi + echo $(date +'%Y-%m-%d %H:%M:%S.000'):INFO:docker-entrypoint:jetty start from $JETTY_START + set -- $(cat $JETTY_START) + else + # Do a jetty dry run to set the final command + JAVA="$1" + shift + $JAVA $JAVA_OPTIONS "$@" --dry-run > $JETTY_START + if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then + # command was more than a dry-run + cat $JETTY_START \ + | awk '/\\$/ { printf "%s", substr($0, 1, length($0)-1); next } 1' \ + | egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration ' + exit + fi + set -- $(sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' $JETTY_START) + fi +fi + +if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then + JAVA="$1" + shift + set -- "$JAVA" $JAVA_OPTIONS "$@" +fi + +exec "$@" diff --git a/9.4-jdk13-slim/generate-jetty-start.sh b/9.4-jdk13-slim/generate-jetty-start.sh new file mode 100755 index 00000000..5895278f --- /dev/null +++ b/9.4-jdk13-slim/generate-jetty-start.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +if [ -z "$JETTY_START" ] ; then + JETTY_START=$JETTY_BASE/jetty.start +fi +rm -f $JETTY_START +/docker-entrypoint.sh --dry-run | sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' > $JETTY_START diff --git a/9.4-jdk13/Dockerfile b/9.4-jdk13/Dockerfile new file mode 100644 index 00000000..5cd089e3 --- /dev/null +++ b/9.4-jdk13/Dockerfile @@ -0,0 +1,85 @@ +# DO NOT EDIT. Edit Dockerfile-9.4 and use update.sh +FROM openjdk:13-jdk + +ENV JETTY_VERSION 9.4.27.v20200227 +ENV JETTY_HOME /usr/local/jetty +ENV JETTY_BASE /var/lib/jetty +ENV TMPDIR /tmp/jetty +ENV PATH $JETTY_HOME/bin:$PATH +ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/$JETTY_VERSION/jetty-home-$JETTY_VERSION.tar.gz + +# GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt) +ENV JETTY_GPG_KEYS \ + # Jan Bartel + AED5EE6C45D0FE8D5D1B164F27DED4BF6216DB8F \ + # Jesse McConnell + 2A684B57436A81FA8706B53C61C3351A438A3B7D \ + # Joakim Erdfelt + 5989BAF76217B843D66BE55B2D0E1FB8FE4B68B4 \ + # Joakim Erdfelt + B59B67FD7904984367F931800818D9D68FB67BAC \ + # Joakim Erdfelt + BFBB21C246D7776836287A48A04E0C74ABB35FEA \ + # Simone Bordet + 8B096546B1A8F02656B15D3B1677D141BCF3584D \ + # Greg Wilkins + FBA2B18D238AB852DF95745C76157BDF03D0DCD6 \ + # Greg Wilkins + 5C9579B3DB2E506429319AAEF33B071B29559E1E + +RUN set -xe ; \ + # fetch GPG keys + export GNUPGHOME=/jetty-keys ; \ + mkdir -p "$GNUPGHOME" ; \ + for key in $JETTY_GPG_KEYS; do \ + for server in \ + ha.pool.sks-keyservers.net \ + p80.pool.sks-keyservers.net:80 \ + ipv4.pool.sks-keyservers.net \ + pgp.mit.edu ; \ + do \ + if gpg --batch --keyserver "$server" --recv-keys "$key"; then \ + break; \ + fi; \ + done; \ + done ; \ + # + # Fetch jetty release into JETTY_HOME + mkdir -p "$JETTY_HOME" ; \ + cd $JETTY_HOME ; \ + curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz ; \ + curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc ; \ + # + # Verify GPG signatures + gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz ; \ + # + # Unpack jetty + tar -xvf jetty.tar.gz --strip-components=1 ; \ + sed -i '/jetty-logging/d' etc/jetty.conf ; \ + # + # Create and configure the JETTY_HOME directory + mkdir -p "$JETTY_BASE" ; \ + cd $JETTY_BASE ; \ + java -jar "$JETTY_HOME/start.jar" --create-startd \ + --add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" ; \ + mkdir -p "$TMPDIR" ; \ + groupadd -r jetty && useradd -r -g jetty jetty ; \ + chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" ; \ + # + # Cleanup + rm -rf /tmp/hsperfdata_root ; \ + rm -fr $JETTY_HOME/jetty.tar.gz* ; \ + rm -fr /jetty-keys $GNUPGHOME ; \ + rm -rf /tmp/hsperfdata_root ; \ + # + # Basic smoke test + java -jar "$JETTY_HOME/start.jar" --list-config ; + +WORKDIR $JETTY_BASE +COPY docker-entrypoint.sh generate-jetty-start.sh / + +USER jetty +EXPOSE 8080 +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["java","-jar","/usr/local/jetty/start.jar"] + diff --git a/9.4-jdk13/arches b/9.4-jdk13/arches new file mode 100644 index 00000000..21d5bd8c --- /dev/null +++ b/9.4-jdk13/arches @@ -0,0 +1 @@ +amd64 diff --git a/9.4-jdk13/docker-entrypoint.sh b/9.4-jdk13/docker-entrypoint.sh new file mode 100755 index 00000000..41ccbe44 --- /dev/null +++ b/9.4-jdk13/docker-entrypoint.sh @@ -0,0 +1,113 @@ +#!/bin/sh + +set -e + +if [ "$1" = jetty.sh ]; then + if ! command -v bash >/dev/null 2>&1 ; then + cat >&2 <<- 'EOWARN' + ******************************************************************** + ERROR: bash not found. Use of jetty.sh requires bash. + ******************************************************************** + EOWARN + exit 1 + fi + cat >&2 <<- 'EOWARN' + ******************************************************************** + WARNING: Use of jetty.sh from this image is deprecated and may + be removed at some point in the future. + + See the documentation for guidance on extending this image: + https://github.com/docker-library/docs/tree/master/jetty + ******************************************************************** + EOWARN +fi + +if ! command -v -- "$1" >/dev/null 2>&1 ; then + set -- java -jar "$JETTY_HOME/start.jar" "$@" +fi + +: ${TMPDIR:=/tmp/jetty} +[ -d "$TMPDIR" ] || mkdir -p $TMPDIR 2>/dev/null + +: ${JETTY_START:=$JETTY_BASE/jetty.start} + +case "$JAVA_OPTIONS" in + *-Djava.io.tmpdir=*) ;; + *) JAVA_OPTIONS="-Djava.io.tmpdir=$TMPDIR $JAVA_OPTIONS" ;; +esac + +if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then + # this is a command to run jetty + + # check if it is a terminating command + for A in "$@" ; do + case $A in + --add-to-start* |\ + --create-files |\ + --create-startd |\ + --download |\ + --dry-run |\ + --exec-print |\ + --help |\ + --info |\ + --list-all-modules |\ + --list-classpath |\ + --list-config |\ + --list-modules* |\ + --stop |\ + --update-ini |\ + --version |\ + -v )\ + # It is a terminating command, so exec directly + JAVA="$1" + shift + exec $JAVA $JAVA_OPTIONS "$@" + esac + done + + if [ $(whoami) != "jetty" ]; then + cat >&2 <<- EOWARN + ******************************************************************** + WARNING: User is $(whoami) + The user should be (re)set to 'jetty' in the Dockerfile + ******************************************************************** + EOWARN + fi + + if [ -f $JETTY_START ] ; then + if [ $JETTY_BASE/start.d -nt $JETTY_START ] ; then + cat >&2 <<- EOWARN + ******************************************************************** + WARNING: The $JETTY_BASE/start.d directory has been modified since + the $JETTY_START files was generated. Either delete + the $JETTY_START file or re-run + /generate-jetty.start.sh + from a Dockerfile + ******************************************************************** + EOWARN + fi + echo $(date +'%Y-%m-%d %H:%M:%S.000'):INFO:docker-entrypoint:jetty start from $JETTY_START + set -- $(cat $JETTY_START) + else + # Do a jetty dry run to set the final command + JAVA="$1" + shift + $JAVA $JAVA_OPTIONS "$@" --dry-run > $JETTY_START + if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then + # command was more than a dry-run + cat $JETTY_START \ + | awk '/\\$/ { printf "%s", substr($0, 1, length($0)-1); next } 1' \ + | egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration ' + exit + fi + set -- $(sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' $JETTY_START) + fi +fi + +if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then + JAVA="$1" + shift + set -- "$JAVA" $JAVA_OPTIONS "$@" +fi + +exec "$@" diff --git a/9.4-jdk13/generate-jetty-start.sh b/9.4-jdk13/generate-jetty-start.sh new file mode 100755 index 00000000..5895278f --- /dev/null +++ b/9.4-jdk13/generate-jetty-start.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +if [ -z "$JETTY_START" ] ; then + JETTY_START=$JETTY_BASE/jetty.start +fi +rm -f $JETTY_START +/docker-entrypoint.sh --dry-run | sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' > $JETTY_START diff --git a/9.4-jre11-slim/Dockerfile b/9.4-jre11-slim/Dockerfile new file mode 100644 index 00000000..b767ee6c --- /dev/null +++ b/9.4-jre11-slim/Dockerfile @@ -0,0 +1,102 @@ +# DO NOT EDIT. Edit Dockerfile-9.4 and use update.sh +FROM openjdk:11-jre-slim + +ENV JETTY_VERSION 9.4.27.v20200227 +ENV JETTY_HOME /usr/local/jetty +ENV JETTY_BASE /var/lib/jetty +ENV TMPDIR /tmp/jetty +ENV PATH $JETTY_HOME/bin:$PATH +ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/$JETTY_VERSION/jetty-home-$JETTY_VERSION.tar.gz + +# GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt) +ENV JETTY_GPG_KEYS \ + # Jan Bartel + AED5EE6C45D0FE8D5D1B164F27DED4BF6216DB8F \ + # Jesse McConnell + 2A684B57436A81FA8706B53C61C3351A438A3B7D \ + # Joakim Erdfelt + 5989BAF76217B843D66BE55B2D0E1FB8FE4B68B4 \ + # Joakim Erdfelt + B59B67FD7904984367F931800818D9D68FB67BAC \ + # Joakim Erdfelt + BFBB21C246D7776836287A48A04E0C74ABB35FEA \ + # Simone Bordet + 8B096546B1A8F02656B15D3B1677D141BCF3584D \ + # Greg Wilkins + FBA2B18D238AB852DF95745C76157BDF03D0DCD6 \ + # Greg Wilkins + 5C9579B3DB2E506429319AAEF33B071B29559E1E + +RUN set -xe ; \ + # Save initial installatin state + export savedAptMark="$(apt-mark showmanual)" ; \ + # + # Install utils needed to verify keys + apt-get update ; \ + apt-get install -y --no-install-recommends \ + ca-certificates p11-kit \ + gnupg \ + curl \ + ; \ + # + # fetch GPG keys + export GNUPGHOME=/jetty-keys ; \ + mkdir -p "$GNUPGHOME" ; \ + for key in $JETTY_GPG_KEYS; do \ + for server in \ + ha.pool.sks-keyservers.net \ + p80.pool.sks-keyservers.net:80 \ + ipv4.pool.sks-keyservers.net \ + pgp.mit.edu ; \ + do \ + if gpg --batch --keyserver "$server" --recv-keys "$key"; then \ + break; \ + fi; \ + done; \ + done ; \ + # + # Fetch jetty release into JETTY_HOME + mkdir -p "$JETTY_HOME" ; \ + cd $JETTY_HOME ; \ + curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz ; \ + curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc ; \ + # + # Verify GPG signatures + gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz ; \ + # + # Unpack jetty + tar -xvf jetty.tar.gz --strip-components=1 ; \ + sed -i '/jetty-logging/d' etc/jetty.conf ; \ + # + # Create and configure the JETTY_HOME directory + mkdir -p "$JETTY_BASE" ; \ + cd $JETTY_BASE ; \ + java -jar "$JETTY_HOME/start.jar" --create-startd \ + --add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" ; \ + mkdir -p "$TMPDIR" ; \ + groupadd -r jetty && useradd -r -g jetty jetty ; \ + chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" ; \ + # + # Cleanup any apt + apt-mark auto '.*' > /dev/null ; \ + [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark > /dev/null ; \ + apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false ; \ + rm -rf /var/lib/apt/lists/* ; \ + # + # Cleanup + rm -rf /tmp/hsperfdata_root ; \ + rm -fr $JETTY_HOME/jetty.tar.gz* ; \ + rm -fr /jetty-keys $GNUPGHOME ; \ + rm -rf /tmp/hsperfdata_root ; \ + # + # Basic smoke test + java -jar "$JETTY_HOME/start.jar" --list-config ; + +WORKDIR $JETTY_BASE +COPY docker-entrypoint.sh generate-jetty-start.sh / + +USER jetty +EXPOSE 8080 +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["java","-jar","/usr/local/jetty/start.jar"] + diff --git a/9.4-jre11-slim/arches b/9.4-jre11-slim/arches new file mode 100644 index 00000000..e7b206a7 --- /dev/null +++ b/9.4-jre11-slim/arches @@ -0,0 +1 @@ +amd64, arm64v8 diff --git a/9.4-jre11-slim/docker-entrypoint.sh b/9.4-jre11-slim/docker-entrypoint.sh new file mode 100755 index 00000000..41ccbe44 --- /dev/null +++ b/9.4-jre11-slim/docker-entrypoint.sh @@ -0,0 +1,113 @@ +#!/bin/sh + +set -e + +if [ "$1" = jetty.sh ]; then + if ! command -v bash >/dev/null 2>&1 ; then + cat >&2 <<- 'EOWARN' + ******************************************************************** + ERROR: bash not found. Use of jetty.sh requires bash. + ******************************************************************** + EOWARN + exit 1 + fi + cat >&2 <<- 'EOWARN' + ******************************************************************** + WARNING: Use of jetty.sh from this image is deprecated and may + be removed at some point in the future. + + See the documentation for guidance on extending this image: + https://github.com/docker-library/docs/tree/master/jetty + ******************************************************************** + EOWARN +fi + +if ! command -v -- "$1" >/dev/null 2>&1 ; then + set -- java -jar "$JETTY_HOME/start.jar" "$@" +fi + +: ${TMPDIR:=/tmp/jetty} +[ -d "$TMPDIR" ] || mkdir -p $TMPDIR 2>/dev/null + +: ${JETTY_START:=$JETTY_BASE/jetty.start} + +case "$JAVA_OPTIONS" in + *-Djava.io.tmpdir=*) ;; + *) JAVA_OPTIONS="-Djava.io.tmpdir=$TMPDIR $JAVA_OPTIONS" ;; +esac + +if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then + # this is a command to run jetty + + # check if it is a terminating command + for A in "$@" ; do + case $A in + --add-to-start* |\ + --create-files |\ + --create-startd |\ + --download |\ + --dry-run |\ + --exec-print |\ + --help |\ + --info |\ + --list-all-modules |\ + --list-classpath |\ + --list-config |\ + --list-modules* |\ + --stop |\ + --update-ini |\ + --version |\ + -v )\ + # It is a terminating command, so exec directly + JAVA="$1" + shift + exec $JAVA $JAVA_OPTIONS "$@" + esac + done + + if [ $(whoami) != "jetty" ]; then + cat >&2 <<- EOWARN + ******************************************************************** + WARNING: User is $(whoami) + The user should be (re)set to 'jetty' in the Dockerfile + ******************************************************************** + EOWARN + fi + + if [ -f $JETTY_START ] ; then + if [ $JETTY_BASE/start.d -nt $JETTY_START ] ; then + cat >&2 <<- EOWARN + ******************************************************************** + WARNING: The $JETTY_BASE/start.d directory has been modified since + the $JETTY_START files was generated. Either delete + the $JETTY_START file or re-run + /generate-jetty.start.sh + from a Dockerfile + ******************************************************************** + EOWARN + fi + echo $(date +'%Y-%m-%d %H:%M:%S.000'):INFO:docker-entrypoint:jetty start from $JETTY_START + set -- $(cat $JETTY_START) + else + # Do a jetty dry run to set the final command + JAVA="$1" + shift + $JAVA $JAVA_OPTIONS "$@" --dry-run > $JETTY_START + if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then + # command was more than a dry-run + cat $JETTY_START \ + | awk '/\\$/ { printf "%s", substr($0, 1, length($0)-1); next } 1' \ + | egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration ' + exit + fi + set -- $(sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' $JETTY_START) + fi +fi + +if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then + JAVA="$1" + shift + set -- "$JAVA" $JAVA_OPTIONS "$@" +fi + +exec "$@" diff --git a/9.4-jre11-slim/generate-jetty-start.sh b/9.4-jre11-slim/generate-jetty-start.sh new file mode 100755 index 00000000..5895278f --- /dev/null +++ b/9.4-jre11-slim/generate-jetty-start.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +if [ -z "$JETTY_START" ] ; then + JETTY_START=$JETTY_BASE/jetty.start +fi +rm -f $JETTY_START +/docker-entrypoint.sh --dry-run | sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' > $JETTY_START diff --git a/9.4-jre11/Dockerfile b/9.4-jre11/Dockerfile new file mode 100644 index 00000000..82f6bdea --- /dev/null +++ b/9.4-jre11/Dockerfile @@ -0,0 +1,85 @@ +# DO NOT EDIT. Edit Dockerfile-9.4 and use update.sh +FROM openjdk:11-jre + +ENV JETTY_VERSION 9.4.27.v20200227 +ENV JETTY_HOME /usr/local/jetty +ENV JETTY_BASE /var/lib/jetty +ENV TMPDIR /tmp/jetty +ENV PATH $JETTY_HOME/bin:$PATH +ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/$JETTY_VERSION/jetty-home-$JETTY_VERSION.tar.gz + +# GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt) +ENV JETTY_GPG_KEYS \ + # Jan Bartel + AED5EE6C45D0FE8D5D1B164F27DED4BF6216DB8F \ + # Jesse McConnell + 2A684B57436A81FA8706B53C61C3351A438A3B7D \ + # Joakim Erdfelt + 5989BAF76217B843D66BE55B2D0E1FB8FE4B68B4 \ + # Joakim Erdfelt + B59B67FD7904984367F931800818D9D68FB67BAC \ + # Joakim Erdfelt + BFBB21C246D7776836287A48A04E0C74ABB35FEA \ + # Simone Bordet + 8B096546B1A8F02656B15D3B1677D141BCF3584D \ + # Greg Wilkins + FBA2B18D238AB852DF95745C76157BDF03D0DCD6 \ + # Greg Wilkins + 5C9579B3DB2E506429319AAEF33B071B29559E1E + +RUN set -xe ; \ + # fetch GPG keys + export GNUPGHOME=/jetty-keys ; \ + mkdir -p "$GNUPGHOME" ; \ + for key in $JETTY_GPG_KEYS; do \ + for server in \ + ha.pool.sks-keyservers.net \ + p80.pool.sks-keyservers.net:80 \ + ipv4.pool.sks-keyservers.net \ + pgp.mit.edu ; \ + do \ + if gpg --batch --keyserver "$server" --recv-keys "$key"; then \ + break; \ + fi; \ + done; \ + done ; \ + # + # Fetch jetty release into JETTY_HOME + mkdir -p "$JETTY_HOME" ; \ + cd $JETTY_HOME ; \ + curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz ; \ + curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc ; \ + # + # Verify GPG signatures + gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz ; \ + # + # Unpack jetty + tar -xvf jetty.tar.gz --strip-components=1 ; \ + sed -i '/jetty-logging/d' etc/jetty.conf ; \ + # + # Create and configure the JETTY_HOME directory + mkdir -p "$JETTY_BASE" ; \ + cd $JETTY_BASE ; \ + java -jar "$JETTY_HOME/start.jar" --create-startd \ + --add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" ; \ + mkdir -p "$TMPDIR" ; \ + groupadd -r jetty && useradd -r -g jetty jetty ; \ + chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" ; \ + # + # Cleanup + rm -rf /tmp/hsperfdata_root ; \ + rm -fr $JETTY_HOME/jetty.tar.gz* ; \ + rm -fr /jetty-keys $GNUPGHOME ; \ + rm -rf /tmp/hsperfdata_root ; \ + # + # Basic smoke test + java -jar "$JETTY_HOME/start.jar" --list-config ; + +WORKDIR $JETTY_BASE +COPY docker-entrypoint.sh generate-jetty-start.sh / + +USER jetty +EXPOSE 8080 +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["java","-jar","/usr/local/jetty/start.jar"] + diff --git a/9.4-jre11/arches b/9.4-jre11/arches new file mode 100644 index 00000000..e7b206a7 --- /dev/null +++ b/9.4-jre11/arches @@ -0,0 +1 @@ +amd64, arm64v8 diff --git a/9.4-jre11/docker-entrypoint.sh b/9.4-jre11/docker-entrypoint.sh new file mode 100755 index 00000000..41ccbe44 --- /dev/null +++ b/9.4-jre11/docker-entrypoint.sh @@ -0,0 +1,113 @@ +#!/bin/sh + +set -e + +if [ "$1" = jetty.sh ]; then + if ! command -v bash >/dev/null 2>&1 ; then + cat >&2 <<- 'EOWARN' + ******************************************************************** + ERROR: bash not found. Use of jetty.sh requires bash. + ******************************************************************** + EOWARN + exit 1 + fi + cat >&2 <<- 'EOWARN' + ******************************************************************** + WARNING: Use of jetty.sh from this image is deprecated and may + be removed at some point in the future. + + See the documentation for guidance on extending this image: + https://github.com/docker-library/docs/tree/master/jetty + ******************************************************************** + EOWARN +fi + +if ! command -v -- "$1" >/dev/null 2>&1 ; then + set -- java -jar "$JETTY_HOME/start.jar" "$@" +fi + +: ${TMPDIR:=/tmp/jetty} +[ -d "$TMPDIR" ] || mkdir -p $TMPDIR 2>/dev/null + +: ${JETTY_START:=$JETTY_BASE/jetty.start} + +case "$JAVA_OPTIONS" in + *-Djava.io.tmpdir=*) ;; + *) JAVA_OPTIONS="-Djava.io.tmpdir=$TMPDIR $JAVA_OPTIONS" ;; +esac + +if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then + # this is a command to run jetty + + # check if it is a terminating command + for A in "$@" ; do + case $A in + --add-to-start* |\ + --create-files |\ + --create-startd |\ + --download |\ + --dry-run |\ + --exec-print |\ + --help |\ + --info |\ + --list-all-modules |\ + --list-classpath |\ + --list-config |\ + --list-modules* |\ + --stop |\ + --update-ini |\ + --version |\ + -v )\ + # It is a terminating command, so exec directly + JAVA="$1" + shift + exec $JAVA $JAVA_OPTIONS "$@" + esac + done + + if [ $(whoami) != "jetty" ]; then + cat >&2 <<- EOWARN + ******************************************************************** + WARNING: User is $(whoami) + The user should be (re)set to 'jetty' in the Dockerfile + ******************************************************************** + EOWARN + fi + + if [ -f $JETTY_START ] ; then + if [ $JETTY_BASE/start.d -nt $JETTY_START ] ; then + cat >&2 <<- EOWARN + ******************************************************************** + WARNING: The $JETTY_BASE/start.d directory has been modified since + the $JETTY_START files was generated. Either delete + the $JETTY_START file or re-run + /generate-jetty.start.sh + from a Dockerfile + ******************************************************************** + EOWARN + fi + echo $(date +'%Y-%m-%d %H:%M:%S.000'):INFO:docker-entrypoint:jetty start from $JETTY_START + set -- $(cat $JETTY_START) + else + # Do a jetty dry run to set the final command + JAVA="$1" + shift + $JAVA $JAVA_OPTIONS "$@" --dry-run > $JETTY_START + if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then + # command was more than a dry-run + cat $JETTY_START \ + | awk '/\\$/ { printf "%s", substr($0, 1, length($0)-1); next } 1' \ + | egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration ' + exit + fi + set -- $(sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' $JETTY_START) + fi +fi + +if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then + JAVA="$1" + shift + set -- "$JAVA" $JAVA_OPTIONS "$@" +fi + +exec "$@" diff --git a/9.4-jre11/generate-jetty-start.sh b/9.4-jre11/generate-jetty-start.sh new file mode 100755 index 00000000..5895278f --- /dev/null +++ b/9.4-jre11/generate-jetty-start.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +if [ -z "$JETTY_START" ] ; then + JETTY_START=$JETTY_BASE/jetty.start +fi +rm -f $JETTY_START +/docker-entrypoint.sh --dry-run | sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' > $JETTY_START diff --git a/9.4-jre8/Dockerfile b/9.4-jre8/Dockerfile new file mode 100644 index 00000000..b24d9bdc --- /dev/null +++ b/9.4-jre8/Dockerfile @@ -0,0 +1,85 @@ +# DO NOT EDIT. Edit Dockerfile-9.4 and use update.sh +FROM openjdk:8-jre + +ENV JETTY_VERSION 9.4.27.v20200227 +ENV JETTY_HOME /usr/local/jetty +ENV JETTY_BASE /var/lib/jetty +ENV TMPDIR /tmp/jetty +ENV PATH $JETTY_HOME/bin:$PATH +ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/$JETTY_VERSION/jetty-home-$JETTY_VERSION.tar.gz + +# GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt) +ENV JETTY_GPG_KEYS \ + # Jan Bartel + AED5EE6C45D0FE8D5D1B164F27DED4BF6216DB8F \ + # Jesse McConnell + 2A684B57436A81FA8706B53C61C3351A438A3B7D \ + # Joakim Erdfelt + 5989BAF76217B843D66BE55B2D0E1FB8FE4B68B4 \ + # Joakim Erdfelt + B59B67FD7904984367F931800818D9D68FB67BAC \ + # Joakim Erdfelt + BFBB21C246D7776836287A48A04E0C74ABB35FEA \ + # Simone Bordet + 8B096546B1A8F02656B15D3B1677D141BCF3584D \ + # Greg Wilkins + FBA2B18D238AB852DF95745C76157BDF03D0DCD6 \ + # Greg Wilkins + 5C9579B3DB2E506429319AAEF33B071B29559E1E + +RUN set -xe ; \ + # fetch GPG keys + export GNUPGHOME=/jetty-keys ; \ + mkdir -p "$GNUPGHOME" ; \ + for key in $JETTY_GPG_KEYS; do \ + for server in \ + ha.pool.sks-keyservers.net \ + p80.pool.sks-keyservers.net:80 \ + ipv4.pool.sks-keyservers.net \ + pgp.mit.edu ; \ + do \ + if gpg --batch --keyserver "$server" --recv-keys "$key"; then \ + break; \ + fi; \ + done; \ + done ; \ + # + # Fetch jetty release into JETTY_HOME + mkdir -p "$JETTY_HOME" ; \ + cd $JETTY_HOME ; \ + curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz ; \ + curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc ; \ + # + # Verify GPG signatures + gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz ; \ + # + # Unpack jetty + tar -xvf jetty.tar.gz --strip-components=1 ; \ + sed -i '/jetty-logging/d' etc/jetty.conf ; \ + # + # Create and configure the JETTY_HOME directory + mkdir -p "$JETTY_BASE" ; \ + cd $JETTY_BASE ; \ + java -jar "$JETTY_HOME/start.jar" --create-startd \ + --add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" ; \ + mkdir -p "$TMPDIR" ; \ + groupadd -r jetty && useradd -r -g jetty jetty ; \ + chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" ; \ + # + # Cleanup + rm -rf /tmp/hsperfdata_root ; \ + rm -fr $JETTY_HOME/jetty.tar.gz* ; \ + rm -fr /jetty-keys $GNUPGHOME ; \ + rm -rf /tmp/hsperfdata_root ; \ + # + # Basic smoke test + java -jar "$JETTY_HOME/start.jar" --list-config ; + +WORKDIR $JETTY_BASE +COPY docker-entrypoint.sh generate-jetty-start.sh / + +USER jetty +EXPOSE 8080 +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["java","-jar","/usr/local/jetty/start.jar"] + diff --git a/9.4-jre8/arches b/9.4-jre8/arches new file mode 100644 index 00000000..21d5bd8c --- /dev/null +++ b/9.4-jre8/arches @@ -0,0 +1 @@ +amd64 diff --git a/9.4-jre8/docker-entrypoint.sh b/9.4-jre8/docker-entrypoint.sh new file mode 100755 index 00000000..41ccbe44 --- /dev/null +++ b/9.4-jre8/docker-entrypoint.sh @@ -0,0 +1,113 @@ +#!/bin/sh + +set -e + +if [ "$1" = jetty.sh ]; then + if ! command -v bash >/dev/null 2>&1 ; then + cat >&2 <<- 'EOWARN' + ******************************************************************** + ERROR: bash not found. Use of jetty.sh requires bash. + ******************************************************************** + EOWARN + exit 1 + fi + cat >&2 <<- 'EOWARN' + ******************************************************************** + WARNING: Use of jetty.sh from this image is deprecated and may + be removed at some point in the future. + + See the documentation for guidance on extending this image: + https://github.com/docker-library/docs/tree/master/jetty + ******************************************************************** + EOWARN +fi + +if ! command -v -- "$1" >/dev/null 2>&1 ; then + set -- java -jar "$JETTY_HOME/start.jar" "$@" +fi + +: ${TMPDIR:=/tmp/jetty} +[ -d "$TMPDIR" ] || mkdir -p $TMPDIR 2>/dev/null + +: ${JETTY_START:=$JETTY_BASE/jetty.start} + +case "$JAVA_OPTIONS" in + *-Djava.io.tmpdir=*) ;; + *) JAVA_OPTIONS="-Djava.io.tmpdir=$TMPDIR $JAVA_OPTIONS" ;; +esac + +if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then + # this is a command to run jetty + + # check if it is a terminating command + for A in "$@" ; do + case $A in + --add-to-start* |\ + --create-files |\ + --create-startd |\ + --download |\ + --dry-run |\ + --exec-print |\ + --help |\ + --info |\ + --list-all-modules |\ + --list-classpath |\ + --list-config |\ + --list-modules* |\ + --stop |\ + --update-ini |\ + --version |\ + -v )\ + # It is a terminating command, so exec directly + JAVA="$1" + shift + exec $JAVA $JAVA_OPTIONS "$@" + esac + done + + if [ $(whoami) != "jetty" ]; then + cat >&2 <<- EOWARN + ******************************************************************** + WARNING: User is $(whoami) + The user should be (re)set to 'jetty' in the Dockerfile + ******************************************************************** + EOWARN + fi + + if [ -f $JETTY_START ] ; then + if [ $JETTY_BASE/start.d -nt $JETTY_START ] ; then + cat >&2 <<- EOWARN + ******************************************************************** + WARNING: The $JETTY_BASE/start.d directory has been modified since + the $JETTY_START files was generated. Either delete + the $JETTY_START file or re-run + /generate-jetty.start.sh + from a Dockerfile + ******************************************************************** + EOWARN + fi + echo $(date +'%Y-%m-%d %H:%M:%S.000'):INFO:docker-entrypoint:jetty start from $JETTY_START + set -- $(cat $JETTY_START) + else + # Do a jetty dry run to set the final command + JAVA="$1" + shift + $JAVA $JAVA_OPTIONS "$@" --dry-run > $JETTY_START + if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then + # command was more than a dry-run + cat $JETTY_START \ + | awk '/\\$/ { printf "%s", substr($0, 1, length($0)-1); next } 1' \ + | egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration ' + exit + fi + set -- $(sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' $JETTY_START) + fi +fi + +if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then + JAVA="$1" + shift + set -- "$JAVA" $JAVA_OPTIONS "$@" +fi + +exec "$@" diff --git a/9.4-jre8/generate-jetty-start.sh b/9.4-jre8/generate-jetty-start.sh new file mode 100755 index 00000000..5895278f --- /dev/null +++ b/9.4-jre8/generate-jetty-start.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +if [ -z "$JETTY_START" ] ; then + JETTY_START=$JETTY_BASE/jetty.start +fi +rm -f $JETTY_START +/docker-entrypoint.sh --dry-run | sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' > $JETTY_START diff --git a/Dockerfile-9.4 b/Dockerfile-9.4 new file mode 100644 index 00000000..26bec47b --- /dev/null +++ b/Dockerfile-9.4 @@ -0,0 +1,84 @@ +FROM openjdk:LABEL + +ENV JETTY_VERSION 9.4.27.v20200227 +ENV JETTY_HOME /usr/local/jetty +ENV JETTY_BASE /var/lib/jetty +ENV TMPDIR /tmp/jetty +ENV PATH $JETTY_HOME/bin:$PATH +ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/$JETTY_VERSION/jetty-home-$JETTY_VERSION.tar.gz + +# GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt) +ENV JETTY_GPG_KEYS \ + # Jan Bartel + AED5EE6C45D0FE8D5D1B164F27DED4BF6216DB8F \ + # Jesse McConnell + 2A684B57436A81FA8706B53C61C3351A438A3B7D \ + # Joakim Erdfelt + 5989BAF76217B843D66BE55B2D0E1FB8FE4B68B4 \ + # Joakim Erdfelt + B59B67FD7904984367F931800818D9D68FB67BAC \ + # Joakim Erdfelt + BFBB21C246D7776836287A48A04E0C74ABB35FEA \ + # Simone Bordet + 8B096546B1A8F02656B15D3B1677D141BCF3584D \ + # Greg Wilkins + FBA2B18D238AB852DF95745C76157BDF03D0DCD6 \ + # Greg Wilkins + 5C9579B3DB2E506429319AAEF33B071B29559E1E + +RUN set -xe ; \ + # fetch GPG keys + export GNUPGHOME=/jetty-keys ; \ + mkdir -p "$GNUPGHOME" ; \ + for key in $JETTY_GPG_KEYS; do \ + for server in \ + ha.pool.sks-keyservers.net \ + p80.pool.sks-keyservers.net:80 \ + ipv4.pool.sks-keyservers.net \ + pgp.mit.edu ; \ + do \ + if gpg --batch --keyserver "$server" --recv-keys "$key"; then \ + break; \ + fi; \ + done; \ + done ; \ + # + # Fetch jetty release into JETTY_HOME + mkdir -p "$JETTY_HOME" ; \ + cd $JETTY_HOME ; \ + curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz ; \ + curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc ; \ + # + # Verify GPG signatures + gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz ; \ + # + # Unpack jetty + tar -xvf jetty.tar.gz --strip-components=1 ; \ + sed -i '/jetty-logging/d' etc/jetty.conf ; \ + # + # Create and configure the JETTY_HOME directory + mkdir -p "$JETTY_BASE" ; \ + cd $JETTY_BASE ; \ + java -jar "$JETTY_HOME/start.jar" --create-startd \ + --add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" ; \ + mkdir -p "$TMPDIR" ; \ + groupadd -r jetty && useradd -r -g jetty jetty ; \ + chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" ; \ + # + # Cleanup + rm -rf /tmp/hsperfdata_root ; \ + rm -fr $JETTY_HOME/jetty.tar.gz* ; \ + rm -fr /jetty-keys $GNUPGHOME ; \ + rm -rf /tmp/hsperfdata_root ; \ + # + # Basic smoke test + java -jar "$JETTY_HOME/start.jar" --list-config ; + +WORKDIR $JETTY_BASE +COPY docker-entrypoint.sh generate-jetty-start.sh / + +USER jetty +EXPOSE 8080 +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["java","-jar","/usr/local/jetty/start.jar"] + diff --git a/Dockerfile-9.4-slim b/Dockerfile-9.4-slim new file mode 100644 index 00000000..37db9f4f --- /dev/null +++ b/Dockerfile-9.4-slim @@ -0,0 +1,101 @@ +FROM openjdk:LABEL + +ENV JETTY_VERSION 9.4.27.v20200227 +ENV JETTY_HOME /usr/local/jetty +ENV JETTY_BASE /var/lib/jetty +ENV TMPDIR /tmp/jetty +ENV PATH $JETTY_HOME/bin:$PATH +ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/$JETTY_VERSION/jetty-home-$JETTY_VERSION.tar.gz + +# GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt) +ENV JETTY_GPG_KEYS \ + # Jan Bartel + AED5EE6C45D0FE8D5D1B164F27DED4BF6216DB8F \ + # Jesse McConnell + 2A684B57436A81FA8706B53C61C3351A438A3B7D \ + # Joakim Erdfelt + 5989BAF76217B843D66BE55B2D0E1FB8FE4B68B4 \ + # Joakim Erdfelt + B59B67FD7904984367F931800818D9D68FB67BAC \ + # Joakim Erdfelt + BFBB21C246D7776836287A48A04E0C74ABB35FEA \ + # Simone Bordet + 8B096546B1A8F02656B15D3B1677D141BCF3584D \ + # Greg Wilkins + FBA2B18D238AB852DF95745C76157BDF03D0DCD6 \ + # Greg Wilkins + 5C9579B3DB2E506429319AAEF33B071B29559E1E + +RUN set -xe ; \ + # Save initial installatin state + export savedAptMark="$(apt-mark showmanual)" ; \ + # + # Install utils needed to verify keys + apt-get update ; \ + apt-get install -y --no-install-recommends \ + ca-certificates p11-kit \ + gnupg \ + curl \ + ; \ + # + # fetch GPG keys + export GNUPGHOME=/jetty-keys ; \ + mkdir -p "$GNUPGHOME" ; \ + for key in $JETTY_GPG_KEYS; do \ + for server in \ + ha.pool.sks-keyservers.net \ + p80.pool.sks-keyservers.net:80 \ + ipv4.pool.sks-keyservers.net \ + pgp.mit.edu ; \ + do \ + if gpg --batch --keyserver "$server" --recv-keys "$key"; then \ + break; \ + fi; \ + done; \ + done ; \ + # + # Fetch jetty release into JETTY_HOME + mkdir -p "$JETTY_HOME" ; \ + cd $JETTY_HOME ; \ + curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz ; \ + curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc ; \ + # + # Verify GPG signatures + gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz ; \ + # + # Unpack jetty + tar -xvf jetty.tar.gz --strip-components=1 ; \ + sed -i '/jetty-logging/d' etc/jetty.conf ; \ + # + # Create and configure the JETTY_HOME directory + mkdir -p "$JETTY_BASE" ; \ + cd $JETTY_BASE ; \ + java -jar "$JETTY_HOME/start.jar" --create-startd \ + --add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" ; \ + mkdir -p "$TMPDIR" ; \ + groupadd -r jetty && useradd -r -g jetty jetty ; \ + chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" ; \ + # + # Cleanup any apt + apt-mark auto '.*' > /dev/null ; \ + [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark > /dev/null ; \ + apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false ; \ + rm -rf /var/lib/apt/lists/* ; \ + # + # Cleanup + rm -rf /tmp/hsperfdata_root ; \ + rm -fr $JETTY_HOME/jetty.tar.gz* ; \ + rm -fr /jetty-keys $GNUPGHOME ; \ + rm -rf /tmp/hsperfdata_root ; \ + # + # Basic smoke test + java -jar "$JETTY_HOME/start.jar" --list-config ; + +WORKDIR $JETTY_BASE +COPY docker-entrypoint.sh generate-jetty-start.sh / + +USER jetty +EXPOSE 8080 +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["java","-jar","/usr/local/jetty/start.jar"] + diff --git a/LICENSE b/LICENSE index d3087e4c..290cd911 100644 --- a/LICENSE +++ b/LICENSE @@ -1,3 +1,12 @@ +This program and the accompanying materials are made available under +the terms of the Eclipse Public License 2.0 which is available at +https://www.eclipse.org/legal/epl-2.0 +This Source Code may also be made available under the following +Secondary Licenses when the conditions for such availability set +forth in the Eclipse Public License, v. 2.0 are satisfied: +the Apache License v2.0 which is available at +https://www.apache.org/licenses/LICENSE-2.0 + Eclipse Public License - v 2.0 THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..4398eca2 --- /dev/null +++ b/Makefile @@ -0,0 +1,19 @@ +VERSIONS = $(foreach df,$(wildcard */Dockerfile),$(df:%/Dockerfile=%)) + +all: build + +build: $(VERSIONS) + +define jetty-version +$1: + docker build -t jetty:$(shell echo $1 | sed -e 's/\//-/g') $1 +endef +$(foreach version,$(VERSIONS),$(eval $(call jetty-version,$(version)))) + +update: + docker run --rm -v $$(pwd):/work -w /work buildpack-deps ./update.sh + +library: + @docker run --rm -v $$(pwd):/work -w /work buildpack-deps ./generate-stackbrew-library.sh + +.PHONY: all build update library $(VERSIONS) diff --git a/README.md b/README.md new file mode 100644 index 00000000..41dd2fe9 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# About this Repo + +[![Build Status](https://travis-ci.org/appropriate/docker-jetty.svg?branch=master)](https://travis-ci.org/appropriate/docker-jetty) + +This is the Git repo of the official Docker image for [jetty](https://registry.hub.docker.com/_/jetty/). See the +Hub page for the full readme on how to use the Docker image and for information regarding contributing and issues. + +The full readme is generated over in [docker-library/docs](https://github.com/docker-library/docs), +specificially in [docker-library/docs/jetty](https://github.com/docker-library/docs/tree/master/jetty). diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh new file mode 100755 index 00000000..41ccbe44 --- /dev/null +++ b/docker-entrypoint.sh @@ -0,0 +1,113 @@ +#!/bin/sh + +set -e + +if [ "$1" = jetty.sh ]; then + if ! command -v bash >/dev/null 2>&1 ; then + cat >&2 <<- 'EOWARN' + ******************************************************************** + ERROR: bash not found. Use of jetty.sh requires bash. + ******************************************************************** + EOWARN + exit 1 + fi + cat >&2 <<- 'EOWARN' + ******************************************************************** + WARNING: Use of jetty.sh from this image is deprecated and may + be removed at some point in the future. + + See the documentation for guidance on extending this image: + https://github.com/docker-library/docs/tree/master/jetty + ******************************************************************** + EOWARN +fi + +if ! command -v -- "$1" >/dev/null 2>&1 ; then + set -- java -jar "$JETTY_HOME/start.jar" "$@" +fi + +: ${TMPDIR:=/tmp/jetty} +[ -d "$TMPDIR" ] || mkdir -p $TMPDIR 2>/dev/null + +: ${JETTY_START:=$JETTY_BASE/jetty.start} + +case "$JAVA_OPTIONS" in + *-Djava.io.tmpdir=*) ;; + *) JAVA_OPTIONS="-Djava.io.tmpdir=$TMPDIR $JAVA_OPTIONS" ;; +esac + +if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then + # this is a command to run jetty + + # check if it is a terminating command + for A in "$@" ; do + case $A in + --add-to-start* |\ + --create-files |\ + --create-startd |\ + --download |\ + --dry-run |\ + --exec-print |\ + --help |\ + --info |\ + --list-all-modules |\ + --list-classpath |\ + --list-config |\ + --list-modules* |\ + --stop |\ + --update-ini |\ + --version |\ + -v )\ + # It is a terminating command, so exec directly + JAVA="$1" + shift + exec $JAVA $JAVA_OPTIONS "$@" + esac + done + + if [ $(whoami) != "jetty" ]; then + cat >&2 <<- EOWARN + ******************************************************************** + WARNING: User is $(whoami) + The user should be (re)set to 'jetty' in the Dockerfile + ******************************************************************** + EOWARN + fi + + if [ -f $JETTY_START ] ; then + if [ $JETTY_BASE/start.d -nt $JETTY_START ] ; then + cat >&2 <<- EOWARN + ******************************************************************** + WARNING: The $JETTY_BASE/start.d directory has been modified since + the $JETTY_START files was generated. Either delete + the $JETTY_START file or re-run + /generate-jetty.start.sh + from a Dockerfile + ******************************************************************** + EOWARN + fi + echo $(date +'%Y-%m-%d %H:%M:%S.000'):INFO:docker-entrypoint:jetty start from $JETTY_START + set -- $(cat $JETTY_START) + else + # Do a jetty dry run to set the final command + JAVA="$1" + shift + $JAVA $JAVA_OPTIONS "$@" --dry-run > $JETTY_START + if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then + # command was more than a dry-run + cat $JETTY_START \ + | awk '/\\$/ { printf "%s", substr($0, 1, length($0)-1); next } 1' \ + | egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration ' + exit + fi + set -- $(sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' $JETTY_START) + fi +fi + +if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then + JAVA="$1" + shift + set -- "$JAVA" $JAVA_OPTIONS "$@" +fi + +exec "$@" diff --git a/generate-jetty-start.sh b/generate-jetty-start.sh new file mode 100755 index 00000000..5895278f --- /dev/null +++ b/generate-jetty-start.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +if [ -z "$JETTY_START" ] ; then + JETTY_START=$JETTY_BASE/jetty.start +fi +rm -f $JETTY_START +/docker-entrypoint.sh --dry-run | sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' > $JETTY_START diff --git a/generate-stackbrew-library.sh b/generate-stackbrew-library.sh new file mode 100755 index 00000000..b697e9bf --- /dev/null +++ b/generate-stackbrew-library.sh @@ -0,0 +1,89 @@ +#!/bin/bash +set -ueo pipefail +shopt -s globstar + +declare -A aliases +aliases=( + [9.4-jdk13]='latest jdk13' +) +defaultJdk="jdk13" + +cd "$(dirname "$(readlink -f "$BASH_SOURCE")")" + +paths=( **/*/Dockerfile ) +paths=( $( printf '%s\n' "${paths[@]%/Dockerfile}" | sort -t/ -k 1,1Vr -k 2,2 ) ) +url='https://github.com/appropriate/docker-jetty.git' + +cat <<-EOH + Maintainers: Mike Dillon (@md5), + Greg Wilkins (@gregw) + GitRepo: $url +EOH + +declare -a tags +declare -A tagsSeen=() +addTag() { + local tag="$1" + + if [ ${#tagsSeen[$tag]} -gt 0 ]; then + return + fi + + tags+=("$tag") + tagsSeen[$tag]=1 +} + +for path in "${paths[@]}"; do + tags=() + + directory="$path" + commit="$(git log -1 --format='format:%H' -- "$directory")" + version="$(grep -m1 'ENV JETTY_VERSION ' "$directory/Dockerfile" | cut -d' ' -f3)" + + # Determine the JDK + jdk=${path#*-} # "jre7" + + # Collect the potential version aliases + declare -a versionAliases + if [[ "$version" == *.v* ]]; then + # Release version + versionAliases=() + while [[ "$version" == *.* ]]; do + version="${version%.*}" + versionAliases+=("$version") + done + else + # Non-release version + versionAliases=("$version") + fi + + # Output ${versionAliases[@]} without JDK + # e.g. 9.2.10, 9.2, 9 + if [ "$jdk" = "$defaultJdk" ]; then + for va in "${versionAliases[@]}"; do + addTag "$va" + done + fi + + # Output ${versionAliases[@]} with JDK suffixes + # e.g. 9.2.10-jre7, 9.2-jre7, 9-jre7, 9-jre11-slim + for va in "${versionAliases[@]}"; do + addTag "$va-$jdk" + done + + # Output custom aliases + # e.g. latest, jre7, jre8 + if [ ${#aliases[$path]} -gt 0 ]; then + for va in ${aliases[$path]}; do + addTag "$va" + done + fi + + cat <<-EOE + + Tags:$(IFS=, ; echo "${tags[*]/#/ }") + Architectures: $(< "$directory/arches") + Directory: $directory + GitCommit: $commit + EOE +done diff --git a/update.sh b/update.sh new file mode 100755 index 00000000..97876bd1 --- /dev/null +++ b/update.sh @@ -0,0 +1,65 @@ +#!/bin/bash + +cd "$(dirname "$(readlink -f "$BASH_SOURCE")")" + +paths=( "$@" ) +if [ ${#paths[@]} -eq 0 ]; then + paths=( */ ) +fi +paths=( "${paths[@]%/}" ) + +MAVEN_METADATA_URL='https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/maven-metadata.xml' + +available=( $( curl -sSL "$MAVEN_METADATA_URL" | grep -Eo '<(version)>[^<]*' | awk -F'[<>]' '{ print $3 }' | sort -Vr ) ) + +for path in "${paths[@]}"; do + version="${path%%-*}" # "9.2" + jvm="${path#*-}" # "jre11-slim" + disto=$(expr "$jvm" : '\(j..\)[0-9].*') # jre + variant=$(expr "$jvm" : '.*-\(.*\)') # slim + release=$(expr "$jvm" : 'j..\([0-9][0-9]*\).*') # 11 + label=${release}-${disto}${variant:+-$variant} # 11-jre-slim + + milestones=() + releaseCandidates=() + fullReleases=() + for candidate in "${available[@]}"; do + if [[ "$candidate" == "$version".* ]]; then + if [[ "$candidate" == *.M* ]]; then + milestones+=("$candidate") + elif [[ "$candidate" == *.RC* ]]; then + releaseCandidates+=("$candidate") + elif [[ "$candidate" == *.v* ]]; then + fullReleases+=("$candidate") + fi + fi + done + + fullVersion= + if [ -n "${fullReleases-}" ]; then + fullVersion="$fullReleases" + elif [ -n "${releaseCandidates-}" ]; then + fullVersion="$releaseCandidates" + elif [ -n "${milestones-}" ]; then + fullVersion="$milestones" + fi + + if [ -z "$fullVersion" ]; then + echo >&2 "Unable to find Jetty package for $path" + exit 1 + fi + + echo Full Version ${fullVersion} + + if [ -d "$path" ]; then + cp docker-entrypoint.sh generate-jetty-start.sh "$path" + if [ "$version" == "9.4" ] ; then + sed -ri 's/^(ENV JETTY_VERSION) .*/\1 '"$fullVersion"'/; ' "Dockerfile-9.4${variant:+-$variant}" + echo '# DO NOT EDIT. Edit Dockerfile-9.4 and use update.sh' > "$path"/Dockerfile + cat Dockerfile-9.4${variant:+-$variant} >> "$path"/Dockerfile + sed -ri 's/^(FROM openjdk:)LABEL/\1'"$label"'/; ' "$path/Dockerfile" + else + sed -ri 's/^(ENV JETTY_VERSION) .*/\1 '"$fullVersion"'/; ' "$path/Dockerfile" + fi + fi +done