Linux(CentOS)編譯安裝GDAL3.0.4+Postgresql 12.2+Postgis-3.0.1

  • 之前服務(wù)器已經(jīng)安裝了postgresql10+postgis2.5, 有個(gè)需求要使用GDAL,編譯gdal3.0.4后谬哀,卻沒有PostgreSQL插件玷坠,多次配置編譯后還是沒有甥啄,仔細(xì)分析postgresql10+ postgis2.5是用yum安裝的刑顺,缺少某些插件導(dǎo)致的玻孟。正好官網(wǎng)發(fā)布了Postgis-3.0.1笆载,就重新搭建一個(gè)最新環(huán)境扑馁,PostGIS插件也安裝成功了。
  • 總結(jié)凉驻,有需要GDAL開發(fā)的同學(xué)腻要,在linux服務(wù)器上,最好還是自己編譯環(huán)境沿侈,初次編譯是很痛苦闯第,但是在此過程中,對(duì)插件之間的版本依賴關(guān)系缀拭,插件編譯配置咳短、問題定位,解決問題蛛淋,shell腳本都能夠全面的提升咙好。最后還能得到一個(gè)最新版的環(huán)境,何樂而不為了:趾伞9葱А!
  • 在文章中,對(duì)錯(cuò)誤有對(duì)應(yīng)的分析层宫,對(duì)使用linux命令有部分解釋杨伙,對(duì)不熟悉linux的同學(xué)能加快安裝速度

全套安裝包下載

安裝本文環(huán)境,預(yù)計(jì)需要1整天

一萌腿、環(huán)境準(zhǔn)備

1限匣、環(huán)境要求

The PostGIS Team is pleased to release PostGIS 3.0.1.
Best served with PostgreSQL 12.2, GEOS 3.8.0, SFCGAL 1.3.7, GDAL 3.0.4, PROJ 6.3.1, protobuf-c 1.3.3, json-c 0.13.1.

2、環(huán)境安裝

先通過yum基礎(chǔ)插件
yum install gcc gcc-c++ gcc-g77 make libtool flex bison autoconf automake bzip2-devel zlib-devel ncurses-devel libjpeg-devel libpng-devel libtiff-devel freetype-devel pam-devel openssl-devel libxml2-devel gettext-devel pcre-devel

二毁菱、編譯Postgresql-12.2

以下所有安裝源文件放置均放在/usr/local/src/

#用戶組
groupadd postgres
#用戶組添加用戶
useradd -g postgres postgres
#數(shù)據(jù)庫密碼,設(shè)置強(qiáng)密碼米死,大小寫,特殊字符
passwd root@123456

mkdir -p /usr/local/pgsql
mkdir /usr/local/pgsql/data
chown -R postgres:postgres /usr/local/pgsql

cd /usr/local/src/
wget https://ftp.postgresql.org/pub/source/v12.2/postgresql-12.2.tar.gz
tar -xzvf postgresql-12.2.tar.gz
cd postgresql-12.2
./configure --prefix=/usr/local/pgsql --without-readline
make && make install

2贮庞、安裝contrib目錄工具

是第三方組織的一些工具代碼峦筒,建議安裝

cd contrib
make && make install

3、添加環(huán)境變量

vi打開配置文件后窗慎,按i插入物喷,ESC退出編譯,:wq保存捉邢,:q!不保存

vi /etc/profile
PG_HOME=/usr/local/pgsql

LD_LIBRARY_PATH=$PG_HOME/lib:$LD_LIBRARY_PATH
PATH=$PG_HOME/bin:$PATH

PKG_CONFIG_PATH=$PG_HOME/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH LD_LIBRARY_PATH

source /etc/profile

查看Postgresql版本命令

pg_config --version

4脯丝、初始化數(shù)據(jù)庫

#切換用戶
su postgres

#初始化數(shù)據(jù)庫
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data

5、設(shè)置遠(yuǎn)程可訪問數(shù)據(jù)庫

#切換root
exit

vi /usr/local/pgsql/data/postgresql.conf
listen_address = '*'
port = 5432
vi /usr/local/pgsql/data/pg_hba.conf
host     all             all       0.0.0.0/0                      md5
host     all             all       192.168.1.0/24                 md5
host     all             all       ::1/128                        ident

