转载请注明表作者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的更多相关文章

  1. centos7下部署node应用程序

    一.安装node 二.安装nginx 三.使用express写一个简单的demo,并且使用pm2部署 四.错误 invalid PID number "" in "/ru ...

  2. [原]CentOS7.2部署KVM虚拟机

    前段时间学习了关于PostGis.OSM数据以及Mapnik相关内容,接下来将利用假期重点学习PostgreSQL-XL和瓦片服务器集群技术,因此先把环境搭好.计划采用KVM来充分利用家里不太宽裕的“ ...

  3. 在阿里云ECS CentOS7上部署基于MongoDB+Node.js的博客

    前言:这是一篇教你如何在阿里云的ECS CentOS 7服务器上搭建一个个人博客的教程,教程比较基础,笔者尽可能比较详细的把每一步都罗列下来,包括所需软件的下载安装和域名的绑定,笔者在此之前对Linu ...

  4. 部署Node.js项目(CentOS)

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,用来方便地搭建快速的易于扩展的网络应用.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又 ...

  5. 阿里云部署Node.js项目(CentOS)

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,用来方便地搭建快速的易于扩展的网络应用.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又 ...

  6. 【转载】在Centos系统上采用二进制文件部署Node.js环境

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,用来方便地搭建快速的易于扩展的网络应用.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又 ...

  7. [原]使用kubeadm部署kubernetes(一)

    #######################    以下为声明  ##################### 在公众号  木子李的菜田 输入关键词:   k8s 有系列安装文档 此文档是之前做笔记在 ...

  8. CentOS7.6部署k8s环境

    CentOS7.6部署k8s环境 测试环境: 节点名称 节点IP 节点功能 K8s-master 10.10.1.10/24 Master.etcd.registry K8s-node-1 10.10 ...

  9. Centos7.6部署k8s v1.16.4高可用集群(主备模式)

    一.部署环境 主机列表: 主机名 Centos版本 ip docker version flannel version Keepalived version 主机配置 备注 master01 7.6. ...

随机推荐

  1. 线性数据结构之栈——Stack

    Linear data structures linear structures can be thought of as having two ends, whose items are order ...

  2. Web Api 入门实战 (快速入门+工具使用+不依赖IIS)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...

  3. gulp详细入门教程

    本文链接:http://www.ydcss.com/archives/18 gulp详细入门教程 简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优 ...

  4. 关于BAPI_PATIENT_CREATE(病患主数据创建)

    第一次使用BAPI,遇到几个问题.现总结如下. CALL FUNCTION 'BAPI_PATIENT_CREATE' EXPORTING client = * INSTITUTION = '*' * ...

  5. BPM的魅力何在?

    BPM(Business Process Management , 企业流程管理平台) 是带动企业流程自动化的帮 手,也是最能忠实反应出企业作业流程问题症结的系统工具,在管理上,BPM可以让管理者利用 ...

  6. 海鑫智圣:物联网漫谈之MQTT协议

    什么是MQTT协议 MQTT(消息队列遥测传输协议)是IBM在1999年专门针对物联网等应用场景来制订的轻量级双向消息传输协议,它主要是为了解决物联网上使用到的设备的互相通信的问题,以及这些设备与后端 ...

  7. linux下安装Redis以及phpredis模块

    一:redis的安装 1. 首先上官网下载Redis 压缩包,地址:http://redis.io/download 下载 2. 通过远程管理工具,将压缩包拷贝到Linux服务器中,执行解压操作 3. ...

  8. 两个变量交换的四种方法(Java)

    对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. (代码演示一下) class TestEV //创建一个类 { public static ...

  9. Android快乐贪吃蛇游戏实战项目开发教程-05虚拟方向键(四)四个三角形按钮

    该系列教程概述与目录:http://www.cnblogs.com/chengyujia/p/5787111.html 一.如何判断点击的是哪个方向键按钮 在上篇教程中我们实现了左边的三角形按钮效果, ...

  10. 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...