Ubuntu

Linux中的包、儲存庫和安裝過程

  • July 14, 2019

我在網際網路上閱讀了很多關於如何在 Linux(例如 Ubuntu)上安裝程序的文章,但我仍然感到困惑!

我到現在為止的理解是:

  1. 首先,我們應該添加包含我們想要的包的儲存庫。在 Ubuntu 中,將通過取消註釋/etc/apt/sources.list文件中的相關行來完成。
  2. 然後我們應該通過執行更新我們儲存庫的包列表apt-get update
  3. 最後,通過執行安裝我們的程序apt install

……但還是看不懂!

  1. 當我們在 中取消註釋儲存庫時sources.list,這是否意味著我們告訴作業系統:“在我的電腦上下載此儲存庫”?是否需要下載儲存庫?如果沒有,那麼通過取消註釋 sources.list 中的一行,系統會發生什麼?
  2. 究竟是apt-get update做什麼的?當我讀到:
apt-get update downloads the package lists from the repositories and
"updates" them to get information on the newest versions of packages
and their dependencies.

這到底是什麼意思?我們有一個包含一些軟體包的儲存庫;這是否意味著某些儲存庫可能已過時?那麼為什麼他們不更新伺服器上的儲存庫,這些儲存庫將始終是最新的並且沒有人需要這樣做 apt-get update呢?

當我們在 中取消註釋儲存庫時sources.list,這是否意味著我們告訴作業系統:“在我的電腦上下載此儲存庫”?

不。

是否需要下載儲存庫?

通常不會。除非您想下載可能數百 GB 的數據。

如果沒有,那麼通過取消註釋 sources.list 中的一行,系統會發生什麼?

沒什麼,但是

我們有一個儲存庫,它有一些包,這是否意味著某些儲存庫可能已經過時了?

儲存庫可能已經過時,是的,但這不是這裡討論的內容。

那麼,為什麼他們不更新伺服器上始終是最新的並且沒有人需要進行 apt-get 更新的儲存庫呢?

它並不完全那樣工作。會發生什麼:

  1. 儲存庫包含包,確實如此,但它們還包含有關這些包的資訊(元數據):包名稱、版本、包的依賴關係、包包含的文件列表、包的雜湊值等。
  2. apt-get update下載此元數據。
  3. apt-get install,upgrade等然後在您告訴它安裝包時使用此元數據 - 它檢查可用版本,檢查是否需要安裝其他包作為依賴項,等等。
  4. 當儲存庫更新時,元數據將更新為,但您之前下載的本地副本不會。這是很自然的,如果您的元數據副本已過時,您不希望您的 PC 不斷檢查伺服器。
  5. 現在下次你需要安裝一個包時,你可能會遇到問題,因為你的系統有過時的元數據,所以它無法找出正確的做法。
  6. 然後您需要執行apt-get update以更新此元數據。
  7. 正如我所說,當您取消註釋原始碼行時,還沒有發生任何事情。下次執行時apt-get update,它也會從該源下載元數據。下次安裝、升級或刪除軟體包時,apt 會在解決問題時考慮額外的元數據。

這就是 apt 的工作原理。另一方面,Yum 會在您添加、刪除或升級軟體包時檢查更新的元數據並下載它。兩種方法都有其優點和缺點。

引用自:https://unix.stackexchange.com/questions/529786