告诉 aptitude 忽略损坏的包

11 linux aptitude

我使用以下方法在 Karmic 中安装了来自 Lucid 的 Amsynth:

dpkg --force-depends-version -i amsynth_1.2.2-1_i386.deb
Run Code Online (Sandbox Code Playgroud)

安装Lucid版本的原因是因为Karmic版本已经3年了,在我的机器上崩溃了。Lucid Amsynth 包依赖于比 Karmic 更新的 libatk1 和 libjack0 版本,但我认为我会冒险,结果 Amsynth 运行良好。

但是,每次我进行升级时,aptitude 都会尝试卸载 Amsynth。我想我已经设法搁置了,但现在 aptitude 中止了。我怎么能告诉 aptitude 忽略破损的包裹并继续。

小智 8

如果您通过 deb 文件和 dpkg 安装程序,您还可以手动更改已安装 .deb 文件的依赖项。有一次,我被迫采取这种极端措施......

ar x foo.deb
vim control.tar.xz  # see below
ar r foo.deb control.tar.xz
dpkg -i foo.deb
Run Code Online (Sandbox Code Playgroud)

并且 dpkg 不再知道 foo 的依赖关系。在 vim 中,您必须选择 ./control(我使用 vim 来读取打包文件——如果您愿意,可以解包并使用另一个编辑器并重新打包)并从行中删除不需要的依赖项

Depends: foo bar
Run Code Online (Sandbox Code Playgroud)

  • 你最好使用 `dpkg-deb` 而不是 `ar`。`ar` 是一个 dpkg 实现细节,将来可能会改变。 (2认同)

Iai*_*ain 7

Ubuntuforums 上有一个被黑的解决方案。~quack 的解决方案更好,但需要更多的工作。

我在谷歌上找不到任何关于这个的东西,除了编译你自己的“虚拟包”(不卸载损坏的包是不可能的。除非你足够幸运已经有了这些工具),但是搜索我自己的硬盘给了我答案最终!

对于任何想知道的人,这里是如何在不卸载的情况下“解开”突触/aptitude/apt-get 中的包的方法。

首先,记下您安装的软件包,以及它所依赖的软件包,使其处于损坏状态。假设我强制安装了苹果,这取决于不在存储库中的过时软件包:

在终端类型代码中:

sudo gedit /var/lib/dpkg/status

在文件中搜索苹果,直到找到类似以下内容:

代码:

Package: apples
Status: install ok installed
Priority: optional
Section: libs
Installed-Size: 316
Maintainer:
Architecture: i386
Source: applesauce
Version: 1.0.10-1
Depends: packageA, packageB, obsolete
Description: Apples on your desktop!
Run Code Online (Sandbox Code Playgroud)

从 Depends: 行中删除 obsolete,保存文件,然后就完成了。希望这可以帮助一些人。


qua*_*ote 2

在 aptitude 的“首选项”部分(Ctrl-T 进入菜单;在“选项”下),取消选中“依赖项处理”部分中的“在安装或删除之前自动修复损坏的包”选项。这应该会让 aptitude 在每次更改其他软件包时停止尝试修复该软件包。

作为更永久的修复,您应该获取已安装的 Lucid Amsynth软件包的源软件包,以及libatk1libjack0的源软件包,并构建您自己的更新软件包。根据其他用途使用这些库的情况,您可能还需要更新其他软件包,但您可能只需要这些即可。(这本质上是将这些包从 Lucid反向移植到 Karmic ——您应该检查 Karmic-backports 存储库或 PPA,看看是否有人已经这样做了。如果您的新包有效,请考虑将它们发送到 Karmic-backports 供其他人使用。 )