如何在不删除依赖项的情况下降级软件包?

Rol*_*Xor 17 apt dpkg dependencies downgrade

在清除 PPA 之前,我有许多已升级到 PPA 版本的 mesa 软件包,以便我可以升级我的系统。版本之间的差异很小(它们在技术上是相同的,只有一组库来自 git,其他是最终版本)。

如果我尝试通过 Synaptic、apt-get 或 aptitude 降级,我会陷入依赖地狱。

有没有办法手动降级包(也许一个一个)并将它们的依赖包标记为不可移动(如果有道理),直到我完成?

PS 这个问题:How to Downgrade a Package via apt-get? 有点不同,对这种情况没有帮助。

lan*_*oni 14

我以前从未玩过这个,但我建议您hold(或lock)使用给您带来麻烦的依赖项版本。这种方式apt的可能解决方案数量有限,并且当您尝试降级其他软件包时可能不会感到困惑。


如果没有其他效果,您可以采用以下答案中建议的手动方法:如何通过 apt-get 降级软件包?. 基本上,.deb手动下载必要的软件包,然后使用较低级别dpkg及其强有力的参数之一一一安装它们:--ignore-depends, --force-depends, --force-depends-version, 或 even --force-all

本着与上述相同的精神,你有这样的--force-downgrade论点:

          downgrade(*): Install a package, even if newer version of
          it is already installed.

          Warning:  At  present  dpkg  does  not  do any dependency
          checking on downgrades and therefore will not warn you if
          the  downgrade  breaks the dependency of some other pack?
          age. This can  have  serious  side  effects,  downgrading
          essential system components can even make your whole sys?
          tem unusable. Use with care.
Run Code Online (Sandbox Code Playgroud)

但这假设您已阅读man dpkg,并且您了解您的工作:

          Warning: These options are mostly intended to be used  by
          experts  only.  Using  them  without  fully understanding
          their effects may break your whole system.
Run Code Online (Sandbox Code Playgroud)

请参阅错误:版本号不以数字开头以及如何安装旧版本的 Java以及如何安装旧版本的包,例如液体 2.2.2?例如:

sudo dpkg --force-downgrade -i your_mesa_package.deb
Run Code Online (Sandbox Code Playgroud)

并参阅如何在不安装某些依赖项的情况下安装软件包?例如(连同适当的警告):

sudo dpkg --force-all -i your_mesa_package.deb
Run Code Online (Sandbox Code Playgroud)

另一种方法是.deb使用equivs包创建一个虚拟包(可能还有一个稍微不同的名称)。然后安装虚拟包应该允许您在保留相关 deps 的同时删除“真实”包,然后安装旧版本。我不确定这究竟是如何工作的,但请查看此相关线程以获取详细信息:How to remove a deb without remove its dependencies


pre*_*ise 5

您可以首先使用将系统中安装的apt-mark所有目标包的依赖项(可能还有推荐/建议的依赖项)标记为手动安装。完成后,安装该软件的先前版本,并apt-get明确提及版本。


附注。如果依赖项/推荐/建议的包列表(即要标记的包apt-mark)很大,请将打包输出的预期列表保存apt-cache show <target-package-name>到任何文件 say/path/to/fooapt-mark在这样的组合中使用:

cat /path/to/foo | xargs -imarkthese sudo apt-mark manual markthese
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

32231 次

最近记录:

7 年,11 月 前