如何防止更新特定包?
因为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迁移到生产环境。