在處理某些項目時,有時您需要環境的穩定性。 更新包可能會導致整個項目失敗。 有時,我們不小心升級了那些軟件包,這會在服務器上造成嚴重問題。 這就是為什麼維護包的特定版本很重要的原因。
本教程將向您展示如何從 Ubuntu 或 Debian 發行版的升級中排除特定軟件包。
另請閱讀: 如何使用 apt-get 安裝特定版本的軟件包
1) 用一些命令排除包
在系統的全面升級過程中,存在一些排除或保留特定包的各種方法。 可以將包裹標記為保留。 在本文中,我們將在示例中使用 virtualbox 包。 可以看到安裝的版本
# dpkg -l | grep virtualbox
ii virtualbox 5.0.18-dfsg-2build1 amd64 x86 virtualization solution - base binaries
現在您可以看到我們有可用的更新版本
# apt list --upgradable
Listing... Done
virtualbox/xenial-updates 5.0.40-dfsg-0ubuntu1.16.04.2 amd64 [upgradable from: 5.0.18-dfsg-2build1]
您可以使用以下命令標記包
標記
您可以使用 apt-mark
命令後跟 hold
選項。 這將防止軟件包被自動安裝、升級或刪除。 語法如下
apt-mark hold package
您可以實際使用它,如下所示
# apt-mark hold virtualbox
virtualbox set on hold.
現在你可以檢查如下
# apt upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
virtualbox
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
可以看到無法升級包。
要取消標記,請使用以下語法
apt-mark unhold package
實際上你有下面的命令
# apt-mark unhold virtualbox
Canceled hold on virtualbox.
dpkg
您還可以使用 dpkg --set-selection
標記包的命令。語法如下
# echo " hold" | dpkg --set-selections
實際上,您可以按照以下方式進行
# echo "virtualbox hold" | dpkg --set-selections
您沒有任何顯示結果的回報。 所以,直接檢查升級
# apt upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
virtualbox
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
你可以看到它的工作原理。
現在要取消,命令是不同的,並且遵守語法
echo "package install" | sudo dpkg --set-selections
所以,使用命令
# echo "virtualbox install" | dpkg --set-selections
你不會有回報。 因為我們已經是 root 用戶,所以我們不使用 sudo
資質
您也可以使用 aptitude 命令。 默認情況下,您的系統上不存在此命令,因此您需要按如下方式安裝它
# apt install aptitude
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
aptitude-common libcwidget3v5
要使用命令標記包,請使用語法
aptitude hold package
當你用 aptitude 標記一個包裹時,你沒有回報。
# aptitude hold virtualbox
No packages will be installed, upgraded, or removed.
0 packages upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
Need to get 0 B of archives. After unpacking 0 B will be used.
如果你檢查結果 aptitude upgrade
, 你不會提到有標記的包,但如果你嘗試,你會得到它 apt upgrade
.
您可以使用語法取消保留
aptitude unhold package
就像下面
# aptitude unhold virtualbox
No packages will be installed, upgraded, or removed.
0 packages upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
選擇
您可以使用 dselect
命令是 dpkg 的前端,用於管理 Debian 和基於 Debian 的 Linux 發行版中的軟件包。 默認情況下它不存在,因此您需要安裝它
# apt install dselect
啟動命令
現在仔細閱讀幫助。
現在您可以使用空格鍵盤退出幫助並找到要保存的包。 您可以使用 /
做研究
現在您可以用 H
或者 =
現在你可以退出 Q
. 它將打開第一個菜單,選擇退出。 您可以通過升級來檢查
# apt upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
virtualbox
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
你可以看到它的工作原理。
如果要取消標記包,則需要使用 +
代替 H
或者 =
曾經在結果上持有三顆星,如下所示
2)使用apt配置文件阻止包
標記包的一種方法是編輯 /etc/apt/preferences
文件。 為了在升級整個系統時不升級包,我們必須設置一個小於零 (0) 的 apt pin 優先級。 如果該文件不存在,則必須創建它。 您需要遵守以下語法
Package: <package-name> ('*' for all packages)
Pin: release * (o=Ubuntu for Ubuntu origin)
Pin-Priority: <less than 0>
在 Release Pin 行上,您可以添加包的創建者,對於 Pin-Priority 編號,較高的數字意味著更多的偏好和 -1
等於忽略那個包。 還有一些其他選項可以使用。
要阻止 virtualbox 包,請編輯文件如下
Package: virtualbox
Pin: release o=Ubuntu
Pin-Priority: -1
保存並退出。 這就是您阻止包裹所需的全部內容。 要取消保留包,您可以註釋文件的行或簡單地刪除文件。
可以看到可以使用一些方法來阻塞一個包。 這對於維護項目的穩定版本非常有用。 您可以選擇您喜歡的方法。 您不需要為同一目標使用兩種或多種方法。