Ubuntu16.0.4 Postgresql Postgis离线安装


缘起

客户的机器不支持外网,明明简单的部署也变得复杂起来了,本文就是用来记录离线部署的一些探索过程,For Me And For You like me。

软件安装

Ubuntu packages查询:传送门

Postgresql安装

找两台机器,一台可以连外网,一台不能连内网

  • A机器:可以连外网
  • B机器:不可以连外网

以下是个人愚见,大佬轻喷。

方法 优点 缺点
方法一 安装过程较简单 只能安装仓库中支持的的最新版本
方法二 安装过程也算简单 只能安装仓库中支持的的最新版本
方法三 可以下载源码,编译安装任意版本 安装过程复杂

方法一(已测试成功)

参考资料:传送门
Step1:在A机器上下载依赖包

# 进入/var/tmp目录
cd /var/tmp
# 获取PostgreSQL的所有依赖包的位置,这块获取的是Ubuntu Packages中的支持的最新的postgresql版本,当前为9.5
sudo apt-get --allow-unauthenticated -y install --print-uris postgresql | cut -d\' -f2 | grep http:// > /var/tmp/download-list
# 可以使用cat命令查看一下download-list文件,正常里面已经有了相应的url列表
cat download-list
# 下载所有的依赖包
wget -i download-list

Step2:将A机器上的依赖包拷贝到B机器,可以使用scp命令,或者用xftp工具拷贝

