当前位置: 首页 > news >正文

openEuler22.03 环境编译安装 PostgreSQL 15.6 + PostGIS 3.4.1

文章目录

  • 环境
  • 查看依赖矩阵
  • 编译安装 PostgreSQL15.6
  • 编译过程中常见报错
    • 报错1:
    • 报错2:
    • 报错3
    • 报错4
    • 报错5:
    • 报错6:<奇葩的报错>
  • 编译安装 PostGIS
    • 安装 libxml2
    • 安装 protobuf-c
    • 安装 json-c
    • 安装 sqlite-3 (因为 proj 会依赖于该库)
    • 安装 libtiff, libcurl,mpfr 等库(proj会依赖该库)
    • 安装 proj
    • 安装 geos
    • 安装 gdal
    • 安装 PostGIS
  • 注意事项

环境

[root@localhost xmz]# docker exec -it euler_compile_env  bash[root@ff66b6827bf2 /]# cat /etc/os-release 
NAME="openEuler"
VERSION="22.03 (LTS-SP3)"
ID="openEuler"
VERSION_ID="22.03"
PRETTY_NAME="openEuler 22.03 (LTS-SP3)"
ANSI_COLOR="0;31"

查看依赖矩阵

https://trac.osgeo.org/postgis/wiki/UsersWikiPostgreSQLPostGIS

编译安装 PostgreSQL15.6

下载并上传源码压缩包然后解压
编译 PG 安装
mkdir -p /usr/local/pgsql
cd postgresql-15.6
./configure --prefix=/usr/local/pgsql  --with-python  --with-openssl --with-libxml  --enable-debug --enable-dtrace  PYTHON=/usr/bin/python3.9 --with-readline
make -j $(nproc) world && make install-world

编译过程中常见报错

报错1:

<Python.h>file not found
解决方法:
需要去openouler网站下载并安装 rpm 包 (可以参考  more  /etc/yum.repos.d/openEuler.repo  文件)[root@localhost ~]# rpm -Uvh python3-devel-3.9.9-28.oe2203sp3.x86_64.rpm --nodeps
警告:python3-devel-3.9.9-28.oe2203sp3.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID fb37bc6f: NOKEY
Verifying...                          ################################# [100%]
准备中...                          ################################# [100%]
正在升级/安装...1:python3-devel-3.9.9-28.oe2203sp3 ################################# [100%]
[root@localhost ~]# 

报错2:

configure: error: library 'xml2' (version >= 2.6.23) is required for XML support
解决方法:
下载并安装 libxml2与 libxml2-devel 对应的 rpm 包

报错3

configure: error: library 'crypto' is required for OpenSSL
解决方法
下载并安装 openssl-devel 对应 rpm 包

报错4

configure: error: zlib library not found
解决方法:
下载并安装 zlib zlib-devel 对应 rpm 包

报错5:

Configure: error: readline not found
解决方法:
下载并安装 readline-devel 对应 rpm 包

报错6:<奇葩的报错>

make: Warning: File 'src/Makefile.port' has modification time 1707098160 s in the future
原因:
时间不对, 可能是系统时间过于老,比如我有个环境中 系统时间是 1970 年
解决方法:
手动将系统时间调整为正确的时间 date -s "真实时间"
然后 hwclock -w; hwclock -s
然后重新 configure ; make ; make install

编译安装 PostGIS

在这里插入图片描述

先安装依赖包, 安装原则如下:能用 yum 先用 yum 安装;不能 yum 安装就 rpm 包安装;没有 rpm 包,再编译安装.
当前版本对应官网 RPM 包安装路径如下:

安装 libxml2

编译 PG 的之前已经安装了
[root@openEuler ~]# rpm -qa |grep xml
libxml2-2.9.12-15.oe2203.aarch64
libxml2-devel-2.9.12-5.oe2203.aarch64

安装 protobuf-c

