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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM