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

文章目录

  • 环境
  • 查看依赖矩阵
  • [编译安装 PostgreSQL15.6](#编译安装 PostgreSQL15.6)
  • 编译过程中常见报错
  • [编译安装 PostGIS](#编译安装 PostGIS)
    • [安装 libxml2](#安装 libxml2)
    • [安装 protobuf-c](#安装 protobuf-c)
    • [安装 json-c](#安装 json-c)
    • [安装 sqlite-3 (因为 proj 会依赖于该库)](#安装 sqlite-3 (因为 proj 会依赖于该库))
    • [安装 libtiff, libcurl,mpfr 等库(proj会依赖该库)](#安装 libtiff, libcurl,mpfr 等库(proj会依赖该库))
    • [安装 proj](#安装 proj)
    • [安装 geos](#安装 geos)
    • [安装 gdal](#安装 gdal)
    • [安装 PostGIS](#安装 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.1

make -j $(nproc) 
make install

注意事项

  1. 最终打包的时候,如果要在 windows 环境上库, 尽量使用压缩包整体上库
  2. 如果使用的是解压之后的单个文件的上库, 这样会存在链接失效问题 (需要手工修改 jenkins 编译脚本来添加链接代码)
  3. 可能会出现 时区等类型的文件出现文件大小变为 0 的问题
相关推荐
文牧之2 分钟前
PostgreSQL 判断索引是否重建过的方法
运维·数据库·postgresql
kngines24 分钟前
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】4.4 异构数据源整合(CSV/JSON/Excel数据导入)
postgresql·数据分析·nifi·jq·copy·jsonb·talend
kngines3 小时前
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】8.1 基础图表绘制(折线图/柱状图/散点图)
postgresql·信息可视化·数据分析·柱状图·散点图·pyplot·折线图\
文牧之6 小时前
PostgreSQL 查询历史最大进程数方法
运维·数据库·postgresql
kngines1 天前
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】3.2 缺失值检测与处理(NULL值填充/删除策略)
postgresql·数据分析·显示缺失·隐性缺失·逻辑缺失·时间序列填充·缺失填充
kngines2 天前
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】3.3 异常值识别(Z-score法/IQR法/业务规则法)
数据库·postgresql·数据分析·z-score法·iqr法·业务规则法
kngines2 天前
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】4.3 数据脱敏与安全(模糊处理/掩码技术)
postgresql·模糊处理·动态掩码·pgcrypto·anon·开源数据匿名化·arx
偶尔微微一笑2 天前
postgresql数据库基本操作
运维·数据库·postgresql·oracle
kngines2 天前
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】3.1 数据质量评估指标(完整性/一致性/准确性)
数据库·postgresql·数据分析·值域校验·类型校验