Apt-getに一部の依存関係を無視させるにはどうすればよいですか?たとえば、mailxをインストールして、cronスクリプト/レポート生成ツールからメールを送信できるようにしたいと考えました。ただし、mailxをインストールするとexim4もインストールされます。依存関係もたくさんあります(すでにPostfixがインストールされています)。本当に必要ないので、mailxがなくても動作すると思います。
いくつかの依存関係を無視して、それでもapt-getを使用するにはどうすればいいですか。
シンプルで簡単なソリューション:不要なパッケージを、それぞれの後に-
を追加して指定するだけです。
-
スイッチなしの例:
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-get
はexim4-base
パッケージのインストールをこれ以上試行せず、さまざまな依存関係(exim4-config
など)のインストールも試行しません。
そして、あなたが間違っていて、結局そのexim4-base
依存関係が必要な場合は、後でそれをapt-get install
することができます。
次のようにして、debパッケージの依存関係を変更できます。
ar x golden-linux.deb
(つまり、3つのファイルを作成します:debian-binary control.tar.gz data.tar.gz)tar xzf control.tar.gz
(作成されます:postinst postrm preinst prerm md5sums control)control
の依存関係を修正(テキストエディターを使用)tar --ignore-failed-read -cvzf control.tar.gz {post,pre}{inst,rm} md5sums control
ar rcs newpackage.deb debian-binary control.tar.gz data.tar.gz
(重要な順序![注]を参照)[注意]:dpkgは、データセクションが終了した場所を検索する必要がある場合、パッケージのメタデータをすばやく読み取ることができません!
--ignore-depends
オプションを指定してパッケージをインストールした後、/var/lib/dpkg/status
ファイルに移動して編集し、不要と思われる依存関係をすべて削除します。注意してください。命令のために。必要になる可能性が高い[〜#〜] be [〜#〜]必要
--nodeps
でapt-get
フラグを試すことができます。
またはパッケージをダウンロードし、dpkg
とオプション--ignore-depends
を使用してインストールします。
たとえば、依存関係なしでパッケージfoo
をインストールする場合はbar
:
dpkg --ignore-depends=bar -i foo_1.2.3_AMD64.deb
ソースからpostfixをインストールしたので、mailx(またはbsd-mailx)のmail-transport-agent依存関係を満たす「ダミー」パッケージをインストールする必要があります。 debianの「equivs」パッケージは、dpkgに「この依存関係が満たされている」ことを伝えるためにインストールできるダミーパッケージを作成するために存在します
依存関係を単に無視するようにdpkgに指示する理由は良い解決策ではありません。単一のトランザクションでdpkg/aptに無視するように指示しているだけであり、依存関係を永久に無視するように指示できないからです。 aptを使用するたびにallパッケージの依存関係をチェックします
依存関係を手動で調整する別の方法は次のとおりです。
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
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」のヒントはまだ言及されていなかったため、ここに追加します。
Apt-getでパッケージをダウンロードしてから、dpkgでインストールし、無視したい依存関係を手動でリストします。
たとえば、mypackageをダウンロードしたいがlibperl5.14に依存していて、libperl5.14をインストールしたくない場合、別のバージョンを持っているため、次のようにこの依存関係を無視できます。
apt-get download mypackage
dpkg -i --ignore-depends=libperl5.14 mypackage.deb
私のdebianシステムでは、bsd-mailxは実際にはdefault-mta | mail-transport-agent
に依存しています(アーカイブ内のすべての場合はapt-cache show <pkg>
で、パッケージが依存する場合は確認できます。インストール済みパッケージの場合はdpkg -s <pkg>
で確認できます。
PostfixパッケージにProvides: mail-transport-agent
がないため、MTAがインストールされていることをaptが認識していない可能性があります。それが公式パッケージである場合、そのためのバグを提出する価値があります。
これの目的のために、あなたは単にインストールすることができます nail これらはこれらの依存関係を持っているとは思いませんか?
apt-get install nail