6伏伐、數(shù)據(jù)庫服務(wù)

#切換用戶
su postgres

#啟動(dòng)數(shù)據(jù)庫服務(wù)器
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
#創(chuàng)建數(shù)據(jù)庫
/usr/local/pgsql/bin/createdb gisdb

#停止數(shù)據(jù)庫服務(wù)
/usr/local/pgsql/bin/pg_ctl stop -D /usr/local/pgsql/data
#重新啟動(dòng)數(shù)據(jù)庫
/usr/local/pgsql/bin/pg_ctl start -D /usr/local/pgsql/data

到這里,數(shù)據(jù)庫已經(jīng)安裝成功了晕拆,使用navicat連接試試吧

6藐翎、設(shè)置Postgresql自啟動(dòng)

新建postgresql.service文件,復(fù)制以下內(nèi)容到postgresql.service

[Unit]
Description=PostgreSQL database server
After=network.target
 
[Service]
Type=forking
 
User=postgres
Group=postgres
 
# Port number for server to listen on
Environment=PGPORT=5432
 
# Location of database directory
Environment=PGDATA=/usr/local/pgsql/data
 
# Where to send early-startup messages from the server (before the logging
# options of postgresql.conf take effect)
# This is normally controlled by the global default set by systemd
# StandardOutput=syslog
 
# Disable OOM kill on the postmaster
OOMScoreAdjust=-1000
 
#ExecStartPre=/usr/local/pgsql/bin/postgresql-check-db-dir ${PGDATA}
ExecStart=/usr/local/pgsql/bin/pg_ctl start -D ${PGDATA} -s -o "-p ${PGPORT}" -w -t 300
ExecStop=/usr/local/pgsql/bin/pg_ctl stop -D ${PGDATA} -s -m fast
ExecReload=/usr/local/pgsql/bin/pg_ctl reload -D ${PGDATA} -s
 
# Give a reasonable amount of time for the server to start up/shut down
TimeoutSec=300
 
[Install]
WantedBy=multi-user.target

su root
cd /usr/lib/systemd/system
chmod 754 postgresql.service
systemctl enable postgresql.service

7 其它一些操作命令說明

啟動(dòng)实幕,停止吝镣,重啟

systemctl  start  postgresql.service 
systemctl  stop  postgresql.service
systemctl  restart   postgresql.service

修改數(shù)據(jù)庫密碼

su - postgres
psql -U postgres
ALTER USER postgres WITH PASSWORD '123456'
\q

三、編譯GDAL依賴

1昆庇、安裝 sqlite3

wget https://www.sqlite.org/2020/sqlite-src-3310100.zip
unzip sqlite-src-3310100.zip
cd sqlite-src-3310100
bash ./configure --prefix=/usr/local/pgsql/plugin/sqlite3
make && make install
echo "/usr/local/pgsql/plugin/sqlite3/lib" > /etc/ld.so.conf.d/sqlite3.conf
ldconfig

2末贾、安裝 json-c-0.13.1

wget https://github.com/json-c/json-c/archive/json-c-0.13.1-20180305.tar.gz
tar -xzvf  json-c-0.13.1-20180305.tar.gz
cd json-c-json-c-0.13.1-20180305
bash ./configure --prefix=/usr/local/pgsql/plugin/json-c
make && make install
echo "/usr/local/pgsql/plugin/json-c/lib" > /etc/ld.so.conf.d/json-c-0.13.1.conf
ldconfig

3、編譯 protobuf-3.11.4,protobuf-c 1.3.3

  • 編譯protobuf-3.11.4
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.11.4/protobuf-cpp-3.11.4.tar.gz
tar -xzvf  protobuf-cpp-3.11.4.tar.gz
cd protobuf-3.11.4
bash ./configure
make && make install
  • 編譯protobuf-c 1.3.3
wget https://github.com/protobuf-c/protobuf-c/releases/download/v1.3.3/protobuf-c-1.3.3.tar.gz
tar -xzvf  protobuf-c-1.3.3.tar.gz
cd protobuf-c-1.3.3
./autogen.sh
bash ./configure
make && make install

