由于存在错误#693758,我希望阻止apt-get upgrade和Update Manager更新“ libgtk2.0-0”软件包。

如何实现?

评论

@hhlp:但是这个问题询问的是从未安装的软件包。

@乔治·爱迪生(George Edison)-还有软件包存放区,可以让您不更新软件包。因此,基本上,保持软件包意味着您要告诉软件包管理器无论如何都保持当前版本。如果更新后当前正在运行的程序的最新版本中断,这将很有用。 (您无法容纳从未安装过的软件包,也看到我的问题是相同的)....我现在进行了测试-看到他说从自动更新中禁用软件包

#1 楼

保留

有四种保留软件包的方法:使用dpkg,apt,aptitude或dselect。


将软件包置于保留状态:

echo "<package-name> hold" | sudo dpkg --set-selections


解除保管:

echo "<package-name> install" | sudo dpkg --set-selections


显示包裹的状态:

dpkg --get-selections


显示单个包装的状态:

dpkg --get-selections | grep "<package-name>"


apt

保存一个包装:

sudo apt-mark hold <package-name>


删除保管箱:

sudo apt-mark unhold <package-name>


显示所有保管的包裹:

sudo apt-mark showhold


dselect

使用dselect,进入[S] elect屏幕,找到您想要保持其当前状态的软件包,然后按=或H。将在退出[S] elect屏幕后立即生效。


以下方法受到限制,因为在aptitude或synaptic内锁定/保持程序包不会影响apt-get / apt 。

智能


拿着包裹:

sudo aptitude hold <package-name>


取下货舱:

sudo aptitude unhold <package-name>


使用Synaptic Package Manager锁定

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

单击搜索按钮,然后键入软件包名称。

找到软件包时,将其选中,然后转到“软件包”菜单并选择“锁定版本”。



软件包现在将不会显示在更新管理器中,也不会被更新。

评论


这也可以防止安装软件包。安装devscripts时,将打包的很多东西作为“推荐”软件包。由于我不需要邮件服务器(后缀),因此可以通过运行echo postfix hold |禁用它的安装。 sudo dpkg --set-selections,然后运行sudo apt-get install devscripts。仅在此安装后,此保留操作才会保留,在安装后,重置选择。

– Lekensteyn
11年8月20日在10:47

值得一提的是,程序包保留有时会造成无法解决依赖关系的法律解决方案的情况,从而破坏升级和补丁。如果软件包foo对libbar具有== <或<=依赖关系,则apt将拒绝升级foo和foo。随着时间的流逝,这些级联依赖性可能会增长,以阻止大量更新,包括重要的安全更新。您需要删除保留并让升级发生,或者如果发生这种情况,请针对其依赖关系的较新版本重建保留的软件包。

–斯蒂芬妮
2012年8月2日,下午5:22

请注意:apt-mark不支持版本0.7.25(Ubuntu Lucid)中的保持

–乔里尔
13年4月2日在7:30

当试图阻止图形驱动程序时,这特别有用。对于ATI用户,apt-mark持有fglrx fglrx-amdcccle fglrx-dev && aptitude持有fglrx fglrx-amdcccle fglrx-dev。

–earthmeLon
13年4月18日在20:41

目前,突触和智能仅将软件包锁定在这些程序中。 “其他任何进行软件包升级的内容(阅读:Update Manager,apt-get,aptitude等)都将忽略此内容。”从这个问题。

–holocronweaver
2014年7月18日在12:16



#2 楼

要搁置包装“ foo”:

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


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

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


要删除保全:

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


评论


另请注意,在保留软件包的同时,您可以通过apt-get install wine = 1.2.3安装特定版本。处于保留状态可防止apt-get(dist)升级对其进行更改。

–rcoup
2015年1月6日在2:24



@rcoup如果您保留一个旧版本,然后手动升级到一个新版本,而没有按照您描述的那样删除保留,那么将旧版本保留在缓存中以便您可以返回到它吗?

–cxro​​dgers
18年8月24日在14:40

@cxrodgers本地缓存(通常为/ var / cache / apt / archives)与保留,升级和内容无关,因此,在运行apt-get [auto] clean之前,所有下载的版本都将存在

–rcoup
18年8月27日在12:31

#3 楼

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

Package: compiz-plugins-main
Pin: version 1:0.9.7.0~bzr19-0ubuntu10.1
Pin-Priority: -1

/etc/apt/preferences文件。

评论


与无限期阻止更新相比,这是一种更好的方法

– Eero Aaltonen
2013年9月30日上午10:31

我认为,使用这种方法可以防止在下一个发行版升级中重新安装ubuntu one之类的ubuntu“广告软件”或amazon图标。

