今天安裝 Postgresql14 遇到一個問題, 目標伺服器只有內網, 內網提供標準的apt倉庫, 但是因為不能連接外網, 所以沒法添加第三方倉庫, pg的官網只提供倉庫和源碼兩種方式, 因此不能訪問外網時, 貌似只有源碼編譯這條路. 因為源碼編譯費時費力並且安裝階段需要自行配置, 容易出錯. 對... ...
今天安裝 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 <[email protected]>
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 <[email protected]>
Original-Maintainer: Debian PostgreSQL Maintainers <[email protected]>
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