我使用以下方法在 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)
在Ubuntuforums 上有一个被黑的解决方案。~quack 的解决方案更好,但需要更多的工作。
我在谷歌上找不到任何关于这个的东西,除了编译你自己的“虚拟包”(不卸载损坏的包是不可能的。除非你足够幸运已经有了这些工具),但是搜索我自己的硬盘给了我答案最终!
对于任何想知道的人,这里是如何在不卸载的情况下“解开”突触/aptitude/apt-get 中的包的方法。
首先,记下您安装的软件包,以及它所依赖的软件包,使其处于损坏状态。假设我强制安装了苹果,这取决于不在存储库中的过时软件包:
在终端类型代码中:
sudo gedit /var/lib/dpkg/status
在文件中搜索苹果,直到找到类似以下内容:
代码:
Run Code Online (Sandbox Code Playgroud)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!
从 Depends: 行中删除 obsolete,保存文件,然后就完成了。希望这可以帮助一些人。
在 aptitude 的“首选项”部分(Ctrl-T 进入菜单;在“选项”下),取消选中“依赖项处理”部分中的“在安装或删除之前自动修复损坏的包”选项。这应该会让 aptitude 在每次更改其他软件包时停止尝试修复该软件包。
作为更永久的修复,您应该获取已安装的 Lucid Amsynth软件包的源软件包,以及libatk1和libjack0的源软件包,并构建您自己的更新软件包。根据其他用途使用这些库的情况,您可能还需要更新其他软件包,但您可能只需要这些即可。(这本质上是将这些包从 Lucid反向移植到 Karmic ——您应该检查 Karmic-backports 存储库或 PPA,看看是否有人已经这样做了。如果您的新包有效,请考虑将它们发送到 Karmic-backports 供其他人使用。 )