Ubuntu20.04和22.04离线安装PostgreSQL14

今天安装 Postgresql14 遇到一个问题, 目标服务器只有内网, 内网提供标准的apt仓库, 但是因为不能连接外网, 所以没法添加第三方仓库, 这样安装pg14就成了问题.

从pg的官网看, https://www.postgresql.org/download/, 对于Linux, pg只提供仓库和源码两种方式, 因此不能访问外网时, 貌似只有源码编译这条路. 因为源码编译费时费力并且安装阶段需要自行配置, 容易出错. 对于机器上只需要安装一个实例的场景, 能用仓库还是用仓库.

如果还有一台安装了同样发行版, 并且可以上网的机器, 可以通过这台机器将离线安装包下载下来, 再传到目标机器上安装. 下载离线安装包和中转机器是否已经安装此软件无关, 即使已经安装, 也可以下载

步骤一: 按正常安装方式添加第三方仓库

# Create the file repository configuration:
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

# Import the repository signing key:
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

# Update the package lists:
sudo apt-get update

这时候通过下面的命令可以看到postgresql的安装候选

$ apt-cache show postgresql
Package: postgresql
Source: postgresql-common (243.pgdg20.04+1)
Version: 14+243.pgdg20.04+1
Architecture: all
Maintainer: Debian PostgreSQL Maintainers <team+postgresql@tracker.debian.org>
Installed-Size: 70
Depends: postgresql-14
Suggests: postgresql-doc
Priority: optional
Section: database
Filename: pool/main/p/postgresql-common/postgresql_14+243.pgdg20.04+1_all.deb
Size: 67068
...

Package: postgresql
Architecture: all
Version: 12+214ubuntu0.1
Priority: optional
Section: database
Source: postgresql-common (214ubuntu0.1)
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian PostgreSQL Maintainers <team+postgresql@tracker.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 66
Depends: postgresql-12
Suggests: postgresql-doc
Filename: pool/main/p/postgresql-common/postgresql_12+214ubuntu0.1_all.deb
Size: 3924
...

Package: postgresql
Architecture: all
Version: 12+214
Priority: optional
Section: database
Source: postgresql-common (214)
...

可以看到, 有三个候选, 其中版本14排在最前面, 如果apt install, 会安装最前面这个

步骤二: 查看依赖

前一步确定了默认安装的版本是需要的版本14后, 就可以通过apt-rdepends命令查看安装包的软件依赖关系, 这是一个很长的列表, 下面省略了大部分的内容, 仅列出一些和pg安装相关的包

$ apt-rdepends postgresql
Reading package lists... Done
Building dependency tree       
Reading state information... Done
postgresql
  Depends: postgresql-14
postgresql-14
  Depends: debconf (>= 0.5)
  ...
  Depends: locales-all
  Depends: postgresql-client-14
  Depends: postgresql-common (>= 229~)
  Depends: ssl-cert
  Depends: tzdata
  Depends: zlib1g (>= 1:1.1.4)
debconf
  PreDepends: perl-base (>= 5.20.1-3~)
perl-base
libpq5
postgresql-client-14
  Depends: postgresql-client-common (>= 182~)
postgresql-client-common
  Depends: pgdg-keyring
postgresql-common
  Depends: postgresql-client-common (= 243.pgdg20.04+1)
...
libattr1
  Depends: libc6 (>= 2.4)

步骤三: 下载deb安装包

通过这个依赖关系, 能大概确定第一步需要下载的安装包, 然后通过apt download命令下载

apt download postgresql-14 postgresql-client-14 postgresql-common postgresql-client-common

下载之后的文件

$ ll
total 17316
-rw-r--r-- 1 milton milton 15785632 Aug 11 09:35 postgresql-14_14.5-1.pgdg20.04+1_amd64.deb
-rw-r--r-- 1 milton milton  1617564 Aug 11 09:35 postgresql-client-14_14.5-1.pgdg20.04+1_amd64.deb
-rw-r--r-- 1 milton milton    91896 Sep  8 14:07 postgresql-client-common_243.pgdg20.04+1_all.deb
-rw-r--r-- 1 milton milton   231472 Sep  8 14:07 postgresql-common_243.pgdg20.04+1_all.deb

步骤四: 安装并补充下载

这些文件传到目标机器上后, 按依赖关系逆序安装,

sudo dpkg -i pgdg-keyring_2018.2_all.deb 
sudo dpkg -i postgresql-client-common_243.pgdg20.04+1_all.deb 
sudo dpkg -i postgresql-common_243.pgdg20.04+1_all.deb 
sudo apt -f install
sudo dpkg -i postgresql-client-14_14.5-1.pgdg20.04+1_amd64.deb 
sudo dpkg -i libpq5_14.5-1.pgdg20.04+1_amd64.deb 
sudo dpkg -i postgresql-client-14_14.5-1.pgdg20.04+1_amd64.deb 
sudo dpkg -i postgresql-14_14.5-1.pgdg20.04+1_amd64.deb 
sudo apt -f install

安装的过程中, 会提示依赖缺失, 这会有两种情况, 一种是在标准仓库中存在的, 可以直接通过下面的命令自动安装

sudo apt -f install

另一种是在标准仓库中不存在的, 需要在中转机器上通过apt download下载之后再传到目标机器安装. 对应pg14, 最后完整的下载文件列表为

$ ll
total 17500
-rw-r--r-- 1 milton milton   172828 Aug 11 09:34 libpq5_14.5-1.pgdg20.04+1_amd64.deb
-rw-r--r-- 1 milton milton    10666 Nov 15  2018 pgdg-keyring_2018.2_all.deb
-rw-r--r-- 1 milton milton 15785632 Aug 11 09:35 postgresql-14_14.5-1.pgdg20.04+1_amd64.deb
-rw-r--r-- 1 milton milton  1617564 Aug 11 09:35 postgresql-client-14_14.5-1.pgdg20.04+1_amd64.deb
-rw-r--r-- 1 milton milton    91896 Sep  8 14:07 postgresql-client-common_243.pgdg20.04+1_all.deb
-rw-r--r-- 1 milton milton   231472 Sep  8 14:07 postgresql-common_243.pgdg20.04+1_all.deb

热门相关:帝少的专属:小甜心,太缠人   寂静王冠   仗剑高歌   大神你人设崩了   第一神算:纨绔大小姐