Skip to content

Commit 03f9ffb

Browse files
authored
Merge pull request #116 from infosiftr/ppc64le
Add support for ppc64le (Cassandra 3.x+ only)
2 parents ebf3186 + e3667b1 commit 03f9ffb

File tree

6 files changed

+424
-50
lines changed

6 files changed

+424
-50
lines changed

2.1/Dockerfile

Lines changed: 84 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ FROM debian:jessie-backports
55
RUN groupadd -r cassandra --gid=999 && useradd -r -g cassandra --uid=999 cassandra
66

77
# grab gosu for easy step-down from root
8-
ENV GOSU_VERSION 1.7
8+
ENV GOSU_VERSION 1.10
99
RUN set -x \
1010
&& apt-get update && apt-get install -y --no-install-recommends ca-certificates wget && rm -rf /var/lib/apt/lists/* \
1111
&& wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \
1212
&& wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \
1313
&& export GNUPGHOME="$(mktemp -d)" \
1414
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
1515
&& gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
16-
&& rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc \
16+
&& rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc \
1717
&& chmod +x /usr/local/bin/gosu \
1818
&& gosu nobody true \
1919
&& apt-get purge -y --auto-remove ca-certificates wget
@@ -43,21 +43,95 @@ RUN set -ex; \
4343
rm -r "$GNUPGHOME"; \
4444
apt-key list
4545

46-
RUN echo 'deb http://www.apache.org/dist/cassandra/debian 21x main' >> /etc/apt/sources.list.d/cassandra.list
47-
4846
ENV CASSANDRA_VERSION 2.1.18
4947

50-
RUN apt-get update \
51-
&& apt-get install -y \
48+
RUN set -ex; \
49+
\
50+
dpkgArch="$(dpkg --print-architecture)"; \
51+
case "$dpkgArch" in \
52+
amd64|i386) \
53+
# arches officialy included in upstream's repo metadata
54+
echo 'deb http://www.apache.org/dist/cassandra/debian 21x main' > /etc/apt/sources.list.d/cassandra.list; \
55+
apt-get update; \
56+
;; \
57+
*) \
58+
# we're on an architecture upstream doesn't include in their repo Architectures
59+
# but their provided packages are "Architecture: all" so we can download them directly instead
60+
\
61+
# save a list of installed packages so build deps can be removed cleanly
62+
savedAptMark="$(apt-mark showmanual)"; \
63+
\
64+
# fetch a few build dependencies
65+
apt-get update; \
66+
apt-get install -y --no-install-recommends \
67+
wget ca-certificates \
68+
dpkg-dev \
69+
; \
70+
# we don't remove APT lists here because they get re-downloaded and removed later
71+
\
72+
# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies
73+
# (which is done after we install the built packages so we don't have to redownload any overlapping dependencies)
74+
apt-mark showmanual | xargs apt-mark auto > /dev/null; \
75+
apt-mark manual $savedAptMark; \
76+
\
77+
# download the two "arch: all" packages we need
78+
tempDir="$(mktemp -d)"; \
79+
for pkg in cassandra cassandra-tools; do \
80+
deb="${pkg}_${CASSANDRA_VERSION}_all.deb"; \
81+
wget -O "$tempDir/$deb" "http://www.apache.org/dist/cassandra/debian/pool/main/c/cassandra/$deb"; \
82+
done; \
83+
\
84+
# create a temporary local APT repo to install from (so that dependency resolution can be handled by APT, as it should be)
85+
ls -lAFh "$tempDir"; \
86+
( cd "$tempDir" && dpkg-scanpackages . > Packages ); \
87+
grep '^Package: ' "$tempDir/Packages"; \
88+
echo "deb [ trusted=yes ] file://$tempDir ./" > /etc/apt/sources.list.d/temp.list; \
89+
# work around the following APT issue by using "Acquire::GzipIndexes=false" (overriding "/etc/apt/apt.conf.d/docker-gzip-indexes")
90+
# Could not open file /var/lib/apt/lists/partial/_tmp_tmp.ODWljpQfkE_._Packages - open (13: Permission denied)
91+
# ...
92+
# 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)
93+
apt-get -o Acquire::GzipIndexes=false update; \
94+
;; \
95+
esac; \
96+
\
97+
apt-get install -y \
5298
cassandra="$CASSANDRA_VERSION" \
5399
cassandra-tools="$CASSANDRA_VERSION" \
54-
&& rm -rf /var/lib/apt/lists/*
55-
56-
# https://issues.apache.org/jira/browse/CASSANDRA-11661
57-
RUN sed -ri 's/^(JVM_PATCH_VERSION)=.*/\1=25/' /etc/cassandra/cassandra-env.sh
100+
; \
101+
\
102+
rm -rf /var/lib/apt/lists/*; \
103+
\
104+
if [ -n "$tempDir" ]; then \
105+
# if we have leftovers from building, let's purge them (including extra, unnecessary build deps)
106+
apt-get purge -y --auto-remove; \
107+
rm -rf "$tempDir" /etc/apt/sources.list.d/temp.list; \
108+
fi
58109

59110
ENV CASSANDRA_CONFIG /etc/cassandra
60111

112+
RUN set -ex; \
113+
\
114+
dpkgArch="$(dpkg --print-architecture)"; \
115+
case "$dpkgArch" in \
116+
ppc64el) \
117+
# https://issues.apache.org/jira/browse/CASSANDRA-13345
118+
# "The stack size specified is too small, Specify at least 328k"
119+
if grep -q -- '^-Xss' "$CASSANDRA_CONFIG/jvm.options"; then \
120+
# 3.11+ (jvm.options)
121+
grep -- '^-Xss256k$' "$CASSANDRA_CONFIG/jvm.options"; \
122+
sed -ri 's/^-Xss256k$/-Xss512k/' "$CASSANDRA_CONFIG/jvm.options"; \
123+
grep -- '^-Xss512k$' "$CASSANDRA_CONFIG/jvm.options"; \
124+
elif grep -q -- '-Xss256k' "$CASSANDRA_CONFIG/cassandra-env.sh"; then \
125+
# 3.0 (cassandra-env.sh)
126+
sed -ri 's/-Xss256k/-Xss512k/g' "$CASSANDRA_CONFIG/cassandra-env.sh"; \
127+
grep -- '-Xss512k' "$CASSANDRA_CONFIG/cassandra-env.sh"; \
128+
fi; \
129+
;; \
130+
esac; \
131+
\
132+
# https://issues.apache.org/jira/browse/CASSANDRA-11661
133+
sed -ri 's/^(JVM_PATCH_VERSION)=.*/\1=25/' "$CASSANDRA_CONFIG/cassandra-env.sh"
134+
61135
COPY docker-entrypoint.sh /docker-entrypoint.sh
62136
ENTRYPOINT ["/docker-entrypoint.sh"]
63137