–丹尼尔·奥尔德(Daniel Alder)
2014年1月10日21:29

此方法还可以防止Aptitude报告程序包“可升级”(假设使用的版本比仓库中可用的版本旧)。

–挖土机
10月8日21:14

@Digger,但是一旦出现较新的版本,我的意思是比固定为-1的版本新,aptitude将再次报告该软件包可升级。

–索格
10月9日20:05

#4 楼

使用synaptic安装sudo apt-get install synaptic

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



从软件包菜单中选择Lock版本:



仅此,即使在升级期间,锁定时当前安装的版本也将保持安装状态。

评论


请注意:“锁定版本并不像听起来那样聪明。它应该按照提示说的做,锁定版本...但是它只能将其锁定在Synaptic中。其他任何可以进行软件包升级的内容(请阅读:Update Manager ,apt-get,aptitude等)都忽略了这一点。这很可能是越野车的行为,因此我希望此问题能够及时得到解决。”来自askubuntu.com/questions/9607/what-does-lock-version-do。目前的状态是什么?如果Synaptic中已锁定某些内容,其他软件包管理器是否会“兑现”该锁定?

–user25656
2011-12-22 12:09

vasa1:从0.75.13版本开始,仍然没有:( aptitude同样存在问题。

–syockit
2012年11月17日7:25

#5 楼

防止安装软件包称为“软件包保存”,这非常简单:

echo package_name hold | dpkg --set-selections


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

注意:以上命令具有root特权。换句话说,您可能需要在运行之前输入sudo su

评论


完美,这就是答案。谢谢。

– asoundmove
2011-2-5的3:38

s / sudo su / sudo -s / g(或sudo -i)。 (-i将提供登录shell,-s将不提供)。

–德罗伯特
15年6月11日在19:57

#6 楼

由于一段时间以来apt-getapt取代了,所以例如我想防止Firefox更新到高于56的版本,因为许多附加组件(例如“ Tab Groups”)在新的Firefox 57中不再起作用(请参见“ WebExtensions更新”。)

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

防止Firefox更新

sudo apt-mark hold firefox firefox-locale-*


如果您以后想放开它们,可以使用以下命令:

sudo apt-mark unhold firefox firefox-locale-*


#7 楼

您想要了解的有关“持有”和“固定”包装到特定版本的所有信息:https://help.ubuntu.com/community/PinningHowto

#8 楼

我突触可以冻结特定程序包的版本,我不确定是否会修改apt-get,但一定会停止更新管理器。100%不确定。

要冻结程序包,请选择它在突触中,然后打开“程序包”菜单并选择“冻结版本”。

希望对您有所帮助

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

#9 楼

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

摘要是,在apt-get / aptitude级别的保持不会触发dpkg中的保持状态(尤其是参见错误72806),并且update-manager读取状态从dpkg中获取。

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

#10 楼

将有关Ubuntu 16.04的详细信息添加到@soger的注释中。

Ubuntu 16.04默认情况下没有现有的/ etc / apt / preferences文件。如果当前没有该文件,则只需创建一个新文件,并使用上面的@soger所述的节填充该文件,以从更新中排除给定的程序包及其依赖项。

然后,运行apt update,您将是GTG。 :0)

例如,我有一个带有嵌入式Intel视频卡和NVidia卡的Ubuntu 16.04.5 LTS服务器。 NVidia卡是唯一使用的卡。该服务器还使用CUDA驱动程序。我遇到一个问题,apt一直坚持



(Intel驱动程序)需要更新,但无法确定要安装哪个版本。这真让我发疯,而且我也不需要英特尔驱动程序。我将此文本输入到首选项文件中并刷新了apt,问题已解决。

Package: va-driver-all
Pin: release *
Pin-Priority: -1


#11 楼

您可以适当地使用“特定替代”,如下所示:
aptitude reinstall ~i oracle-java8-jre:

这是一次仅使用(不存储以供将来重新安装),保留特定替代,以重新安装系统中的所有软件包但是不能使用oracle-java8-jre。您的系统在某种程度上受到了损害,因为您只能在一张打孔卡中重新安装所有内容。

#12 楼

如果已安装Synaptic,则可以选择软件包,然后使用菜单软件包->锁定版本来防止其被更新。

可以使用sudo apt-get install synaptic安装Synaptic。我个人觉得它比软件中心更有用...再说一遍,我是相当老的学校。 :)

#13 楼

有时可能要保留当前安装的所有软件包。方法如下。

首先保存当前状态,因此可以撤消:

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迁移到生产环境时可能会出现。