forked from docker-library/openjdk
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathupdate.sh
executable file
·236 lines (188 loc) · 6.03 KB
/
update.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
#!/bin/bash
set -eo pipefail
cd "$(dirname "$(readlink -f "$BASH_SOURCE")")"
versions=( "$@" )
if [ ${#versions[@]} -eq 0 ]; then
versions=( */ )
fi
versions=( "${versions[@]%/}" )
declare -A suites=(
[6]='wheezy'
[7]='jessie'
[8]='jessie'
[9]='sid'
)
declare -A addSuites=(
[8]='jessie-backports'
[9]='experimental'
)
declare -A variants=(
[jre]='curl'
[jdk]='scm'
)
alpineVersion='3.4'
alpineMirror="http://dl-cdn.alpinelinux.org/alpine/v${alpineVersion}/community/x86_64"
curl -fsSL'#' "$alpineMirror/APKINDEX.tar.gz" | tar -zxv APKINDEX
declare -A debCache=()
java-home-script() {
cat <<'EOD'
# add a simple script that can auto-detect the appropriate JAVA_HOME value
# based on whether the JDK or only the JRE is installed
RUN { \
echo '#!/bin/sh'; \
echo 'set -e'; \
echo; \
echo 'dirname "$(dirname "$(readlink -f "$(which javac || which java)")")"'; \
} > /usr/local/bin/docker-java-home \
&& chmod +x /usr/local/bin/docker-java-home
EOD
}
travisEnv=
for version in "${versions[@]}"; do
javaVersion="$version" # "6-jdk"
javaType="${javaVersion##*-}" # "jdk"
javaVersion="${javaVersion%-*}" # "6"
suite="${suites[$javaVersion]}"
addSuite="${addSuites[$javaVersion]}"
variant="${variants[$javaType]}"
javaHome="/usr/lib/jvm/java-$javaVersion-openjdk-$(dpkg --print-architecture)"
if [ "$javaType" = 'jre' -a "$javaVersion" -lt 9 ]; then
# woot, this hackery stopped in OpenJDK 9+!
javaHome+='/jre'
fi
needCaHack=
if [ "$javaVersion" -ge 8 -a "$suite" != 'sid' ]; then
# "20140324" is broken (jessie), but "20160321" is fixed (sid)
needCaHack=1
fi
dist="debian:${addSuite:-$suite}"
debianPackage="openjdk-$javaVersion-$javaType"
if [ "$javaType" = 'jre' -o "$javaVersion" -ge 9 ]; then
# "openjdk-9" in Debian introduced an "openjdk-9-jdk-headless" package \o/
debianPackage+='-headless'
fi
debCacheKey="$dist-openjdk-$javaVersion"
debianVersion="${debCache[$debCacheKey]}"
if [ -z "$debianVersion" ]; then
debianVersion="$(set -x; docker run --rm "$dist" bash -c 'apt-get update -qq && apt-cache show "$@"' -- "$debianPackage" |tac|tac| awk -F ': ' '$1 == "Version" { print $2; exit }')"
debCache["$debCacheKey"]="$debianVersion"
fi
fullVersion="${debianVersion%%-*}"
cat > "$version/Dockerfile" <<-EOD
#
# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
#
# PLEASE DO NOT EDIT IT DIRECTLY.
#
FROM buildpack-deps:$suite-$variant
# A few problems with compiling Java from source:
# 1. Oracle. Licensing prevents us from redistributing the official JDK.
# 2. Compiling OpenJDK also requires the JDK to be installed, and it gets
# really hairy.
EOD
cat >> "$version/Dockerfile" <<'EOD'
RUN apt-get update && apt-get install -y --no-install-recommends \
bzip2 \
unzip \
xz-utils \
&& rm -rf /var/lib/apt/lists/*
EOD
if [ "$addSuite" ]; then
cat >> "$version/Dockerfile" <<-EOD
RUN echo 'deb http://httpredir.debian.org/debian $addSuite main' > /etc/apt/sources.list.d/$addSuite.list
EOD
fi
cat >> "$version/Dockerfile" <<-EOD
# Default to UTF-8 file.encoding
ENV LANG C.UTF-8
EOD
java-home-script >> "$version/Dockerfile"
cat >> "$version/Dockerfile" <<-EOD
ENV JAVA_HOME $javaHome
ENV JAVA_VERSION $fullVersion
ENV JAVA_DEBIAN_VERSION $debianVersion
EOD
if [ "$needCaHack" ]; then
cat >> "$version/Dockerfile" <<-EOD
# see https://bugs.debian.org/775775
# and https://github.com/docker-library/java/issues/19#issuecomment-70546872
ENV CA_CERTIFICATES_JAVA_VERSION 20140324
EOD
fi
cat >> "$version/Dockerfile" <<EOD
RUN set -x \\
&& apt-get update \\
&& apt-get install -y \\
$debianPackage="\$JAVA_DEBIAN_VERSION" \\
EOD
if [ "$needCaHack" ]; then
cat >> "$version/Dockerfile" <<EOD
ca-certificates-java="\$CA_CERTIFICATES_JAVA_VERSION" \\
EOD
fi
cat >> "$version/Dockerfile" <<EOD
&& rm -rf /var/lib/apt/lists/* \\
&& [ "\$JAVA_HOME" = "\$(docker-java-home)" ]
EOD
if [ "$needCaHack" ]; then
cat >> "$version/Dockerfile" <<-EOD
# see CA_CERTIFICATES_JAVA_VERSION notes above
RUN /var/lib/dpkg/info/ca-certificates-java.postinst configure
EOD
fi
cat >> "$version/Dockerfile" <<-EOD
# If you're reading this and have any feedback on how this image could be
# improved, please open an issue or a pull request so we can discuss it!
EOD
variant='alpine'
if [ -d "$version/$variant" ]; then
alpinePackage="openjdk$javaVersion"
alpineJavaHome="/usr/lib/jvm/java-1.${javaVersion}-openjdk"
alpinePathAdd="$alpineJavaHome/jre/bin:$alpineJavaHome/bin"
case "$javaType" in
jdk)
;;
jre)
alpinePackage+="-$javaType"
alpineJavaHome+="/$javaType"
;;
esac
alpinePackageVersion="$(awk -F: '$1 == "P" { pkg = $2 } pkg == "'"$alpinePackage"'" && $1 == "V" { print $2 }' APKINDEX)"
alpineFullVersion="${alpinePackageVersion/./u}"
alpineFullVersion="${alpineFullVersion%%.*}"
cat > "$version/$variant/Dockerfile" <<-EOD
#
# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh"
#
# PLEASE DO NOT EDIT IT DIRECTLY.
#
FROM alpine:$alpineVersion
# A few problems with compiling Java from source:
# 1. Oracle. Licensing prevents us from redistributing the official JDK.
# 2. Compiling OpenJDK also requires the JDK to be installed, and it gets
# really hairy.
# Default to UTF-8 file.encoding
ENV LANG C.UTF-8
EOD
java-home-script >> "$version/$variant/Dockerfile"
cat >> "$version/$variant/Dockerfile" <<-EOD
ENV JAVA_HOME $alpineJavaHome
ENV PATH \$PATH:$alpinePathAdd
EOD
cat >> "$version/$variant/Dockerfile" <<-EOD
ENV JAVA_VERSION $alpineFullVersion
ENV JAVA_ALPINE_VERSION $alpinePackageVersion
EOD
cat >> "$version/$variant/Dockerfile" <<EOD
RUN set -x \\
&& apk add --no-cache \\
${alpinePackage}="\$JAVA_ALPINE_VERSION" \\
&& [ "\$JAVA_HOME" = "\$(docker-java-home)" ]
EOD
travisEnv='\n - VERSION='"$version"' VARIANT='"$variant$travisEnv"
fi
travisEnv='\n - VERSION='"$version$travisEnv"
done
travis="$(awk -v 'RS=\n\n' '$1 == "env:" { $0 = "env:'"$travisEnv"'" } { printf "%s%s", $0, RS }' .travis.yml)"
echo "$travis" > .travis.yml
rm APKINDEX