直接去官网镜像站点下载并安装 protobuf 与 protobuf-c(依赖于 protobuf)
[root@openEuler ~]# rpm -qa |grep protobuf
protobuf-3.9.0-7.oe1.aarch64
protobuf-devel-3.9.0-7.oe1.aarch64
protobuf-c-1.3.2-2.oe1.aarch64
protobuf-c-devel-1.3.2-2.oe1.aarch64

安装 json-c

由于环境中已经存在 json-c 0.15
[root@openEuler ~]# rpm -qa |grep json-c
json-c-0.15-2.oe2203.aarch64
而官网中默认的 json-c 0.13
所以最好是安装 json-c-devel-0.15 以及 json-c-0.15的 rpm 包rpm -Uvh json-c-0.15-6.oe2203.aarch64.rpm
rpm -Uvh json-c-devel-0.15-6.oe2203.aarch64.rpm 

安装 sqlite-3 (因为 proj 会依赖于该库)

环境中已经存在更新的版本 sqlite-3.37.2-5.oe2203.aarch64, 所以我们只安装 sqlite-devel-3.36.0-2.oe2203.aarch64.rpm

[root@openEuler other_deps]# rpm -Uvh sqlite-3.36.0-2.oe2203.aarch64.rpm 
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]package sqlite-3.37.2-5.oe2203.aarch64 (which is newer than sqlite-3.36.0-2.oe2203.aarch64) is already installed
[root@openEuler other_deps]# rpm -Uvh sqlite-devel-3.36.0-2.oe2203.aarch64.rpm 
error: Failed dependencies:sqlite(aarch-64) = 3.36.0-2.oe2203 is needed by sqlite-devel-3.36.0-2.oe2203.aarch64
[root@openEuler other_deps]# rpm -qa |grep sqlite 
sqlite-3.37.2-5.oe2203.aarch64
[root@openEuler other_deps]# rpm -Uvh sqlite-devel-3.36.0-2.oe2203.aarch64.rpm  --nodeps
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...1:sqlite-devel-3.36.0-2.oe2203     ################################# [100%]
[root@openEuler other_deps]# 

安装 libtiff, libcurl,mpfr 等库(proj会依赖该库)

[root@openEuler other_deps]# rpm -Uvh libtiff-4.3.0-9.oe2203.aarch64.rpm 
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]package libtiff-4.3.0-24.oe2203.aarch64 (which is newer than libtiff-4.3.0-9.oe2203.aarch64) is already installed
[root@openEuler other_deps]# rpm -Uvh libtiff-devel-4.3.0-9.oe2203.aarch64.rpm 
error: Failed dependencies:libtiff = 4.3.0-9.oe2203 is needed by libtiff-devel-4.3.0-9.oe2203.aarch64
[root@openEuler other_deps]# rpm -Uvh libtiff-devel-4.3.0-9.oe2203.aarch64.rpm --nodeps
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...1:libtiff-devel-4.3.0-9.oe2203     ################################# [100%]
[root@openEuler other_deps]# Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]package mpfr-4.1.0-1.oe2203.aarch64 is already installed
[root@openEuler ~]# rpm -Uvh mpfr-devel-4.1.0-1.oe2203.aarch64.rpm  
error: Failed dependencies:gmp-devel is needed by mpfr-devel-4.1.0-1.oe2203.aarch64
[root@openEuler ~]# rpm -Uvh mpfr-devel-4.1.0-1.oe2203.aarch64.rpm --nodeps
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...1:mpfr-devel-4.1.0-1.oe2203        ################################# [100%]
[root@openEuler ~]# 
[root@openEuler ~]# rpm -Uvh libjpeg-turbo-2.1.1-1.oe2203.aarch64.rpm
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]package libjpeg-turbo-2.1.1-2.oe2203.aarch64 (which is newer than libjpeg-turbo-2.1.1-1.oe2203.aarch64) is already installed
[root@openEuler ~]# rpm -Uvh libjpeg-turbo-devel-2.1.1-1.oe2203.aarch64.rpm --nodeps
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...1:libjpeg-turbo-devel-2.1.1-1.oe220################################# [100%]
[root@openEuler ~]# rpm -Uvh libcurl-7.79.1-2.oe2203.aarch64.rpm
error: Failed dependencies:libcurl = 7.79.1-15.oe2203 is needed by (installed) curl-7.79.1-15.oe2203.aarch64
[root@openEuler ~]# rpm -Uvh libcurl-7.79.1-2.oe2203.aarch64.rpm --nodeps
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]package libcurl-7.79.1-15.oe2203.aarch64 (which is newer than libcurl-7.79.1-2.oe2203.aarch64) is already installed
[root@openEuler ~]# rpm -qa |grep libcurl
libcurl-7.79.1-15.oe2203.aarch64
[root@openEuler ~]# rpm -Uvh libcurl-devel-7.79.1-2.oe2203.aarch64.rpm
error: Failed dependencies:libcurl = 7.79.1-2.oe2203 is needed by libcurl-devel-7.79.1-2.oe2203.aarch64
[root@openEuler ~]# rpm -Uvh libcurl-devel-7.79.1-2.oe2203.aarch64.rpm --nodeps
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...1:libcurl-devel-7.79.1-2.oe2203    ################################# [100%]
[root@openEuler ~]# rpm -qa |grep libcurl
libcurl-7.79.1-15.oe2203.aarch64
libcurl-devel-7.79.1-2.oe2203.aarch64

