Skip to content

Commit 22a13e8

Browse files
authored
Add Autotools build Dockerfiles (#386)
To make local Autotools build testing easier.
1 parent 460efcc commit 22a13e8

7 files changed

Lines changed: 461 additions & 1 deletion

File tree

.dockerignore

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,11 @@
99
!src
1010
!tests
1111
!utils/example-map
12+
13+
# AutoTools
14+
!autogen.sh
15+
!configure.ac
16+
!etc/renderd/renderd.conf
17+
!m4
18+
!Makefile.am
19+
!modules.mk

.github/workflows/docker-image-build.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ jobs:
2121
- debian-11
2222
- debian-12
2323
- debian-testing
24+
- debian-testing-autotools
2425
- fedora-38
2526
- fedora-39
2627
- fedora-rawhide
@@ -29,6 +30,7 @@ jobs:
2930
- ubuntu-20.04
3031
- ubuntu-22.04
3132
- ubuntu-devel
33+
- ubuntu-devel-autotools
3234
fail-fast: false
3335
steps:
3436
- name: Checkout repository
Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
# Arguments
2+
ARG centos_stream_version
3+
ARG extra_repository
4+
ARG mapnik_version=3.1.0
5+
6+
# Mapnik Builder
7+
FROM quay.io/centos/centos:stream${centos_stream_version} as mapnik-builder
8+
9+
## Arguments
10+
ARG centos_stream_version
11+
ARG extra_repository
12+
ARG mapnik_version
13+
14+
## Install mapnik-builder dependencies
15+
RUN --mount=id=centos:stream${centos_stream_version}-/var/cache/dnf,target=/var/cache/dnf,type=cache,sharing=locked \
16+
echo "install_weak_deps=False" >> /etc/dnf/dnf.conf && \
17+
echo "keepcache=True" >> /etc/dnf/dnf.conf && \
18+
dnf --assumeyes install "dnf-command(config-manager)" && \
19+
dnf config-manager --save \
20+
--setopt=${extra_repository}.enabled=1 && \
21+
dnf --assumeyes install epel-release && \
22+
dnf --assumeyes upgrade && \
23+
dnf --assumeyes install \
24+
boost-devel \
25+
bzip2 \
26+
cairo-devel \
27+
freetype-devel \
28+
gcc \
29+
gcc-c++ \
30+
gdal-devel \
31+
harfbuzz-devel \
32+
libicu-devel \
33+
libjpeg-devel \
34+
libpng-devel \
35+
libtiff-devel \
36+
libwebp-devel \
37+
libxml2-devel \
38+
make \
39+
patch \
40+
postgresql-devel \
41+
proj-devel \
42+
python3 \
43+
python3-scons \
44+
sqlite-devel \
45+
tar \
46+
zlib-devel
47+
48+
## Download, Build & Install `Mapnik`
49+
WORKDIR /usr/local/src/mapnik
50+
RUN --mount=id=centos:stream${centos_stream_version}-mapnik:${mapnik_version},target=/usr/local/src/mapnik,type=cache \
51+
export DESTDIR="/tmp/mapnik"; \
52+
export GDAL_DATA="$(gdal-config --datadir)"; \
53+
export JOBS="$(nproc)"; \
54+
export PROJ_LIB="/usr/share/proj"; \
55+
export PYTHON="python3"; \
56+
mkdir --parents ${GDAL_DATA} ${PROJ_LIB}; \
57+
if [ ! -f SConstruct ]; then \
58+
curl --silent --location https://github.com/mapnik/mapnik/releases/download/v${mapnik_version}/mapnik-v${mapnik_version}.tar.bz2 \
59+
| tar --extract --bzip2 --strip-components=1 --file=-; \
60+
if [ "${centos_stream_version}" = "9" ]; then \
61+
curl --silent --location https://github.com/mapnik/mapnik/commit/8944e81367d2b3b91a41e24116e1813c01491e5d.patch \
62+
| patch -Np1; \
63+
curl --silent --location https://github.com/mapnik/mapnik/commit/83779b7b6bdd229740b1b5e12a4a8fe27114cb7d.patch \
64+
| patch -F3 -Np1; \
65+
fi \
66+
fi; \
67+
if [ "${centos_stream_version}" = "8" ]; then \
68+
export SCONS_CMD="scons-3"; \
69+
export CUSTOM_CFLAGS="-DACCEPT_USE_OF_DEPRECATED_PROJ_API_H"; \
70+
export CUSTOM_CXXFLAGS="-DACCEPT_USE_OF_DEPRECATED_PROJ_API_H"; \
71+
fi; \
72+
${SCONS_CMD:-scons} configure \
73+
CPP_TESTS=False \
74+
CUSTOM_CFLAGS="${CUSTOM_CFLAGS:-}" \
75+
CUSTOM_CXXFLAGS="${CUSTOM_CXXFLAGS:-}" \
76+
CUSTOM_LDFLAGS="${CUSTOM_LDFLAGS:-}" \
77+
DEMO=False \
78+
DESTDIR="${DESTDIR}" \
79+
FAST=True \
80+
INPUT_PLUGINS=all \
81+
LIBDIR_SCHEMA=lib64 \
82+
OPTIMIZATION=2 \
83+
PREFIX=/usr \
84+
SVG2PNG=True \
85+
XMLPARSER=libxml2 && \
86+
make PYTHON="${PYTHON}" && \
87+
make install PYTHON="${PYTHON}"
88+
89+
# Builder
90+
FROM quay.io/centos/centos:stream${centos_stream_version} as builder
91+
92+
## Arguments
93+
ARG centos_stream_version
94+
ARG extra_repository
95+
96+
## Install builder dependencies
97+
RUN --mount=id=centos:stream${centos_stream_version}-/var/cache/dnf,target=/var/cache/dnf,type=cache,sharing=locked \
98+
echo "install_weak_deps=False" >> /etc/dnf/dnf.conf && \
99+
echo "keepcache=True" >> /etc/dnf/dnf.conf && \
100+
dnf --assumeyes install "dnf-command(config-manager)" && \
101+
dnf config-manager --save \
102+
--setopt=${extra_repository}.enabled=1 && \
103+
dnf --assumeyes install epel-release && \
104+
dnf --assumeyes upgrade && \
105+
dnf --assumeyes install \
106+
automake \
107+
boost-devel \
108+
cairo-devel \
109+
gcc \
110+
gcc-c++ \
111+
gdal \
112+
glib2-devel \
113+
harfbuzz-devel \
114+
httpd-devel \
115+
iniparser-devel \
116+
libcurl-devel \
117+
libicu-devel \
118+
libjpeg-devel \
119+
libmemcached-devel \
120+
librados2-devel \
121+
libtiff-devel \
122+
libwebp-devel \
123+
libxml2-devel \
124+
make \
125+
proj-devel \
126+
redhat-rpm-config \
127+
sqlite-devel
128+
129+
## Copy files from builder(s)
130+
### Mapnik
131+
COPY --from=mapnik-builder /tmp/mapnik /
132+
133+
## Build, Test & Install `mod_tile`
134+
COPY . /tmp/mod_tile_src
135+
WORKDIR /tmp/mod_tile_src
136+
RUN ./autogen.sh && \
137+
./configure && \
138+
make
139+
RUN export DESTDIR=/tmp/mod_tile && \
140+
./gen_tile_test && \
141+
make DESTDIR=${DESTDIR} install install-mod_tile
142+
143+
# Runner
144+
FROM quay.io/centos/centos:stream${centos_stream_version} as runner
145+
146+
## Arguments
147+
ARG centos_stream_version
148+
ARG extra_repository
149+
150+
## Install runner dependencies
151+
RUN --mount=id=centos:stream${centos_stream_version}-/var/cache/dnf,target=/var/cache/dnf,type=cache,sharing=locked \
152+
echo "install_weak_deps=False" >> /etc/dnf/dnf.conf && \
153+
echo "keepcache=True" >> /etc/dnf/dnf.conf && \
154+
dnf --assumeyes install "dnf-command(config-manager)" && \
155+
dnf config-manager --save \
156+
--setopt=${extra_repository}.enabled=1 && \
157+
dnf --assumeyes install epel-release && \
158+
dnf --assumeyes upgrade && \
159+
dnf --assumeyes install \
160+
boost-filesystem \
161+
boost-program-options \
162+
boost-regex \
163+
cairo \
164+
gdal \
165+
harfbuzz \
166+
httpd \
167+
iniparser \
168+
libicu \
169+
libmemcached \
170+
librados2 \
171+
libtiff \
172+
libwebp \
173+
proj
174+
175+
## Copy files from builder(s)
176+
### Mapnik
177+
COPY --from=mapnik-builder /tmp/mapnik /
178+
### mod_tile
179+
COPY --from=builder /tmp/mod_tile /
180+
COPY --chown=apache:apache --from=builder \
181+
/tmp/mod_tile_src/utils/example-map \
182+
/usr/share/renderd/example-map
183+
COPY --from=builder \
184+
/tmp/mod_tile_src/etc/apache2/renderd-example-map.conf \
185+
/etc/httpd/conf.d/renderd-example-map.conf
186+
187+
RUN printf "LoadModule tile_module $(find /usr -name mod_tile.so)\n" > /etc/httpd/conf.modules.d/11-tile.conf
188+
189+
RUN sed \
190+
--expression "s#/usr/lib/mapnik/3.1/input#$(find /usr -mindepth 1 -type d -name input)#g" \
191+
--expression "s#/usr/share/fonts/truetype#/usr/share/fonts#g" \
192+
/usr/local/etc/renderd.conf > /etc/renderd.conf && \
193+
printf '\n[example-map]\nURI=/tiles/renderd-example\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
194+
195+
RUN mkdir --parents /run/renderd /var/cache/renderd/tiles
196+
197+
CMD /usr/sbin/httpd -e debug -k start; \
198+
G_MESSAGES_DEBUG=${G_MESSAGES_DEBUG:-info} renderd --foreground

docker/debian/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ RUN export DESTDIR=/tmp/mod_tile && \
4747
FROM debian:${debian_version} as runner
4848

4949
## Arguments
50-
ARG libmapnik_version
5150
ARG debian_version
51+
ARG libmapnik_version
5252

5353
## Install runner dependencies
5454
RUN --mount=id=debian:${debian_version}-/var/cache/apt,sharing=locked,target=/var/cache/apt,type=cache \

docker/debian/Dockerfile.autotools

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
# Arguments
2+
ARG debian_version=12
3+
ARG libmapnik_version=3.1
4+
5+
# Builder
6+
FROM debian:${debian_version} as builder
7+
8+
## Arguments
9+
ARG debian_version
10+
11+
## Install builder dependencies
12+
RUN --mount=id=debian:${debian_version}-/var/cache/apt,sharing=locked,target=/var/cache/apt,type=cache \
13+
--mount=id=debian:${debian_version}-/var/lib/apt,sharing=locked,target=/var/lib/apt,type=cache \
14+
export DEBIAN_FRONTEND=noninteractive && \
15+
apt-get --yes update && \
16+
apt-get --yes upgrade && \
17+
apt-get --no-install-recommends --yes install \
18+
apache2 \
19+
apache2-dev \
20+
curl \
21+
g++ \
22+
gcc \
23+
libcairo2-dev \
24+
libcurl4-openssl-dev \
25+
libglib2.0-dev \
26+
libiniparser-dev \
27+
libmapnik-dev \
28+
libmemcached-dev \
29+
librados-dev \
30+
netbase
31+
32+
## Build, Test & Install `mod_tile`
33+
COPY . /tmp/mod_tile_src
34+
WORKDIR /tmp/mod_tile_src
35+
RUN ./autogen.sh && \
36+
./configure && \
37+
make
38+
RUN export DESTDIR=/tmp/mod_tile && \
39+
./gen_tile_test && \
40+
make DESTDIR=${DESTDIR} install install-mod_tile
41+
42+
# Runner
43+
FROM debian:${debian_version} as runner
44+
45+
## Arguments
46+
ARG debian_version
47+
ARG libmapnik_version
48+
49+
## Install runner dependencies
50+
RUN --mount=id=debian:${debian_version}-/var/cache/apt,sharing=locked,target=/var/cache/apt,type=cache \
51+
--mount=id=debian:${debian_version}-/var/lib/apt,sharing=locked,target=/var/lib/apt,type=cache \
52+
export DEBIAN_FRONTEND=noninteractive && \
53+
apt-get --yes update && \
54+
apt-get --yes upgrade && \
55+
apt-get --no-install-recommends --yes install \
56+
apache2 \
57+
libcairo2 \
58+
libcurl4 \
59+
libglib2.0 \
60+
libiniparser1 \
61+
libmapnik${libmapnik_version} \
62+
libmemcached11 \
63+
librados2
64+
65+
## Copy files from builder(s)
66+
### mod_tile
67+
COPY --from=builder /tmp/mod_tile /
68+
COPY --from=builder \
69+
/tmp/mod_tile_src/utils/example-map \
70+
/usr/share/renderd/example-map
71+
COPY --from=builder \
72+
/tmp/mod_tile_src/etc/apache2/renderd-example-map.conf \
73+
/etc/apache2/sites-available/renderd-example-map.conf
74+
75+
## Fix mapnik directories
76+
RUN sed \
77+
--expression "s#/usr/lib/mapnik/3.1/input#$(find /usr -mindepth 1 -type d -name input)#g" \
78+
--expression "s#/usr/share/fonts/truetype#/usr/share/fonts#g" \
79+
/usr/local/etc/renderd.conf > /etc/renderd.conf
80+
81+
## Add configuration
82+
RUN printf "LoadModule tile_module $(find /usr -name mod_tile.so)\n" > /etc/apache2/mods-available/tile.load
83+
RUN printf '\n[example-map]\nURI=/tiles/renderd-example\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
84+
RUN printf '\n[example-map-jpg]\nTYPE=jpg image/jpeg jpeg\nURI=/tiles/renderd-example-jpg\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
85+
RUN printf '\n[example-map-png256]\nTYPE=png image/png png256\nURI=/tiles/renderd-example-png256\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
86+
RUN printf '\n[example-map-png32]\nTYPE=png image/png png32\nURI=/tiles/renderd-example-png32\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
87+
RUN printf '\n[example-map-webp]\nTYPE=webp image/webp webp\nURI=/tiles/renderd-example-webp\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
88+
89+
## Create missing directories
90+
RUN mkdir --parents /run/renderd /var/cache/renderd/tiles
91+
92+
## Enable module & site
93+
RUN a2enmod tile && \
94+
a2ensite renderd-example-map
95+
96+
## Start services
97+
CMD apachectl -e debug -k start; \
98+
G_MESSAGES_DEBUG=${G_MESSAGES_DEBUG:-info} renderd --foreground

0 commit comments

Comments
 (0)