在 Ubuntu中從外部儲存庫安裝軟體包步驟

大雄45發表於2023-03-26
導讀 你大概知道怎麼在 Ubuntu 中使用 apt  安裝軟體包。那些軟體包都是來自 Ubuntu 的官方儲存庫。

那第三方或者外部儲存庫呢?不,我這裡並不是要講 PPA。

早晚你會碰到那種至少四行的安裝說明:你需要安裝名為 apt-transport-https 的包、操作一下 GPG 和 源列表source list

沒有什麼印象的話,那我分享一個 在 Ubuntu 上安裝最新版本的 Yarn 的例子:

sudo apt install apt-transport-https curlcurl -sS | sudo apt-key add -sudo sh -c 'echo "deb

當你需要直接從開發者那裡安裝程式設計工具的時候,大機率會碰到這種安裝方式。

許多人只是按照說明進行操作,並不會去思考其中的原理。這也沒什麼不對,但瞭解該過程實際上可以提升你在這方面的知識,而且有助於之後排除故障。

我來解釋一下這些程式碼背後的邏輯。

理解從外部儲存庫安裝的過程

整件事情其實就是在系統中新增一個新的外部儲存庫。這樣,你就可以從這個新儲存庫下載並安裝可用的軟體包。如果這個儲存庫提供了包版本的更新,你可以在更新系統的同時更新這些軟體包(apt update && apt upgrade)。

那麼,這是什麼工作原理呢?讓我們一條一條地過一遍。

第 1 部分:為 apt 獲取 HTTPS 支援

第一行是這樣的:

sudo apt install apt-transport-https curl

curl 是一個   終端下載檔案的工具。這裡主要的部分是安裝 apt-transport-https,但事實上已經不需要了。

明白了嗎?這個 apt-transport-https 包讓你的系統透過 HTTPS 協議安全訪問儲存庫。

按照設計,Ubuntu 的儲存庫使用 http 而不是 https 協議。

看看下面的截圖。 https 這張圖是我已經新增到系統中的外部儲存庫。Ubuntu 的儲存庫和 PPA 使用 http 協議。

在 Ubuntu中從外部儲存庫安裝軟體包步驟在 Ubuntu中從外部儲存庫安裝軟體包步驟

在舊版本的 apt 包管理器中,不支援 https 協議。apt-transport-https 包為 apt 新增了 https 支援。要新增一個使用 https 的儲存庫,首先就得先安裝此包。

我之前不是說不需要安裝這個包了嗎?是的,因為較新版本的 apt(高於 1.5)已經支援 https,所以你不需要再安裝 apt-transport-https。

但是你依然看到我在說明中提到了這個包。這更多是出於遺留原因,而且可能還有很舊的發行版在使用舊版本的 apt 包。

現在,你可能想知道既然 https 是安全協議,那為什麼 Ubuntu 的儲存庫還要使用 http 而不是 https。這難道沒有安全風險嗎?接著往下看你就知道答案了。

第 2 部分:新增遠端儲存庫的 GPG 金鑰

Linux 儲存庫內建了基於 GPG 金鑰的安全機制。每個儲存庫都將其 GPG 公鑰新增到你的系統信任金鑰中。來自儲存庫的包由這個 GPG 金鑰“簽名signed”,並且透過這份儲存的公鑰,系統能夠驗證軟體包正是來自這個儲存庫。

如果 金鑰之間不匹配,你的系統會發出提醒,而不會繼續從該儲存庫安裝或者更新軟體包。

到目前為止,一切都很順利。下一步是將外部儲存庫的 GPG 公鑰新增到你的 Linux 系統,以便它能接收來自該儲存庫的軟體包。

curl -sS | sudo apt-key add -

在上面的 中,你使用 curl 從指定的 URL 下載 GPG 金鑰。選項 -sS 能夠讓你不看多餘的輸出(靜默模式),但會顯示錯誤(如果有的話)。最後一個 - 告訴 apt-key 使用標準輸入stdin而不是檔案(在本例中是 curl 命令的輸出)。

apt-key add 命令已經將下載的金鑰新增到系統中。

你可以透過 apt-key list 命令檢視系統中各種儲存庫新增的 GPG 金鑰。

在 Ubuntu中從外部儲存庫安裝軟體包步驟在 Ubuntu中從外部儲存庫安裝軟體包步驟

List GPG keys

這是將 GPG 金鑰新增到系統的一種方法。你會看到一些其它的命令,看起來略有不同,但效果一樣,都是將儲存庫的公鑰新增到你的系統裡面。

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9

你會注意到 apt-key 已被棄用的警告。在 Ubuntu 22.04 之前,你還可以使用 apt-key 命令,但它最終會被刪除。現在不需要杞人憂天。

第 3 部分:將外部儲存庫新增到源列表

下個命令是在系統的源列表中新增一個新條目。這樣,你的系統就會知道它得檢查該儲存庫中的包和更新。

sudo sh -c 'echo "deb

有一個檔案 /etc/apt/sources.list 包含 Ubuntu 儲存庫的詳細資訊。最好不要隨便動這個檔案。所有新增的儲存庫都應放在 /etc/apt/sources.list.d 目錄中相應的檔案裡(約定以 .list 結尾)。

在 Ubuntu中從外部儲存庫安裝軟體包步驟在 Ubuntu中從外部儲存庫安裝軟體包步驟

External repository should have their own sources list file in the /etc/apt/sources.list.d directory

這使得包管理變得更容易。如果你要從系統中刪除一個儲存庫,只需刪除相應的原始檔即可。無需修改主 sources.list 檔案。

讓我們再仔細地看一下這行命令。

sudo sh -c 'echo "deb

使用 sh 可以在一個新的   程式中執行命令,而不是 子 shell。 -c 選項告訴 sh 命令從引數而不是標準輸入讀取命令。然後它執行 echo 命令,也就是把 deb  stable main 這一行新增到 /etc/apt/sources.list.d/yarn.list 檔案(會建立該檔案)。

現在,你可以透過各種方法在指定目錄中建立 .list 檔案並在其中新增包含儲存庫詳細資訊的資料行。你也可以像這樣使用:

echo "deb  stable main" | sudo tee /etc/apt/sources.list.d/yarn.list

明白了吧?

第 4 部分:從新新增的儲存庫安裝應用程式

到目前為止,你已經將儲存庫的 GPG 金鑰和儲存庫的 URL 新增到系統中。

但是系統仍然不曉得這個新儲存庫中有哪些可用的包。這就是為什麼你需要先使用下面這個命令更新包後設資料的本地快取:

sudo apt update

這時你的系統就已經知道新增儲存庫中可用軟體包的資訊,現在可以試試安裝軟體包:

sudo apt install yarn

為了節省時間,你可以在 同一行挨著執行這兩個命令e。

sudo apt update && sudo apt install yarn

&& 可以確保第二個命令只會在前一個命令沒有任何報錯的前提下執行。

整個流程就是這樣。

有沒有豁然開朗呢,還是一臉懵逼?

我已經解釋了在 Ubuntu 中使用外部儲存庫背後的邏輯。希望你現在能更好地理解它,當然可能還有很多細節會讓你困惑。

原文來自:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2929392/,如需轉載,請註明出處,否則將追究法律責任。

相關文章