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

最近我碰巧重新安装了我的Ubuntu到Lubuntu 15.04。 所以我正在寻找Skype安装,并得到了这个很好的教程 。

真的很酷。 它从这里下载了skype deb的官方包

由于我没有安装gdebi ,我使用sudo su -c apt-get install gdebi

然后使用gdebi命令安装skype-ubuntu-precise_4.3.0.37-1_i386.deb 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 

这么多的依赖问题。 哦,我只是谷歌搜索GDebi和维基百科

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

我的奇怪是

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

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

请以外行的方式解释,以便我能得到它。

实际上gdebi只是dpkg的前端,增加了它可以检查存储库中依赖包的function,并且可以在一次操作中安装它们,而dpkg -i需要手动进行两次操作(以后是apt-get -f install )。

问题1:

1)gdebi如何做到这一点? install .deb具有依赖关系的包而不使用配置文件中手动添加的Apt PPA链接?

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

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

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

请注意,在系统中配置的至少一个存储库中,必须提供所需的额外软件包(具有适当的版本)。

然后它继续像普通的apt安装。 区别在于它不会重新下载主.deb文件

问题2:

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

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

示例场景:

假设,一个名为mother-package的软件包在标准Ubuntu资源库中具有2.0的最高版本,并且这个母软件包依赖于一个名为child-package的软件包 2.一些PPA提供了3.0版的软件包 。在child-package 3.0 ,它们都可以通过PPA存储库获得。

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

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

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

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

我有几个应用程序的相同问题,skype是其中之一,这些依赖于需要手动安装的外部包或库文件。

要解决我使用的问题:

 sudo dpkg -i skype.deb 

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

 sudo apt-get install -f 

这下载了所需的软件包并自行安装了skype。

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

我不是Python读者,但源代码似乎调用apt来获取该列表。 它显然必须以递归方式下降才能找到依赖关系的依赖关系,但apt显然也可以这样做。

一旦依赖关系全部解决并按正确顺序放置(在安装其他依赖项之前需要安装某些依赖项),就会要求apt安装依赖项。 然后安装了作为Gdebi参数的包。

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