Skip to content

Commit b778a26

Browse files
authored
Merge pull request #199 from infosiftr/buster
Update to Buster (and https repos, per upstream)
2 parents e5b7ed4 + de006e2 commit b778a26

13 files changed

+511
-551
lines changed

.travis.yml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,9 @@ services: docker
33

44
env:
55
- VERSION=3.11
6-
- VERSION=3.11 ARCH=i386
76
- VERSION=3.0
8-
- VERSION=3.0 ARCH=i386
97
- VERSION=2.2
10-
- VERSION=2.2 ARCH=i386
118
- VERSION=2.1
12-
- VERSION=2.1 ARCH=i386
139

1410
install:
1511
- git clone https://github.com/docker-library/official-images.git ~/official-images

2.1/Dockerfile

Lines changed: 84 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
1-
# vim:set ft=dockerfile:
2-
FROM debian:stretch-slim
1+
FROM adoptopenjdk:8-jre-hotspot-bionic
32

43
# explicitly set user/group IDs
5-
RUN groupadd -r cassandra --gid=999 && useradd -r -g cassandra --uid=999 cassandra
4+
RUN set -eux; \
5+
groupadd -r cassandra --gid=999; \
6+
useradd -r -g cassandra --uid=999 cassandra
67

78
RUN set -eux; \
89
apt-get update; \
910
apt-get install -y --no-install-recommends \
10-
gnupg dirmngr \
1111
# solves warning: "jemalloc shared library could not be preloaded to speed up memory allocations"
1212
libjemalloc1 \
13-
# free is used by cassandra-env.sh
13+
# "free" is used by cassandra-env.sh
1414
procps \
15+
# "cqlsh" needs a python interpreter
16+
python \
1517
# "ip" is not required by Cassandra itself, but is commonly used in scripting Cassandra's configuration (since it is so fixated on explicit IP addresses)
1618
iproute2 \
1719
# Cassandra will automatically use numactl if available
@@ -22,143 +24,126 @@ RUN set -eux; \
2224
rm -rf /var/lib/apt/lists/*
2325

2426
# grab gosu for easy step-down from root
25-
ENV GOSU_VERSION 1.10
27+
ENV GOSU_VERSION 1.11
2628
RUN set -eux; \
2729
savedAptMark="$(apt-mark showmanual)"; \
2830
apt-get update; \
29-
apt-get install -y --no-install-recommends ca-certificates wget; \
31+
apt-get install -y --no-install-recommends ca-certificates dirmngr gnupg wget; \
3032
rm -rf /var/lib/apt/lists/*; \
31-
wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)"; \
32-
wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc"; \
33+
dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')"; \
34+
wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch"; \
35+
wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc"; \
3336
export GNUPGHOME="$(mktemp -d)"; \
3437
gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4; \
3538
gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; \
3639
gpgconf --kill all; \
3740
rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc; \
38-
chmod +x /usr/local/bin/gosu; \
3941
apt-mark auto '.*' > /dev/null; \
40-
apt-mark manual $savedAptMark > /dev/null; \
42+
[ -z "$savedAptMark" ] || apt-mark manual $savedAptMark > /dev/null; \
4143
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
44+
chmod +x /usr/local/bin/gosu; \
45+
gosu --version; \
4246
gosu nobody true
4347

44-
# https://wiki.apache.org/cassandra/DebianPackaging#Adding_Repository_Keys
48+
ENV CASSANDRA_HOME /opt/cassandra
49+
ENV CASSANDRA_CONF /etc/cassandra
50+
ENV PATH $CASSANDRA_HOME/bin:$PATH
51+
52+
# https://cwiki.apache.org/confluence/display/CASSANDRA2/DebianPackaging#DebianPackaging-AddingRepositoryKeys
4553
ENV GPG_KEYS \
4654
# gpg: key 0353B12C: public key "T Jake Luciani <jake@apache.org>" imported
4755
514A2AD631A57A16DD0047EC749D6EEC0353B12C \
4856
# gpg: key FE4B2BDA: public key "Michael Shuler <michael@pbandjelly.org>" imported
49-
A26E528B271F19B9E5D8E19EA278B781FE4B2BDA
50-
RUN set -eux; \
51-
export GNUPGHOME="$(mktemp -d)"; \
52-
for key in $GPG_KEYS; do \
53-
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
54-
done; \
55-
gpg --batch --export $GPG_KEYS > /etc/apt/trusted.gpg.d/cassandra.gpg; \
56-
command -v gpgconf && gpgconf --kill all || :; \
57-
rm -rf "$GNUPGHOME"; \
58-
apt-key list
57+
A26E528B271F19B9E5D8E19EA278B781FE4B2BDA \
58+
# gpg: key E91335D77E3E87CB: public key "Michael Semb Wever <mick@thelastpickle.com>" imported
59+
A4C465FEA0C552561A392A61E91335D77E3E87CB
5960

6061
ENV CASSANDRA_VERSION 2.1.21
62+
ENV CASSANDRA_SHA512 ea2c35f3f9ce2be8eb96df603927c6867613f3e2215132145da2c3015dd1ddf1370d7196ef4485002e7a54fe22c32abd9c659102057f9297b69113bf83d96d0b
6163

6264
RUN set -eux; \
65+
savedAptMark="$(apt-mark showmanual)"; \
66+
apt-get update; \
67+
apt-get install -y --no-install-recommends ca-certificates dirmngr gnupg wget; \
68+
rm -rf /var/lib/apt/lists/*; \
6369
\
64-
# https://bugs.debian.org/877677
65-
# update-alternatives: error: error creating symbolic link '/usr/share/man/man1/rmid.1.gz.dpkg-tmp': No such file or directory
66-
mkdir -p /usr/share/man/man1/; \
70+
ddist() { \
71+
local f="$1"; shift; \
72+
local distFile="$1"; shift; \
73+
local success=; \
74+
local distUrl=; \
75+
for distUrl in \
76+
# https://issues.apache.org/jira/browse/INFRA-8753?focusedCommentId=14735394#comment-14735394
77+
'https://www.apache.org/dyn/closer.cgi?action=download&filename=' \
78+
# if the version is outdated (or we're grabbing the .asc file), we might have to pull from the dist/archive :/
79+
https://www-us.apache.org/dist/ \
80+
https://www.apache.org/dist/ \
81+
https://archive.apache.org/dist/ \
82+
; do \
83+
if wget --progress=dot:giga -O "$f" "$distUrl$distFile" && [ -s "$f" ]; then \
84+
success=1; \
85+
break; \
86+
fi; \
87+
done; \
88+
[ -n "$success" ]; \
89+
}; \
6790
\
68-
dpkgArch="$(dpkg --print-architecture)"; \
69-
case "$dpkgArch" in \
70-
amd64|i386) \
71-
# arches officialy included in upstream's repo metadata
72-
echo 'deb http://www.apache.org/dist/cassandra/debian 21x main' > /etc/apt/sources.list.d/cassandra.list; \
73-
apt-get update; \
74-
;; \
75-
*) \
76-
# we're on an architecture upstream doesn't include in their repo Architectures
77-
# but their provided packages are "Architecture: all" so we can download them directly instead
78-
\
79-
# save a list of installed packages so build deps can be removed cleanly
80-
savedAptMark="$(apt-mark showmanual)"; \
81-
\
82-
# fetch a few build dependencies
83-
apt-get update; \
84-
apt-get install -y --no-install-recommends \
85-
wget ca-certificates \
86-
dpkg-dev \
87-
; \
88-
# we don't remove APT lists here because they get re-downloaded and removed later
89-
\
90-
# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies
91-
# (which is done after we install the built packages so we don't have to redownload any overlapping dependencies)
92-
apt-mark showmanual | xargs apt-mark auto > /dev/null; \
93-
apt-mark manual $savedAptMark; \
94-
\
95-
# download the two "arch: all" packages we need
96-
tempDir="$(mktemp -d)"; \
97-
for pkg in cassandra cassandra-tools; do \
98-
deb="${pkg}_${CASSANDRA_VERSION}_all.deb"; \
99-
wget -O "$tempDir/$deb" "https://www.apache.org/dist/cassandra/debian/pool/main/c/cassandra/$deb"; \
100-
done; \
101-
\
102-
# create a temporary local APT repo to install from (so that dependency resolution can be handled by APT, as it should be)
103-
ls -lAFh "$tempDir"; \
104-
( cd "$tempDir" && dpkg-scanpackages . > Packages ); \
105-
grep '^Package: ' "$tempDir/Packages"; \
106-
echo "deb [ trusted=yes ] file://$tempDir ./" > /etc/apt/sources.list.d/temp.list; \
107-
# work around the following APT issue by using "Acquire::GzipIndexes=false" (overriding "/etc/apt/apt.conf.d/docker-gzip-indexes")
108-
# Could not open file /var/lib/apt/lists/partial/_tmp_tmp.ODWljpQfkE_._Packages - open (13: Permission denied)
109-
# ...
110-
# E: Failed to fetch store:/var/lib/apt/lists/partial/_tmp_tmp.ODWljpQfkE_._Packages Could not open file /var/lib/apt/lists/partial/_tmp_tmp.ODWljpQfkE_._Packages - open (13: Permission denied)
111-
apt-get -o Acquire::GzipIndexes=false update; \
112-
;; \
113-
esac; \
91+
ddist 'cassandra-bin.tgz' "cassandra/$CASSANDRA_VERSION/apache-cassandra-$CASSANDRA_VERSION-bin.tar.gz"; \
92+
echo "$CASSANDRA_SHA512 *cassandra-bin.tgz" | sha512sum --check --strict -; \
11493
\
115-
apt-get install -y \
116-
cassandra="$CASSANDRA_VERSION" \
117-
cassandra-tools="$CASSANDRA_VERSION" \
118-
; \
94+
ddist 'cassandra-bin.tgz.asc' "cassandra/$CASSANDRA_VERSION/apache-cassandra-$CASSANDRA_VERSION-bin.tar.gz.asc"; \
95+
export GNUPGHOME="$(mktemp -d)"; \
96+
for key in $GPG_KEYS; do \
97+
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
98+
done; \
99+
gpg --batch --verify cassandra-bin.tgz.asc cassandra-bin.tgz; \
100+
rm -rf "$GNUPGHOME"; \
119101
\
120-
rm -rf /var/lib/apt/lists/*; \
102+
apt-mark auto '.*' > /dev/null; \
103+
[ -z "$savedAptMark" ] || apt-mark manual $savedAptMark > /dev/null; \
104+
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
121105
\
122-
if [ -n "${tempDir:-}" ]; then \
123-
# if we have leftovers from building, let's purge them (including extra, unnecessary build deps)
124-
apt-get purge -y --auto-remove; \
125-
rm -rf "$tempDir" /etc/apt/sources.list.d/temp.list; \
126-
fi
127-
128-
ENV CASSANDRA_CONFIG /etc/cassandra
129-
130-
RUN set -eux; \
106+
mkdir -p "$CASSANDRA_HOME"; \
107+
tar --extract --file cassandra-bin.tgz --directory "$CASSANDRA_HOME" --strip-components 1; \
108+
rm cassandra-bin.tgz*; \
109+
\
110+
[ ! -e "$CASSANDRA_CONF" ]; \
111+
mv "$CASSANDRA_HOME/conf" "$CASSANDRA_CONF"; \
112+
ln -sT "$CASSANDRA_CONF" "$CASSANDRA_HOME/conf"; \
131113
\
132114
dpkgArch="$(dpkg --print-architecture)"; \
133115
case "$dpkgArch" in \
134116
ppc64el) \
135117
# https://issues.apache.org/jira/browse/CASSANDRA-13345
136118
# "The stack size specified is too small, Specify at least 328k"
137-
if grep -q -- '^-Xss' "$CASSANDRA_CONFIG/jvm.options"; then \
119+
if grep -q -- '^-Xss' "$CASSANDRA_CONF/jvm.options"; then \
138120
# 3.11+ (jvm.options)
139-
grep -- '^-Xss256k$' "$CASSANDRA_CONFIG/jvm.options"; \
140-
sed -ri 's/^-Xss256k$/-Xss512k/' "$CASSANDRA_CONFIG/jvm.options"; \
141-
grep -- '^-Xss512k$' "$CASSANDRA_CONFIG/jvm.options"; \
142-
elif grep -q -- '-Xss256k' "$CASSANDRA_CONFIG/cassandra-env.sh"; then \
121+
grep -- '^-Xss256k$' "$CASSANDRA_CONF/jvm.options"; \
122+
sed -ri 's/^-Xss256k$/-Xss512k/' "$CASSANDRA_CONF/jvm.options"; \
123+
grep -- '^-Xss512k$' "$CASSANDRA_CONF/jvm.options"; \
124+
elif grep -q -- '-Xss256k' "$CASSANDRA_CONF/cassandra-env.sh"; then \
143125
# 3.0 (cassandra-env.sh)
144-
sed -ri 's/-Xss256k/-Xss512k/g' "$CASSANDRA_CONFIG/cassandra-env.sh"; \
145-
grep -- '-Xss512k' "$CASSANDRA_CONFIG/cassandra-env.sh"; \
126+
sed -ri 's/-Xss256k/-Xss512k/g' "$CASSANDRA_CONF/cassandra-env.sh"; \
127+
grep -- '-Xss512k' "$CASSANDRA_CONF/cassandra-env.sh"; \
146128
fi; \
147129
;; \
148130
esac; \
149131
\
150-
# https://issues.apache.org/jira/browse/CASSANDRA-11661
151-
sed -ri 's/^(JVM_PATCH_VERSION)=.*/\1=25/' "$CASSANDRA_CONFIG/cassandra-env.sh"
132+
mkdir -p "$CASSANDRA_CONF" /var/lib/cassandra /var/log/cassandra; \
133+
chown -R cassandra:cassandra "$CASSANDRA_CONF" /var/lib/cassandra /var/log/cassandra; \
134+
chmod 777 "$CASSANDRA_CONF" /var/lib/cassandra /var/log/cassandra; \
135+
ln -sT /var/lib/cassandra "$CASSANDRA_HOME/data"; \
136+
ln -sT /var/log/cassandra "$CASSANDRA_HOME/logs"; \
137+
\
138+
# smoke test
139+
cassandra -v
140+
141+
VOLUME /var/lib/cassandra
152142

