有不同的方法来保留软件包:使用 dpkg
、apt
、dselect
、aptitude
或 Synaptic。
将软件包保留:
echo "<package-name> hold" | sudo dpkg --set-selections
echo "<package-name> install" | sudo dpkg --set-selections
dpkg --get-selections
dpkg --get-selections <package-name>
dpkg --get-selections | grep "\<hold$"
保留一个包裹:
sudo apt-mark hold <package-name>
sudo apt-mark unhold <package-name>
sudo apt-mark showhold
使用dselect,进入[S]elect界面,找到您希望保持当前状态的软件包,然后按下=或H键。在退出[S]elect界面后,更改将立即生效。
sudo aptitude hold <package-name>
取消保留:
sudo aptitude unhold <package-name>
前往Synaptic软件包管理器(System > Administration > Synaptic Package Manager)。
点击搜索按钮,输入软件包名称。
当您找到该软件包后,选择它并转到Package菜单,然后选择Lock Version。
devscripts
时,会拉取很多推荐的软件包。由于我不需要邮件服务器(postfix),我可以在运行sudo apt-get install devscripts
之前运行echo postfix hold | sudo dpkg --set-selections
来禁用它的安装。这个保持操作只在此次安装中生效,在安装完成后,选择将被重置。 - Lekensteynapt-mark
在0.7.25版本(Ubuntu Lucid)中不支持hold
。 - Jorilsudo apt-mark hold/unhold
目前是有效的。我保留了一些过时的软件包,然后执行了sudo apt-get dist-upgrade
以查看它们是否会被升级,但是这些保留的软件包没有被升级。顺便说一下,你可以同时保留/取消保留多个软件包。例如:sudo apt-mark hold thunar thunar-dbg thunar-data libthunarx-2-0 libthunarx-2-dev
。太棒了! - Yuri Sucupirahin@xps:~$ update-manager -d
Gtk-Message: 22:22:12.308: Failed to load module "appmenu-gtk-module"
正在检查新的Ubuntu版本
请在升级之前安装所有可用的更新。
然而,我已经运行了sudo apt update && sudo apt upgrade
。 - kirksudo apt install --no-install-recommends the-package-name
是很有用的。这样你就不需要使用任何技巧来避免安装不必要的软件包了。 - Mikko Rantalainenapt-mark hold
选项推荐到这个答案的顶部值得吗?据我所知,那是现在推荐的方法。 - mwfearnleyPackage: compiz-plugins-main
Pin: version 1:0.9.7.0~bzr19-0ubuntu10.1
Pin-Priority: -1
/etc/apt/preferences
文件中。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-)upgrade
命令无法更改该软件包。 - rcoup/var/cache/apt/archives
)与保留、升级等操作无关,因此您下载的所有版本都会保存在那里,直到您运行apt-get [auto]clean
命令。 - rcoupsudo apt-get install synaptic
命令安装synaptic
。gksudo synaptic
命令运行,并在搜索框中找到您想要锁定的软件包,例如:gedit
。
s/sudo su/sudo -s/g
(或者sudo -i
)进行翻译。 (-i
会提供一个登录 shell,-s
则不会)。 - derobertapt-get
已被apt
取代,所以例如我想阻止Firefox更新到56以上的版本,因为很多附加组件,比如"Tab Groups"在新的Firefox 57中不再起作用(参见"WebExtensions Update")。sudo apt-mark hold firefox firefox-locale-*
如果您决定稍后取消保留它们,那将是命令:
sudo apt-mark unhold firefox firefox-locale-*
关于Ubuntu 16.04,补充一下@soger的评论。
默认情况下,Ubuntu 16.04没有现有的/etc/apt/preferences文件。如果你目前没有这个文件,只需创建一个新文件,并按照@soger上面描述的方式填写一个段落,以排除给定软件包及其依赖项的更新。
之后,运行apt update
,就可以了。:0)
例如,我有一个嵌入式Intel显卡和一张NVidia显卡的Ubuntu 16.04.5 LTS服务器。只使用了NVidia显卡。服务器还使用CUDA驱动程序。我遇到了一个问题,apt
一直坚持要求更新
va-driver-all
(Intel驱动程序),但它无法确定要安装的版本。这让我抓狂,而且我也不需要Intel驱动程序。我将这段文字输入到了preferences文件中,并刷新了apt,问题解决了。
Package: va-driver-all
Pin: release *
Pin-Priority: -1
禁用自动更新的包
。 - hhlpapt-get
迁移到apt
之前提出的,值得注意的是apt-mark hold packagename
仍然是解决此问题的标准方法。尝试使用apt hold
只会报错E: Invalid operation hold
。 - mwfearnley