AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 621351
Accepted
user879
user879
Asked: 2015-05-09 20:20:10 +0800 CST2015-05-09 20:20:10 +0800 CST 2015-05-09 20:20:10 +0800 CST

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

  • 772

最近我碰巧将我的 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

这么多的依赖问题。哦,我刚刚用谷歌搜索了 GDebi,维基百科有

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

我的奇迹是

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

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

请通俗易懂地解释一下,以便我明白。

apt
  • 3 3 个回答
  • 24071 Views

3 个回答

  • Voted
  1. Best Answer
    Anwar
    2016-08-18T08:12:40+08:002016-08-18T08:12:40+08:00

    实际上gdebi只是一个前端,dpkg具有附加功能,它可以检查存储库中的依赖包并可以一次安装它们,同时dpkg -i需要手动进行两次操作(后来是apt-get -f install)。

    问题一:

    1) gdebi 是怎么做到的?在不使用在配置文件中手动添加的 Apt PPA 链接的情况下安装具有依赖项的 .deb 包?

    作为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在标准 Ubuntu 存储库中具有最高版本,并且这个mother-package依赖于一个名为child-package的版本 2 的包。另外假设,一些 PPA 提供了需要的版本的mother-package,它们都可以通过该 PPA 存储库获得。3.0child-package3.0

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

    因为,查看mother-package-3.0.deb文件,gdebi知道这个mother-package需要version或更高版本的child-package3.0,但它只知道 version 的位置2.0。它不知道从哪里获取子包的版本3.0。这是意料之中的,因为您没有告诉系统您从哪里获得这个最新的母包。换句话说,您没有配置存储库列表以包含该 PPA。

    所以,这个问题的明显答案是It depends。如果可以在已经配置的仓库中找到必要的依赖项,则安装成功。但如果没有,那么它将无法安装这个更高版本的包。这就是您仍然需要 PPA 的原因,这是无需手动完成所有这些操作的最简单方法。

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

    • 18
  2. Moithil Biswas
    2015-05-10T03:23:45+08:002015-05-10T03:23:45+08:00

    我在少数应用程序中遇到了同样的问题,Skype 就是其中之一,它们依赖于需要手动安装的外部包或库文件。

    要解决我使用的问题:

    sudo dpkg -i skype.deb
    

    然后在提示输入外部库后,就像你在输出中一样,我输入:

    sudo apt-get install -f
    

    这将自行下载所需的软件包并安装 Skype。

    • 7
  3. james
    2016-08-16T08:47:14+08:002016-08-16T08:47:14+08:00

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

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

    一旦所有的依赖项都被计算出来并以正确的顺序放置(一些依赖项需要在安装其他依赖项之前安装),apt只需要求安装依赖项。然后安装作为参数提供给 Gdebi 的包。

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

    • 3

相关问题

  • 如何编写 shell 脚本来安装应用程序列表?

  • 如何查看存档中可用的软件包的所有版本?

  • 是否可以说出我安装的哪些软件包不在原版安装中?

  • 如何删除 PPA?

  • 使用 apt-get upgrade 时如何强制安装内核更新?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve