如何防止更新特定包?

因为bug#693758我想阻止apt-get upgrade和Update Manager更新“libgtk2.0-0”包。

怎么能实现这一目标?

保持

有四种方法可以阻止包:使用dpkg,apt,aptitude或dselect。

的dpkg

暂停包裹:

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

删除保留:

 echo " install" | sudo dpkg --set-selections 

显示包的状态:

 dpkg --get-selections 

显示单个包的状态:

 dpkg --get-selections | grep "" 

易于

拿一个包裹:

 sudo apt-mark hold  

删除保留:

 sudo apt-mark unhold  

D选择

使用dselect,进入[S]选择屏幕,找到您希望保持其当前状态的包裹,然后按=H. 退出[S]选择屏幕后,更改将立即生效。


以下方法的局限性在于,在aptitude或synaptic内锁定/保持包不会影响apt-get / apt。

能力倾向

拿一个包裹:

 sudo aptitude hold  

删除保留:

 sudo aptitude unhold  

使用Synaptic Package Manager锁定

转到Synaptic Package Manager (系统>管理> Synaptic包管理器)。

单击搜索按钮并键入包名称。

找到包后,选择它并转到“ 包”菜单并选择“ 锁定版本”

突触菜单

该包现在不会显示在更新管理器中,也不会更新。

将包“foo”置于保持状态:

 echo "foo hold" | dpkg --set-selections 

在你的情况下,我们将把葡萄酒搁置:

 sudo -i echo "wine hold" | dpkg --set-selections 

要删除保留:

 sudo -i echo "wine install" | dpkg --set-selections 

我正在寻找相同的东西,经过大量研究后我发现使用以下语法可以禁止一个特定版本,但允许下一次更新:

包装:compiz-plugins-main
针:版本1:0.9.7.0~bzr19-0ubuntu10.1
引脚优先:-1

这将进入/ etc / apt / preferences文件。

使用sudo apt-get install synaptic

使用gksudo synaptic运行并在搜索框中找到要锁定的包,即: gedit

在此处输入图像描述

从包装菜单中选择锁定版本

在此处输入图像描述

就是这样,即使在升级过程中,锁定时当前安装的版本也将保持安装状态。

防止安装包被称为“包保持”,它很简单:

 echo package_name hold |  dpkg --set-selections

…其中* package_name *是您要阻止安装的软件包的名称。

注意:以上命令采用root权限。 换句话说,您可能需要在运行之前键入sudo su

有些时候apt-get被替换为apt ,所以例如我想阻止Firefox更新到56以上的版本,因为许多附加组件,如“选项卡组”不再适用于新的Firefox 57 (请参阅“WebExtensions更新”)。

可以使用一个命令保存多个包并使用通配符。

防止Firefox更新

 sudo apt-mark hold firefox firefox-locale-* 

如果您希望以后再取消它们,那将是命令:

 sudo apt-mark unhold firefox firefox-locale-* 

我是synaptic你可以冻结特定包的版本我不是100%肯定这是否会修改apt-get但它肯定会停止更新管理器。

要冻结包,请在synaptic中选择它,然后打开包菜单并选择冻结版本。

希望这可以帮助

编辑:这个问题16668处理类似的情况

您想知道的关于“保持”和“固定”包到特定版本的所有内容: https : //help.ubuntu.com/community/PinningHowto

请参阅错误#75332 , #158981和#72806 。

总结是在apt-get / aptitude级别保持不会在dpkg中触发保持状态(特别参见bug 72806),update-manager从dpkg读取状态。

解决方法以root身份运行: echo "package hold" | dpkg --set-selections echo "package hold" | dpkg --set-selections

如果您安装了Synaptic,则可以选择该软件包并使用菜单Package – > Lock Version来防止它被更新。

您可以使用sudo apt-get install synaptic安装Synaptic。 我个人认为它比软件中心更有用……然后,我还是老了。 🙂

您可以在aptitude上使用“特定覆盖”,如下所示:

 aptitude reinstall ~i oracle-java8-jre: 

这是一次性使用(未存储以备将来重新安装),保持特定覆盖,重新安装系统中的所有软件包,但不是oracle-java8-jre。

如果您使用保持特定覆盖,则包将暂时处于保持精神状态不会尝试安装它的状态。

如果您认为您的系统受到了某些损害,那么这是一件非常好的事情。

有时人们可能想要阻止当前安装的所有软件包。 这是如何做。

首先保存当前状态,以便撤消:

 dpkg --get-selections > current_selections.txt 

然后,阻止所有包:

 dpkg --get-selections | sed -r "s/\tinstall/hold/" |dpkg --set-selections 

最后,当您想要恢复到以前的状态时:

 dpkg --set-selections < current_selections.txt 

一个用例可能是创建VM或Amazon AMI快照以从QA迁移到生产环境。