網站搜尋

在 Debian 和 Ubuntu 中保留或阻止套件升級


如你所知,我們可以使用 apt upgrade 命令在 Debian、Ubuntu 及其他基於 Debian 的系統中升級所有已安裝的軟體包。在這個升級過程中,所有已安裝的軟體包將會被升級,一些額外的軟體包(即依賴項)將會被安裝,而一些不必要的軟體包將會被刪除。Apt 軟體包管理器會自動執行這些操作,以幫助使用者維護一個乾淨的系統。Apt 還有一個選項可以防止軟體包在 Debian、Ubuntu 及其衍生版本中自動安裝、升級或刪除。在本指南中,我們將討論在 Debian、Ubuntu 及其衍生版本如 Linux Mint 和 Pop!_OS 中保持或防止軟體包升級的各種方法。

為什麼有人想要阻止一個套件升級?

你可能會想,為什麼有人會想要阻止某個套件進行 apt upgrade。不是將套件更新到最新版本可以幫助我們確保系統安全嗎?當然是的!但是在某些情況下,你可能不想這麼做。以下是幾個防止套件被升級的原因:

  • 一個套件的當前版本運作得很好,所以你可能會認為沒有必要升級它。
  • 另一個應用程式需要特定版本才能正常運作。
  • 您即將更新的套件可能存在問題。即使開發者在將套件推送到資源庫之前已經徹底測試過,有時他們仍可能在不知情的情況下推送不穩定的套件,這可能會破壞您的系統。
  • 節省頻寬。您可能不想更新一個消耗超過 500 MB 的套件。

所以無論原因是什麼,如果你曾經想要防止 Debian 或 Ubuntu 系統中的套件被更改,本教學將會有幫助。

在 Debian、Ubuntu 中保留或阻止套件升級

我們可以透過命令列或使用名為 Synaptic 的圖形化套件管理工具,來防止/暫停/忽略/排除 apt 更新中的套件。

首先,讓我們來看看命令列方法!

1. 使用 Debian、Ubuntu 中的 apt-mark 命令防止軟件包被自動安裝、升級或移除

Apt-mark 用於顯示、設置和取消設置軟體包的各種設定,例如將軟體包標記為自動/手動安裝,或更改 dpkg 選擇,如保留(hold)、安裝(install)、移除(deinstall)和清除(purge),這些設定會被例如 apt-get dselect-upgrade 或 aptitude 所遵循。

為了防止套件被更改(安裝、移除和升級),apt-mark 指令提供以下三個子指令:

  1. 握住
  2. 取消保留
  3. 展示持有

hold 命令用於將套件標記為保留,這將防止該套件被自動安裝、升級或移除。

unhold 命令用於取消先前對軟體包設置的暫停,使所有操作再次可用。

而 showhold 指令用於顯示被保留的套件清單。

讓我們看一個例子。我將使用以下命令防止一個軟件包(例如 htop)被自動安裝、升級或移除:

$ sudo apt-mark hold htop

範例輸出:

htop set on hold.

被鎖定的 htop 套件即使在升級系統後也會保持相同版本。

要顯示被暫停的套件,請執行:

$ sudo apt-mark showhold

要取消保留該套件,只需執行:

$ sudo apt-mark unhold htop

範例輸出:

Canceled hold on htop.

使用 apt-mark 命令防止套件被自動安裝、升級或移除

請注意,此方法無法防止手動移除套件。您仍然可以使用 apt-get remove <packagename> 指令來移除被鎖定的套件。

此方法僅防止應用程式在系統升級過程中自動安裝、更新、升級或移除。實際上,鎖定套件意味著你告訴套件管理員無論如何保持當前版本,即使有新版本可用。這個技巧在暫停更新顯示卡驅動程式時非常有用。如果目前運作正常的程式在更新後出現問題,也同樣適用。

每當你嘗試使用指令 sudo apt-get update 或 sudo apt-get upgrade 更新系統時,被標記的套件仍然會保持你封鎖該套件時的版本。

Apt-mark 並不是唯一可以防止在 Debian 或 Ubuntu 中更改套件的命令列工具。還有另外兩種方法可以從命令列將套件設為保留狀態,並在稍後取消保留。

2. 在 Debian、Ubuntu 中使用 dpkg 防止套件升級

Dpkg 是用來安裝、建構、移除和管理 Debian 軟體套件的指令列工具。

要使用 dpkg 將一個軟體包(例如 htop)暫停,請執行:

$ echo "htop hold" | sudo dpkg --set-selections

您可以查看先前暫停的包裹狀態,請執行:

$ dpkg --get-selections | grep "htop"
htop						hold

如你所見,htop 已被暫停。

要查看所有套件的狀態,請執行:

$ dpkg --get-selections

要取消保留包裹,請執行:

$ echo "htop install" | sudo dpkg --set-selections
在 Debian、Ubuntu 中使用 dpkg 防止套件升級

3. 在 Debian、Ubuntu 中使用 aptitude 持有升級套件

Aptitude 是一個基於文字的 Debian GNU/Linux 套件系統介面。它允許使用者執行各種套件管理任務,例如安裝、更新、升級、列出和移除套件。

要將套件暫停並防止其被自動升級,請執行:

$ sudo aptitude hold htop

要查看包裹狀態,請執行:

$ aptitude show htop

範例輸出:

Package: htop                            
Version: 2.2.0-2build1
State: installed [held]
Automatically installed: no
Priority: optional
Section: utils
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: amd64
Uncompressed Size: 225 k
Depends: libc6 (>= 2.15), libncursesw6 (>= 6), libtinfo6 (>= 6)
Suggests: lsof, strace
Description: interactive processes viewer
 Htop is an ncursed-based process viewer similar to top, but it allows
 one to scroll the list vertically and horizontally to see all processes
 and their full command lines. 
 
 Tasks related to processes (killing, renicing) can be done without
 entering their PIDs.
Homepage: https://hisham.hm/htop/

如您在上述輸出中所見,htop 套件被限制升級。

要取消保留該包裹,只需執行以下操作:

$ sudo aptitude unhold htop

在 Debian、Ubuntu 中使用 aptitude 保留套件升級

4. 使用 Debian、Ubuntu 的 Synaptic 套件管理器防止套件被自動安裝、升級或移除

如果您的系統上安裝了 Synaptic 套件管理器,您可以輕鬆地鎖定套件,使其無法被安裝、更新、升級或移除。

打開 Synaptic 管理器並搜尋您想要鎖定的軟體包。然後從選單列中點擊 套件 並點擊 鎖定。

使用 Synaptic 套件管理員防止套件自動安裝、升級或移除

就是這樣。只要您將套件保持在保留狀態,系統升級期間該套件就不會被更動。

要取消保留它,請到 Synaptic -> 套件 -> 解鎖 版本。

如果您的系統中未安裝 Synaptic 套件管理器,您可以使用以下命令來安裝它:

$ sudo apt install synaptic

結論

在本教程中,您將學習如何防止套件在基於 Debian 的系統中被自動安裝、升級和移除,例如 Ubuntu、Linux Mint 和 Pop!_OS 等。

雖然在某些情況下暫停套件可能有幫助,但這也會在您的 Ubuntu 系統中留下安全漏洞。必須知道何時暫停或解除暫停套件。請謹慎使用此功能。祝你好運!

相關閱讀:

  • 如何在 Arch Linux 中忽略軟體包升級

精選圖片由 Pixabay 的 erfouris studio 提供。