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 本地源 离线安装
这块我理解的其实和方法一差不多,大概的逻辑是如下步骤:
- 下载包并缓存到本地
- 拷贝到目标机器
- 生成索引文件
- 更新source.list源
- 安装软件
方法三(源码安装)
参考博文:传送门
参考官方帮助:传送门(认真阅读环境要求,安装步骤等信息)
-
下载源码包:传送门
-
拷贝源码包
postgresql-9.4.21.tar.gz
到目标机器,并解压,然后删除压缩包文件# 拷贝源码包到/usr/local/src # cd到指定目录 cd /usr/local/src # 解压源码包 tar -zxvf postgresql-9.4.21.tar.gz
-
在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 *
-
拷贝下载好的依赖包拷贝到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 $?
-
在B机器上执行
./configure
检查# cd到postgresql-9.4.21目录 cd postgresql-9.4.21 # 执行 ./configure查看当前环境是否支持安装 ./configure # 执行如下命令确认是否执行成功,输出0为执行成功 echo $?
-
执行
make
编译
-
执行
make install
安装
-
添加用户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哈哈~
-
简单配置
# 设置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配置
-
修改监听的IP和端口
# 修改配置文件postgresql.conf,如果找不到可以使用命令:find / -name postgresql.conf 查找 vi /etc/postgresql/10/main/ postgresql.conf # 将 #listen_addresses = ‘localhost’ 的注释去掉并改为 listen_addresses = ‘*’ # 修改max_connections按需求更改,默认最大支持100个连接。修改之后保存并退出。
-
修改配置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
-
日志文件配置
# 开启日志收集 logging_collector = on # 日志的记录一般使用默认值就可以了 log_directory = 'pg_log'
-
开机启动配置:参考《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等论坛进行提问。
-
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
-
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
-
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
保存退出。 -
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
-
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
-
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
即可解决。 -
创建PostGIS的扩展
shell:sudo -u postgres psql -d gis -c 'CREATE EXTENSION postgis;' sudo -u postgres psql -d gis -c 'CREATE EXTENSION postgis_topology;'
psql:
闭坑指南:
-
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/
-
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/
-
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数据库
- 确认当前ArcGIS支持的Postgresql和PostGIS版本,ArcGIS 支持的PostgreSQL版本
- 拷贝
C:\Program Files (x86)\ArcGIS\Desktop10.4\DatabaseSupport\PostgreSQL\9.4\Linux64
目录下的so文件到PKGLIBDIR
变量所指向的目录中(执行pg_config
命令获取)
- 使用GP工具Create Enterprise Geodatabase创建企业级地理数据库(具体参数略)
转载自:https://blog.csdn.net/yh0503/article/details/88526633