2.2/Dockerfile

Lines changed: 84 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ FROM debian:jessie-backports
55
RUN groupadd -r cassandra --gid=999 && useradd -r -g cassandra --uid=999 cassandra
66

77
# grab gosu for easy step-down from root
8-
ENV GOSU_VERSION 1.7
8+
ENV GOSU_VERSION 1.10
99
RUN set -x \
1010
&& apt-get update && apt-get install -y --no-install-recommends ca-certificates wget && rm -rf /var/lib/apt/lists/* \
1111
&& wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \
1212
&& wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \
1313
&& export GNUPGHOME="$(mktemp -d)" \
1414
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
1515
&& gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
16-
&& rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc \
16+
&& rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc \
1717
&& chmod +x /usr/local/bin/gosu \
1818
&& gosu nobody true \
1919
&& apt-get purge -y --auto-remove ca-certificates wget
@@ -43,21 +43,95 @@ RUN set -ex; \
4343
rm -r "$GNUPGHOME"; \
4444
apt-key list
4545

46-
RUN echo 'deb http://www.apache.org/dist/cassandra/debian 22x main' >> /etc/apt/sources.list.d/cassandra.list
47-
4846
ENV CASSANDRA_VERSION 2.2.10
4947

50-
RUN apt-get update \
51-
&& apt-get install -y \
48+
RUN set -ex; \
49+
\
50+
dpkgArch="$(dpkg --print-architecture)"; \
51+
case "$dpkgArch" in \
52+
amd64|i386) \
53+
# arches officialy included in upstream's repo metadata
54+
echo 'deb http://www.apache.org/dist/cassandra/debian 22x main' > /etc/apt/sources.list.d/cassandra.list; \
55+
apt-get update; \
56+
;; \
57+
*) \
58+
# we're on an architecture upstream doesn't include in their repo Architectures
59+
# but their provided packages are "Architecture: all" so we can download them directly instead
60+
\
61+
# save a list of installed packages so build deps can be removed cleanly
62+
savedAptMark="$(apt-mark showmanual)"; \
63+
\
64+
# fetch a few build dependencies
65+
apt-get update; \
66+
apt-get install -y --no-install-recommends \
67+
wget ca-certificates \
68+
dpkg-dev \
69+
; \
70+
# we don't remove APT lists here because they get re-downloaded and removed later
71+
\
72+
# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies
73+
# (which is done after we install the built packages so we don't have to redownload any overlapping dependencies)
74+
apt-mark showmanual | xargs apt-mark auto > /dev/null; \
75+
apt-mark manual $savedAptMark; \
76+
\
77+
# download the two "arch: all" packages we need
78+
tempDir="$(mktemp -d)"; \
79+
for pkg in cassandra cassandra-tools; do \
80+
deb="${pkg}_${CASSANDRA_VERSION}_all.deb"; \
81+
wget -O "$tempDir/$deb" "http://www.apache.org/dist/cassandra/debian/pool/main/c/cassandra/$deb"; \
82+
done; \
83+
\
84+
# create a temporary local APT repo to install from (so that dependency resolution can be handled by APT, as it should be)
85+
ls -lAFh "$tempDir"; \
86+
( cd "$tempDir" && dpkg-scanpackages . > Packages ); \
87+
grep '^Package: ' "$tempDir/Packages"; \
88+
echo "deb [ trusted=yes ] file://$tempDir ./" > /etc/apt/sources.list.d/temp.list; \
89+
# work around the following APT issue by using "Acquire::GzipIndexes=false" (overriding "/etc/apt/apt.conf.d/docker-gzip-indexes")
90+
# Could not open file /var/lib/apt/lists/partial/_tmp_tmp.ODWljpQfkE_._Packages - open (13: Permission denied)
91+
# ...
92+
# 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)
93+
apt-get -o Acquire::GzipIndexes=false update; \
94+
;; \
95+
esac; \
96+
\
97+
apt-get install -y \
5298
cassandra="$CASSANDRA_VERSION" \
5399
cassandra-tools="$CASSANDRA_VERSION" \
54-
&& rm -rf /var/lib/apt/lists/*
55-
56-
# https://issues.apache.org/jira/browse/CASSANDRA-11661
57-
RUN sed -ri 's/^(JVM_PATCH_VERSION)=.*/\1=25/' /etc/cassandra/cassandra-env.sh
100+
; \
101+
\
102+
rm -rf /var/lib/apt/lists/*; \
103+
\
104+
if [ -n "$tempDir" ]; then \
105+
# if we have leftovers from building, let's purge them (including extra, unnecessary build deps)
106+
apt-get purge -y --auto-remove; \
107+
rm -rf "$tempDir" /etc/apt/sources.list.d/temp.list; \
108+
fi
58109

59110
ENV CASSANDRA_CONFIG /etc/cassandra
60111

112+
RUN set -ex; \
113+
\
114+
dpkgArch="$(dpkg --print-architecture)"; \
115+
case "$dpkgArch" in \
116+
ppc64el) \
117+
# https://issues.apache.org/jira/browse/CASSANDRA-13345
118+
# "The stack size specified is too small, Specify at least 328k"
119+
if grep -q -- '^-Xss' "$CASSANDRA_CONFIG/jvm.options"; then \
120+
# 3.11+ (jvm.options)
121+
grep -- '^-Xss256k$' "$CASSANDRA_CONFIG/jvm.options"; \
122+
sed -ri 's/^-Xss256k$/-Xss512k/' "$CASSANDRA_CONFIG/jvm.options"; \
123+
grep -- '^-Xss512k$' "$CASSANDRA_CONFIG/jvm.options"; \
124+
elif grep -q -- '-Xss256k' "$CASSANDRA_CONFIG/cassandra-env.sh"; then \
125+
# 3.0 (cassandra-env.sh)
126+
sed -ri 's/-Xss256k/-Xss512k/g' "$CASSANDRA_CONFIG/cassandra-env.sh"; \
127+
grep -- '-Xss512k' "$CASSANDRA_CONFIG/cassandra-env.sh"; \
128+
fi; \
129+
;; \
130+
esac; \
131+
\
132+
# https://issues.apache.org/jira/browse/CASSANDRA-11661
133+
sed -ri 's/^(JVM_PATCH_VERSION)=.*/\1=25/' "$CASSANDRA_CONFIG/cassandra-env.sh"
134+
61135
COPY docker-entrypoint.sh /docker-entrypoint.sh
62136
ENTRYPOINT ["/docker-entrypoint.sh"]
63137

