• [原]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瓦片图

  • 相关阅读:
    线性时间排序算法
    【MSSQL】MDF、NDF、LDF文件的含义
    SQL表变量与临时表区别 + 非游标临时表遍历
    SQL Server 备份和还原全攻略
    S​Q​L​_​S​e​r​v​e​r​_​2​0​0​8​定​期​自​动​备​份​详​细​图​解
    Global.asax 文件是什么
    SQL 视图 局部变量 全局变量 条件语句 事务 触发器
    XP禁用了U盘和移动硬盘方法
    java实现 数据结构:链表、 栈、 队列、优先级队列、哈希表
    Mysql 存储过程和函数区别
  • 原文地址:https://www.cnblogs.com/think8848/p/6056378.html
Copyright © 2020-2023  润新知