出現(xiàn)找不到libprotobuf.so.22時(shí)
vi /etc/profile 添加配置

PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH

source /etc/profile 配置生效

4整吆、安裝Proj 6.3.1

wget https://download.osgeo.org/proj/proj-6.3.1.tar.gz
tar -xf proj-6.3.1.tar.gz
cd proj-6.3.1
./configure --prefix=/usr/local/pgsql/plugin/proj
make && make install
echo "/usr/local/pgsql/plugin/proj/lib" > /etc/ld.so.conf.d/proj-6.3.1.conf
ldconfig

5拱撵、安裝GEOS 3.8.0

wget http://download.osgeo.org/geos/geos-3.8.0.tar.bz2
tar -jxf geos-3.8.0.tar.bz2
cd geos-3.8.0
./configure --prefix=/usr/local/pgsql/plugin/geos
make && make install
echo "/usr/local/pgsql/plugin/geos/lib" > /etc/ld.so.conf.d/geos-3.8.0.conf
ldconfig

6、安裝SFCGAL 1.3.7

由于SFCGAL需要依賴Boost表蝙、CGAL拴测、GMP、MPFR這四個(gè)軟件府蛇,所以具體總共需要安裝以下四個(gè)軟件:
boost-devel.x86_64
gmp-devel.x86_64
mpfr-devel.x86_64
CGAL-4.14

6.1 Boost-1.5.3

yum install boost boost-devel

6.2 GMP-6.1.2

wget https://gmplib.org/download/gmp/gmp-6.1.2.tar.bz2
tar -jxvf gmp-6.1.2.tar.bz2
cd gmp-6.1.2
bash ./configure --enable-cxx
make && make install

6.3 MPFR-4.0.2

wget https://www.mpfr.org/mpfr-current/mpfr-4.0.2.tar.gz
tar -xzvf  mpfr-4.0.2.tar.gz
cd mpfr-4.0.2
./configure
make && make install

6.4 cgal-4.14

wget http://distfiles.macports.org/cgal/cgal-4.14.tar.xz
xz -d cgal-4.14.tar.xz 
tar xvf cgal-4.14.tar 
cd CGAL-4.14
mkdir build && cd build
cmake ..
make && make install

安裝過程中會(huì)出現(xiàn)以下錯(cuò)誤

image.png

解決方法: 修改/usr/include/boost/ cstdint.hpp 44行代碼為:
image.png

#if defined(BOOST_HAS_STDINT_H) \
&& (!defined(__GLIBC__) \
|| defined(__GLIBC_HAVE_LONG_LONG) \
|| (defined(__GLIBC__) && ((__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 17)))))

6.5 SFCGAL 1.3.7

wget  https://github.com/Oslandia/SFCGAL/archive/v1.3.7.tar.gz
tar -zxvf SFCGAL-1.3.7.tar.gz
cd SFCGAL-1.3.7  
mkdir build && cd build 
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/sfcgal ..
make  && make install
echo "/usr/local/sfcgal/lib64" > /etc/ld.so.conf.d/sfcgal-1.3.7.conf
ldconfig

7集索、pcre-8.44安裝

wget https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz
tar -xzvf  pcre-8.44.tar.gz
cd pcre-8.44
./configure --enable-utf8 --prefix=/usr/local/pcre
make && make intall
echo "/usr/local/pcre/lib" > /etc/ld.so.conf.d/pcre-8.44.conf
ldconfig

8、libxml2-2.9.10安裝

wget http://xmlsoft.org/sources/libxml2-2.9.10.tar.gz
tar -xzvf  libxml2-2.9.10.tar.gz
cd libxml2-2.9.10
./configure --prefix=/usr/local/libxml2
make && make intall
echo "/usr/local/libxml2/lib" > /etc/ld.so.conf.d/libxml2-2.9.10.conf
ldconfig

9、編譯gdal.jar進(jìn)行 java開發(fā)务荆,不需要開發(fā)妆距,可以跳過

9.1、 ant 1.10.7

