gdebi vs dpkg:gdebi如何自动丢失依赖关系?我可以将gdebi用于.deb软件包的所有其他安装吗?


15

最近我碰巧将我的Ubuntu重新安装到Lubuntu 15.04中。因此,我正在搜索Skype安装并获得了这个不错的教程

真的很棒。从这里下载了Skype Deb的官方包

由于我gdebi尚未安装,因此我使用sudo su -c apt-get install gdebi

然后skype-ubuntu-precise_4.3.0.37-1_i386.deb使用gdebi命令安装sudo su -c gdebi skype-ubuntu*4*.deb

哇,gdebi为我做了所有事情,没有使用传统的Apt PPA手动链接添加就轻松了很多,这很可能也会破坏我的系统更新/软件安装。

但是如果我尝试使用安装 dpkg -i

dpkg -i skype-ubuntu-precise_4.3.0.37-1_i386.deb
Selecting previously unselected package skype.
(Reading database ... 86449 files and directories currently installed.)
Preparing to unpack skype-ubuntu-precise_4.3.0.37-1_i386.deb ...
Unpacking skype (4.3.0.37-1) ...
dpkg: dependency problems prevent configuration of skype:
 skype depends on libc6 (>= 2.3.6-6~).
 skype depends on libc6 (>= 2.7).
 skype depends on libgcc1 (>= 1:4.1.1).
 skype depends on libqt4-dbus (>= 4:4.5.3).
 skype depends on libqt4-network (>= 4:4.8.0).
 skype depends on libqt4-xml (>= 4:4.5.3).
 skype depends on libqtcore4 (>= 4:4.7.0~beta1).
 skype depends on libqtgui4 (>= 4:4.8.0).
 skype depends on libqtwebkit4 (>= 2.2~2011week36).
 skype depends on libstdc++6 (>= 4.2.1).
 skype depends on libx11-6.
 skype depends on libxext6.
 skype depends on libxss1.
 skype depends on libxv1.
 skype depends on libssl1.0.0.
 skype depends on libpulse0.
 skype depends on libasound2-plugins.

dpkg: error processing package skype (--install):
 dependency problems - leaving unconfigured
Processing triggers for hicolor-icon-theme (0.13-1) ...
Processing triggers for mime-support (3.55ubuntu1.1) ...
Processing triggers for desktop-file-utils (0.22-1ubuntu2) ...
Processing triggers for dbus (1.8.8-1ubuntu2.1) ...
Errors were encountered while processing:
 skype

如此多的依赖问题。哦,我刚刚在Google的Google翻译中搜索了Wikipedia,

GDebi是一种APT工具,可以在命令行和GUI上使用。[44] GDebi可以像dpkg命令一样通过命令行安装本地.deb文件,但是可以访问存储库来解决依赖关系

我的奇迹是

(1)gdebi如何安装具有依赖项的.deb软件包,而不使用在配置文件中手动添加的Apt PPA链接?

(2)是否可以使用相同的gdebi命令(sudo su -c gdebi my.deb)来安装所有其他.deb软件包而不添加Apt PPA,还是必须像这样更改格式:sudo su -c my*n*.deb其中n是软件的版本,等等?

请以通俗易懂的方式进行解释,以便我理解。

Answers:


10

实际上,gdebi它只是dpkg带有添加功能的前端,它可以检查存储库中的依赖项程序包,并可以通过一次操作安装它们,而dpkg -i需要手动进行两次操作(以后称为apt-get -f install)。

问题1:

1)这是怎么做的?安装具有依赖项的.deb软件包,而不使用在配置文件中手动添加的Apt PPA链接?

作为dpkg前端,它可以使用的所有功能dpkg。由于每个.deb软件包文件都包含(假设它们没有损坏)有关该deb文件的元数据(如软件包名称,维护者,依赖项等),因此它可以轻松地检查此文件的依赖性。

例如,您可以使用以下方法检查.deb文件的元数据 dpkg --info package-name.deb

然后,它使用这些信息来构造依赖关系映射,并将本地可用的.deb文件标记为已下载,.deb从Internet 下载其他文件。

请注意,这些必需的额外软件包必须在系统配置的至少一个存储库中可用(具有正确的版本)。

然后,它像正常的apt安装一样进行。区别在于它不会重新下载主.deb文件

问题2:

(2)是否可以使用相同的gdebi命令(sudo su -c gdebi my.deb)来安装所有其他deb软件包而不添加PPA?还是我必须更改格式sudo su -c myn.deb,其中n是软件版本等?

PPA存在是有原因的。主要原因是他们提供了最新版本的软件包。这些更高版本的软件包通常也依赖于更高版本的子软件包,这些子软件包通常也由PPA提供,而不是由标准Ubuntu存储库提供。

示例场景:

假设,一个名为mother-package的软件包2.0在Standard Ubuntu存储库中具有最高版本,并且该mother-package依赖于一个名为version 2的child-package的软件包。另外,假设某些PPA提供了on所需的版本的Mother-package。,两者都可以通过该PPA存储库使用。3.0child-package3.0

问题是,如果现在从存储库页面下载mother-package-3.0.deb并尝试使用进行安装gdebi,则会(或gdebi)失败。

因为,在检查mother-package-3.0.deb文件时,gdebi知道该母软件包需要version 或更高版本的子软件包3.0,但是它只知道version的位置2.0。它不知道从哪里获取版本3.0儿童安全包装的。这是可以预期的,因为您没有告诉系统您从哪里获得了最新的母软件包。换句话说,您没有将存储库列表配置为包括该PPA。

因此,该问题的明显答案是取决于如果可以在已配置的存储库中找到必要的依赖项,则安装将成功。但是,如果没有,那么它将无法安装此更高版本的软件包。这就是为什么您仍然需要PPA的原因,这是无需手动执行所有这些操作的最简单方法。

第二个问题的第二部分对我来说没有意义


5

对于少数几个应用程序,我也遇到了同样的问题,其中Skype是其中之一,它们取决于需要手动安装的外部软件包或库文件。

解决我使用的问题:

sudo dpkg -i skype.deb

然后在提示您输入输出中的外部库之后,我输入:

sudo apt-get install -f

这将下载所需的软件包并单独安装了Skype。


2

在每个.deb软件包中,都有一个依赖项列表(带有兼容的版本号)。

我不是Python阅读器,但源代码似乎调用了apt该列表。显然必须递归地找到依赖关系的依赖关系,但apt显然也可以做到这一点。

一旦解决了所有依赖关系并以正确的顺序放置了它们(需要安装一些依赖关系,然后才能安装其他依赖关系),apt只需简单地安装依赖关系即可。然后安装作为Gdebi的参数提供的软件包。

出于两个原因,依赖项和目标软件包在两个操作中安装。首先,安装本地.deb的apt调用的格式不同于从存储库安装依赖项的apt调用的格式。其次,分开调用确保所有依赖项都已安装在目标软件包之前。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.