CentOS6.8にMapServerのビルド&インストールしてみた
はじめに
単純にMapServerのインストールなら、以下のコマンドでインストールされる
# yum install mapserver
↓参考サイト
システム覚書帳 : [mapserver]CentOS6.5でmapserver6.0.3をyumでインストール - めっちゃ簡単!
ただし、今回は「PHP 5.6」と「PostgreSQL 9.6」を使用したいので、ソースコードからコンパイル&インストールする方法でやる
MapServerの最新は「7.x」だけど、コンパイル時に依存的な問題に引っかかったため、6.4.4にした
- はじめに
- 今回構築したMapServerの環境
- SELinuxの無効化
- "Development Tools"をインストール
- ApacheサーバのインストールとEPELリポジトリの追加
- PHP5.6のインストール
- PostgreSQL9.6 & PostGIS2.3のインストール
- MapServerのビルド & インストール
- Apacheサーバの起動
- MapServerにアクセスしてみる
今回構築したMapServerの環境
- CentOS6.8(最小インストール)
- Apache 2.2
- PHP 5.6
- PostgreSQL 9.6
- PostGIS 2.3
- MapServer 6.4.4
SELinuxの無効化
# vi /etc/sysconfig/selinux
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. #SELINUX=enforcing SELINUX=disabled
CentOSを再起動する
"Development Tools"をインストール
# yum groupinstall "Development Tools"
ApacheサーバのインストールとEPELリポジトリの追加
# yum install httpd httpd-devel epel-release
PHP5.6のインストール
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm # yum install --enablerepo=remi,remi-php56 php php-devel php-mbstring php-pdo php-gd php-xml php-pear php-pgsql
PostgreSQL9.6 & PostGIS2.3のインストール
# rpm -Uvh https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-6-x86_64/pgdg-centos96-9.6-3.noarch.rpm # yum install postgresql96 postgresql96-server postgresql96-devel postgis2_96
PostgreSQLのDBクラスタの構築・サーバ起動については過去記事と同じなのでリンク
MapServerのインストールだけなら不要なのでココでは省略
MapServerのビルド & インストール
MapServerのビルドとインストールは以下のサイトを参考にした
↓参考サイト
システム覚書帳 : [mapserver]CentOS6.5で、可能な限りyumでmapserverをセットアップする
↓公式サイト
Compiling on Unix — MapServer 7.0.4 documentation
必須パッケージのインストール
# yum install libpng libpng-devel # yum install freetype freetype-devel # yum install libjpeg libjpeg-devel # yum install zlib zlib-devel
推奨パッケージのインストール
# yum install proj proj-devel proj-epsg # yum install libcurl libcurl-devel # yum install gdal gdal-devel
オプションなパッケージのインストール
# yum install libtiff libtiff-devel # yum install libgeotiff libgeotiff-devel # yum install geos geos-devel # yum install libxml2 libxml2-devel # yum install giflib giflib-devel # yum install fcgi fcgi-devel # yum install cairo cairo-devel # yum install libxslt libxslt-devel
MapServerのインストールに「cmake28」が必要なのでインストールする
# yum install cmake28
MapServerのソースコードのダウンロード
# cd # yum install wget # wget http://download.osgeo.org/mapserver/mapserver-6.4.4.tar.gz
MapServerのソースコードのアーカイブを展開し、ビルド準備する
# tar xvhf mapserver-6.4.4.tar.gz # cd mapserver-6.4.4 # mkdir build # cd build # cmake28 .. -DWITH_CURL=ON -DWITH_CLIENT_WFS=ON -DWITH_CLIENT_WMS=ON -DWITH_PHP=ON -DWITH_KML=ON -DWITH_XMLMAPFILE=ON -DWITH_POSTGIS=ON -DCMAKE_PREFIX_PATH=/usr/pgsql-9.6/bin/ -DWITH_FRIBIDI=0
cmakeコマンドがうまくいくと以下のように出力される
-- /usr/include/php/main -- Found PHP5-Version 5.6.29 (using /usr/bin/php-config) -- * Summary of configured options for this build -- * Mandatory components -- * png: /usr/lib64/libpng.so -- * jpeg: /usr/lib64/libjpeg.so -- * freetype: /usr/lib64/libfreetype.so -- * Optional components -- * GDAL: /usr/lib64/libgdal.so -- * OGR: /usr/lib64/libgdal.so -- * GD: disabled -- * GIF: /usr/lib64/libgif.so -- * MYSQL: disabled -- * FRIBIDI: disabled -- * GIF: /usr/lib64/libgif.so -- * CAIRO: /usr/lib64/libcairo.so -- * SVGCAIRO: disabled -- * RSVG: disabled -- * CURL: /usr/lib64/libcurl.so -- * PROJ: /usr/lib64/libproj.so -- * LIBXML2: /usr/lib64/libxml2.so -- * POSTGIS: /usr/pgsql-9.6/lib/libpq.so -- * GEOS: /usr/lib64/libgeos_c.so -- * FastCGI: /usr/lib64/libfcgi.so -- * Oracle Spatial: disabled -- * SDE: disabled -- * Exempi XMP: disabled -- * Optional features -- * WMS SERVER: ENABLED -- * WFS SERVER: ENABLED -- * WCS SERVER: ENABLED -- * SOS SERVER: disabled -- * WMS CLIENT: ENABLED -- * WFS CLIENT: ENABLED -- * ICONV: ENABLED -- * Thread-safety support: disabled -- * KML output: ENABLED -- * Z+M point coordinate support: disabled -- * XML Mapfile support: ENABLED -- * Mapscripts -- * Python: disabled -- * PHP: ENABLED -- * PERL: disabled -- * RUBY: disabled -- * JAVA: disabled -- * C#: disabled -- * Apache Module (Experimental): disabled -- -- Will install files to /usr/local -- Will install libraries to /usr/local/lib64 -- Configuring done -- Generating done -- Build files have been written to: /root/mapserver-6.4.4/build
cmakeコマンドが無事成功したときに「make && make install」コマンドを実行する・・・が
PHP5.6をインストールした環境(厳密には5.6.25以上?)では、「make」コマンド実行時に「mapscript/php/error.c 」でコンパイルエラーが発生する
↓こんな感じ
[ 82%] Building C object mapscript/php/CMakeFiles/php_mapscript.dir/error.c.o /root/mapserver-6.4.4/mapscript/php/error.c: In function ‘zim_errorObj___get’: /root/mapserver-6.4.4/mapscript/php/error.c:71: error: called object ‘zend_error’ is not a function /root/mapserver-6.4.4/mapscript/php/error.c:72: error: called object ‘zend_error’ is not a function make[2]: *** [mapscript/php/CMakeFiles/php_mapscript.dir/error.c.o] エラー 1 make[1]: *** [mapscript/php/CMakeFiles/php_mapscript.dir/all] エラー 2
これはPHPのソースコードが変更されたため発生しているらしい
なので、以下のサイトを参考に「mapserver-6.4.4/mapscript/php/error.c」のソースコードを変更する
ソースコード「mapscript/php/error.c」未定義となっているマクロを34行目あたりに追記する
# vi /root/mapserver-6.4.4/mapscript/php/error.c
#if PHP_VERSION_ID >= 50625 #undef ZVAL_STRING #define ZVAL_STRING(z, s, duplicate) do { \ const char *__s=(s); \ zval *__z = (z); \ Z_STRLEN_P(__z) = strlen(__s); \ Z_STRVAL_P(__z) = (duplicate?estrndup(__s, Z_STRLEN_P(__z)):(char*)__s);\ Z_TYPE_P(__z) = IS_STRING; \ } while (0) #endif
もう一度ビルドを実行する
# cd /root/mapserver-6.4.4/build # make # make install
「make install」でインストールされたCGIをApacheにコピーする
# cp /usr/local/bin/mapserv /var/www/cgi-bin/
Apacheサーバの起動
ポートの開放
# vi /etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT # ↓追記 -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT
# service httpd start
MapServerにアクセスしてみる
http://<サーバのIP>/cgi-bin/mapserv
ブラウザに以下の文字列が表示される。
No query information to decode. QUERY_STRING is set, but empty.
これが表示されると、無事にMapServerが動作している・・・らしい。
MapServerを構築したが、実は使い方がわかっていない・・・
次回以降にMapServerを使って、何かしらの機能なり画面なりを作って見ようと思う