在linux上安装软件时如何解决循环依赖?

时间:2017-01-15 17:05:50

标签: linux google-chrome installation ubuntu-14.04 circular-dependency

我是计算机世界的新手。 我的目的是找出一种在Linux上安装新软件时解决循环依赖关系的通用方法(如果存在)。在这里,我使用谷歌浏览器的情况来更好地说明我的问题。在安装Google Chrome时(使用包管理器和apt-get)我遇到以下问题:

Selecting previously unselected package google-chrome-stable.
(Reading database ... 262709 files and directories currently installed.)
Preparing to unpack google-chrome-stable_current_amd64.deb ...
Unpacking google-chrome-stable (55.0.2883.87-1) ...
dpkg: dependency problems prevent configuration of google-chrome-stable:
google-chrome-stable depends on libappindicator1; however:
Package libappindicator1 is not installed.

要解决上述错误,我尝试安装libappindicator1,但会返回另一个依赖项错误:

The following packages have unmet dependencies:
libappindicator1 : Depends: libindicator7 (>= 0.4.90) but it is not going to be installed

现在我们遇到循环依赖。尝试安装libindicator7时收到以下错误:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
 google-chrome-stable : Depends: libappindicator1 but it is not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

正如您所看到的,由于依赖性,我无法安装软件包。现在一种方法是使用apt-get -f install让Linux神奇地做它的工作。但那不会教会我很多东西。使用这个例子(或建议一个更好的例子),我们能找到一种更好的方法来解决循环依赖问题吗?如果这是一个独立的循环依赖情况安装新软件,或者我在解释错误时犯了错误,那么我可以删除这个问题。

一些有用的链接 -

[1]:https://askubuntu.com/questions/764040/im-having-a-hard-time-installing-google-chrome-on-16-04-lts-please-help [2]:How to solve Cyclic Dependency [3]:How to Solve Circular Dependency [4]:cyclic dependency ... how to solve?

2 个答案:

答案 0 :(得分:2)

问题是使用dpkg来安装google-chrome-stable。 DPKG现在安装所需的依赖项并使系统处于损坏状态。

sudo apt install ./google-chrome-stable.deb

这会安装包含所需依赖项的包。

dpkg 只安装一个软件包,因此执行dpkg -i packageName.deb只会安装此Deb软件包,并会通知您需要安装的任何依赖项,但它会不安装它们,并且它不会配置packageName.deb,因为那些依赖关系不存在。

apt 是一个包管理系统,用于处理基于Debian的Linux发行版上Deb包的安装。包管理系统是一组工具,可以帮助您轻松地安装,删除和更改包。所以apt就像一个聪明的dpkg

答案 1 :(得分:2)

DPKG是自由操作系统Debian及其众多衍生产品中软件包管理系统基础的软件。 dpkg用于安装,删除和提供有关.deb软件包的信息。 dpkg(Debian Package)本身就是一个低级工具。 [1]

APT(用于高级软件包工具)是一组用于管理Debian软件包的工具,因此也是Debian系统上安装的应用程序。 APT可以安装应用程序,删除应用程序,让您的应用程序保持最新等等。[2]

因此,如果您逐步安装

  1. 下载.deb包后,您可以将其解压缩。解压缩包含的control.tar.gz文件。你会找到一套所有必需的包。

  2. 查找特定Debian软件包的所有依赖项。对于谷歌浏览器,你会有像

  3. 这样的东西

    Package: google-chrome-stable Version: 55.0.2883.87-1 Architecture: amd64 Maintainer: Chrome Linux Team <chromium-dev@chromium.org> Installed-Size: 175549 Pre-Depends: dpkg (>= 1.14.0) Depends: gconf-service, libasound2 (>= 1.0.16), libatk1.0-0 (>= 1.12.4), libc6 (>= 2.11), libcairo2 (>= 1.6.0), libcups2 (>= 1.4.0), libdbus-1-3 (>= 1.1.4), libexpat1 (>= 2.0.1), libfontconfig1 (>= 2.9.0), libfreetype6 (>= 2.3.9), libgcc1 (>= 1:4.1.1), libgconf-2-4 (>= 2.31.1), libgdk-pixbuf2.0-0 (>= 2.22.0), libglib2.0-0 (>= 2.26.0), libgtk2.0-0 (>= 2.24.0), libnspr4 (>= 2:4.9-2~) | libnspr4-0d (>= 1.8.0.10) | libnspr4 (>= 4.9.5-0ubuntu0), libnss3 (>= 2:3.13.4-2~) | libnss3-1d (>= 3.12.4), libpango1.0-0 (>= 1.14.0), libstdc++6 (>= 4.8.0), libx11-6 (>= 2:1.4.99.1), libx11-xcb1, libxcb1 (>= 1.6), libxcomposite1 (>= 1:0.3-1), libxcursor1 (>> 1.1.2), libxdamage1 (>= 1:1.1), libxext6, libxfixes3, libxi6 (>= 2:1.2.99.4), libxrandr2 (>= 2:1.2.99.3), libxrender1, libxss1, libxtst6, ca-certificates, fonts-liberation, libappindicator1, libnss3 (>= 3.17.2), lsb-base (>= 4.1), xdg-utils (>= 1.0.2), wget Provides: www-browser Section: web Priority: optional Description: The web browser from Google Google Chrome is a browser that combines a minimal design with sophisticated technology to make the web faster, safer, and easier.

    1. 您需要安装该特定包的所有依赖项。每个依赖项可能依赖于一组其他依赖项。您将拥有这些依赖项的树。您可以手动安装所有这些依赖项,也可以使用aptyumaptitude ...

    2. 之类的内容
    3. 这些软件包管理器会为您做什么,他们会为您构建一个依赖树,并在安装Debian软件包之前安装所有相关软件包。

    4. 因此,理想情况下,依赖关系树中不应该存在任何循环,但可能是某些现有软件包已经安装并且处于当前安装的较新/旧版本的情况下,并且是必需的软件包。已安装的已安装包。然后你可以在循环依赖循环中结束。

      因此,[3]中提到了apt如何处理循环依赖关系,我认为您可以将其视为手动求解依赖关系的通用算法,但不建议这样做。循环依赖发生在存储库中,但是那些依赖于某些特定规则。通常,这些是紧密绑定的包。因此,它们之间的Depends关系指定了确切的版本号。

      1. https://en.wikipedia.org/wiki/Dpkg
      2. https://wiki.debian.org/Apt
      3. https://web.archive.org/web/20150905091555/http://algebraicthunk.net/~dburrows/blog/entry/from-blogspot/2005-05-09--21:30:00/