web-dev-qa-db-ja.com

apt-getを使用して特定のパッケージのすべての依存関係を無視する

これは非常に具体的な質問であり、グーグルは答えを助けませんでした。

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

ただし、依存関係が満たされていないため、後で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).

esl-erlangを実行せずにapt-get install -fパッケージをシャットダウンする方法はありますか?

私はこのようなものが欲しい:

Sudo apt-get install --ignore-deps-for-package=esl-erlang git

またはこのように:

Sudo apt-cache shut-package-up esl-erlang

またはこれ:

Sudo apt-get download git
Sudo dpkg -i --with-deps git.deb

同様の質問が見つかりました: https://serverfault.com/questions/250224/how-do-i-get-apt-get-to-ignore-some-dependencies 。いくつかの回答は、特定のパッケージの依存関係を変更するための便利な手動の手順を提供します。

私はまだ堅牢な自動化された方法を探しています。

17
android

私はbjanssenのポイントを理解していますが、パッケージマネージャーが単一のパッケージのインストールに対して--force-dependsを許可するのはばかげているようですが、force-depends-forever-and-stop-warning-me-about-this-dependencyは許可していません。

現在Debianで利用可能なものより少し高いlibcairoバージョンに依存するパッケージで同様の問題がありました。私の目的のために、それはまだうまく働きます。 libcairoのアップデートがaptに表示されるまで、私はそれを使い続けています。ソースからコンパイルしたり、独自のパッケージをビルドしたりしたくありません。

私が見つけた解決策:

  • 編集/var/lib/dpkg/status
  • 壊れた依存関係を持つパッケージを見つける
  • Depends:行を編集して、パッケージのエラーを停止します。

次にパッケージが更新されたときに上書きされると思いますが、それがまさに私が望んでいることです。

32
andrew lorien

あなたがしようとしていることは、パッケージマネージャーの目的に反しています。 o。 w。ジョブに間違ったツールを使用しています。 apt-getを壊そうとしないでください。

問題を解決する正しい方法は、自分に合った依存関係を持つ独自のパッケージをビルドすることです。公式な方法(かなり複雑: http://www.debian.org/doc/manuals/maint-guide/index.en.html )とapt-build、または配布元にないパッケージの場合はcheckinstall。すべての農産物パッケージapt-getは喜んでインストールされます。

最後の注意点として、esl-erlangのメンテナの知恵に疑問を投げかけて特定の依存関係を含めることはできますが、意図した動作についてパッケージマネージャに誤りを犯すことはできません。これらの依存関係が間違っていると思われる場合は、パッケージにバグを報告する必要があります。

2
bjanssen

apt.confの「proxy used」が適切かどうか(つまり、ネットワークに応じて)を確認します。 URLに到達できないため、このような問題も発生します。

通常、プロキシを使用している場合、/etc/apt/apt.confは次のようになります。

Acquire::ftp::proxy "ftp://<user>:<password>@<ip>:<port>/";
Acquire::http::proxy "http://<user>:<password>@<ip>:<port>/";
Acquire::https::proxy "https://<user>:<password>@<ip>:<port>/";
0
parasrish