153143
COPY docker-entrypoint.sh /usr/local/bin/
154144
RUN ln -s usr/local/bin/docker-entrypoint.sh /docker-entrypoint.sh # backwards compat
155145
ENTRYPOINT ["docker-entrypoint.sh"]
156146

157-
RUN mkdir -p /var/lib/cassandra "$CASSANDRA_CONFIG" \
158-
&& chown -R cassandra:cassandra /var/lib/cassandra "$CASSANDRA_CONFIG" \
159-
&& chmod 777 /var/lib/cassandra "$CASSANDRA_CONFIG"
160-
VOLUME /var/lib/cassandra
161-
162147
# 7000: intra-node communication
163148
# 7001: TLS intra-node communication
164149
# 7199: JMX

2.1/docker-entrypoint.sh

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ fi
99

1010
# allow the container to be started with `--user`
1111
if [ "$1" = 'cassandra' -a "$(id -u)" = '0' ]; then
12-
find /var/lib/cassandra /var/log/cassandra "$CASSANDRA_CONFIG" \
12+
find "$CASSANDRA_CONF" /var/lib/cassandra /var/log/cassandra \
1313
\! -user cassandra -exec chown cassandra '{}' +
1414
exec gosu cassandra "$BASH_SOURCE" "$@"
1515
fi
@@ -56,7 +56,7 @@ if [ "$1" = 'cassandra' ]; then
5656
fi
5757
: ${CASSANDRA_SEEDS:="$CASSANDRA_BROADCAST_ADDRESS"}
5858

