从依赖地狱到一键安装用yumdownloader搞定CentOS 7离线PostgreSQL 14与PostGIS所有包在离线环境中部署PostgreSQL和PostGIS最令人头疼的莫过于处理那些错综复杂的依赖关系。想象一下当你费尽周折下载了主安装包却在安装过程中不断遭遇缺少依赖的报错不得不反复查找、下载、传输——这种体验足以让任何运维人员抓狂。本文将带你彻底摆脱这种困境通过yumdownloader工具实现一键下载所有依赖构建完整的离线安装包集合。1. 准备工作与环境配置1.1 搭建有网络连接的CentOS 7环境首先需要一台能够访问互联网的CentOS 7机器作为下载主机。这台机器最好与目标离线环境保持相同的系统版本和架构通常为x86_64以避免兼容性问题。建议使用最小化安装的干净系统避免已有软件包干扰依赖解析。# 检查系统版本和架构 cat /etc/redhat-release uname -m1.2 安装必要工具确保系统已安装yum-utils工具集它包含了我们需要的yumdownloader命令yum install -y yum-utils createrepocreaterepo工具将在后续用于创建本地仓库元数据方便批量安装。1.3 添加PostgreSQL官方仓库PostgreSQL官方提供了专门针对不同版本的YUM仓库我们需要先添加PGDG仓库# 添加PostgreSQL 14官方仓库 yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm # 添加EPEL仓库部分依赖可能需要 yum install -y epel-release2. 智能下载所有依赖包2.1 使用yumdownloader解析依赖yumdownloader的--resolve参数能够自动下载指定软件包及其所有依赖。这是解决依赖地狱的关键武器# 创建下载目录 mkdir -p /opt/pg_offline cd /opt/pg_offline # 下载PostgreSQL 14主包及其依赖 yumdownloader --resolve --destdir ./ postgresql14-server postgresql14-contrib2.2 下载PostGIS及其依赖PostGIS的依赖更为复杂涉及地理空间数据处理的各种库。指定与PostgreSQL 14兼容的PostGIS 3.2版本yumdownloader --resolve --destdir ./ postgis32_142.3 验证下载的包完整性下载完成后检查包的数量和大小是否合理。一个完整的PostgreSQL 14PostGIS 3.2离线包集合通常包含80-100个RPM包总大小约300-400MB。ls -lh /opt/pg_offline | wc -l du -sh /opt/pg_offline3. 构建离线安装仓库3.1 创建本地YUM仓库将下载的RPM包组织成本地仓库可以简化后续的安装过程createrepo /opt/pg_offline3.2 打包传输到离线环境将整个目录打包方便传输到离线环境tar czvf pg_offline_bundle.tar.gz -C /opt pg_offline然后通过U盘、内部网络或其他安全方式将打包文件传输到目标离线机器。4. 离线环境部署实战4.1 准备离线环境在目标机器上解压传输过来的安装包mkdir -p /opt/pg_offline tar xzvf pg_offline_bundle.tar.gz -C /opt4.2 配置本地仓库创建仓库配置文件cat /etc/yum.repos.d/pg_local.repo EOF [pg_local] namePostgreSQL Local Repository baseurlfile:///opt/pg_offline enabled1 gpgcheck0 EOF更新YUM缓存yum clean all yum makecache4.3 批量安装所有组件现在可以一键安装所有软件包无需手动处理依赖yum install -y postgresql14-server postgresql14-contrib postgis32_145. 配置与初始化5.1 初始化PostgreSQL# 创建数据目录 mkdir -p /home/pgsql/14/data chown -R postgres:postgres /home/pgsql # 初始化数据库 sudo -u postgres /usr/pgsql-14/bin/initdb -D /home/pgsql/14/data5.2 配置远程访问修改postgresql.confvim /home/pgsql/14/data/postgresql.conf关键配置项listen_addresses * port 5432 max_connections 200 shared_buffers 1GB配置客户端认证vim /home/pgsql/14/data/pg_hba.conf添加行host all all 0.0.0.0/0 md55.3 配置systemd服务修改服务文件指定数据目录vim /usr/lib/systemd/system/postgresql-14.service更新环境变量EnvironmentPGDATA/home/pgsql/14/data启动服务systemctl daemon-reload systemctl enable --now postgresql-146. PostGIS配置与验证6.1 创建空间数据库sudo -u postgres createdb gisdb6.2 启用PostGIS扩展sudo -u postgres psql gisdb -c CREATE EXTENSION postgis;6.3 验证安装sudo -u postgres psql gisdb -c SELECT PostGIS_Version();应返回类似结果postgis_version --------------------------------------- 3.2 USE_GEOS1 USE_PROJ1 USE_STATS1 (1 row)7. 高级技巧与故障排除7.1 处理常见依赖问题即使使用yumdownloader --resolve偶尔仍可能遇到特殊情况。常见问题及解决方案GLIBC版本冲突确保离线环境与下载环境的CentOS小版本一致缺少开发包考虑额外下载postgresql14-devel和postgis32_14-devel符号链接问题如遇socket路径错误可创建软链接ln -s /run/postgresql/.s.PGSQL.5432 /run/postgresql/.s.PGSQL.64327.2 创建最小化安装包为节省空间可以只下载必要依赖yumdownloader --resolve --destdir ./ --installroot/opt/minimal-root \ --setoptinstall_weak_depsfalse postgresql14-server postgis32_147.3 版本兼容性矩阵PostgreSQL与PostGIS版本对应关系参考PostgreSQL版本兼容的PostGIS版本14.x3.2.x13.x3.1.x12.x3.0.x8. 自动化脚本实现为简化流程可以创建自动化脚本完成所有步骤#!/bin/bash # 离线包下载脚本 REPO_DIR/opt/pg_offline_$(date %Y%m%d) mkdir -p $REPO_DIR # 添加仓库 yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm yum install -y epel-release yum-utils createrepo # 下载包 yumdownloader --resolve --destdir $REPO_DIR \ postgresql14-server postgresql14-contrib postgis32_14 # 创建仓库 createrepo $REPO_DIR # 打包 tar czvf pg_offline_bundle.tar.gz -C /opt $(basename $REPO_DIR) echo 离线包已创建于: $REPO_DIR echo 打包文件: $(pwd)/pg_offline_bundle.tar.gz将此脚本保存为build_pg_offline.sh并赋予执行权限即可一键生成离线安装包。
从依赖地狱到一键安装:用yumdownloader搞定CentOS 7离线PostgreSQL 14与PostGIS所有包
从依赖地狱到一键安装用yumdownloader搞定CentOS 7离线PostgreSQL 14与PostGIS所有包在离线环境中部署PostgreSQL和PostGIS最令人头疼的莫过于处理那些错综复杂的依赖关系。想象一下当你费尽周折下载了主安装包却在安装过程中不断遭遇缺少依赖的报错不得不反复查找、下载、传输——这种体验足以让任何运维人员抓狂。本文将带你彻底摆脱这种困境通过yumdownloader工具实现一键下载所有依赖构建完整的离线安装包集合。1. 准备工作与环境配置1.1 搭建有网络连接的CentOS 7环境首先需要一台能够访问互联网的CentOS 7机器作为下载主机。这台机器最好与目标离线环境保持相同的系统版本和架构通常为x86_64以避免兼容性问题。建议使用最小化安装的干净系统避免已有软件包干扰依赖解析。# 检查系统版本和架构 cat /etc/redhat-release uname -m1.2 安装必要工具确保系统已安装yum-utils工具集它包含了我们需要的yumdownloader命令yum install -y yum-utils createrepocreaterepo工具将在后续用于创建本地仓库元数据方便批量安装。1.3 添加PostgreSQL官方仓库PostgreSQL官方提供了专门针对不同版本的YUM仓库我们需要先添加PGDG仓库# 添加PostgreSQL 14官方仓库 yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm # 添加EPEL仓库部分依赖可能需要 yum install -y epel-release2. 智能下载所有依赖包2.1 使用yumdownloader解析依赖yumdownloader的--resolve参数能够自动下载指定软件包及其所有依赖。这是解决依赖地狱的关键武器# 创建下载目录 mkdir -p /opt/pg_offline cd /opt/pg_offline # 下载PostgreSQL 14主包及其依赖 yumdownloader --resolve --destdir ./ postgresql14-server postgresql14-contrib2.2 下载PostGIS及其依赖PostGIS的依赖更为复杂涉及地理空间数据处理的各种库。指定与PostgreSQL 14兼容的PostGIS 3.2版本yumdownloader --resolve --destdir ./ postgis32_142.3 验证下载的包完整性下载完成后检查包的数量和大小是否合理。一个完整的PostgreSQL 14PostGIS 3.2离线包集合通常包含80-100个RPM包总大小约300-400MB。ls -lh /opt/pg_offline | wc -l du -sh /opt/pg_offline3. 构建离线安装仓库3.1 创建本地YUM仓库将下载的RPM包组织成本地仓库可以简化后续的安装过程createrepo /opt/pg_offline3.2 打包传输到离线环境将整个目录打包方便传输到离线环境tar czvf pg_offline_bundle.tar.gz -C /opt pg_offline然后通过U盘、内部网络或其他安全方式将打包文件传输到目标离线机器。4. 离线环境部署实战4.1 准备离线环境在目标机器上解压传输过来的安装包mkdir -p /opt/pg_offline tar xzvf pg_offline_bundle.tar.gz -C /opt4.2 配置本地仓库创建仓库配置文件cat /etc/yum.repos.d/pg_local.repo EOF [pg_local] namePostgreSQL Local Repository baseurlfile:///opt/pg_offline enabled1 gpgcheck0 EOF更新YUM缓存yum clean all yum makecache4.3 批量安装所有组件现在可以一键安装所有软件包无需手动处理依赖yum install -y postgresql14-server postgresql14-contrib postgis32_145. 配置与初始化5.1 初始化PostgreSQL# 创建数据目录 mkdir -p /home/pgsql/14/data chown -R postgres:postgres /home/pgsql # 初始化数据库 sudo -u postgres /usr/pgsql-14/bin/initdb -D /home/pgsql/14/data5.2 配置远程访问修改postgresql.confvim /home/pgsql/14/data/postgresql.conf关键配置项listen_addresses * port 5432 max_connections 200 shared_buffers 1GB配置客户端认证vim /home/pgsql/14/data/pg_hba.conf添加行host all all 0.0.0.0/0 md55.3 配置systemd服务修改服务文件指定数据目录vim /usr/lib/systemd/system/postgresql-14.service更新环境变量EnvironmentPGDATA/home/pgsql/14/data启动服务systemctl daemon-reload systemctl enable --now postgresql-146. PostGIS配置与验证6.1 创建空间数据库sudo -u postgres createdb gisdb6.2 启用PostGIS扩展sudo -u postgres psql gisdb -c CREATE EXTENSION postgis;6.3 验证安装sudo -u postgres psql gisdb -c SELECT PostGIS_Version();应返回类似结果postgis_version --------------------------------------- 3.2 USE_GEOS1 USE_PROJ1 USE_STATS1 (1 row)7. 高级技巧与故障排除7.1 处理常见依赖问题即使使用yumdownloader --resolve偶尔仍可能遇到特殊情况。常见问题及解决方案GLIBC版本冲突确保离线环境与下载环境的CentOS小版本一致缺少开发包考虑额外下载postgresql14-devel和postgis32_14-devel符号链接问题如遇socket路径错误可创建软链接ln -s /run/postgresql/.s.PGSQL.5432 /run/postgresql/.s.PGSQL.64327.2 创建最小化安装包为节省空间可以只下载必要依赖yumdownloader --resolve --destdir ./ --installroot/opt/minimal-root \ --setoptinstall_weak_depsfalse postgresql14-server postgis32_147.3 版本兼容性矩阵PostgreSQL与PostGIS版本对应关系参考PostgreSQL版本兼容的PostGIS版本14.x3.2.x13.x3.1.x12.x3.0.x8. 自动化脚本实现为简化流程可以创建自动化脚本完成所有步骤#!/bin/bash # 离线包下载脚本 REPO_DIR/opt/pg_offline_$(date %Y%m%d) mkdir -p $REPO_DIR # 添加仓库 yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm yum install -y epel-release yum-utils createrepo # 下载包 yumdownloader --resolve --destdir $REPO_DIR \ postgresql14-server postgresql14-contrib postgis32_14 # 创建仓库 createrepo $REPO_DIR # 打包 tar czvf pg_offline_bundle.tar.gz -C /opt $(basename $REPO_DIR) echo 离线包已创建于: $REPO_DIR echo 打包文件: $(pwd)/pg_offline_bundle.tar.gz将此脚本保存为build_pg_offline.sh并赋予执行权限即可一键生成离线安装包。