apt-get upgrade
和Update Manager更新“ libgtk2.0-0”软件包。 如何实现?
#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如果您保留一个旧版本,然后手动升级到一个新版本,而没有按照您描述的那样删除保留,那么将旧版本保留在缓存中以便您可以返回到它吗?
–cxrodgers
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-get
被apt
取代了,所以例如我想防止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迁移到生产环境时可能会出现。
评论
@hhlp:但是这个问题询问的是从未安装的软件包。@乔治·爱迪生(George Edison)-还有软件包存放区,可以让您不更新软件包。因此,基本上,保持软件包意味着您要告诉软件包管理器无论如何都保持当前版本。如果更新后当前正在运行的程序的最新版本中断,这将很有用。 (您无法容纳从未安装过的软件包,也看到我的问题是相同的)....我现在进行了测试-看到他说从自动更新中禁用软件包