59-
_sed-in-place "$CASSANDRA_CONFIG/cassandra.yaml" \
59+
_sed-in-place "$CASSANDRA_CONF/cassandra.yaml" \
6060
-r 's/(- seeds:).*/\1 "'"$CASSANDRA_SEEDS"'"/'
6161

6262
for yaml in \
@@ -72,7 +72,7 @@ if [ "$1" = 'cassandra' ]; then
7272
var="CASSANDRA_${yaml^^}"
7373
val="${!var}"
7474
if [ "$val" ]; then
75-
_sed-in-place "$CASSANDRA_CONFIG/cassandra.yaml" \
75+
_sed-in-place "$CASSANDRA_CONF/cassandra.yaml" \
7676
-r 's/^(# )?('"$yaml"':).*/\2 '"$val"'/'
7777
fi
7878
done
@@ -81,7 +81,7 @@ if [ "$1" = 'cassandra' ]; then
8181
var="CASSANDRA_${rackdc^^}"
8282
val="${!var}"
8383
if [ "$val" ]; then
84-
_sed-in-place "$CASSANDRA_CONFIG/cassandra-rackdc.properties" \
84+
_sed-in-place "$CASSANDRA_CONF/cassandra-rackdc.properties" \
8585
-r 's/^('"$rackdc"'=).*/\1 '"$val"'/'
8686
fi
8787
done

0 commit comments

Comments
 (0)