在 Alibaba Cloud Linux 3(与 RHEL/CentOS 8 兼容)上安装 MapServer,可以通过源码编译安装。由于 Alibaba Linux 3 默认不包含 MapServer 的官方包,通过EPEL仓库安装失败的概率也很高。
- 安装依赖
sudo dnf install -y gcc gcc-c++ make cmake git \ gd-devel gdal-devel proj-devel libxml2-devel \ freetype-devel cairo-devel pango-devel \ libpng-devel libjpeg-turbo-devel sqlite-devel \ postgresql-devel mysql-devel curl-devel \ swig python3-devel php-devel
- 下载源码
cd /tmp git clone https://github.com/MapServer/MapServer.git
cd MapServer
git checkout tags/rel-8-0-1 -b rel-8-0-1
- 编译安装
mkdir build
cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DWITH_PROJ=ON \
-DWITH_GDAL=ON \
-DWITH_CAIRO=ON \
-DWITH_FRIBIDI=OFF \
-DWITH_HARFBUZZ=OFF \
-DWITH_PHP=ON \
-DWITH_PYTHON=ON
注意有些非必需项,如CAIRO等,可设成OFF,并留心空格等字符,否则cmake不能正确识别。
make -j$(nproc)
sudo make install
- 设置环境变量
echo 'export PATH=/usr/local/bin:$PATH' >> ~/.bashrc source ~/.bashrc
- 验证
/usr/local/bin/mapserv -v
系统在运行 mapserv 时可能找不到 MapServer 的共享库 libmapserver.so.2。因为从源码编译安装 MapServer 到 /usr/local(默认位置),但系统的动态链接器(ld.so)不知道去哪里找这个库。
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH mapserv -v
创建一个 .conf 文件让系统永久识别该路径
echo '/usr/local/lib' | sudo tee /etc/ld.so.conf.d/mapserver.conf
sudo ldconfig
- 复制 mapserv 到 CGI 目录
sudo cp /usr/local/bin/mapserv /var/www/cgi-bin/
重启动 Apache
sudo systemctl enable --now httpd