apt-get 如何真正起作用?
好的,我了解如何使用
apt-get {install|remove} mypackages
和apt-get upgrade
安裝、升級或刪除二進製文件以及它們的配置數據文件和依賴項(實際上,remove
除非提供額外的標誌,否則只會刪除二進製文件)。我不是在尋找它是如何被
man
描述的那樣使用的,而是在尋找它在做什麼的高水平。我的最終目標是為我創建一種在多台遠端機器上安裝和管理一些自定義軟體(由 make 文件創建)的方法,我需要了解有關該過程的更多資訊。如果這個問題的答案是基於所使用的發行版,請根據 Debian 量身定制。除了一般如何工作之外,我還有以下具體問題:
- 訪問 apt 儲存庫的客戶端如何跟踪文件?
- 儲存庫必須託管在同一作業系統上(即 apt 儲存庫可以託管在 redhat 上)嗎?
- 如何指定安裝文件的位置?這是
.deb
文件指定的嗎?- 遠端機器如何訪問儲存庫?它只是 ftp(s) 還是 http(s)?
- 託管儲存庫的機器是否執行特殊軟體(例如 gitlab 用於 git 儲存庫),還是只是一些結構化文件系統?
您需要查看https://wiki.debian.org/Packaging — 那裡的打包教程以及新維護者指南的部分內容將對您有很大幫助。
至於你的問題,按順序:
- 儲存庫包含“列表”文件。例如,http://http.us.debian.org/debian/dists/stretch/main/binary-amd64/Packages.xz。
apt-get update
下載這些列表文件,並將它們儲存在/var/lib/apt/lists
. 列表文件列出了所有包,包括一堆元數據和一個用於查找 .deb 的相對 URL。(它們是人類可讀的純文字文件,所以你可以看看它)。- 作業系統無所謂。如果需要,您可以將其託管在 Windows 上。(好吧,您可能會遇到 Windows 不喜歡的文件名的問題。)(另請參見 #4 和 #5)。
- 是的,它在 deb 文件中。deb 文件實際上是一個存檔(使用
ar
)。裡面是一些tar文件;其中之一(基本上)被提取到/
.- 它只是 HTTP(或 HTTPS,或 FTP,或…… apt-get 支持很多協議)。不過沒什麼特別的。請注意,有使用 gpg 簽名的發布文件,即使沒有 HTTPS 也能保證完整性。Debian 鏡像主要使用 HTTP,而不是 HTTPs。(一些支持 HTTPS 以及保密性)。
- 它只是一個結構化的文件系統。
apt-get 如何與包源互動的快速、高級概述:
- 您可以在 sources.list 文件中配置要查看的源。考慮如下一行:
deb http://http.us.debian.org/debian/ stretch main
deb
說這是獲取 .deb(二進制)文件的來源;然後是 URL 前綴、套件/發布(“stretch”)和組件(“main”)。 2. apt-get 有一個架構列表,它從 dpkg 獲取。比方說dpkg --print-architecture
是amd64
。apt-get 現在可以通過組合 URL 前綴、“dists”一詞、套件、組件和體系結構來建構它實際下載的 URL。然後它會添加一些固定的文件名,例如“Packages.xz”。這給出了上面的 URL(在 #1 中)。還有一些具有定義名稱/路徑的文件,例如發布文件http://http.us.debian.org/debian/dists/stretch/Release及其簽名(相同,附加 .gpg)。這些都是(可能是壓縮的)純文字文件。發布文件包含 apt-get 將要下載的其他文件的校驗和,例如 Packages.xz。 3. Packages.xz 文件列出了該套件/代號/架構中的*所有包。它還給出了該文件所在的路徑;*例如pool/main/0/0ad/0ad_0.0.21-2_amd64.deb
。 4. 當您要求 apt-get 下載軟體包時,它使用該位置 + 基本 URL 來下載軟體包,因此該軟體包位於http://http.us.debian.org/debian/pool/main/0/0ad /0ad_0.0.21-2_amd64.deb 5. 另一個有趣的目錄是source
代替binary-amd64
. 這用於您的deb-src
條目;它包含有關源包的資訊(並且在其他方面非常相似)。 6. 還有一些其他的東西(我相信它們都是可選的)可以成為儲存庫的一部分(即,通過 HTTP 可用): Packages.xz 文件的不同版本之間的差異;包描述的翻譯,每個可安裝文件的完整列表以及它屬於哪個包(Contents-amd64.gz,由例如 apt-file 使用,而不是由 apt-get 使用)等。這些可能與您無關,但是你可以通過瀏覽http://http.us.debian.org/debian/dists/stretch/來查看它們;其中大多數是純文字文件。所有這些文件都是純文字。從理論上講,它們可以手工創建。實際上,每個人都使用其中一種儲存庫生成工具。在這裡——我警告這是很久以前做出的選擇,所以可能已經過時了——我們使用 mini-dinstall。這些工具的輸出是普通文件,或者最壞的情況是符號連結。您可以將它們同步到您想要的任何 Web 伺服器。