安装 proj

proj9 开始使用的是 cmake , 他会依赖于 googletest, 需要手动下载并编译安装 googletest, 比较麻烦
而 proj9 之前的版本可以使用 三板斧 configure;make;make install, 比较方便些

mkdir -p  /usr/local/proj-8.2.1
# 如果只想编译动态库
./configure --prefix=/usr/local/proj-8.2.1 
# 如果想编译出静态库(也包含动态库)
./configure --prefix=/usr/local/proj-8.2.1   --enable-static CFLAGS='-fPIC' CXXFLAGS='-fPIC'
make -j $(nproc) && make install最终打印如下:
。。。
make[2]: Nothing to be done for 'install-exec-am'./usr/bin/mkdir -p '/usr/local/proj-8.2.1/share/doc/proj'/usr/bin/install -c -m 644 COPYING NEWS AUTHORS '/usr/local/proj-8.2.1/share/doc/proj'/usr/bin/mkdir -p '/usr/local/proj-8.2.1/lib/pkgconfig'/usr/bin/install -c -m 644 proj.pc '/usr/local/proj-8.2.1/lib/pkgconfig'
make[2]: Leaving directory '/root/other_deps/p`在这里插入代码片`roj-8.2.1'
make[1]: Leaving directory '/root/other_deps/proj-8.2.1'
[root@openEuler proj-8.2.1]# ll /usr/local/proj-8.2.1/
total 16
drwxr-xr-x 2 root root 4096 Jun 14 17:22 bin
drwxr-xr-x 3 root root 4096 Jun 14 17:22 include
drwxr-xr-x 3 root root 4096 Jun 14 17:22 lib
drwxr-xr-x 5 root root 4096 Jun 14 17:22 share

安装 geos

cd /root/other_deps/geos-3.12.1
mkdir build 
cd build# 指定安装路径,如果只想编译动态库, 命令如下
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/geos-3.12.1# 指定安装路径, 如果只想编译静态库, 命令如下
cmake -DBUILD_SHARED_LIBS=OFF .. -DCMAKE_INSTALL_PREFIX=/usr/local/geos-3.12.1# 编译与安装
cmake --build . -j $(nproc) && cmake --build . --target install -j $(nproc)# 查看结果
[root@openEuler build]# ll /usr/local/geos-3.12.1/lib64/
total 10096
drwxr-xr-x 3 root root    4096 Jun 14 21:28 cmake
-rw-r--r-- 1 root root 9740942 Jun 14 21:25 libgeos.a
-rw-r--r-- 1 root root  585120 Jun 14 21:25 libgeos_c.a
drwxr-xr-x 2 root root    4096 Jun 14 21:28 pkgconfig
可以看到只有静态库如果没有指定自定义目录, 默认是安装在了 /usr/local/lib64 下
[root@openEuler build]# ll /usr/local/lib64/*geos*
lrwxrwxrwx 1 root root      17 Jun 14 17:39 /usr/local/lib64/libgeos.so -> libgeos.so.3.12.1
-rwxr-xr-x 1 root root 3879856 Jun 14 17:31 /usr/local/lib64/libgeos.so.3.12.1
lrwxrwxrwx 1 root root      14 Jun 14 17:39 /usr/local/lib64/libgeos_c.so -> libgeos_c.so.1
lrwxrwxrwx 1 root root      19 Jun 14 17:39 /usr/local/lib64/libgeos_c.so.1 -> libgeos_c.so.1.18.1
-rwxr-xr-x 1 root root  408360 Jun 14 17:32 /usr/local/lib64/libgeos_c.so.1.18.1
[root@openEuler build]# 

