1 ubuntu包管理機制
跟大家分享一下ubuntu的軟件管理機制。如果你們有過:
apt-get install 或者 apt-get update 失敗的經歷。
在眾多的apt命令中迷失。
疑惑apt-get update 和 apt-get upgrade 的區別。
想要手動添加源倉庫並下載軟件
那么本文將帶你一步步解決這些問題。
1.1 軟件包倉庫(Repositories)
1.1.1 sourcelist 文件
在使用apt-get install 和 apt-get update時, 系統會先掃描/etc/apt/目錄下的所有的源倉庫文件。該目錄下包含兩種類型的文件,
源倉庫文件source.list和gpg秘鑰。其中source.list是ubunut官方的源倉庫文件。
souce.list文件的結構如下所示,該文件的每一項都可以分成四個部分
deb/deb-src ## URL ## ubuntu版本代號 ## 限定詞
- 其中 deb-src 表示該項指向一個軟件源代碼的倉庫,deb表示指向一個軟件倉庫
- 第二部分是倉庫的URL
- 第三部分是版本代碼,可以看到在我的ubuntu18.04上(代號bionic), 有bionic 和 bionic-updates 兩種選項,其中updates表示,
更新時使用的倉庫。我猜測在apt-get update時應該讀取的是該項。 - 最后一個部分,有幾個選項:main,restricted,universe,multiverse。 它們分別表示了倉庫的不同類型。ubuntu的軟件的來源進行了嚴格的區分。
- main : 表示由Canonical提供支持的免費開源的軟件
- universe : 表示由Ubuntu社區提供支持的免費開源的軟件
- restricted : 具有知識產權的設備專有驅動,比如英偉達自己開發的閉源驅動
- multiverse : 受版權和法律保護的軟件
1.1.2 軟件倉庫的結構
以vscode的ubuntu倉庫為例,我們來看看一個完整的倉庫是什么模樣。
可以看到目錄分成了兩級,dists中存放的是該軟件的配置信息。這些信息以文本形式保存。包含了軟件的大小,
維護者信息,版本,軟件運行於那些平台,還有軟件的校驗和保證軟件的完整性。當然最重要的還有軟件的deb文件的存放路徑。
庫中另一類文件是庫中的公鑰文件(gpg文件)。 通過這種非對稱的加密手段,可以保證傳輸過程的安全。
最后就是實際的軟件的安裝包,這些軟件被打包為deb格式存放在pool目錄下。
1.1.3 手動添加PPA倉庫
在ubuntu中有兩種倉庫,一種是官方倉庫,源文件放在source.list。
為了彌補官方倉庫軟件數量不足的問題,ubuntu有提出了PPA(Personal Package Archive)倉庫,允許第三方發行自己的庫供用戶下載。
源文件放在 /etc/apt/source.list/目錄中,比如說如果是vscode,就是vscode.list。
下面我們說說手動添加PPA倉庫的步驟:
1 安裝秘鑰
安裝秘鑰有兩種方式,手動方式或者使用命令apt-key 命令
apt-key list
apt-key add keyname
apt-key del keyname
apt-key update
手動方式我們需要講gpg格式的秘鑰放置到目錄 ** /etc/apt/trusted.gpg/ ** 中去。
通過list命令我們可以看到秘鑰已經安裝成功。
2 添加源
同樣添加源也是兩種手段,手動和命令。
在手動方式中,我們先創建一個/etc/apt/source.list.d/<庫名>.list文件。然后根據上面說過的格式添加項。
或者使用 add-apt-repository 命令。
手動方式,就如下圖中的sh命令所示,按照標准格式生成倉庫的源,原則就是apt-get命令必須能夠從添加的項中解析出倉庫的位置。
所以我建議大家在手動添加源時,先從瀏覽器中進入url指向的網站,觀察軟件庫的結構,然后再去構造項。
值得注意的是,能夠使用add-apt-repository命令安裝的必須是在launchpad這個網站上注冊過的用戶才可以。
至於為什么要這么做,接下來我們來看看PPA
上文提到過通過PPA,開發者可以更便捷的發布自己的軟件。其實PPA也可以分成兩類,一類在launchpad中注冊(算是ubuntu認證的PPA), 另一類是未登記的PPA。
如果按照安全等級排列的話,官方倉庫 > 已注冊PPA > 未注冊PPA。
如果在launchpad中注冊過,那么該倉庫在launchpad中就有一個用戶名,這個用戶名就是稍后在add-apt-repository中要用到的。
如下圖所示,docker的PPA已經在launchpad中
命令格式
add-apt-repository ppa: [PPA name]
如果我們想添加docker stable ppa的話,就可以使用以下命令
sudo add-apt-repository ppa:docker/stable
以上我們探討ubuntu的倉庫管理機制,主要是如何添加一個PPA倉庫。
1.2 upgrade和update的區別
有兩個命令,也許我們都用過,但是可能並不了解它們的區別。這兩個命令就是:
apt-get update 和 apt-get upgrade
文檔中解釋的還是比較清楚的,update的作用是讀取/etc/apt/source.list,並根據倉庫的描述文件去更新索引。
而upgrade是根據source.list文件去安裝所有軟件的更新,所以在upgrade之前會先執行update命令。
一般我們在手動添加PPA成功后,會按如下步驟去安裝相應的軟件:
apt-get update
apt-get install <app-name>
所以說只有在你想要更新系統中所有軟件時,使用upgrade命令。
參考
https://help.ubuntu.com/community/Repositories/Ubuntu#Adding_PPAs