3.0/Dockerfile

Lines changed: 84 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ FROM debian:jessie-backports
55
RUN groupadd -r cassandra --gid=999 && useradd -r -g cassandra --uid=999 cassandra
66

77
# grab gosu for easy step-down from root
8-
ENV GOSU_VERSION 1.7
8+
ENV GOSU_VERSION 1.10
99
RUN set -x \
1010
&& apt-get update && apt-get install -y --no-install-recommends ca-certificates wget && rm -rf /var/lib/apt/lists/* \
1111
&& wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \
1212
&& wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \
1313
&& export GNUPGHOME="$(mktemp -d)" \
1414
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
1515
&& gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
16-
&& rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc \
16+
&& rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc \
1717
&& chmod +x /usr/local/bin/gosu \
1818
&& gosu nobody true \
1919
&& apt-get purge -y --auto-remove ca-certificates wget
@@ -43,21 +43,95 @@ RUN set -ex; \
4343
rm -r "$GNUPGHOME"; \
4444
apt-key list
4545

46-
RUN echo 'deb http://www.apache.org/dist/cassandra/debian 30x main' >> /etc/apt/sources.list.d/cassandra.list
47-
4846
ENV CASSANDRA_VERSION 3.0.14
4947

50-
RUN apt-get update \
51-
&& apt-get install -y \
48+
RUN set -ex; \
49+
\
50+
dpkgArch="$(dpkg --print-architecture)"; \
51+
case "$dpkgArch" in \
52+
amd64|i386) \
53+
# arches officialy included in upstream's repo metadata
54+
echo 'deb http://www.apache.org/dist/cassandra/debian 30x main' > /etc/apt/sources.list.d/cassandra.list; \
55+
apt-get update; \
56+
;; \
57+
*) \
58+
# we're on an architecture upstream doesn't include in their repo Architectures
59+
# but their provided packages are "Architecture: all" so we can download them directly instead
60+
\
61+
# save a list of installed packages so build deps can be removed cleanly
62+
savedAptMark="$(apt-mark showmanual)"; \
63+
\
64+
# fetch a few build dependencies
65+
apt-get update; \
66+
apt-get install -y --no-install-recommends \
67+
wget ca-certificates \
68+
dpkg-dev \
69+
; \
70+
# we don't remove APT lists here because they get re-downloaded and removed later
71+
\
72+
# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies
73+
# (which is done after we install the built packages so we don't have to redownload any overlapping dependencies)
74+
apt-mark showmanual | xargs apt-mark auto > /dev/null; \
75+
apt-mark manual $savedAptMark; \
76+
\
77+
# download the two "arch: all" packages we need
78+
tempDir="$(mktemp -d)"; \
79+
for pkg in cassandra cassandra-tools; do \
80+
deb="${pkg}_${CASSANDRA_VERSION}_all.deb"; \
81+
wget -O "$tempDir/$deb" "http://www.apache.org/dist/cassandra/debian/pool/main/c/cassandra/$deb"; \
82+
done; \
83+
\
84+
# create a temporary local APT repo to install from (so that dependency resolution can be handled by APT, as it should be)
85+
ls -lAFh "$tempDir"; \
86+
( cd "$tempDir" && dpkg-scanpackages . > Packages ); \
87+
grep '^Package: ' "$tempDir/Packages"; \
88+
echo "deb [ trusted=yes ] file://$tempDir ./" > /etc/apt/sources.list.d/temp.list; \
89+
# work around the following APT issue by using "Acquire::GzipIndexes=false" (overriding "/etc/apt/apt.conf.d/docker-gzip-indexes")
90+
# Could not open file /var/lib/apt/lists/partial/_tmp_tmp.ODWljpQfkE_._Packages - open (13: Permission denied)
91+
# ...
92+
# 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)
93+
apt-get -o Acquire::GzipIndexes=false update; \
94+
;; \
95+
esac; \
96+
\
97+
apt-get install -y \
5298
cassandra="$CASSANDRA_VERSION" \
5399
cassandra-tools="$CASSANDRA_VERSION" \
54-
&& rm -rf /var/lib/apt/lists/*
55-
56-
# https://issues.apache.org/jira/browse/CASSANDRA-11661
57-
RUN sed -ri 's/^(JVM_PATCH_VERSION)=.*/\1=25/' /etc/cassandra/cassandra-env.sh
100+
; \
101+
\
102+
rm -rf /var/lib/apt/lists/*; \
103+
\
104+
if [ -n "$tempDir" ]; then \
105+
# if we have leftovers from building, let's purge them (including extra, unnecessary build deps)
106+
apt-get purge -y --auto-remove; \
107+
rm -rf "$tempDir" /etc/apt/sources.list.d/temp.list; \
108+
fi
58109

59110
ENV CASSANDRA_CONFIG /etc/cassandra
60111

112+
RUN set -ex; \
113+
\
114+
dpkgArch="$(dpkg --print-architecture)"; \
115+
case "$dpkgArch" in \
116+
ppc64el) \
117+
# https://issues.apache.org/jira/browse/CASSANDRA-13345
118+
# "The stack size specified is too small, Specify at least 328k"
119+
if grep -q -- '^-Xss' "$CASSANDRA_CONFIG/jvm.options"; then \
120+
# 3.11+ (jvm.options)
121+
grep -- '^-Xss256k$' "$CASSANDRA_CONFIG/jvm.options"; \
122+
sed -ri 's/^-Xss256k$/-Xss512k/' "$CASSANDRA_CONFIG/jvm.options"; \
123+
grep -- '^-Xss512k$' "$CASSANDRA_CONFIG/jvm.options"; \
124+
elif grep -q -- '-Xss256k' "$CASSANDRA_CONFIG/cassandra-env.sh"; then \
125+
# 3.0 (cassandra-env.sh)
126+
sed -ri 's/-Xss256k/-Xss512k/g' "$CASSANDRA_CONFIG/cassandra-env.sh"; \
127+
grep -- '-Xss512k' "$CASSANDRA_CONFIG/cassandra-env.sh"; \
128+
fi; \
129+
;; \
130+
esac; \
131+
\
132+
# https://issues.apache.org/jira/browse/CASSANDRA-11661
133+
sed -ri 's/^(JVM_PATCH_VERSION)=.*/\1=25/' "$CASSANDRA_CONFIG/cassandra-env.sh"
134+
61135
COPY docker-entrypoint.sh /docker-entrypoint.sh
62136
ENTRYPOINT ["/docker-entrypoint.sh"]
63137

0 commit comments

Comments
 (0)