安装 gdal

安装指导参考: https://gdal.org/build_hints.html
必须项如下:
在这里插入图片描述

这里我使用 GDAL 3.8.0

mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/gdal-3.8.0
cmake --build . -j $(nproc)
cmake --build . --target instasll  -j $(nproc)

安装 PostGIS

安装 PostGIS 3.4.1

export PATH=/home/postgres/pgsql/bin:$PATH./configure \
--with-pgconfig=/home/postgres/pgsql/bin/pg_config \
--with-geosconfig=/usr/local/geos-3.12.1/bin/geos-config \
--with-gdalconfig=/usr/local/gdal-3.8.0/bin/gdal-config \
--with-projdir=/usr/local/proj-8.2.1make -j $(nproc) 
make install

注意事项

  1. 最终打包的时候,如果要在 windows 环境上库, 尽量使用压缩包整体上库
  2. 如果使用的是解压之后的单个文件的上库, 这样会存在链接失效问题 (需要手工修改 jenkins 编译脚本来添加链接代码)
  3. 可能会出现 时区等类型的文件出现文件大小变为 0 的问题

相关文章:

  • 【计算机网络】TCP/IP四层模型是什么?与OSI七层模型哪些区别?
  • Nginx安全防护与HTTPS部署
  • AI大模型驱动的智能座舱研发体系重构
  • 金升阳科技:配套AC/DC砖类电源的高性能滤波器
  • 如何开始使用 Blender:Blender 3D 初学者指南和简介 怎么下载格式模型
  • 制造企业PLM系统成本基准:2025年预算分配与资源成本率的5种优化模型
  • Spark,配置hadoop集群2
  • 从贴牌到品牌:出海官网如何让中国制造“贵”起来?
  • Java基础学完,继续深耕(0506)SQL--多表关系
  • 【Hive入门】Hive行级安全:基于Apache Ranger的细粒度访问控制深度解析
  • ShardingJdbc-水平分库
  • 【ArcGISPro】属性规则--属性联动
  • 【JsonCpp、Muduo、C++11】JsonCpp库、Muduo库、C++11异步操作
  • 根据蓝牙名称自动匹配对应 UI
  • BigemapPro小技巧:调整线方向及延长线
  • IAA-Net:一种实孔径扫描雷达迭代自适应角超分辨成像方法——论文阅读
  • 游戏引擎学习第260天:在性能分析器中实现钻取功能
  • mac m2 安装 hbase
  • 依图科技C++后端开发面试题及参考答案
  • 网站主机控制面板深度解析:cPanel、Plesk 及其他主流选择
  • 央行将增加3000亿元科技创新和技术改造再贷款额度
  • 同为“东部重要中心城市”后交出首份季报:宁杭苏表现如何?
  • 特朗普称不会为了和中国谈判而取消对华关税,外交部回应
  • 青岛鞋企双星名人集团家族内斗:创始人发公开信指控子孙夺权
  • 中东睿评|胡塞武装已成为楔入中东各方力量之间的钉子户
  • 竞彩湃|新科冠军利物浦留力?纽卡斯尔全力冲击欧冠