# 将A机器上的/var/tmp/download-list文件拷贝到B机器
# 将A机器上的、var/tmp下的*.deb包拷贝到B机器,这块我是用tar命令压缩后,拷贝过去,再解压的
tar -czvf 1.tar.gz ./*.deb
# 拷贝到B机器,然后在B机器上解压
cd /var/tmp
tar -zxvf 1.tar.gz ../
# 删除压缩文件
rm -rf 1.tar.gz

Step3: 在B机器上安装deb包

# 当前所在目录为/var/tmp
sudo dpkg -i *.deb

Step4: 在B机器上验证

# 查看Postgresq服务的状态
sudo service postgresql status
# 如果没有启动,可以执行如下命令
sudo service postgresql start

该步骤安装完的版本为9.5

方法二(暂未试验)

官方安装步骤:传送门
参考博文:Ubuntu apt 本地源 离线安装
这块我理解的其实和方法一差不多,大概的逻辑是如下步骤:

  1. 下载包并缓存到本地
  2. 拷贝到目标机器
  3. 生成索引文件
  4. 更新source.list源
  5. 安装软件

方法三(源码安装)

参考博文:传送门
参考官方帮助:传送门(认真阅读环境要求,安装步骤等信息)

  1. 下载源码包:传送门

  2. 拷贝源码包postgresql-9.4.21.tar.gz到目标机器,并解压,然后删除压缩包文件

    # 拷贝源码包到/usr/local/src
    # cd到指定目录
    cd /usr/local/src
    # 解压源码包
    tar -zxvf postgresql-9.4.21.tar.gz
    
  3. 在A机器(可以连外网)上下载依赖包

    # 安装make
    apt -d install make
    # 安装gcc
    apt -d install gcc
    # 安装g++
    apt -d install g++
    # 安装readline
    apt -d install libreadline-dev
    # 安装zlib
    apt -d install zlib1g
    apt -d install zlib1g.dev
    

    这些包都被缓存在 /var/cache/apt/archives/ 目录,可以利用打包命令将其打包,命令如下:
    tar -czvf pg-packages.tar.gz *

  4. 拷贝下载好的依赖包拷贝到B机器(可以连内网)

    # 拷贝 pg-packages.tar.gz文件到/var/cache/apt/archives目录,当然了你也可以拷贝到其他目录
    # cd到/var/cache/apt/archives目录
    # 解压文件
    tar -zxvf  pg-packages.tar.gz
    # 删除压缩包文件
    rm -rf pg-packages.tar.gz
    # 安装目录下的所有deb包
    dpkg -i *.deb
    # 执行如下命令确认是否执行成功,输出0为执行成功
    echo $?
    
  5. 在B机器上执行./configure检查

    # cd到postgresql-9.4.21目录
    cd postgresql-9.4.21
    # 执行 ./configure查看当前环境是否支持安装
    ./configure
    # 执行如下命令确认是否执行成功,输出0为执行成功
    echo $?
    
  6. 执行make编译

  7. 执行make install安装

  8. 添加用户postgres

    # 添加用户postgres
    adduser postgres
    # 创建目录 /usr/local/pgsql/data
    mkdir /usr/local/pgsql/data
    # 修改目录的所有者(这块建议使用root用户修改data目录的权限,chmod 777 /usr/local/pgsql/data)
    chown postgres /usr/local/pgsql/data
    # 使用root用户,修改data目录的权限
    chmod 700 -R /usr/local/pgsql/data
    # 切换到用户postgres
    su - postgres
    # 初始化数据库
    /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
    # 启动数据库服务
    /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data >logfile 2>&1 &
    # 创建数据库test
    /usr/local/pgsql/bin/createdb test
    # 连接数据库
    /usr/local/pgsql/bin/psql test
    

    大功告成,O(∩_∩)O哈哈~

  9. 简单配置

    # 设置PostgreSQL可执行文件的路径:
    PATH=/usr/local/pgsql/bin:$PATH
    export PATH
    # 设置共享库的路径:
    LD_LIBRARY_PATH=/usr/local/pgsql/lib
    export LD_LIBRARY_PATH
    

    如果你想让以上配置对所有的用户生效,可以把以上内容加到/etc/profile文件中

    export PATH=/usr/local/pgsql/bin:$PATH
    export LD_LIBRARY_PATH=/usr/local/pgsql/lib:$LD_LIBRARY_PATH
    export PGDATA=/usr/local/pgsql/data
    

    执行source /etc/profile生效环境变量

Postgresql配置

  1. 修改监听的IP和端口

    # 修改配置文件postgresql.conf,如果找不到可以使用命令:find / -name postgresql.conf 查找
    vi  /etc/postgresql/10/main/ postgresql.conf
    # 将 #listen_addresses = ‘localhost’ 的注释去掉并改为 listen_addresses = ‘*’
    # 修改max_connections按需求更改,默认最大支持100个连接。修改之后保存并退出。
    
  2. 修改配置pg_hba.conf文件

    # 1.修改配置文件 pg_hba.conf,如果找不到可以使用命令:find / -name pg_hba.conf 查找
    vi /etc/postgresql/10/main/ pg_hba.conf 
    # 在最后一行添加,然后保存并退出(按Esc+:wq!)
    host    all             all             0.0.0.0/0            trust
    
  3. 日志文件配置

    # 开启日志收集
    logging_collector = on
    # 日志的记录一般使用默认值就可以了
    log_directory = 'pg_log'
    

  4. 开机启动配置 :参考《Linux下PostgreSQL开机启动配置方法》
    此配置暂未成功

常用命令

位于pg的安装目录下的bin文件夹下有个pg_ctl的文件

pg_ctl start [-w] [-s] [-D datadir] [-l filename] [-o options] [-p path]
pg_ctl stop [-W] [-s] [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ]
pg_ctl restart [-w] [-s] [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ] [-o options]
pg_ctl reload [-s] [-D datadir]
pg_ctl status [-D datadir]
pg_ctl kill [signal_name] [process_id]
pg_ctl register [-N servicename] [-U username] [-P password] [-D datadir] [-w] [-o options]
pg_ctl unregister [-N servicename]

PostGIS安装

PostgreSQL和Postgis的对应关系表

方法一

这块您也可以如法炮制Postgresql安装的方法一,将Postgresql换成postgis(sudo apt-get --allow-unauthenticated -y install --print-uris postgis | cut -d\' -f2 | grep http:// > /var/tmp/download-list)。

方法二 (apt 安装)

Ubuntu16.0.4 目前搜索到的postgis最新版本为2.2.1。这块使用apt -d install 将包缓存到本地,同上面Postgresql的方法二

sudo apt install postgresql-10-postgis-2.4 
sudo apt install postgresql-10-postgis-scripts

#to get the commandline tools shp2pgsql, raster2pgsql you need to do this
sudo apt install postgis

方法三(源码安装)

参考博文:传送门(非常感谢这位同学^_^)
参考官方帮助:传送门
像PostgreSQL、make、gcc等上面安装了我就不赘述了,这块主要说一下需要安装的其它依赖包,这块以源码编译安装为例,当然了你如果觉得麻烦,也可以像我上面那样,用apt的方式下缓存好,然后拷贝过来一dpkg的方式安装。


个人心得:下载的依赖包有时可能会编译失败,编译安装的过程需要有足够的耐心。利用百度、谷歌查询相关问题,如果安装的包版本太低编译不过去,可以考虑换个新一点的安装包,遇到实在解决不了的问题可以去StackOverflow等论坛进行提问。


  1. Proj4 安装,要求安装版本 >=4.6.0

    # 这块我下载的是proj-4.9.2.tar.gz,并拷贝到B机器的/usr/local/src目录
    # 进入/usr/local/src目录
    cd /usr/local/src
    # 解压
    tar -zxvf proj-4.9.2.tar.gz
    # 进入解压好的目录
    cd proj-4.9.2/
    # 检查,可以配置安装路径 --prefix=/opt/proj-4.9.2
    ./congigure
    # 编译
    make
    # 安装
    make install
    
  2. Geos安装,要求安装版本>=3.3

     tar -jxvf geos-3.5.1.tar.bz2
     cd geos-3.5.1/
     ./configure --prefix=/opt/geos-3.5.1
     make
     make install
    
  3. LibXML2安装,要求安装版本>=2.5.x

    tar -zxvf libxml2-2.9.0.tar.gz
    cd libxml2-2.9.0/
    ./configure --prefix=/opt/libxml2-2.9.0
    make
    make install	
    

    备注:这块编译会报错:cannot remove ‘libtoolT’:No such file or directory
    解决方法:编辑configure文件vim configure,在vim的一般模式下输入/+RM "$cfgfile"进行搜索匹配,按i进入插入模式,将$RM "$cfgfile"替换成$RM -f "$cfgfile",然后按Esc回到一般模式,输入:wq保存退出。

  4. GDAL安装,要求安装版本>=1.8

    tar -zxvf gdal-2.4.0.tar.gz
    cd gdal-2.4.0/
    ./configure --prefix=/opt/gdal-2.4.0
    make
    make install		
    
  5. JSON-C安装,要求安装版本>=0.9

    tar -zxvf json-c-json-c-0.13.1-20180305.tar.gz
    cd json-c-json-c-0.13.1-20180305/
    ./configure --prefix=/opt/json-c-0.13.1
    make
    make install
    
  6. PostGIS 安装

    tar xvfz postgis-2.4.8dev.tar.gz
    cd postgis-2.4.8dev
    # 需要指定依赖包的位置,直接./configure可能会有问题
    ./configure --prefix=/opt/postgis-2.2.8 \
    		--with-pgconfig=/usr/local/pgsql/bin/pg_config \
    		--with-gdalconfig=/opt/gdal-2.4.0/bin/gdal-config \
    		--with-geosconfig=/opt/geos-3.5.1/bin/geos-config \
    		--with-xml2config=/opt/libxml2-2.9.0/bin/xml2-config \
    		--with-projdir=/opt/proj-4.9.2 \
    		--with-jsondir=/opt/json-c-0.13.1
    make
    make install
    

    可能会遇到如下错误:

    `autoheader' is missing on your system
    recipe for target ‘config.h.in’ failed
    

    遇到此错误只需touch config.h.in即可解决。

  7. 创建PostGIS的扩展
    shell:

    sudo -u postgres psql -d gis -c 'CREATE EXTENSION postgis;'
    sudo -u postgres psql -d gis -c 'CREATE EXTENSION postgis_topology;'
    

    psql:


闭坑指南

  1. ERROR: could not load library "/usr/local/pgsql/lib/postgis-2.2.so": libgeos_c.so.1: cannot open shared object file: No such file or directory
    原因:

    解决方案:参考博文

    # 参考上面json-c的路径,拷贝到了缺失的文件到目录/lib/x86_64-linux-gnu/
    cp /opt/geos-3.5.1/lib/libgeos_c.so.1 /lib/x86_64-linux-gnu/
    cp /opt/proj-4.9.2/lib/libproj.so.9 /lib/x86_64-linux-gnu/
    
  2. lwin_geojson.c:22:40: fatal error: json-c/json_object_private.h: No such file or directory
    解决方案:

    cd /usr/include
    sudo mkdir json
    sudo cp /usr/local/include/json-c/* /usr/include/json/
    
  3. ERROR: could not load library "/usr/local/pgsql/lib/rtpostgis-2.2.so": libgdal.so.20: cannot open shared object file: No such file or directory

    解决方案:

    cp /opt/gdal-2.4.0/lib/libgdal.so.20 /lib/x86_64-linux-gnu/
    

创建ArcSDE数据库

  1. 确认当前ArcGIS支持的Postgresql和PostGIS版本,ArcGIS 支持的PostgreSQL版本
  2. 拷贝C:\Program Files (x86)\ArcGIS\Desktop10.4\DatabaseSupport\PostgreSQL\9.4\Linux64目录下的so文件到PKGLIBDIR变量所指向的目录中(执行pg_config命令获取)
  3. 使用GP工具Create Enterprise Geodatabase创建企业级地理数据库(具体参数略)

转载自:https://blog.csdn.net/yh0503/article/details/88526633

You may also like...

退出移动版