最近要部署新的生产,开发,测试环境,所以需要重新安装MapServer环境,现把过程及存在的问题记录下来,以供自己以后参阅,同时也为同行们遇到相似的问题给个解决思路。这是我第一次在linux环境下编译安装Mapserver,有前同事留下一个已经安装好的环境及一些代码作为参考,也给我提供了很大的帮助。
废话少说,上干货。
先将安装过程中遇到的主要问题做个说明:
- 安装依赖项后,进行其他编译安装,还会报找不到的情况,这时候,重新安装依赖项一般都能解决
- 编译安装Mapserver出现问题,执行cmake命令报错提示的问题,大部分是依赖项重新安装可以解决,Python devel安装可以解决Python参数未设置的问题,还有其他参数构造不全导致的,改camke后面的参数项,一个个都可以解决
- 编译安装Mapserver后,一定要将MapServer的库文件拷贝到lib64目录下,并且将mapserv可执行文件拷贝到apache的cgi-bin目录下
- mapserv文件需要赋予other用户可执行的权限,否则,还是会报没有权限的错误,地图数据目录,cache配置目录都要有可读可写的权限
- 安装好mapcahce后,需要将相应的库文件拷贝到lib64目录下
- 停掉Selinux防火墙限制,否则修改apache端口号都无法实施,还有地图数据如果放在非html目录时,无法访问
- 修改mapcache.html和httpd.conf文件后要重启httpd服务才能生效
- 每一步设置后,最好先验证是否能够正常运行,否则页面出现问题的时候不好排错。比如编译生成好mapserv的时候,先在本地运行./mapserv看命令是否能够运行;比如启动httpd服务的时候,现在浏览器里输入http://ip:port/是否正常显示apache页面,来验证apache是否正常运行;比如将mapserv拷贝到cgi-bin目录加好权限后打开http://ip:port/cgi-bin/mapserv验证是否正常访问不报错;比如mapcache.html配置好,重启httpd后打开http://ip:port/mapcache/wms/验证是否正常访问不报错;比如在虚拟机环境下配好hosts文件后,并打开相应端口号后,打开新ip+端口号+页面地址是否正常访问
1.安装依赖,大部分都是用的yum安装
yum install libpng libpng-devel freetypegd gd-devel zlib giflib-devel gcc cmake
继续是依赖
yum install aggagg-devel readline-devel zlib-devel libxm2-devel gcc-c++ curl-devel geos-devellibtiff libgeotiff libjpeg geos libxml2 libxml2-devel cairo cairo-devel fcgifcgi-devel
yum install gdalgdal-devel
2.下面继续是依赖
编译安装proj4.9.1,默认安装到/usr/local/lib/pkgconfig
<span style="font-family:Microsoft YaHei;font-size:18px;">#install proj.4
wgethttp://download.osgeo.org/proj/proj-4.9.1.tar.gz
tar xvfproj-4.9.1.tar.gz
cd proj-4.9.1
./configure
make
make install</span>
下载编译安装,默认安装在usr/local/bin
wget http://download.osgeo.org/gdal/2.0.2/gdal-2.0.2.tar.gz
tar xvf gdal-2.0.2.tar.gz
cd gdal-2.0.2
./configure
make
make install</span>
安装Postgres PostGIS
#installpostgresql
yum installhttp://yum.postgresql.org/9.4/redhat/rhel-6-x86_64/pgdg-redhat94-9.4-1.noarch.rpm
yum installpostgresql94-server postgresql94-contrib
servicepostgresql-9.4 initdb
chkconfigpostgresql-9.4 on</span>
<span style="font-family:Microsoft YaHei;font-size:18px;">yum installpostgis2_94 postgis2_94-devel
没有成功,出现如下错误:
--> FinishedDependency Resolution
Error: Package:postgis2_94-2.1.8-1.rhel6.x86_64 (pgdg94)
Requires: hdf5
Error: Package:gdal-libs-1.9.2-7.rhel6.x86_64 (pgdg94)
Requires: libgta.so.0()(64bit)
Error: Package:gdal-libs-1.9.2-7.rhel6.x86_64 (pgdg94)
Requires: libhdf5.so.6()(64bit)
Error: Package:gdal-libs-1.9.2-7.rhel6.x86_64 (pgdg94)
Requires: libcfitsio.so.0()(64bit)
......
You could try using --skip-broken to workaround the problem
You could try running: rpm -Va --nofiles–nodigest
则首先执行:
请先安装以下rpm
# CentOS 6, RHEL 6 64-bit:
sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
之后重新执行安装PostGIS
可以通过Rpm –ql geos(包名)查看包安装目录
安装httpd
yum installhttpd httpd-devel fcgi mod_fcgid
下面是编译安装mapcache
build mapcache
cmake的时候找不到geos、fcgi库,分别重装
yum install geosgeos-devel fcgi fcgi-devel
然后再编译安装mapcache
```shell
yum installsqlite sqlite-devel
wgethttp://download.osgeo.org/mapserver/mapcache-1.4.1.tar.gz
tar xvfmapcache-1.4.1.tar.gz
cdmapcache-1.4.1
mkdir build
cd build
cmake ..
make
make install
重要的一点:
将libmapcache.so和libmapcache.so.1从默认安装的/usr/local/lib,拷贝到usr/lib64/目录下面
安装python-devel,centos系统默认安装了python2.6,但没有安装devel
yum installpython-devel
3.
安装MapServer主体:
wgethttp://download.osgeo.org/mapserver/mapserver-7.0.1.tar.gz
tar xvfmapserver-7.0.1.tar.gz
cd mapserver-7.0.1
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/opt\
-DCMAKE_PREFIX_PATH=/usr/pgsql-9.4:/usr/share:/usr/lib64:/usr/lib64/python2.6:/usr/local:/opt\
-DWITH_CLIENT_WFS=ON \
-DWITH_CLIENT_WMS=ON \
-DWITH_CURL=ON \
-DWITH_SOS=ON \
-DWITH_PHP=OFF \
-DWITH_PERL=ON \
-DWITH_RUBY=OFF \
-DWITH_JAVA=OFF \
-DWITH_CSHARP=OFF \
-DWITH_PYTHON=ON \
-DWITH_SVGCAIRO=OFF \
-DWITH_ORACLESPATIAL=OFF \
-DWITH_MSSQL2008=OFF \
-DWITH_FRIBIDI=0-DWITH_LIBXML2=1 -DWITH_HARFBUZZ=0 -DWITHCAIRO=0 -DWITH_POSTGIS=0 -DWITH_CAIRO=0 \
../>../configure.out.txt
make
make install
测试是否存在:
ls –al mapser
-rwxr-xr-x 1 user user 13745 mars 11 17:45mapser
4.下面是配置部分
httpd安装在:
/etc/httpd/conf/
配置httpd.conf:
将libmapcache.so和libmapcache.so.1拷贝到usr/lib64/目录下面
至此,启动Apache
service httpd start
显示OK即可
配置httpd需要修改几个部分:
Listen 80 默认端口
启动apache遇到错误:httpd: Could not reliably determine the server'sfully qualified domain name
解决:
[root@serverconf]# vi httpd.conf
#ServerName www.example.com:80
ServerName localhost:80
再重新启动apache即可。
取消注释mapcache模块:
LoadModule mapcache_module modules/mod_mapcache.so
然后增加mapcahce的配置路径
<IfModule mapcache_module>
<Directory /home/mapserver/ms_data/cache>
Header set Access-Control-Allow-Origin "*"
Require all granted
</Directory>
MapCacheAlias /mapcache "/home/mapserver/ms_data/cache/mapcache.xml"
</IfModule>
这时候,安装还没有完成,还需要配置Apache运行mapserver的cgi可执行文件,将编译好的mapserv拷贝到目录/var/www/cgi-bin/
同时赋予其他用户的执行权限
chmod +x mapserv
还要将opt/lib中的相关libmapserver库拷贝到usr/local/lib目录下
拷贝数据文件,将数据文件和cache配置目录放在一起,取消掉selinux限制
root@Centos6 china]# getenforce
Enforcing
[root@Centos6 china]# setenforce 0
[root@Centos6 china]# getenforce
Permissive</span>
还有什么问题,可以参考Apache的日志文件
路径:/var/log/httpd/
apache的一些路径:
cqi路径:/var/www/cgi-bin/
网页内容:/var/www/html/
如果是虚拟机,记得添加hosts文件的ip端口号和主机名映射,请看最后一行是新增的
查看主机名:
[root@Centos6 ~]# hostname
Centos6
查看ip:[root@Centos6 ~]# hostname
Centos6
[root@Centos6 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 02:16:3E:0F:C6:FD
inet addr:172.16.4.12 Bcast:172.16.4.255 Mask:255.255.255.0
inet6 addr: fe80::16:3eff:fe0f:c6fd/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:23520945 errors:0 dropped:739 overruns:0 frame:0
TX packets:19338840 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1800984986 (1.6 GiB) TX bytes:1416567823 (1.3 GiB)
Interrupt:11 Base address:0x8000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:320371 errors:0 dropped:0 overruns:0 frame:0
TX packets:320371 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:45712442 (43.5 MiB) TX bytes:45712442 (43.5 MiB)