apt-getに依存関係を無視させるにはどうすればよいですか?


86

apt-getに依存関係を無視させるにはどうすればよいですか?たとえば、mailxをインストールして、cronスクリプト/レポート生成ツールからメールを送信できるようにしました。ただし、mailxをインストールすると、exim4と依存関係全体もインストールされます(既にPostfixがインストールされています)。実際には必要ありません。

いくつかの依存関係を無視しますが、素晴らしいツールなので、apt-getを使用するにはどうすればよいですか


postfixはどのようにインストールされますか?debianパッケージ経由?または、ソースからpostfixをインストールしましたか?
シチュー

はい、Postfixはソースからインストールされました
FrancisV

3
Debianのmailxパッケージはexim4を「推奨」するだけで、それを必要としません。推奨パッケージをインストールしたくない場合は、に追加APT::Install-Recommends "false";してくださいapt.conf
ruief 14年

unix.stackexchange.comでこれに対する満足のいく答えを見つけました。unix.stackexchange.com/a/404449/23542
artfulrobot

回答:


45

シンプルで簡単な解決策:不要なパッケージを指定し、-各パッケージの後に余分なものを追加します。

-スイッチなしの例:

root@debian:~# apt-get install bsd-mailx 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  exim4-base exim4-config exim4-daemon-light liblockfile-bin liblockfile1
[...]

インストール回避するためにスイッチを使用する例exim4-base-最後に注意してください:

root@debian:~# apt-get install bsd-mailx exim4-base-
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package 'exim4-base' is not installed, so not removed
The following extra packages will be installed:
  liblockfile-bin liblockfile1 ssmtp
[...]

ご覧のとおりapt-getexim4-baseパッケージのインストールはもう試みませんexim4-config。また、さまざまな依存関係(など)のインストールも試みません。

そして、あなたが間違っていて、exim4-base結局その依存関係が必要な場合はapt-get install、後でそれを行うことができます!


5
これは、特定の依存関係をインストールないようにする最良の方法です。他の答えは、すべての依存関係のインストールを避けるか、インストール後に依存関係をアンインストールするか、面倒なパッケージの編集を提案します。
ニール

1
これはまさに私が必要としていたものでした!(X depsを回避するためにインストールgnupg2せずpinentry-gtk2に)
-lapo

しかし、これは本当に素晴らしいことです。私の場合、apt-getは「アンメット依存関係」(このメソッドを使用して指定した)でパッケージのインストールを拒否します。具体的には、気にしない100メガバイトのドキュメントパッケージです。
ロルフ

3
必須の依存関係ではなく、オプションの依存関係でのみ機能します。エラーrmessage: Depends: xxx but it is not going to be installedapt-get install --no-install-recommends PACKAGE
-koppor

また、仮想パッケージでは機能しません。ただし、unix.stackexchange.com
a

55

debパッケージの依存関係は次のように変更できます。

  1. debを展開しar x golden-linux.debます:(つまり、3つのファイルを作成します:debian-binary control.tar.gz data.tar.gz)
  2. コントロールアーカイブの解凍:(tar xzf control.tar.gz作成するもの:postinst postrm preinst prerm md5sums control)
  3. 依存関係を修正control(テキストエディターを使用)
  4. control.tar.gzを再パックします。 tar --ignore-failed-read -cvzf control.tar.gz {post,pre}{inst,rm} md5sums control
  5. debの再梱包:(ar rcs newpackage.deb debian-binary control.tar.gz data.tar.gz重要な順序![注]を参照)

[注意]:dpkgは、データセクションが終了した場所を検索する必要がある場合、パッケージのメタデータをすばやく読み取ることができません。