wget https://mirrors.tuna.tsinghua.edu.cn/apache//ant/binaries/apache-ant-1.10.7-bin.tar.gz
tar -zxvf apache-ant-1.10.7-bin.tar.gz
mv apache-ant-1.10.7-bin /usr/local/ant

9.2函匕、swig 4.0.1

wget http://prdownloads.sourceforge.net/swig/swig-4.0.1.tar.gz
tar -zxvf  swig-4.0.1.tar.gz
cd swig-4.0.1
bash ./configure --prefix=/usr/local/swig
make && make install

9.3娱据、配置profile

vim /etc/profile

ANT_HOME=/usr/local/ant
SWIG_HOME=/usr/local/swig

PATH=$ANT_HOME/bin:$SWIG_HOME/bin:$PATH

export ANT_HOME SWIG_HOME

source /etc/profile

查看版本
ant -version
swig -version

四、安裝GDAL 3.0.4

1浦箱、編譯

wget http://download.osgeo.org/gdal/3.0.4/gdal-3.0.4.tar.gz
tar -xf gdal-3.0.4.tar.gz
cd gdal-3.0.4
bash ./configure --prefix=/usr/local/pgsql/plugin/gdal --with-proj=/usr/local/pgsql/plugin/proj --with-geos=/usr/local/pgsql/plugin/geos/bin/geos-config --with-sqlite3=/usr/local/pgsql/plugin/sqlite3 --with-libjson-c=/usr/local/pgsql/plugin/json-c
make && make install
echo "/usr/local/pgsql/plugin/gdal/lib" > /etc/ld.so.conf.d/gdal-3.0.4.conf
ldconfig

2吸耿、錯(cuò)誤

錯(cuò)誤1:修改/usr/local/src/gdal-3.0.4/gcore/gdal_version.h.in為gdal_version.h

image.png

錯(cuò)誤2:出現(xiàn)這個(gè)錯(cuò)誤時(shí),一般是sqlite3生成文件在/usr/local/lib下酷窥,必須移除后咽安,重新編譯sqlite3生成文件單獨(dú)放置,如usr/local/sqlite3下蓬推,在gdal配置時(shí)指明--with-sqlite3
清除語句:rm要慎用妆棒,要確認(rèn)清楚,刪庫跑路就是因?yàn)檫@ rm -rf /usr/local/lib/libsqlite3* /usr/local/bin/sqlite3 /usr/local/lib/pkgconfig/sqlite3.pc
image.png

錯(cuò)誤3:缺少json-c靜態(tài)庫文件,可以通過指明靜態(tài)庫路徑方式來解決沸伏,但這是臨時(shí)解決方案糕珊。最好重新編譯json-c到usr/local/json-c, 在gdal配置時(shí)指明--with-libjson-c

cd /usr/local/src/gdal-3.0.4/apps
/bin/sh /usr/local/src/gdal-3.0.4/libtool --mode=link --silent g++ -std=c++11  gdalserver.lo  /usr/local/src/gdal-3.0.4/libgdal.la /usr/local/lib/libjson-c.a -o gdalserver

image.png

錯(cuò)誤4: make: execvp: /usr/local/gdal-3.0.4/install-sh: Permission denied

看到這個(gè)問題,是不是很高興毅糟,表明已經(jīng)編譯完成了红选,執(zhí)行安裝腳本,沒權(quán)限
執(zhí)行  chmod 777  install-sh姆另,賦予最高權(quán)限

3 配置GDAL環(huán)境變量

通過vi /etc/profile去配置gdal/lib喇肋、gdal/bin、gdal/data吧迹辐,也可以把profile下載到本地改完再上傳

GDAL_HOME=/usr/local/pgsql/plugin/gdal
GDAL_DATA=$GDAL_HOME/share/gdal

LD_LIBRARY_PATH=$GDAL_HOME/lib:/usr/local/lib64:$JRE_HOME/lib:$LD_LIBRARY_PATH

PATH=$GDAL_HOME/bin:$PATH

export ... PATH LD_LIBRARY_PATH GDAL_DATA

4 GDAL安裝完成蝶防,看看版本號(hào)和支持的數(shù)據(jù)格式吧

