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


16

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

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

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

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


--nodepsapt-get)を試し--ignore-dependsましたdpkgか?
マイク・コッホ

回答:


27

私はbjanssenのポイントを理解していますが、パッケージマネージャーが--force-depends単一のパッケージのインストールを許可するのはばかげているように見えますが、この依存関係については常に依存し、強制的に停止することはできません。

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

私が見つけた解決策:

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

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


2
これは完璧で、誤ったPPA依存関係を一時的に回避するために必要なものです!
カス

2

あなたがやろうとしていることは、健全な環境を維持しようとするパッケージマネージャーの目的に反しています。apt-getを壊そうとしないでください。

問題を解決する正しい方法は、あなたに合った依存関係を持つ独自のパッケージを構築することです。公式の方法(非常に複雑です:http : //www.debian.org/doc/manuals/maint-guide/index.en.html)と、を使用した迅速でダーティな方法apt-build、または配布ソースにないパッケージの場合、checkinstall。apt-getのすべてのプロデュースパッケージが正常にインストールされます。

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


「パッケージマネージャーの目的」についてあなたが言ったことは基本的に真実ですが、どちらも一般化すべきではありません。例を挙げたいと思います。1つのアプリケーションが必要ですlibmng1。しかし、私はlibmng2インストールし、シンボリックリンクをに設定しましたlibmng1.so。脅威に取り組み、問題は一度もありませんでした。しかし、apt-get常に「満たされていない依存関係」について不平を言っていました。したがって、この点で適性を沈黙させる方法を見つけようとすることには、間違いなく正当な理由があります。物事機能するので、単に問題でないことについて不平を言い続けます。問題がない場合にのみ問題が表示されます。そしてそれは迷惑です。
構文エラー14

これは奇妙な状況です。非配布リポジトリからパッケージをインストールしたと思いますか?そのような場合は、equivsapt-getを中断せずに「サイレンシング」してください。
-bjanssen

まあ、それはそのようだったかもしれません。しかし、実際にはそうではありませんでした...私は単に同じディストリビューションから古いパッケージをインストールしたので、Ubuntuの用語では15.xでしたが、12.04 LTSからlibmng1をインストールしました。
構文エラー

0

「プロキシが使用されている」かどうかを確認します apt.confが適切ます(つまり、ネットワークに応じて)。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>/";
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.