web-dev-qa-db-ja.com

apt-getを使用して特定のパッケージをインストールから除外するにはどうすればよいですか?

apt-getを使用して特定のパッケージをインストールから除外します。つまり、特定のパッケージのリストなしで、できればapt-getを1回呼び出してメタパッケージをインストールします。

たとえば、Ubuntu 14.04 LTSコマンドラインでは、MATEデスクトップ環境をインストールしています。 14.04では、LTS MATEは公式フレーバーではないため、PPAを追加しています。

Sudo apt-get install software-properties-common # need them for 'apt-add-repository'
Sudo apt-add-repository ppa:ubuntu-mate-dev/ppa
Sudo apt-add-repository ppa:ubuntu-mate-dev/trusty-mate
Sudo apt-get update

次にインストール:

Sudo apt-get install xorg mate-core --no-install-recommends

推奨される追加機能がなくても、mate-coreは3つの端末エミュレーターをインストールします:xtermuxtermおよびmate-terminal 、後者はこの最小構成でインストールされている間、適切なフォントを欠いています。

3つの端末プログラムが多すぎると判断し、xorgおよびmate-corewithoutxtermおよびmate-terminalをインストールするとします。私はそれをできた

Sudo apt-get install xorg mate-core --no-install-recommends
Sudo apt-get purge xterm mate-terminal

しかし、これを一度に行うことは可能ですか?のようないくつかの構文はありますか

Sudo apt-get install xorg mate-core --without xterm mate-terminal
11

そのため、 mate-coredependsmate-desktop-environment-coreに依存し、これは順番にmate-terminalで。 dependは簡単には壊れません。 apt-getaptitude--withoutまたは--excludeオプションをサポートしておらず、パッケージを「保持」しても役に立ちません。

 $ echo "mate-terminal hold" | Sudo dpkg --set-selections 
 $ Sudo apt-get install mate-core 
 [...] 
一部のパッケージをインストールできませんでした... 
次のパッケージには、満たされていない依存関係があります。

もちろん、dpkg --force-dependsを使用してパッケージをインストールすることもできますが、それはおそらくあなたが望むものではないでしょう。

可能性は、ダミーパッケージでDepends:フラグをいっぱいにすることです:

 $ Sudo apt-get install equivs 
 $ equivs-control mate-terminal 
 $ vi mate-terminal 
セクション:misc 
 Priority:オプション
標準バージョン:3.9.2 
パッケージ:mate-terminal 
バージョン:1.8.0 
説明:mate-terminalのダミーパッケージ
 :x 
 
 $ equivs-build mate-terminal 
 $ Sudo dpkg -i mate-terminal_1.8.0_all.deb 

これで、mate-coremate-terminalなしでインストールできるはずです。除外する他のパッケージについても同じ手順を繰り返します。

確かに、これはかなりの努力であり、--withoutオプションがいいでしょう。多分 ウィッシュリストのバグ を開いて将来そのような機能を提供できるかもしれませんが、どういうわけかこれが実装されることを疑います。

ただし、より現実的なオプションは、 PPA所有者 に請願して、MATEに別のメタパッケージを提供し、Dependsパッケージセットを少なくすることです。

6
ckujau

aptitudeまたはグラフィカルパッケージマネージャー(Synapticなど)を使用する場合、インストールするパッケージの選択を解除できます限り依存関係の問題は発生しません。

aptitudeの場合、パッケージをインストールする前に(グラフィカルビューで)、依存パッケージがインストールされている理由が表示されます。私の場合、KDEを使用しているため、MATEパッケージはありません。 mate-coreをインストールするように指示すると、次のメッセージが表示されます。

enter image description here

mate-coreは手動でインストールされているとマークされており、他の多くのパッケージがインストールされていることに注意してください。 mate-terminalパッケージの場合、一番下に「mate-desktop-environment-core [universe]はmate-terminal(> = 1.0.0)に依存しています」とあります。 mate-desktop-environment-coreのエントリに移動して、

enter image description here

mate-core [universe]はmate-desktop-environment-coreに依存しています(> = 1.8.0 + 9)」。これがmate-terminalがインストールされている理由です。

代わりに、(別のパッケージに依存しているものではなく)推奨パッケージがインストールされている場合、aptitudeがそれを通知し、破損した依存関係なしにそのパッケージをインストールしないように指示できます。例えば:

enter image description here

3
saiarcot895

別の方法

他に依存するメインパッケージをダウンロードします。パッケージを抽出し、不要な依存関係を削除して、再パックします。 gdebiパッケージインストーラーで新しいパッケージを開きます。新しい依存関係がインストールされます。

  • 依存関係のリストは、DEBIAN/control->にあります。 依存
  • Debpacingのヘルプについては、PPAの作成方法についての私の答えを参照してください
2
totti

このようなシナリオには特別なapt構文があります。パッケージにハイフン(マイナス記号)を追加するとパッケージが削除/インストールされないため、Sudo apt-get install xorg mate-core --without xterm mate-terminalに最も近いのはSudo apt-get install xorg mate-core xterm- mate-terminal-です https://askubuntu.com/a/1011439/18292

あなたはに遭遇するので、この場合には役に立ちません

The following packages have unmet dependencies:
 mate-desktop-environment-core : Depends: mate-terminal (>= 1.20) but it is not going to be installed                                                                        
E: Unable to correct problems, you have held broken packages.

しかし、それはあなたの特定の質問に対する答えのようです。参考のために、このクロスポスト。

0
eMPee584