2
ニース、それは私に "raring8"から "raring6"への依存関係の特別なケースを解決しますが、同じバージョン=(、非常に感謝
フェリペアルカシバル

1
私からも感謝します。にlibmng1.so.1設定されたシンボリックリンクで完全に動作したにもかかわらず、アプリケーションが必要だったため、これを使用する必要がありましたlibmng1.so.2apt-get口をきくことができず、満たされていない依存関係について私をいらいらさせ続けることができました(まったく関係のないものをインストールする場合でも!)。なんというごみの概念。
構文エラー14

+1これは私にとっても完璧に機能しました。パッケージがgnome-settings-daemon欲しかったgnome-settings-daemon-schemas=3.8.6.1-0ubuntu11が、私はすでに持っていたgnome-settings-daemon-schemas=3.8.6.1-0ubuntu11.2(<-最後に ".2"に注意)。この手順により、パッケージを編集し、新しいバージョンの11.2を使用するように強制できました。ありがとうございました!
エリックダンカン

1
素晴らしい解決策、ありがとう。ステップ2と4を少し変更しました。2。FILES=$(tar zxvf control.tar.gz)ファイルリストを変数に保存します。4 tar zcf control.tar.gz $FILES.-(変更後)元のファイルリストを使用して、パイプまたはリダイレクトなしで単一ステップでアーカイブを作成します。
ブレット

2
別のカップルの提案。#4:コマンドラインの残りの行方不明のファイル--ignore-failed-readtar無視するように追加します。(例えばprermpostrm多くのパッケージは存在しない。)また、tarボールとすることができる.xzのではなく、.gzDebianアーカイブフォーマットの新しいバージョン(例えば、中data.tar.xz)。
ダンLenski

33

--ignore-depends オプションを指定してパッケージをインストールしたら、/var/lib/dpkg/statusファイルを編集して、不要と思われる依存関係を削除します。非常に注意してください。順番に 要求されるように、それは可能性以上のものですBE必要


3
更新後/var/lib/dpkg/status、インストールを終了する必要がある場合がありますsudo apt-get -f install(パッケージを指定する必要はありません)。
ズミシエザレズニセンカ

また、ここで見つける:superuser.com/a/815371/127024
ヨハン

これは私にゾッとさせますが、完璧に働きました!
デビッドシュミット

25

--nodepsフラグを試すことができapt-getます。
またはdpkg、オプションを使用してパッケージをダウンロードしてインストールします--ignore-depends

たとえば、foo依存関係なしでパッケージをインストールする場合bar

dpkg --ignore-depends=bar -i foo_1.2.3_amd64.deb

52
どのAPTバージョンをお持ちですか?私(0.8.10)にはそのようなオプションはありません。
シェパン

8
依存関係を無視するようにdpkgに指示することは彼にとって選択肢ではありません。このトランザクションの依存関係を無視するようにdpkgに指示するだけで、次に何かをするときに依存関係を満たすか、パッケージを削除しようとします。
シチュー

2
APT 0.8.16 BTWではまだ運がありません。合理的な代替手段がないように思えるので、残念です。これを機能させるために、2011年にどのバージョンを使用しましたか?
クリスチャン

2
apt-getダウンロードを使用してからdpkgを使用できます
フレデリックロス

7
--no-install-recommends私のために働いた。
オルハーステット

14

ソースからpostfixをインストールしたので、mailx(またはbsd-mailx)のmail-transport-agent依存関係を満たす「ダミー」パッケージをインストールする必要があります。debianの「equivs」パッケージは、dpkgに「この依存関係が満たされている」ことを伝えるためにインストールできるダミーパッケージを作成するために存在します。

単に依存関係を無視するようにdpkgに指示するのは良い解決策ではありません。dpkg/ aptに単一のトランザクションに対してのみ無視するように指示しているだけで、永久に依存関係を無視するように指示できないからです。aptを使用するたびに、すべてのパッケージの依存関係がチェックされます


2
また、(それは非常に複雑であるが)のチュートリアルにリンクするこの回答を参照してくださいsuperuser.com/a/416560/128960を。短いバージョン:run equivs-control <name>、生成されたファイルを編集して正しい依存関係を提供し、適切な名前を付けてから実行しequivs-build <name>、最後dpkg -iに結果の.debファイルを作成します。
クリスチャン

1
私見これは本当に素晴らしい解決策です。ここで要求されている他のすべてのソリューションは、少しハッキングされています。これは一度だけ行う必要があり、その後、自己コンパイルされたソフトウェアに応じて任意のソフトウェアをインストールできます...それでは、この答えに賛成しましょう!
rugk

7

Xenを実行しているUbuntu 12.04サーバーでこのオプションを探していました。私のドメインでは、-virtual kernelを使用し、aptはカーネルパッケージのアップグレードごとにgrubを永続的にインストールしようとしました。ただし、p [yv] grubを使用する場合、domU内でGrubは必要ありません。

私はapt-getの-nodepsオプションも探していましたが、機能しなかったため、各カーネルのアップグレード後にgrub *をアンインストール/削除することになりました。

結局、実際にマニュアルページを読むと時々助けになります-12.04で同様のapt-getオプションが--no-install-recommendsであることが判明しました。これはgrubがパッケージ情報(「本当の」依存関係ではないでしょうか?)

私の場合、同様の問題を解決し、「-no-install-recommends」のヒントがまだ言及されていないため、ここに追加します。


6

apt-getでパッケージをダウンロードし、dpkgでインストールして、無視したい依存関係を手動でリストすることができます。

たとえば、mypackageをダウンロードしたいがlibperl5.14に依存していて、異なるバージョンを持っているのでlibperl5.14をインストールしたくない場合、次のようにこの依存関係を無視できます。

apt-get download mypackage
dpkg -i --ignore-depends=libperl5.14 mypackage.deb

ただこれがあなたに適切な「壊れた」ままになることを言及するために。不足している依存関係を修正するまで、他のパッケージをインストールできません。
drpexe

6

依存関係を手動で調整する別の方法は次のとおりです。

apt-get download yourpackage
dpkg-deb -x yourpackage.deb PackageFolder
dpkg-deb --control yourpackage.deb PackageFolder/DEBIAN
vim PackageFolder/DEBIAN/control
dpkg -b PackageFolder yourpackage2.deb
apt-get install ./yourpackage2.deb

2

私のdebianシステムでは、bsd-mailxは実際に依存していdefault-mta | mail-transport-agentます(apt-cache show <pkg>アーカイブ内またはdpkg -s <pkg>インストールされたパッケージについて、パッケージが依存しているものを確認できます)。

postfixパッケージにProvides: mail-transport-agentないため、MTAがインストールされていることにaptが気付かない可能性があります。公式のパッケージであれば、そのためのバグを提出する価値があります。


1

この目的のために、これらの依存関係があるとは思わないをインストールするだけですか?

apt-get install nail

-5

まあ-しないでください。

他の人の作品を使用することは、成功への道において非常に重要です。ソース(tarball)からソフトウェアをビルドすると、ディストリビューションのパッケージマネージャーの作業を使用する機会が失われます。

「無料」の更新プログラムは取得できません。ほとんどの場合、ソースからインストールしたパッケージを更新することはありません。新しいバージョンのソフトウェアを追跡する必要があるため、ソフトウェアとすべての依存プログラムを再構築します(覚えておいてください)。

ディストリビューションのリポジトリから他のパッケージに問題が発生します。これは質問で述べられているとおりです。ubuntuには優れたパッケージマネージャーと、パッケージを保守している非常に優れた人々がいます。そして彼らは、mailxプログラムが機能するためにはMTAが必要であると判断しました。したがって、ソースからpostfixをインストールした場合、ubuntuはeximのインストールを要求しません。

何らかの理由で、サーバーのメンテナンスが他の人に渡した場合、彼は自然に実行することを期待されます(たとえば、あなたのプロジェクトは非常に成功すると、あなたが他のものと忙しいながらマネージャーに別の男にサーバを雇うことにした)dpkg --get-selectionsすべて取得するにはインストール済みパッケージ。

ディストリビューションのパッケージ管理ソフトウェアをできるだけ使用するようにしてください。事前にビルドされたパッケージが見つからない場合、独自のパッケージをビルドする方法を学び、より優れた専門家になることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.