以下內容摘自《銀河麒麟操作系統進階應用》一書
APT包管理器
APT是Debian及其派生系統的包管理器,構建在dpkg之上,以其強大的依賴性處理能力和豐富的軟件倉庫而聞名。APT具有自動解決依賴關系、提供易于使用的命令行工具(如apt-get、apt-cache等),以及穩定的軟件更新機制等優點。
盡管APT極大地簡化了軟件管理過程,但是它也面臨著一些挑戰和限制。例如,APT的軟件倉庫可能不包含某些特定的或最新的軟件包,這時用戶可能需要添加第三方倉庫或下載.deb包手動安裝。現在,APT已經經過改造,可以在支持rpm(另外一種流行的Linux安裝包格式)的系統上用來管理rpm包。
APT配置文件
APT包管理器的配置和管理數據大多存儲在/etc/apt/目錄下,該目錄包含了多個配置文件和子目錄,它們控制了APT的行為,包括軟件源的位置、優先級規則等。理解/etc/apt/目錄的結構及其包含的文件對于高效使用APT有很大幫助。
圖35是ARM64架構的銀河麒麟桌面版/etc/apt目錄結構(目錄下的具體文件會因不同架構不同版本有所不同),在對該目錄進行詳細解析前,需要了解APT配置文件的語法格式。
1. APT配置文件基本語法
APT配置文件的基本語法規則如下所述。
- 注釋:以 // 或 # 開頭的行被視為注釋。
- 指令:指令以關鍵字開始,后跟一系列參數。參數可以是布爾值(True/False)、整數、字符串(通常需要用雙引號括起來)、列表(使用 { } 包圍,并用逗號分隔)。
- 作用域:配置項可以具有作用域,使用點“.”來分隔不同的層級。
/etc/apt/目錄及子目錄下的配置文件按文件名的“字母數字”的升序依次被解析。
2. /etc/apt/apt.conf.d/目錄解析
/etc/apt/apt.conf.d/目錄中通常包含多個配置文件,每個文件可以包含一條或多條配置指令,用于修改APT的默認行為或添加新功能。這種分散的配置文件結構使得管理單個配置更加簡單,同時避免了單一大文件可能帶來的混亂。
在設置APT的代理服務器時,可以在該目錄下創建配置文件,指定APT使用的代理信息,如創建一個名為01proxy的文件,并添加如下內容:
Acquire::http::Proxy "http://your-proxy-address:port";
Acquire::https::Proxy "http://your-proxy-address:port";
現在很多代理軟件可以同時支持HTTP和HTTPS協議,一般HTTP和HTTPS填寫同樣的IP地址(域名)和端口即可。該目錄下的其他文件一般無須修改。
3. /etc/apt/sources.list文件解析
/etc/apt/sources.list文件是APT配置的核心部分,它指定了APT獲取的包信息和包的位置,即軟件源。這些軟件源可以是網絡上的服務器,也可以是本地文件系統上的目錄。sources.list文件內容有兩種語法格式:一種是傳統的單行語法格式,另一種是較新的Deb822語法格式。
(1)單行語法格式。
符合單行語法格式時,在以.list結尾的文件中,每個軟件源占據一行。銀河麒麟桌面版內置的/etc/apt/sources.list內容如下,以此為例進行闡述。
deb http://archive.***.cn/kylin/KYLIN-ALL 10.1 main restricted universe multiverse
deb http://archive.***.cn/kylin/KYLIN-ALL 10.1-2303-updates main universe multiverse restricted
deb?http://archive2.***.cn/deb/kylin/production/PART-V10-SP1/custom/partner/V10-SP1 default all
單個條目不能連續到多行。.list文件中的空行被忽略,任何位置的“#”字符后面部分是注釋。sources.list每行內容按照下面的語法格式組織。
類型 [選項] ?URI 分發版 [組件1] [組件2] [...]
- 類型:指定軟件源的類型,通常為deb(二進制包)或deb-src(源代碼包)。
- [選項]:(可選)用于指定軟件源的選項,多個選項間使用逗號“,”分隔。常見的選項如下所述。
- arch=<architecture>:指定支持的架構,例如AMD64、i386、ARM64等。不支持同時指定多個CPU架構。每個軟件源條目只能指定一個架構。要支持多個架構,需要為每個架構單獨定義一個條目。
- trusted=yes:表示信任該源,不會進行GPG簽名驗證。
- allow-insecure=yes:允許使用不安全的HTTP源(非HTTPS)。
- default-release=<release>:指定默認的發布版本。
- URI:指定軟件源的URI(統一資源標識符)。URI是一種字符串,可以是具體的資源(如網頁、文件)或抽象的資源(如概念、服務)。一個完整的URI通常由以下幾個部分組成。
- 方案(Scheme):指定資源的訪問協議,如HTTP、HTTPS、FTP等。
- 權限(Authority):包括用戶信息、主機名和端口號,通常以雙斜杠//開頭。
- 路徑(Path):指定資源在服務器上的位置。
- 查詢(Query):(可選)提供額外的參數,通常用于動態頁面。
- 片段(Fragment):(可選)指定資源內的某個位置或部分。
例如在http://archive.***.cn/kylin/KYLIN-ALL這個URI中,http是方案,archive.***.cn是權限(包含了主機名archive.***.cn和省略的端口號80),/kylin/KYLIN-ALL是路徑。
- 分發版:指定特定的分發版名,如10.1、10.1-2303-updates等。
- 組件:指軟件庫分類,如main、restricted、universe、multiverse。
- main:表示官方支持的,并且完全遵循自由軟件準則的軟件包。
- restricted:表示官方支持的,但不完全遵循自由軟件準則的軟件包。
- universe:表示由社區維護的開源軟件,不保證安全更新和維護。
- multiverse:包含可能受到法律或版權問題限制的軟件包。這些軟件可能是非自由或專有的,包括一些受版權保護的軟件、游戲、字體等。
上面將單行語法格式拆開了詳細講解,看似復雜,但無論是“http://archive.***.cn/kylin/?KYLIN-ALL 10.1 main restricted universe multiverse”,還是“http://archive.***.cn/kylin/KYLIN-?ALL 10.1-2303-updates main universe multiverse restricted”最終總是要和服務器端的文件目錄結構一一對應的。圖36是軟件倉庫服務器端的文件目錄結構,通過該圖可以比較直觀地理解單行語法格式中各個組成部分的相對關系。
單行語法格式的優點是,當前所有APT版本都支持,內容相對緊湊、容易人類解析。缺點是不便機器解析,因為其包括了多個部分,每個部分都有多個變種。為了解決單行語法格式機器解析不便的問題,推出了Deb822語法格式。
(2)Deb822語法格式。
對于Deb822語法格式,每個文件都需要.sources作為文件擴展名,每個軟件源都在單個“配置節”中進行配置,每行明確描述源的功能。大多數選項還允許配置值列表,可以在單個軟件源中定義多個鏡像(Mirror)或多個套件。也就是說,Deb822格式表達能力更強,Deb822格式對APT軟件的版本有要求,APT v1.1以后的版本才支持。有個別Linux發行版的最新版,例如Ubuntu 24.04的APT軟件源已默認采用了Deb822格式。Deb822格式的軟件源形式如下(包含了兩個配置節):
Enabled: yes
Types: deb deb-src
URIs: http://***.com/ubuntu
Suites: disco disco-updates disco-security disco-backports
Components: main universe multiverse restricted
X-Repolib-Name: Pop!_OS PPA
Enabled: yes
Types: deb
URIs: http://ppa.***.net/system76/pop/ubuntu
Suites: disco
Components: main
4. /etc/apt/sources.list.d/目錄解析
/etc/apt/sources.list.d/目錄放置第三方額外的軟件源,而不是添加到sources.list文件中。這使得管理額外軟件源更加靈活。自定義源的添加方法如下:創建一個以.list為擴展名的文件,將其放置在sources.list.d/目錄下,文件格式與sources.list條目格式相同。
5. /etc/apt/preferences.d/目錄解析
與sources.list.d目錄類似,preferences.d目錄允許用戶將軟件包優先級配置分散到單獨的文件中,以便更好地組織和管理。該目錄下的preferences文件允許用戶自定義包的優先級,這對于混合使用多個軟件源、避免自動更新到不穩定版本或者解決依賴性問題非常有用。
文件內容語法如下所示。
Package: 包名
Pin: Pin規則
Pin-Priority: 優先級
- 包名:可以是具體的包名,也可以用通配符*表示所有包。
- Pin字段定義了包的來源或特征。常見的Pin規則如下所述。
- release:指定發布版本。
- origin:指定包來源的主機名。
- codename:指定發布代碼名。
- archive:指定發布倉庫(例如stable、testing)。
- version:指定包的版本。
- label:指定包的標簽。
- 優先級:整數值,APT根據這個值來決定包的安裝或升級優先級。已安裝軟件的默認優先級通常是1000。
- 大于1000:APT將會強制安裝該版本,即使會導致系統損壞。
- 100~1000:APT將嘗試安裝指定版本,除非有特定版本已被安裝。
- 0~100:APT不會自動安裝該版本,但可以手動安裝。
- 負值:APT將完全忽略該版本。
下面通過幾個例子展示該目錄下配置文件的用法。
(1)例1:優先使用特定版本的包。
Package: mypackage
Pin: version 1.2.3
Pin-Priority: 1001
這將強制安裝版本1.2.3的mypackage,即使有其他更新版本。
(2)例2:優先使用來自特定來源的包。
Package: *
Pin: origin "archive.ubuntu.com"
Pin-Priority: 700
這將優先從archive.ubuntu.com安裝所有包。
(3)降低testing版軟件包的優先級。
Package: *
Pin: release a=testing
Pin-Priority: 50
這將降低testing倉庫中所有包的優先級,除非沒有其他候選項。
銀河麒麟桌面版/etc/apt/preferences.d/目錄下有archive1.pref ~ archive4.pref四個文件,使用命令cat /etc/apt/preferences.d/*可同時查看這幾個文件的內容(如圖37所示)。
6. /etc/apt/trusted.gpg.d目錄解析
原先用于存儲系統信任GPG密鑰的文件/etc/apt/trusted.gpg已被廢棄,現在建議將軟件源的GPG密鑰存儲在/etc/apt/trusted.gpg.d目錄下的單獨文件中,以提高系統的安全性。GPG密鑰用于APT驗證從不同軟件源下載的軟件包的真實性。
APT使用/etc/apt/trusted.gpg.d目錄中的GPG密鑰來驗證軟件包的方式如下所述。
- 軟件包簽名驗證:當APT下載軟件包時,軟件包會附帶數字簽名。APT會使用/etc/apt/trusted.gpg.d目錄中的GPG密鑰來驗證這些簽名的真實性。
- 密鑰匹配:APT會檢查軟件包簽名中使用的密鑰是否存在于/etc/apt/trusted.gpg.d目錄中,如果存在匹配的密鑰,則軟件包被視為受信任。
通過驗證軟件包的簽名,APT可以確保軟件包在傳輸過程中沒有被篡改或損壞。如果軟件包的簽名無法通過GPG密鑰驗證,APT就會發出警告并拒絕安裝該軟件包。
APT主要命令和操作
APT包管理器主要由apt-get、apt-cache、apt-mark等幾個命令行工具組成,如圖38所示。APT可以智能地從安裝來源下載最新版本的軟件并且安裝,而無須在安裝后重啟電腦(除更新系統內核外)。
圖38 ?銀河麒麟系統中以apt開頭的命令行工具
APT中的軟件包有三種關聯性:依賴項、建議項和推薦項。
- 依賴項:這些是必須安裝的軟件包,以確保目標軟件包能夠正常運行。
- 建議項:這些是軟件包維護者認為大多數用戶在安裝目標軟件包時也應該安裝的軟件包,但不是必需的。
- 推薦項:這些是與目標軟件包相關的軟件包,可以增強其功能,也不是必需的。
(1)apt命令。
apt命令用法如表35所示。
表35??apt命令用法示例
命????令 | 解????釋 |
apt list --installed apt list --upgradable apt list nginx* | 列出已安裝的包 列出可升級的包 列出所有以nginx開頭的包 |
apt search nginx apt search nginx --names-only apt search ^python apt search python$ | 搜索軟件包名稱或描述中包含nginx的所有包 僅搜索軟件包名稱中包含nginx的所有包 使用正則表達式搜索以“python”開頭的軟件包名稱 使用正則表達式搜索以“python”結尾的軟件包名稱 |
apt show nginx | 顯示一個包的詳細信息,如版本、依賴關系等 |
apt install nginx apt install nginx --download-only apt install nginx --simulate apt install --reinstall nginx apt install --install-suggests nginx apt install git=1:2.45.2 | 正常安裝軟件包,自動解決依賴關系 僅下載指定包,不安裝 模擬安裝過程,不會實際安裝包 重新安裝指定的軟件包 同時安裝建議的軟件包 安裝指定版本的git |
apt reinstall nginx | 重新安裝指定的軟件包 |
apt satisfy nginx apt satisfy 'nginx>=1.14' | 檢查并安裝滿足指定軟件包依賴性的包 確保安裝的nginx版本至少為1.14 |
apt remove nginx apt remove nginx --purge | 移除指定的軟件包,但不刪除配置文件 刪除軟件包及其相關的配置文件 |
apt autoremove apt autoremove --purge | 自動移除不再需要的包 --purge選項同時刪除配置文件 |
apt update | 更新軟件包列表,從而知道有哪些可用的更新 |
apt upgrade apt upgrade nginx | 升級所有可升級的包或指定包 僅升級nginx包 |
apt full-upgrade | 完全升級,可能會移除某些包以滿足依賴關系 |
apt-mark hold nginx apt-mark unhold nginx | nginx無法被安裝、升級或卸載 恢復nginx可供更新 |
(2)apt-get命令。
apt-get命令包含而apt命令不包含的子命令如表36所示。
表36??apt-get相比apt的差異部分
命 ???令 | 解 ???釋 |
apt-get build-dep <package> | 安裝構建軟件包所需的構建依賴項 |
apt-get build-dep --no-install- | 安裝構建依賴但跳過推薦包 |
apt-get check | 更新緩存并檢查是否有損壞的依賴 |
apt-get dselect-upgrade | 使用dselect的結果進行升級操作 |
apt-get purge <package> | 刪除包含配置文件的軟件包 |
apt-get purge --auto-remove <package> | 刪除包含配置文件的軟件及其依賴 |
apt-get source <package> | 下載指定包的源代碼 |
apt-get source --compile <package> | 下載源代碼,編譯并安裝 |
apt-get download <package> | 僅下載指定包而非安裝 |
apt-get changelog <package> | 下載指定軟件包,并顯示其變更日志 |
apt-get clean | 清空整個/var/cache/apt/archives/目錄,刪除所有緩存的.deb文件 |
apt-get autoclean | 只刪除/var/cache/apt/archives/下軟件包的舊版本。與clean命令相比,autoclean更加保守,它會保留可能仍然有用的包文件 |
(3)apt-cache命令。
apt-cache命令用法如表37所示。
表37??apt-cache命令用法
命 ???令 | 解 ???釋 |
apt-cache madison <package> | 顯示軟件包<package>在各軟件源上的版本 |
apt-cache show <package> | 顯示軟件包<package>所有可用版本的詳細信息 |
apt-cache show --no-all-versions <package> | 顯示<package>在當前系統上可安裝的最新版本的詳細信息,而非所有版本 |
apt-cache search keyword | 在包描述中搜索含有keyword的包 |
apt-cache search --names-only keyword | 僅在包名中搜索keyword,不搜索描述 |
apt-cache search --full keyword | 顯示包含keyword的包的完整記錄 |
apt-cache depends <package> | 顯示軟件包<package>的依賴關系 |
apt-cache depends --recurse <package> | 遞歸顯示軟件包<package>的依賴關系 |
apt-cache rdepends <package> | 顯示哪些包依賴軟件包<package>? |
apt-cache rdepends --installed <package> | 僅顯示已安裝的包依賴軟件包<package>? |
apt-cache pkgnames | 列出APT數據庫中所有包的名稱 |
apt-cache pkgnames <prefix> | 列出APT數據庫中以prefix為前綴的包名 |
apt-cache policy | 顯示已安裝軟件包的版本和可用版本 |
apt-cache policy <package> | 顯示特定軟件包<package>的版本和來源優先權信息 |
apt-cache dump | 打印APT緩存中所有包的詳細信息 |
apt-cache dumpavail | 打印可用的所有包列表信息,通常用于幫助調試 |
apt-cache unmet | 顯示具有未滿足依賴關系的包 |
apt-cache unmet --auto | 僅顯示可能會被apt-get autoremove刪除的包的未滿足依賴信息 |
apt-cache stats | 顯示APT緩存的統計信息 |
apt-cache showpkg <package> | 顯示軟件包<package>的所有可用版本及其依賴關系 |
APT離線使用
在離線環境下使用apt命令安裝軟件包,需要提前下載所需的軟件包及其依賴項,并將它們傳輸到目標系統。要求下載軟件包的計算機系統架構最好與離線環境下的目標計算機系統架構完全一致。
1. 方法1:使用apt-offline輔助工具
apt-offline是一個專門用于離線管理APT軟件包的軟件工具。它允許在離線系統上生成請求文件,然后在有網絡連接的系統上下載所需的包,最后將下載的包回傳到離線系統進行安裝。
(1)在離線系統上生成請求文件。
安裝apt-offline:
sudo apt-get install apt-offline
生成請求文件:
sudo apt-offline set ./apt-offline.sig
在當前路徑下,生成一個名為apt-offline.sig的請求文件,包含了當前系統上所有需要更新或安裝的軟件包信息。
(2)在有網絡連接的計算機上下載包。
將請求文件傳輸到有網絡連接的計算機上,使用apt-offline下載所需的軟件包:
sudo apt-offline get ./apt-offline.sig --bundle ./apt-offline.zip
這將下載所有需要的軟件包,并將它們打包成為apt-offline.zip文件。
(3)在離線計算機上安裝下載的軟件包。
首先將下載的apt-offline.zip文件傳回離線計算機,然后在離線計算機上,使用apt-offline安裝下載的軟件包:
sudo apt-offline install /path/to/apt-offline.zip
2. 方法2:手動下載和安裝軟件包
如果不使用apt-offline,也可以手動下載和安裝所需的軟件包及其依賴項。
(1)在有網絡連接的計算機上下載軟件包。
在有網絡連接的系統上,使用apt-get download下載所需的軟件包及其依賴項。例如,要下載vim這個軟件包:
sudo apt-get download $(sudo apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances vim | grep "^\w" | sort -u)
這將下載vim及其依賴項的.deb文件,然后將所有下載的.deb文件打包成一個壓縮文件或使用其他方式傳輸到離線計算機。
(2)在離線計算機上安裝軟件包。
將下載的.deb文件傳回離線計算機,然后在離線計算機上,進入.deb文件所在目錄,使用dpkg安裝當前目錄下的所有.deb文件。例如:
sudo dpkg -i ./*.deb
如果有依賴關系問題,可以使用apt-get -f install來修復依賴關系:
sudo apt-get -f install
3. 方法3:利用緩存的deb包搭建軟件源
當使用APT安裝或更新軟件包時,APT會將下載的.deb軟件包存放在/var/cache/apt/archives/目錄下。如果需要重新安裝軟件包,APT就可以直接使用這個目錄中的緩存文件,無須再次從網絡下載,從而節省帶寬,加快安裝速度。
可以將這些緩存的軟件包制作成APT可以使用的軟件源,復制到離線環境后使用。具體步驟如下:
(1)在聯網計算機上,將/var/cache/apt/archives/目錄下的deb包復制到新的文件夾中,比如/home/<username>/repository/。
mkdir ~/repository/
cp /var/cache/apt/archives/*.deb ~/repository/
(2)生成壓縮版的Packages.gz文件,Packages.gz文件包含了當前目錄中的所有.deb軟件包的元數據,包括軟件包名稱、版本、依賴關系等信息。這個文件是APT識別軟件源所必需的。
cd ~/repository
sudo dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
(3)將聯網計算機上的目錄~/repository/復制到離線環境。
(4)在離線計算機上,編輯sources.list文件,將軟件源添加到其中:
deb [trusted=yes] file:/home/<username>/repository/ / ??????# 最后的“/”不可省略
請將上面file:后面的路徑修改為repository實際存放路徑。上面這一行內容的最后是“/”,表示該軟件源不特定于任何發行版或組件,這樣APT就會嘗試從這個源中獲取所有可用的軟件包。
(5)重新加載軟件包索引:
sudo apt update
通過以上步驟,就可以利用/var/cache/apt/archives/下的deb包構建自己的軟件源了。
4. 方法4:使用系統安裝光盤(或系統安裝光盤文件)搭建本地源
通常Linux發行版是可以將安裝光盤制作成本地軟件源使用的,例如,Ubuntu、CentOS都可以將安裝光盤制作成本地軟件源。理論上,銀河麒麟桌面版作為Ubuntu的衍生版,應該也可以這么做。但經測試銀河麒麟桌面版安裝盤中的Release文件被刪除了(Release文件記錄了文件的哈希值)。由于運行sudo apt update的時候會先校檢Release文件的簽名信息,如果不符合則認為是無效的倉庫。銀河麒麟桌面版安裝光盤只內置了有限幾種安裝包,如圖39所示。
圖39 ?銀河麒麟桌面版安裝光盤可選deb包
這些deb包對應的就是在安裝系統時可選的幾款軟件,如圖310所示。
圖310 ?銀河麒麟桌面版安裝時軟件包選擇界面
因此,銀河麒麟桌面版不需要、也無法直接搭建光盤軟件源。
APT的安全特性
APT使用GPG對軟件包進行簽名和驗證,以確保包的完整性和來源的可信度,這一機制稱為apt-secure。
1. apt-secure的工作機制
apt-secure是APT的一個安全特性,用于驗證軟件包的來源和完整性。它通過簽名和驗證機制,確保從倉庫下載的包是可信的。
(1)包簽名與驗證過程。
- 包簽名:開發者使用私鑰對軟件包進行簽名。
- 發布:簽名的包上傳到軟件倉庫。
- 下載:用戶使用APT下載軟件包。
- 驗證:APT使用倉庫的公鑰驗證包的簽名。
(2)Release文件和InRelease文件。
APT使用多個文件來管理軟件包倉庫和包的元數據,其中Release文件和InRelease文件是兩個重要的文件。Release文件是包含倉庫元數據的文件,描述了軟件包倉庫的各個部分包含的包以及這些包的元數據。它主要用于確保倉庫的一致性和完整性。InRelease文件是Release文件的增強版本,它不僅包含Release文件中的所有內容,還包括一個內嵌的GPG簽名。
2. 使用apt-key命令管理密鑰
apt-key是一個用于管理APT的GPG密鑰的命令行工具。它可以添加、刪除和列出系統信任的密鑰(如表38所示)。表3-8中的apt-key adv是apt-key的子命令,提供了與GPG交互的高級功能。
表38??apt-key命令使用示例
命 ???令 | 解 ???釋 |
apt-key list | 列出系統中所有已添加的APT密鑰 |
apt-key add /path/to/keyfile.asc wget -qO - https://example.com/repo-key.gpg | apt-key add - | 從本地文件中導入密鑰 |
從URL獲取并添加GPG公鑰 | |
apt-key del <key-id> | 刪除指定的密鑰 |
apt-key fingerprint <key-id> | 顯示指定密鑰的指紋信息 |
apt-key update | 更新所有密鑰(已棄用) |
apt-key adv --keyserver <keyserver>?--recv-keys apt-key adv --export <key-id> > exported-key.asc | 從指定的密鑰服務器下載并導入密鑰 |
導出指定的密鑰到文件 |
3. 密鑰相關故障處置
(1)案例1。
在使用APT的過程中,特別是在添加PPA倉庫(后文將詳細講解)時,經常會遇到如圖311所示的錯誤。
圖311 ?缺少公鑰錯誤
該錯誤通常是由于PPA倉庫的公鑰未導入到系統中,導致APT無法驗證軟件包的簽名而引起的。遇到此類故障,可以使用如下命令添加缺少的公鑰:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 8094BB14F4E3FBBE
命令中的hkp://keyserver.ubuntu.com:80為存儲公鑰的服務器(稱之為keyserver),可用的keyserver包括如下這些。
keyserver.ubuntu.com
pgp.mit.edu
subkeys.pgp.net
www.gpg-keyserver.de
(2)案例2。
圖3-12展示了使用在線腳本安裝某軟件時的報錯信息,這是另一種缺少公鑰錯誤的示例。
圖312 ?GPG缺少公鑰錯誤
這類錯誤處置步驟如下所述。
按照圖3-12中提示,執行下面的命令獲取缺失的公鑰:
gpg2 --keyserver hkp://keyserver.ubuntu.com --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
導出所有GPG公鑰:
gpg --export --armor > all-gpg-keys.asc
將密鑰文件復制到/etc/apt/trusted.gpg.d/:
sudo cp all-gpg-keys.asc /etc/apt/trusted.gpg.d/
通過這種方式,可以確保將GPG管理的所有密鑰都導入APT的密鑰環中。