Skip to content

Commit 4ea8729

Browse files
hummeltechpantierra
authored andcommitted
Added build & test on CentOS 7
* Requires building `Mapnik` * Which requires these `EPEL` repository packages * `boost169-devel` + dependencies * `gdal-devel` + dependencies * `proj-devel` + dependencies * Caches `Mapnik` build directory * Takes about 20-30 minutes without cache * Takes about 5-10 minutes with cache * Runs on `push` to `centos7` branch & `pull_request` * Includes very basic build documentation
1 parent 7c4081d commit 4ea8729

File tree

2 files changed

+206
-0
lines changed

2 files changed

+206
-0
lines changed
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
---
2+
name: Build & Test (CentOS 7)
3+
4+
on:
5+
pull_request:
6+
push:
7+
branches:
8+
- centos7
9+
10+
env:
11+
build-dependencies: >-
12+
boost169-devel
13+
cairo-devel
14+
freetype-devel
15+
gdal-devel
16+
glib2-devel
17+
harfbuzz-devel
18+
httpd-devel
19+
iniparser-devel
20+
libcurl-devel
21+
libicu-devel
22+
libjpeg-turbo-devel
23+
libmemcached-devel
24+
libpng-devel
25+
librados2-devel
26+
libtiff-devel
27+
libwebp-devel
28+
libxml2-devel
29+
postgresql-devel
30+
proj-devel
31+
sqlite-devel
32+
zlib-devel
33+
mapnik-version: 3.0.24
34+
35+
jobs:
36+
build-and-test:
37+
name: Build & Test
38+
runs-on: ubuntu-latest
39+
container:
40+
image: centos:7
41+
env:
42+
LD_LIBRARY_PATH: /usr/local/lib
43+
steps:
44+
- name: Checkout code
45+
uses: actions/checkout@v2
46+
- name: Install `EPEL` yum repository
47+
uses: ./.github/actions/yum/install
48+
with:
49+
packages: epel-release
50+
- name: Provision environment
51+
uses: ./.github/actions/yum/provision
52+
with:
53+
packages: ${{ env.build-dependencies }}
54+
- name: Cache "Download `Mapnik`" & "Build & Install `Mapnik`"
55+
id: cache-mapnik
56+
uses: actions/cache@v2
57+
with:
58+
path: /usr/local/src/mapnik-${{ env.mapnik-version }}
59+
key: centos-7-mapnik-${{ env.mapnik-version }}
60+
- name: Download `Mapnik`
61+
if: steps.cache-mapnik.outputs.cache-hit != 'true'
62+
run: |
63+
mkdir /usr/local/src/mapnik-${{ env.mapnik-version }}
64+
cd /usr/local/src/mapnik-${{ env.mapnik-version }}
65+
curl --silent --location \
66+
https://github.com/mapnik/mapnik/releases/download/v${{ env.mapnik-version }}/mapnik-v${{ env.mapnik-version }}.tar.bz2 \
67+
| tar --verbose --extract --bzip2 --strip-components=1 --file=-
68+
- name: Build & Install `Mapnik`
69+
run: |
70+
# Export `GDAL_DATA` & `PROJ_LIB` variables and create directories (if needed)
71+
export GDAL_DATA=$(gdal-config --datadir)
72+
export PROJ_LIB=/usr/share/proj
73+
mkdir -p ${GDAL_DATA} ${PROJ_LIB}
74+
cd /usr/local/src/mapnik-${{ env.mapnik-version }}
75+
./configure BOOST_INCLUDES=/usr/include/boost169 BOOST_LIBS=/usr/lib64/boost169
76+
JOBS=$(nproc) make
77+
make install
78+
- name: Link `iniparser.h` to `iniparser/iniparser.h`
79+
run: |
80+
mkdir /usr/include/iniparser
81+
ln -s /usr/include/iniparser.h /usr/include/iniparser/iniparser.h
82+
- name: Run `./autogen.sh`
83+
run: ./autogen.sh
84+
- name: Run `./configure`
85+
run: ./configure
86+
- name: Run `make`
87+
run: make
88+
- name: Run `make test`
89+
run: make test
90+
- name: Configure Apache HTTP Server
91+
run: |
92+
mkdir --parents /usr/share/javascript/leaflet
93+
curl --silent \
94+
"https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/leaflet.js" \
95+
> /usr/share/javascript/leaflet/leaflet.min.js
96+
curl --silent \
97+
"https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/leaflet.css" \
98+
> /usr/share/javascript/leaflet/leaflet.css
99+
mkdir --parents /run/renderd /var/cache/renderd/tiles
100+
ln --symbolic \
101+
"${PWD}/utils/example-map" \
102+
/var/www/
103+
ln --symbolic \
104+
/usr/share/javascript/leaflet \
105+
/var/www/example-map/leaflet
106+
ln --symbolic \
107+
"${PWD}/etc/renderd/renderd.conf.examples" \
108+
/etc/renderd.conf
109+
ln --symbolic \
110+
"${PWD}/etc/apache2/renderd.conf" \
111+
/etc/httpd/conf.d/renderd.conf
112+
ln --symbolic \
113+
"${PWD}/etc/apache2/renderd-example-map.conf" \
114+
/etc/httpd/conf.d/renderd-example-map.conf
115+
echo "LoadModule tile_module /usr/lib64/httpd/modules/mod_tile.so" \
116+
| tee --append /etc/httpd/conf.modules.d/11-mod_tile.conf
117+
sed --in-place \
118+
"s#/usr/lib/mapnik/3.0/input#/usr/local/lib/mapnik/input#g" \
119+
/etc/renderd.conf
120+
sed --in-place \
121+
"s#/usr/share/fonts/truetype#/usr/share/fonts#g" \
122+
/etc/renderd.conf
123+
rm --force /etc/httpd/conf.d/welcome.conf
124+
- name: Run `make install`
125+
run: make install
126+
- name: Run `make install-mod_tile`
127+
run: make install-mod_tile
128+
- name: Start `renderd`
129+
run: renderd
130+
- name: Start Apache HTTP Server
131+
run: httpd
132+
- name: Test Apache HTTP Server `mod_tile` module
133+
run: |
134+
curl --silent http://localhost/renderd-example/tiles/9/297/191.png \
135+
| sha224sum - \
136+
| grep 9cd82e5af9d9002a1c75126ebdb7bf054ec0b7ed0db228dfb0a09bae

