apt-get 的詳細工作原理是什麼?

apt-get 的詳細工作原理是什麼?

我目前正在使用 Ubuntu 並嘗試在虛擬機器上安裝 Debian 系統,這意味著我必須處理軟體包。由於我是新手,我在網路上閱讀了很多關於它的內容,尤其是 debian wiki(ubuntu wiki 也很有用)。特別是,我學習如何建立本機儲存庫以及如何正確編輯sources.list 檔案。

但是,我仍然對它的工作原理有一些疑問,我在網上找不到詳細資訊。

  • 首先,當您使用線上儲存庫時。我知道 apt-get 將遵循您在 source.list 檔案中編寫的連結並蒐索 Packages.gz 存檔。我不明白的是這個簡單的檔案(似乎只是一個清單)可安裝套件) 允許安裝該軟體包嗎? Packages.gz 是否提供了有關如何查找 .deb 檔案然後繼續安裝的適當資訊?還是別的什麼?

  • 其次,關於 Sources.gz 存檔。我讀過它是 Packages.gz 中列出的包的源代碼,但在大多數情況下不需要它。那麼,如果我在我的 source.list 文件中添加此 Sources.gz 的鏈接,它到底給了我什麼?這有什麼意義呢?

  • 三、關於本地倉庫;這與前面的問題有關。我知道如何使用 .deb 檔案建立本機儲存庫,但假設我只有這個 Packages.gz 檔案:這還不夠,對吧?如果我有 Sources.gz 存檔,它會起作用嗎?

  • 最後,我在 Debian 儲存庫中看到,除了 dist 儲存庫之外,還有一個包含大量 .deb 的池儲存庫。我知道安裝它們的方法(下載 .deb 及其依賴項,使用 dpkg -i 安裝它們),但是有更簡單的方法嗎?更自動化的東西,可以在線找到 .deb,找到它的依賴項,並安裝所有內容? (就像 apt-get 所做的那樣,但據我了解,apt-get 只能與 Packages.gz 和 Sources.gz 檔案一起使用,不能直接與 .deb 一起使用)

抱歉,這不是一個真正的問題,而是一個問題列表^^ 但我在網上找到的所有內容主要是“在在線存儲庫中apt-get 搜索該包及其依賴項並通過dpkg 安裝它”,我會喜歡更多關於它的詳細資訊。

答案1

  1. Packages.gz 包含一個Filename字段,其值可能類似於pool/main/n/name-of-package/name-of-package_version_amd64.deb。這告訴套件管理器查看該 URL。
    例如,如果您的sources.list(.d)中有以下行:
    deb https://some-domain.com/some-url some-distribution main
    您將擁有以下檔案:https://some-domain.com/some-url/dists/some-distribution/main/binary-amd64/Packages.gz
    該文件將被引用pool/main/n/name-of-package/name-of-package_version_amd64.deb,因此您的套件管理器將查看https://some-domain.com/some-url/pool/main/n/name-of-package/name-of-package_version_amd64.deb

  2. Sources.gz 的工作方式相同,但是可選的。它與 一起使用apt source,如果您希望自己編譯它而不是使用預先建置的二進位文件,它將為您獲取原始程式碼。
    這對於想要修補發行版所使用的軟體包的確切版本的系統管理員來說主要有用,而不是那些只是訪問專案主頁並按照那裡的構建說明進行操作的貢獻者/好奇的人。

  3. 如果某個包位於發行版的池目錄中但不在 中Packages.gz,則它很可能位於另一個Package.gz.請注意典型行中如何包含多個單字sources.list
    deb http://archive.ubuntu.com/ubuntu precise main universe multiverse
    mainuniverse並且multiverse每個單字都有自己的Packages.gz檔案。您可能需要啟用一些,例如 debiannon-free預設情況下停用。但是,某些軟體包仍然不可用(甚至在池中也不可用)。您可以選擇新增不受信任的儲存庫(例如Ubuntu 上的PPA),並自行打包缺少的程式(這樣您和其他人就可以使用他們的套件管理器來管理該程式),或者只是自己建置和安裝它(您應該使用/usr/local前綴避免與您的套件管理器發生衝突)。

  4. 當出現新的(版本)套件時,Release分發的文件會更新。這可以讓apt update我們知道它必須重新下載Packages.gz

相關內容