Skip to content

Commit 2f7ac3a

Browse files
authored
Merge pull request #135 from infosiftr/passenger-native-support
Pre-build "passenger_native_support.so" (for more performant passenger)
2 parents 71d5a45 + 4f5873e commit 2f7ac3a

File tree

4 files changed

+78
-44
lines changed

4 files changed

+78
-44
lines changed

3.3/passenger/Dockerfile

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,29 @@ FROM redmine:3.3
22

33
ENV PASSENGER_VERSION 5.3.5
44

5-
RUN buildDeps=' \
5+
RUN set -eux; \
6+
\
7+
savedAptMark="$(apt-mark showmanual)"; \
8+
apt-get update; \
9+
apt-get install -y --no-install-recommends \
10+
gcc \
611
make \
7-
' \
8-
&& set -x \
9-
&& apt-get update && apt-get install -y --no-install-recommends $buildDeps && rm -rf /var/lib/apt/lists/* \
10-
&& gem install passenger --version "$PASSENGER_VERSION" \
11-
&& apt-get purge -y --auto-remove $buildDeps
12+
; \
13+
rm -rf /var/lib/apt/lists/*; \
14+
\
15+
gem install passenger --version "$PASSENGER_VERSION"; \
16+
# pre-build "passenger_native_support.so" while we have the compiler toolchain available
17+
passenger-config build-native-support; \
18+
# the above command always exits with a zero exit code, but if we run it again and it was successful, it'll have empty output (that's the best way I can find to verify that it's worked)
19+
if [ -n "$(passenger-config build-native-support 2>&1)" ]; then cat /tmp/passenger_native_support-*.log; false; fi; \
20+
\
21+
apt-mark auto '.*' > /dev/null; \
22+
[ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; \
23+
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false
1224

1325
# pre-download the PassengerAgent and the NGINX engine
14-
RUN set -x \
15-
&& passenger-config install-agent \
16-
&& passenger-config download-nginx-engine
26+
RUN set -eux; \
27+
passenger-config install-agent; \
28+
passenger-config download-nginx-engine
1729

1830
CMD ["passenger", "start"]

3.4/passenger/Dockerfile

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,29 @@ FROM redmine:3.4
22

33
ENV PASSENGER_VERSION 5.3.5
44

5-
RUN buildDeps=' \
5+
RUN set -eux; \
6+
\
7+
savedAptMark="$(apt-mark showmanual)"; \
8+
apt-get update; \
9+
apt-get install -y --no-install-recommends \
10+
gcc \
611
make \
7-
' \
8-
&& set -x \
9-
&& apt-get update && apt-get install -y --no-install-recommends $buildDeps && rm -rf /var/lib/apt/lists/* \
10-
&& gem install passenger --version "$PASSENGER_VERSION" \
11-
&& apt-get purge -y --auto-remove $buildDeps
12+
; \
13+
rm -rf /var/lib/apt/lists/*; \
14+
\
15+
gem install passenger --version "$PASSENGER_VERSION"; \
16+
# pre-build "passenger_native_support.so" while we have the compiler toolchain available
17+
passenger-config build-native-support; \
18+
# the above command always exits with a zero exit code, but if we run it again and it was successful, it'll have empty output (that's the best way I can find to verify that it's worked)
19+
if [ -n "$(passenger-config build-native-support 2>&1)" ]; then cat /tmp/passenger_native_support-*.log; false; fi; \
20+
\
21+
apt-mark auto '.*' > /dev/null; \
22+
[ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; \
23+
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false
1224

1325
# pre-download the PassengerAgent and the NGINX engine
14-
RUN set -x \
15-
&& passenger-config install-agent \
16-
&& passenger-config download-nginx-engine
26+
RUN set -eux; \
27+
passenger-config install-agent; \
28+
passenger-config download-nginx-engine
1729

1830
CMD ["passenger", "start"]

Dockerfile-passenger.template

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,29 @@ FROM %%REDMINE%%
22

33
ENV PASSENGER_VERSION %%PASSENGER_VERSION%%
44

5-
RUN buildDeps=' \
5+
RUN set -eux; \
6+
\
7+
savedAptMark="$(apt-mark showmanual)"; \
8+
apt-get update; \
9+
apt-get install -y --no-install-recommends \
10+
gcc \
611
make \
7-
' \
8-
&& set -x \
9-
&& apt-get update && apt-get install -y --no-install-recommends $buildDeps && rm -rf /var/lib/apt/lists/* \
10-
&& gem install passenger --version "$PASSENGER_VERSION" \
11-
&& apt-get purge -y --auto-remove $buildDeps
12+
; \
13+
rm -rf /var/lib/apt/lists/*; \
14+
\
15+
gem install passenger --version "$PASSENGER_VERSION"; \
16+
# pre-build "passenger_native_support.so" while we have the compiler toolchain available
17+
passenger-config build-native-support; \
18+
# the above command always exits with a zero exit code, but if we run it again and it was successful, it'll have empty output (that's the best way I can find to verify that it's worked)
19+
if [ -n "$(passenger-config build-native-support 2>&1)" ]; then cat /tmp/passenger_native_support-*.log; false; fi; \
20+
\
21+
apt-mark auto '.*' > /dev/null; \
22+
[ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; \
23+
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false
1224

1325
# pre-download the PassengerAgent and the NGINX engine
14-
RUN set -x \
15-
&& passenger-config install-agent \
16-
&& passenger-config download-nginx-engine
26+
RUN set -eux; \
27+
passenger-config install-agent; \
28+
passenger-config download-nginx-engine
1729

1830
CMD ["passenger", "start"]

update.sh

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
#!/bin/bash
2-
set -eo pipefail
1+
#!/usr/bin/env bash
2+
set -Eeuo pipefail
33

44
# see https://www.redmine.org/projects/redmine/wiki/redmineinstall
55
defaultRubyVersion='2.4'
@@ -16,31 +16,29 @@ fi
1616
versions=( "${versions[@]%/}" )
1717

1818
relasesUrl='https://www.redmine.org/releases'
19-
versionsPage=$(curl -fsSL "$relasesUrl")
19+
versionsPage="$(wget -qO- "$relasesUrl")"
2020

21-
passenger="$(curl -fsSL 'https://rubygems.org/api/v1/gems/passenger.json' | sed -r 's/^.*"version":"([^"]+)".*$/\1/')"
21+
passenger="$(wget -qO- 'https://rubygems.org/api/v1/gems/passenger.json' | sed -r 's/^.*"version":"([^"]+)".*$/\1/')"
2222

2323
travisEnv=
2424
for version in "${versions[@]}"; do
2525
fullVersion="$(echo $versionsPage | sed -r "s/.*($version\.[0-9]+)\.tar\.gz[^.].*/\1/" | sort -V | tail -1)"
26-
md5="$(curl -fsSL "$relasesUrl/redmine-$fullVersion.tar.gz.md5" | cut -d' ' -f1)"
26+
md5="$(wget -qO- "$relasesUrl/redmine-$fullVersion.tar.gz.md5" | cut -d' ' -f1)"
2727