docs/building_on_centos_7.md

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# Building on CentOS 7
2+
3+
As `CentOS 7` does not provide any `mapnik`/`mapnik-devel` packages in the official repository (nor are any available from `EPEL`,) it must therefore be built and installed before `mod_tile` can be built. Although `boost-devel` is present in the official repository, the version available there (`1.53.0`) is not in [mapnik's recommended dependency list](https://github.com/mapnik/mapnik/blob/v3.0.24/INSTALL.md#depends), so the `boost169-devel` package from `EPEL` should probably be used instead.
4+
5+
```shell
6+
#!/usr/bin/env bash
7+
export LD_LIBRARY_PATH=/usr/local/lib
8+
export MAPNIK_VERSION=3.0.24
9+
10+
# Install `EPEL` yum repository
11+
yum --assumeyes install epel-release
12+
13+
# Update installed packages
14+
yum --assumeyes update
15+
16+
# Install "Development Tools" group
17+
yum --assumeyes groups install \
18+
"Development Tools"
19+
20+
# Install build dependencies
21+
yum --assumeyes install \
22+
boost169-devel \
23+
cairo-devel \
24+
freetype-devel \
25+
gdal-devel \
26+
glib2-devel \
27+
harfbuzz-devel \
28+
httpd-devel \
29+
iniparser-devel \
30+
libcurl-devel \
31+
libicu-devel \
32+
libjpeg-turbo-devel \
33+
libmemcached-devel \
34+
libpng-devel \
35+
librados2-devel \
36+
libtiff-devel \
37+
libwebp-devel \
38+
libxml2-devel \
39+
postgresql-devel \
40+
proj-devel \
41+
sqlite-devel \
42+
zlib-devel
43+
44+
# Export `GDAL_DATA` & `PROJ_LIB` variables and create directories (if needed)
45+
export GDAL_DATA=$(gdal-config --datadir)
46+
export PROJ_LIB=/usr/share/proj
47+
mkdir -p ${GDAL_DATA} ${PROJ_LIB}
48+
49+
# Download, Build & Install `Mapnik`
50+
mkdir -p /usr/local/src/mapnik-${MAPNIK_VERSION}
51+
cd /usr/local/src/mapnik-${MAPNIK_VERSION}
52+
curl --silent --location https://github.com/mapnik/mapnik/releases/download/v${MAPNIK_VERSION}/mapnik-v${MAPNIK_VERSION}.tar.bz2 \
53+
| tar --verbose --extract --bzip2 --strip-components=1 --file=-
54+
./configure BOOST_INCLUDES=/usr/include/boost169 BOOST_LIBS=/usr/lib64/boost169
55+
JOBS=$(nproc) make
56+
make install
57+
58+
# Fix issue with `iniparser.h` from `iniparser-devel` not being in the expected location
59+
mkdir /usr/include/iniparser
60+
ln -s /usr/include/iniparser.h /usr/include/iniparser/iniparser.h
61+
62+
# Download, Build & Install `mod_tile`
63+
git clone https://github.com/openstreetmap/mod_tile.git /usr/local/src/mod_tile
64+
cd /usr/local/src/mod_tile
65+
./autogen.sh
66+
./configure
67+
make
68+
make install
69+
make install-mod_tile
70+
```

0 commit comments

Comments
 (0)