[原]CentOS7.2部署node-mapnik
转载请注明表作者think8848及出处(http://think8848.cnblogs.com)
node-mapnik依赖项中要求g++ >= 5, toolchain (>= GLIBCXX_3.4.20 from libstdc++)(见官网说明),但是CentOS7里面默认的gcc和g++的版本是4.8.5,GLIBCXX只到3.4.19,因此部署过程中各种问题,经过常期、大量的折腾,最终终于找到一个可行的部署方法,在本文中将用到一些需要自行编译安装的包,只能保证文中的版本没有问题,不保证其他版本可用。
gcc5.4.0源码包 链接:http://pan.baidu.com/s/1sljcdrR 密码:u48m
boost1.62.0源码包 链接:http://pan.baidu.com/s/1sl6cEeh 密码:mz0h
mapnik3.0.12完整源码包(不需要从github上再下载依赖包) 链接:http://pan.baidu.com/s/1o79qvjk 密码:aw4g
1. 最小安装的CentOS安装必要的工具包
建议本文中的所有操作使用root帐号,因为在make install使用sudo权限时,如果root帐号下没有及时更新环境变量,就会发生很多意外;本文介绍的部署过程是一个非常漫长的过程,完整走一遍只少要半天(虚拟机:4G内存),为了避免不必要的麻烦,建议直接用root。
su yum install wget vim net-tools unzip bzip2 gcc gcc-c++ epel-release libicu-devel -y
查看gcc和g++的版本,显示为4.8.5

2. 升级gcc版本
CentOS下升级gcc版本有两个途径,一个是添加其他源进行自动升级,一个是手动编译升级,这里先顺便讲下自动升级的两个办法:
a. 添加Fedora源
在 /etc/yum.repos.d 目录中添加文件 FedoraRepo.repo ,并输入以下内容:
[warning:fedora]
name=fedora
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-23&arch=$basearch
enabled=1
gpgcheck=1
gpgkey=https://getfedora.org/static/34EC9CBA.txt
然后使用 yum install gcc gcc-c++ -y 进行安装,注意,如果你要用这种方法安装gcc,那在第1步就干脆不要安装gcc和gcc-c++包了。
b. 使用Devtoolset-4升级,详细方法见这里
yum install centos-release-scl yum install devtoolset-4-gcc* scl enable devtoolset-4 bash which gcc gcc --version
好了,以上方法我们都不选,因为我最终部署成功用的是手动升级的方法(至于为什么不选择自动更新,还有一个很重要的原因,那就是CentOS存在的逻辑,很多人选用CentOS而不是Ubuntu作为服务器操作系统,主要原因是什么呢?)
好了,我们先下载gcc5.4.0,下载地址 http://ftp.gnu.org/gnu/gcc/gcc-5.4.0/gcc-5.4.0.tar.gz
cd /usr/local/src wget -O gcc-5.4.0.tar.gz http://101.96.10.61/ftp.gnu.org/gnu/gcc/gcc-5.4.0/gcc-5.4.0.tar.gz tar -xzvf gcc-5.4.0.tar.gz cd gcc-5.4.0
#下载依赖项
./contrib/download_prerequisites #为了在长期的编译过程中Linux不黑屏,临时关闭屏保 setterm -blank 0 mkdir build && cd build ../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib #4核cpu就是j4,在vmware12下有用
make -j4 #机器不好大概这里要花3小时 make install
先查看下GLIBCXX的版本信息,不出意外的话,应该最高就到GLIBCXX_3.4.19,我们要用最新的版本替换原来的版本

搜索libstdc++.so.6*,看看都有什么结果,我们会发现在/usr/lib64里面有6.0.19,这是我们使用yum安装的,/usr/local/lib64/libstdc++.so.6.0.21是我们刚才编译安装的,需要用最新的替换旧版本的。

首先将/usr/lib64下面的libstdc++.so.6*删除掉
rm /usr/lib64/libstdc++.so.6* -f (实际删除两个文件),
然后我们在/usr/lib64下为libstdc++.so.6.0.21建立链接
ln -s /usr/local/lib64/libstdc++.so.6.0.21 /usr/lib64/libstdc++.so.6 ,
顺便再将/usr/local/lib64下面一个看着碍眼的文件删除
rm /usr/local/lib64/libstdc++.so.6.0.21-gdb.py -f ,
(如果不删除这个文件,则在ldconfig创建动态链接库文件缓存时会报一个莫名其妙的错误)
最后在/etc/ld.so.conf中加入/usr/local/lib64,为动态共享库指定搜索路径 vim /etc/ld.so.conf

然后创建缓存
ldconfig
再次检查GLIBCXX版本 strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX | more ,这时就已经包含GLIBCXX_3.4.21了

检查下gcc和g++的版本,注意,如果检查到的版本不是5.4.0,而是4.8.5(安装前的版本),则仔细想想有没有按照本文步骤来,如果确认是没有出入,那么就重启机器吧 reboot ,启动好后再次检查,应该就可以看到正确结果了。

3. 编译安装boost1.62.0
cd /usr/local/src wget -O boost_1_62_0.tar.gz http://pilotfiber.dl.sourceforge.net/project/boost/boost/1.62.0/boost_1_62_0.tar.gz tar -xzvf boost_1_62_0.tar.gz cd boost_1_62_0 ./bootstrap.sh --with-icu --with-libraries=all ./b2 threading=multi #等吧,虽然没有gcc编译时间长,但是也不快 ./b2 install
经过一番磨人的编译,boost的编辑结果出来了,貌似有些错误,但是不用理会

再次打开/etc/ld.so.conf添加共享库路径,在里面添加 /etc/local/lib
vim /etc/ld.so.conf

最后不要忘记更新缓存
ldconfig
5. 编译安装mapnik
先安装依赖项,依赖项比较多,要仔细输入,避免后面不必要的麻烦
yum install freetype-devel libtool-ltdl-devel libpng-devel libtiff-devel libjpeg-devel python-devel harfbuzz-devel postgresql-devel proj-devel proj-epsg sqlite-devel libwebp-devel gdal-devel cairo-devel -y
第一步先下载源码,(直接下载的zip包里面缺少依赖项)
yum install git -y git clone git://github.com/mapnik/mapnik.git cd mapnik git submodule update --init
编译安装源码,时间也有点小长,但是还能忍受,4核CPU用JOBS=4,具体视电脑情况而定
python scons/scons.py configure | more python scons/scons.py JOBS=4 python scons/scons.py install
到这一步了就小心点,确保每个依赖项都已经存在


查看mapnik版本 mapnik-config -v

安装完成后测试下mapnik是否能正常工作
ldconfig cd /usr/local/src/mapnik/demo/c++ mkdir demo && cp ../data ./demo -r vim rundemo.cpp
在rundemo.cpp中修改以下内容
修改前:

修改后:

然后编译运行
make clean make ./rundemo

有图有真相,看看生成的地图是啥样的

6.安装node.js
这一步是本文中最简单的了,没有任何技巧,如果安装出问题 ,那一定是没有按照我前面的步骤来
yum install nodejs -y

7. 安装node-mapnik
cd /usr/local/src mkdir node-mapnik && cd node-mapnik vim package.json
在打开创建package.json文件后,输入以下内容
{
"name": "nmtest",
"description": "node-mapnik test by think8848",
"version": "0.0.1",
"private": true,
"dependencies": {
"mapnik": "3.*"
}
}
开始安装node-mapnik,通常而言,使用 npm install 即可安装好所有依赖包,然后因为众所周知的原因...,如果你没有没有给力的翻墙工具,还是使用下列命令吧
npm install --registry=https://registry.npm.taobao.org
如果看到下面这个画面,就说明成功了99%了

写一段代码测试下先将刚才我们在安装mapnik时生成的demo.jpg复制过来
cp /usr/local/src/mapnik/demo/c++/demo.jpg ./
创建node代码, vim app.js ,输入以下内容
var mapnik = require('mapnik');
new mapnik.Image.open('demo.jpg').save('demo.png');

执行结果:

---------------------2016年12月18日更新----------------------------
将node-mapnik添加到公共模块中
先将node-mapnik安装到公共模块的目录,默认情况下安装到 /usr/lib/node_modules
sudo npm install -g mapnik
添加 NODE_PATH 环境变量,使用 sudo vim /etc/profile 命令,然后在文件最下面添加
export NODE_PATH=/usr/lib/node_modules:$PATH

最后再更新环境变量
source /etc/profile
这样以后就不用每次使用时都要安装一次node-mapnik了,安装的过程实在是太痛苦了,没有梯子基本上不会成功。
---------------------2016年12月18日更新结束----------------------------
接下来将学习如何使用node-mapnik生成openstreetmap瓦片图
[原]CentOS7.2部署node-mapnik的更多相关文章
- centos7下部署node应用程序
一.安装node 二.安装nginx 三.使用express写一个简单的demo,并且使用pm2部署 四.错误 invalid PID number "" in "/ru ...
- [原]CentOS7.2部署KVM虚拟机
前段时间学习了关于PostGis.OSM数据以及Mapnik相关内容,接下来将利用假期重点学习PostgreSQL-XL和瓦片服务器集群技术,因此先把环境搭好.计划采用KVM来充分利用家里不太宽裕的“ ...
- 在阿里云ECS CentOS7上部署基于MongoDB+Node.js的博客
前言:这是一篇教你如何在阿里云的ECS CentOS 7服务器上搭建一个个人博客的教程,教程比较基础,笔者尽可能比较详细的把每一步都罗列下来,包括所需软件的下载安装和域名的绑定,笔者在此之前对Linu ...
- 部署Node.js项目(CentOS)
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,用来方便地搭建快速的易于扩展的网络应用.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又 ...
- 阿里云部署Node.js项目(CentOS)
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,用来方便地搭建快速的易于扩展的网络应用.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又 ...
- 【转载】在Centos系统上采用二进制文件部署Node.js环境
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,用来方便地搭建快速的易于扩展的网络应用.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又 ...
- [原]使用kubeadm部署kubernetes(一)
####################### 以下为声明 ##################### 在公众号 木子李的菜田 输入关键词: k8s 有系列安装文档 此文档是之前做笔记在 ...
- CentOS7.6部署k8s环境
CentOS7.6部署k8s环境 测试环境: 节点名称 节点IP 节点功能 K8s-master 10.10.1.10/24 Master.etcd.registry K8s-node-1 10.10 ...
- Centos7.6部署k8s v1.16.4高可用集群(主备模式)
一.部署环境 主机列表: 主机名 Centos版本 ip docker version flannel version Keepalived version 主机配置 备注 master01 7.6. ...
随机推荐
- CSS3 border-radius边框圆角
在CSS3中提供了对边框进行圆角设定的支持,可对边框1~4个角进行圆角样式设置. 目录 1. 介绍 2. value值的格式和类型 3. border-radius 1~4个参数说明 4. 在线示例 ...
- c#与java的区别
经常有人问这种问题,用了些时间java之后,发现这俩玩意除了一小部分壳子长的还有能稍微凑合上,基本上没什么相似之处,可以说也就是马甲层面上的相似吧,还是比较短的马甲... 一般C#多用于业务系统的开发 ...
- 关于textview显示特殊符号居中的问题
话说这是2017年的第一篇博客,也是一篇技术博客.先从简单的一篇解决问题开始吧,千里之行,始于足下! ------------------------------------------------- ...
- android自定义控件一站式入门
自定义控件 Android系统提供了一系列UI相关的类来帮助我们构造app的界面,以及完成交互的处理. 一般的,所有可以在窗口中被展示的UI对象类型,最终都是继承自View的类,这包括展示最终内容的非 ...
- C语言 · 4_2找公倍数
问题描述 这里写问题描述. 打印出1-1000所有11和17的公倍数. 样例输入 一个满足题目要求的输入范例.例:无 样例输出 与上面的样例输入对应的输出.例: 代码如下: #include< ...
- 基于ASP.NET/C#开发国外支付平台(Paypal)学习心得。
最近一直在研究Paypal的支付平台,因为本人之前没有接触过接口这一块,新来一家公司比较不清楚流程就要求开发两个支付平台一个是支付宝(这边就不再这篇文章里面赘述了),但还是花了2-3天的时间通 ...
- My TWI
前言 对TWI没有什么特别的印象,因为有一个更出名的TWU,而我去年又刚好错过了它,因此TWU的光辉完全掩盖了TWI.对TWI印象最深的是在邮件中看到的38th北京的这期,看到他们的图文记录,在圈子中 ...
- Adaboost提升算法从原理到实践
1.基本思想: 综合某些专家的判断,往往要比一个专家单独的判断要好.在"强可学习"和"弱科学习"的概念上来说就是我们通过对多个弱可学习的算法进行"组合 ...
- Python 正则表达式入门(中级篇)
Python 正则表达式入门(中级篇) 初级篇链接:http://www.cnblogs.com/chuxiuhong/p/5885073.html 上一篇我们说在这一篇里,我们会介绍子表达式,向前向 ...
- Entity Framework的启动速度优化
最近开发的服务放到IIS上寄宿之后,遇到一些现象,比如刚部署之后,第一次启动很慢:程序放置一会儿,再次请求也会比较慢.比如第一个问题,可以解释为初次请求某一个服务的时候,需要把程序集加载到内存中可能比 ...