2828
rubyVersion="${rubyVersions[$version]:-$defaultRubyVersion}"
2929

30-
(
31-
set -x
30+
echo "$version: $fullVersion (ruby $rubyVersion; passenger $passenger)"
3231

33-
cp docker-entrypoint.sh "$version/"
34-
sed -e 's/%%REDMINE_VERSION%%/'"$fullVersion"'/' \
35-
-e 's/%%RUBY_VERSION%%/'"$rubyVersion"'/' \
36-
-e 's/%%REDMINE_DOWNLOAD_MD5%%/'"$md5"'/' \
37-
Dockerfile.template > "$version/Dockerfile"
32+
cp docker-entrypoint.sh "$version/"
33+
sed -e 's/%%REDMINE_VERSION%%/'"$fullVersion"'/' \
34+
-e 's/%%RUBY_VERSION%%/'"$rubyVersion"'/' \
35+
-e 's/%%REDMINE_DOWNLOAD_MD5%%/'"$md5"'/' \
36+
Dockerfile.template > "$version/Dockerfile"
3837

39-
mkdir -p "$version/passenger"
40-
sed -e 's/%%REDMINE%%/redmine:'"$version"'/' \
41-
-e 's/%%PASSENGER_VERSION%%/'"$passenger"'/' \
42-
Dockerfile-passenger.template > "$version/passenger/Dockerfile"
43-
)
38+
mkdir -p "$version/passenger"
39+
sed -e 's/%%REDMINE%%/redmine:'"$version"'/' \
40+
-e 's/%%PASSENGER_VERSION%%/'"$passenger"'/' \
41+
Dockerfile-passenger.template > "$version/passenger/Dockerfile"
4442

4543
travisEnv='\n - VERSION='"$version$travisEnv"
4644
done

0 commit comments

Comments
 (0)