使用 apt-get 忽略特定包的所有依赖项

and*_*oid 19 linux dependencies ubuntu apt

这是一个非常具体的问题,谷歌没有帮助回答。

我正在使用 Ubuntu 13.04 运行apt 0.9.7.7ubuntu4 for amd64 compiled on Oct 3 2013 15:25:56.

我想从 .deb 包安装 Erlang,但我不想拉出它的所有依赖项。包本身指定它依赖于 Java 和 wx 库,但实际上,除非您想与 Java 或 wxWidgets 接口,否则不需要这些库。

我可以像这样安装 Erlang

sudo dpkg -i --force-depends erlang.deb
Run Code Online (Sandbox Code Playgroud)

但是,apt-get由于未满足的依赖关系,随后安装其他任何东西都失败了。所以如果我想在 Erlang 之后安装 git,我会得到以下信息

$ sudo apt-get install -y git
Reading package lists...
Building dependency tree...
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
 esl-erlang : Depends: default-jre-headless but it is not going to be installed or
                       java2-runtime-headless or
                       java1-runtime-headless or
                       java2-runtime or
                       java1-runtime
              Depends: libwxbase2.8-0 but it is not going to be installed
              Depends: libwxgtk2.8-0 but it is not going to be installed
              Recommends: erlang-mode but it is not going to be installed
 git : Depends: libcurl3-gnutls (>= 7.16.2-1) but it is not going to be installed
       Depends: perl-modules but it is not going to be installed
       Depends: liberror-perl but it is not going to be installed
       Depends: git-man (> 1:1.7.9.5) but it is not going to be installed
       Depends: git-man (< 1:1.7.9.5-.) but it is not going to be installed
       Recommends: patch
       Recommends: rsync
       Recommends: ssh-client
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).
Run Code Online (Sandbox Code Playgroud)

有没有办法让esl-erlang包在不运行的情况下关闭apt-get install -f

我想要这样的东西:

sudo apt-get install --ignore-deps-for-package=esl-erlang git
Run Code Online (Sandbox Code Playgroud)

或者像这样:

sudo apt-cache shut-package-up esl-erlang
Run Code Online (Sandbox Code Playgroud)

或这个:

sudo apt-get download git
sudo dpkg -i --with-deps git.deb
Run Code Online (Sandbox Code Playgroud)

我发现了一个类似的问题:https : //serverfault.com/questions/250224/how-do-i-get-apt-get-to-ignore-some-dependencies。一些答案提供了方便的手动步骤来修改某些包的依赖项。

我仍在寻找一种强大的自动化方法。

and*_*ien 37

我理解 bjanssen 的观点,但对于包管理器来说,允许--force-depends安装单个包,但不允许 force-depends-forever-and-stop-warning-me-about-this-dependency似乎很荒谬。

我有一个类似的问题,该软件包依赖于比 Debian 中当前可用的版本略高的 libcairo 版本。就我而言,它仍然可以正常工作。我很高兴继续使用它,直到 libcairo 更新出现在 apt 中。我不想从源代码编译或构建我自己的包。

我找到的解决方案:

  • 编辑/var/lib/dpkg/status
  • 找到依赖项损坏的包
  • 编辑该Depends:行以停止包抱怨。

我假设下次更新包时会被覆盖,但这正是我想要的。

  • 这是完美的,正是我临时解决不正确的 PPA 依赖所需要的! (3认同)

bja*_*sen 1

您尝试做的事情违背了包管理器的目的,包管理器试图保持一个健全的环境,因为您使用了错误的工具来完成这项工作。不要尝试破坏 apt-get。

解决您的问题的正确方法是使用适合您的依赖项构建您自己的包。有官方方法(相当复杂:http://www.debian.org/doc/manuals/maint-guide/index.en.html)和使用快速而肮脏的方法apt-build,或者对于不在发行源中的包,checkinstall。所有的生产包 apt-get 都会愉快地安装。

最后一点,您可能会质疑 esl-erlang 维护者是否明智地包含某些依赖项,但您不能指责包管理器的预期行为。如果您认为这些依赖项是错误的,您应该向包提交错误。