gdalinfo --version
ogr2ogr --formats


image.png

五印荔、編譯安裝PostGIS

1低葫、編譯

wget https://download.osgeo.org/postgis/source/postgis-3.0.1.tar.gz
tar -xvzf postgis-3.0.1.tar.gz
cd postgis-3.0.1
./configure --with-pgconfig=/usr/local/pgsql/bin/pg_config --with-geosconfig=/usr/local/pgsql/plugin/geos/bin/geos-config  --with-projdir=/usr/local/pgsql/plugin/proj --with-gdalconfig=/usr/local/pgsql/plugin/gdal/bin/gdal-config --with-jsondir=/usr/local/pgsql/plugin/json-c --with-pcredir=/usr/local/pcre
make && make install
1.png

2、安裝fuzzystrmatch擴(kuò)展

cd /usr/local/src/postgresql-12.2/contrib/fuzzystrmatch
make && make install

3躏鱼、創(chuàng)建PostGiS數(shù)據(jù)庫

  • 為了PostGIS插件生效氮采,停止啟動(dòng)服務(wù)
systemctl  stop  postgresql.service

systemctl  start  postgresql.service
  • 創(chuàng)建數(shù)據(jù)庫
#切換postgres用戶
su - postgres
#登錄PG數(shù)據(jù)庫
psql
# 創(chuàng)建數(shù)據(jù)庫
create database postgis;
#切換到postgis庫中
\c postgis
#顯示一下擴(kuò)展模塊
\dx

4、創(chuàng)建Postgresql擴(kuò)展

create extension postgis;
create extension postgis_topology;
create extension fuzzystrmatch;
create extension postgis_tiger_geocoder;
image.png

5染苛、問題分析

  • 配置過程中發(fā)現(xiàn)的錯(cuò)誤主要的是no gdal鹊漠,GDALALLRegister找不到:
1:找不到gdal庫,通過配置gdal環(huán)境變量解決
2:gdal庫配置沒有問題主到,在gdal檢測中發(fā)生錯(cuò)誤,最終還是gdal編譯

敲重點(diǎn):根據(jù)config.log分析錯(cuò)誤原因

  • 編譯過程主要是各種庫找到
1躯概、個(gè)別文件通過設(shè)置軟連接登钥,如
ln -s /usr/local/lib64/libSFCGAL.so /usr/local/lib/libSFCGAL.so
...

2、依賴庫比較多時(shí)娶靡,就直接把依賴庫lib加入系統(tǒng)共享庫,如
echo '/usr/local/pgsql/lib' >> /etc/ld.so.conf
echo '/usr/local/pgsql/plugin/gdal/lib' >> /etc/ld.so.conf
...
ldconfig
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末牧牢,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子姿锭,更是在濱河造成了極大的恐慌塔鳍,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呻此,死亡現(xiàn)場離奇詭異轮纫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)焚鲜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門掌唾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人忿磅,你說我怎么就攤上這事糯彬。” “怎么了葱她?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵撩扒,是天一觀的道長。 經(jīng)常有香客問我吨些,道長却舀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任锤灿,我火速辦了婚禮,結(jié)果婚禮上辆脸,老公的妹妹穿的比我還像新娘但校。我一直安慰自己,他們只是感情好啡氢,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布状囱。 她就那樣靜靜地躺著,像睡著了一般倘是。 火紅的嫁衣襯著肌膚如雪亭枷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天搀崭,我揣著相機(jī)與錄音叨粘,去河邊找鬼猾编。 笑死,一個(gè)胖子當(dāng)著我的面吹牛升敲,可吹牛的內(nèi)容都是我干的答倡。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼驴党,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼瘪撇!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起港庄,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤倔既,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后鹏氧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體渤涌,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年度帮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了歼捏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡笨篷,死狀恐怖瞳秽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情率翅,我是刑警寧澤练俐,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站冕臭,受9級(jí)特大地震影響腺晾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜辜贵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一悯蝉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧托慨,春花似錦鼻由、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至婆硬,卻和暖如春狠轻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背彬犯。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國打工向楼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留查吊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓蜜自,卻偏偏與公主長得像菩貌,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子重荠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容