通过 getdeb repo 仅升级某些软件包

通过 getdeb repo 仅升级某些软件包

我有点困惑获取deb现在可以使用了。我上次从那里获取软件包是在很久以前;那时的程序是,您只需为每个要安装/升级的软件包下载一个 .deb,然后使用 进行安装。然而,势不可挡的进步也为这个系统带来了曙光,现在 getdeb 安装是通过他们的 repo 完成的,该repo 在您安装对 apt 数据库进行更改的单个软件包后,dpkg -i在 中向 apt 注册。/etc/apt/sources.list.d

我已经安装了该软件包,我发现aptitude dist-upgrade现在它想要升级系统中许多在安装 getdeb 软件包之前尚未准备好升级的软件包。如果我将文件重命名/etc/apt/sources.list.d/getdeb.list为具有不同扩展名的文件,然后执行aptitude update && aptitude dist-upgrade,它就不会再想要升级软件包了。

因此我认为现在的默认行为是将所有软件包升级到 getdeb 提供的版本。这不太合适,因为这些软件包没有像官方发布的版本那样经过充分测试。

是否存在某个配置设置,除非明确选择此操作,否则会阻止将软件包升级到 getdeb repo 中的版本?我希望能够选择通过 getdeb 升级哪些软件包。

更新

根据@~joaopinto 的建议,我创建了该文件/etc/apt/preferences,其中包含以下内容:

Package: *
Pin: release o=GetDeb
Pin-Priority: 50

在了解这一点的过程中,我发现apt 中的错误这会阻止/etc/preferences.d搜索目录。所以...不要尝试使用该目录。

按照上述设置首选项文件后,aptitude dist-upgrade将不会尝试将软件包升级到 getdeb 版本。优先级 50 基本上意味着,只有当软件包在其他地方不可用时,才会从 getdeb 安装它们。

此时,我正在寻找一种方便的方法来将软件包升级到 getdeb 版本或最新版本(两者都可以)并根据需要升级/安装依赖项。我通常从命令行执行这些操作,但我发现我需要进入 curses 版本才能将aptitude软件包升级到特定版本。这并不是说没有办法从命令行执行此操作,但如果有,从 aptitude 的快速文档中也不容易辨别。

在 aptitude 中,我必须选择所需软件包的所需版本进行升级,然后处理由于该软件包版本依赖于其他软件包的较新版本而产生的“冲突”。这个问题很容易解决 — 我只需选择这些软件包的 getdeb 版本 — 但这似乎是不必要的麻烦。有没有更简洁的方法来做到这一点?

也更新

正如 @Ryan Thompson 所解释的那样,可以将版本传递给apt-get— 或者,正如我发现的,aptitude的命令行模式 — 通过添加到包名称的后缀,其中 VERSION 与或=VERSION列出的字符串相同。aptitudeapt-cache show

aptitude install rosegarden=1:10.04-1~getdeb1因此,即使 GetDeb 软件包已固定(如上所述),执行类似操作也会从 getdeb 存储库安装该软件包。我执行了此操作,系统提示我确认将依赖的软件包升级rosegarden-data到 getdeb 提供的版本。

答案1

apt 没有提供用户友好的方式来实现这一点,您将需要使用 apt pinning,请检查以下网址: http://jaqque.sbih.org/kplug/apt-pinning.html

为了防止任何软件包从 getdeb 升级,您需要创建 /etc/apt_preferences,其中包含以下内容:软件包:* Pin:release o=GetDeb Pin-Priority:50

答案2

它应该看起来像这样,但没有星号后的空行。/etc/apt/preferences 中的 package、pin 和 pin-priority 之间不允许有空行。不知道为什么,这个页面自动更改了布局。

包裹: *

Pin:起源 archive.getdeb.net
Pin-优先级:-1

答案3

您正在寻找一种称为固定的功能。我自己一直没能弄明白,所以我会让其他人为您指明正确的方向。

答案4

尝试了几个小时后,我终于找到了解决方案:

Package: *
Pin: origin archive.getdeb.net       
Pin-Priority: -1

相关内容