如何防止更新特定包?

Iva*_*van 468 updates package-management

由于错误 #693758,我想阻止apt-get upgrade更新管理器更新“libgtk2.0-0”包。

如何做到这一点?

hhl*_*hlp 702

保持

还有的阻碍包不同的方式:以dpkgaptdselectaptitude或突触。

dpkg

暂停包裹:

echo "<package-name> hold" | sudo dpkg --set-selections
Run Code Online (Sandbox Code Playgroud)

删除保留:

echo "<package-name> install" | sudo dpkg --set-selections
Run Code Online (Sandbox Code Playgroud)

显示所有包的状态:

dpkg --get-selections
Run Code Online (Sandbox Code Playgroud)

显示单个包的状态:

dpkg --get-selections <package-name>
Run Code Online (Sandbox Code Playgroud)

显示所有暂停的包裹:

dpkg --get-selections | grep "\<hold$"
Run Code Online (Sandbox Code Playgroud)

易于

持有包裹:

sudo apt-mark hold <package-name>
Run Code Online (Sandbox Code Playgroud)

删除保留:

sudo apt-mark unhold <package-name>
Run Code Online (Sandbox Code Playgroud)

显示所有暂停的包裹:

sudo apt-mark showhold
Run Code Online (Sandbox Code Playgroud)

选择

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


以下方法受到限制,因为在 aptitude 或突触中锁定/持有包不会影响 apt-get/apt。

资质

持有包裹:

sudo aptitude hold <package-name>
Run Code Online (Sandbox Code Playgroud)

删除保留:

sudo aptitude unhold <package-name>
Run Code Online (Sandbox Code Playgroud)

使用 Synaptic Package Manager 锁定

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

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

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

突触菜单

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

  • 还值得指出的是,包保留有时会通过创建没有合法解决方案的情况来破坏升级和补丁程序 apt 可以计算依赖项。如果包 foo 对 libbar 有 == &lt; 或 &lt;= 依赖,那么 apt 将拒绝升级 libbar 和 foo。随着时间的推移,这些级联依赖可能会增长以阻止大量更新,包括重要的安全更新。如果发生这种情况,您需要删除保留并让升级发生,或者重建您保留的软件包以对抗其依赖项的较新版本。 (6认同)
  • 这也可以防止安装软件包。在安装 `devscripts` 时,很多打包都被拉为推荐包。由于我不需要邮件服务器(后缀),我可以通过运行 `echo postfix hold | 来禁用它的安装。sudo dpkg --set-selections 在运行 `sudo apt-get install devscripts` 之前。此保持操作仅针对此安装持续存在,安装后将重置选择。 (5认同)
  • 请注意:`apt-mark` 在 0.7.25 版本(Ubuntu Lucid)中不支持 `hold` (2认同)
  • 我可以确认 `sudo apt-markhold/unhold` 目前可以在 Ubuntu **16.04** (Xenial Xerus) 中运行。我持有一些过时的软件包,然后执行“sudo apt-get dist-upgrade”以查看它们是否会升级,但持有的软件包没有升级。顺便说一句,您可以一次保留/取消保留多个包裹。示例:“sudo apt-markhold thunar thunar-dbg thunar-data libthunarx-2-0 libthunarx-2-dev”。好的! (2认同)
  • 这里有人可以定义**持有**和**锁定**之间的区别吗? (2认同)
  • 请注意:至少现在来自“dpkg”、“apt-mark”、“apt”和“aptitude”的保留标志是相互尊重的。甚至 Synaptic 也能识别它们:持有的软件包仍然显示为可升级(当然,如果有东西需要升级),您可以手动标记它们以进行升级,但是当点击“标记所有升级”按钮时,它们会被排除在外。**但是**通过 Synaptic 锁定似乎仍然是“Synaptic 独有的”。 (2认同)

sog*_*ger 46

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

Package: compiz-plugins-main
Pin: version 1:0.9.7.0~bzr19-0ubuntu10.1
Pin-Priority: -1
Run Code Online (Sandbox Code Playgroud)

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

  • 这是比无限期阻止更新更好的方法 (13认同)
  • @Digger 但是一旦出现更新的版本,我的意思是比固定为 -1 的版本更新,aptitude 将再次报告该软件包可升级。 (2认同)

Pan*_*her 44

暂停包“foo”:

echo "foo hold" | dpkg --set-selections
Run Code Online (Sandbox Code Playgroud)

在您的情况下,我们将暂停葡萄酒:

sudo -i
echo "wine hold" | dpkg --set-selections
Run Code Online (Sandbox Code Playgroud)

要取消保留:

sudo -i
echo "wine install" | dpkg --set-selections
Run Code Online (Sandbox Code Playgroud)

  • 还要注意,当一个包被搁置时,你*可以*通过`apt-get install wine=1.2.3`安装特定版本。暂停可防止“apt-get (dist-)upgrade”更改它。 (2认同)
  • @cxrodgers 本地缓存(通常是`/var/cache/apt/archives`)独立于保留和升级等内容,因此您下载的所有版本都将存在,直到您运行 `apt-get [auto]clean` (2认同)

Bru*_*ira 23

安装synaptic使用sudo apt-get install synaptic

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

在此处输入图片说明

从包菜单中选择锁定版本

在此处输入图片说明

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

  • 请看“锁定版本并不像听起来那么聪明。它应该按照它在锡上说的那样做,锁定版本......但它只将它锁定在 Synaptic 中。任何其他进行包升级的东西(阅读:更新管理器、apt-get、aptitude 等)忽略了这一点。这可能是有问题的行为,所以我希望能及时修复。” 来自 http://askubuntu.com/questions/9607/what-does-lock-version-do。目前的状态是什么?如果某些东西在 Synaptic 中被锁定,其他包管理器会“尊重”这个锁吗? (11认同)
  • vasa1:从 0.75.13 版本开始,仍然没有:( aptitude 也有同样的问题。 (2认同)

Rob*_*ans 16

阻止安装包称为“包保留”,操作起来非常简单:

echo package_name保留 | dpkg --set-selections

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

注意:上面的命令假设有 root 权限。换句话说,您可能需要sudo su在运行之前输入。


rub*_*o77 9

由于有一段时间apt-get被 替换apt,所以例如我想阻止 Firefox 更新到 56 以上的版本,因为很多附加组件,如“标签组”不再适用于新的 Firefox 57(请参阅“WebExtensions更新”)。

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

阻止 Firefox 更新

sudo apt-mark hold firefox firefox-locale-*
Run Code Online (Sandbox Code Playgroud)

如果你想稍后取消持有它们,那就是命令:

sudo apt-mark unhold firefox firefox-locale-*
Run Code Online (Sandbox Code Playgroud)


小智 5

你想知道的关于“持有”和“固定”包到特定版本的一切:https : //help.ubuntu.com/community/PinningHowto