web-dev-qa-db-ja.com

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

Apt-getに一部の依存関係を無視させるにはどうすればよいですか?たとえば、mailxをインストールして、cronスクリプト/レポート生成ツールからメールを送信できるようにしたいと考えました。ただし、mailxをインストールするとexim4もインストールされます。依存関係もたくさんあります(すでにPostfixがインストールされています)。本当に必要ないので、mailxがなくても動作すると思います。

いくつかの依存関係を無視して、それでもapt-getを使用するにはどうすればいいですか。

93
FrancisV

シンプルで簡単なソリューション:不要なパッケージを、それぞれの後に-を追加して指定するだけです。

-スイッチなしの例:

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
[...]

avoid installationexim4-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することができます。

51
Jealie

次のようにして、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は、データセクションが終了した場所を検索する必要がある場合、パッケージのメタデータをすばやく読み取ることができません!

57
Janus Troelsen

--ignore-dependsオプションを指定してパッケージをインストールした後、/var/lib/dpkg/statusファイルに移動して編集し、不要と思われる依存関係をすべて削除します。注意してください。命令のために。必要になる可能性が高い[〜#〜] be [〜#〜]必要

34
Manolis

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

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

dpkg --ignore-depends=bar -i foo_1.2.3_AMD64.deb
26
Bart De Vos

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

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

15
stew

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

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
7
AndrewHarvey

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

Apt-getの-nodepsオプションも探していましたが、機能しなかったため、カーネルをアップグレードするたびにgrub *をアンインストール/パージしました。

結局のところ、本当にreading manページが役立つ場合があります-12.04の同様のapt-getオプションは--no-install-recommendsのように見えますが、これは実際にはこの場合に機能します。パッケージ情報に「推奨」としてリストされています(おそらく「実際の」依存関係ではないでしょうか?)。

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

7
memartin

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

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

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

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

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

2
Andy

これの目的のために、あなたは単にインストールすることができます nail これらはこれらの依存関係を持っているとは思いませんか?

apt-get install nail
1
jamespo