コマンドラインからパッケージがメタパッケージであるかどうかを判断する方法は?


14

パッケージがメタパッケージであるかどうかをコマンドラインから、おそらくapt-get、aptitude、またはapt-cacheを使用して確認するにはどうすればよいですか?

私が試してみました:

apt-cache show texlive-full
apt-cache showpkg texlive-full

しかし、このパッケージにメタを伝えることができる唯一の方法は、「en-description」フィールドを読むことです。

これを行うためのより自動化された方法はありますか?それは私にyes / no応答を与えますか、または少なくともこれに専用の「en-description」などのフィールドがありますか?


1
この質問と回答が非常に興味深いという事実は別として、なぜあなたはこれを知りたいのですか?
ジョー

1
私はapt-getでのものをインストールしていましたが、メタパッケージ(texlive-full)をインストールすると、必要な依存関係がインストールされますが、メタパッケージをアンインストールすると、依存関係はそのまま残ります(apt-get install texlive-full、 apt-get purge texlive-full; apt-get autoremove)。次に、これはメタパッケージbrainstorm.ubuntu.com/idea/17785の場合にのみ当てはまることがわかりました。一方、aptitudeはメタパッケージから不要な依存関係を削除します。
Ciro Santilli新疆改造中心法轮功六四事件

回答:


7

メタパッケージの正式な定義はありません。非公式の定義では、メタパッケージは依存関係のためにのみインストールされることを意図しており、独自の有用なファイルは含まれていません。

ファイルを含まないパッケージとしてメタパッケージを定義できます。パッケージデータベースからこれを判断する方法はありません。あなたは使用することができ、ファイルのデータベースを、パッケージは、(多くのそのようなパッケージは、いくつかのディレクトリが含まれている)ディレクトリのみが含まれていることを確認してください。実際、ほとんどのメタパッケージには/usr/share/doc/<package name>copyrightファイル、変更ログ、場合によってはさらにいくつかのファイルが含まれています。以下は、メタパッケージを/usr/share/doc/<some directory>(そのサブディレクトリではなく)のファイルと主要なディレクトリのみを含むと定義する近似です:

if ! apt-file -F list $package | grep -qvE '^/(usr(/share(/doc(/[^/]*(/[^/]*)?)?)?)?)?$'; then
  echo "$package looks like a metapackage"
fi

別のアプローチは、探すためにあるパッケージタグ付きdebtags。メタパッケージで一般的に使用されるタグがいくつかあります。

debtags tag ls $package | grep -x -e 'role::metapackage' -e 'role::dummy' -e 'special::meta'

別のアプローチは、サイズの小さいパッケージを探すことです。各ディレクトリは4 kBとしてカウントされるため、しきい値を選択するときはそれに応じて計画してください(これも概算です)。

aptitude -F '%I %p' search "~n^$package\$"

振り返ってみると、メタパッケージではなく仮想パッケージを意味しているのでしょうか。仮想パッケージは実際にはパッケージではなく、Provides:フィールドで使用されるパッケージ名です。でリストできますaptitude search '~v'apt-cache show1つで実行すると、「パッケージ 'zcav'は純粋に仮想であるため、バージョンを選択できません」と表示されます。実行aptitude showすると、それを提供するパッケージがリストされます。仮想パッケージを表示する便利な方法はapt-cache次のとおりです。これにより、非仮想パッケージの場合は1行、仮想パッケージの場合は複数行(プロバイダーごとに1行)が出力されます。プロバイダーの名前が異なるためです。

apt-cache -n search "^$package\$"

これらの方法に感謝します:借金については知りませんでした!また、apt-getを使用してメタパッケージをインストールすると、各依存関係を個別に手動でインストールしたようになります。つまり、元のパッケージを削除してもすぐには依存関係が削除されず、通常のパッケージではremoveインストールされた依存関係を削除します。これは本当ですか?もしそうなら、どのようにapt-getは違いを伝えることができますか?これも悪用される可能性があります...(aptitudeはそのメタかどうかは気にしないようですが、これは本当ですか?)
Ciro Santilli新疆改造中心法轮功六四事件

@cirosantilli依存関係を自動的に削除する機能は、メタパッケージとは無関係です。これは、パッケージを明示的に要求しない場合、自動的にインストール済みとしてマークさ、それに依存するパッケージがインストールされていない場合、自動インストール済みとしてマークされたパッケージが削除されるためです。参照してくださいapt-get autoremoveaptitude (un)markautoM適性対話型インタフェースでコマンド。
ジル「SO-悪であるのをやめる」

@cirosantilli振り返ってみると、メタパッケージではなく仮想パッケージでしたか?更新された回答をご覧ください。
ジル「SO-悪であるのをやめる」

仮想パッケージについては本当に知りませんでしたが、apt-cache show texlive-fullは通常の結果を表示するため、texlive-fullは仮想ではないと思います。私がやった後にそうであっても、apt-get install texlive-fullapt-get purge texlive-full; apt-get autoremoveインストールされているすべての依存関係を削除しませんでした。これは、texlive-fullがメタパッケージだったためであり、これがメタパッケージの通常の動作であるとどこかで読みましたが、これは間違っている可能性があります。一方、aptitudeは自動インストールされた依存関係をうまく削除するように見えました。
Ciro Santilli新疆改造中心法轮功六四事件

2

入ってみてください

apt-cache search 'metapackage | meta-package'

これにより、長いリストが表示され、次のように使用grepして、すべての科学関連のメタパッケージを表示します。

apt-cache search 'metapackage | meta-package' | grep -i science

これは長いリストを返します(ここで短縮しました)

science-astronomy - Debian Science Astronomy packages
science-astronomy-dev - Debian Science Astronomy-dev packages
science-biology - Debian Science Biology packages
science-chemistry - Debian Science Chemistry packages
science-dataacquisition - Debian Science data acquisition packages
science-dataacquisition-dev - Debian Science data acquisition development packages
science-distributedcomputing - Debian Science Distributed Computing packages
science-electronics - Debian Science Electronics packages
science-electrophysiology - Debian Science packages for Electrophysiology
science-engineering - Debian Science Engineering packages
science-engineering-dev - Debian Science Engineering-dev packages
science-geography - Debian Science Geography packages
science-highenergy-physics - Debian Science High Energy Physics packages

KDEすべてのKDEメタパッケージを検索するなど、科学のさまざまな選択肢を使用できます。

これはおそらくあなたができる最善の方法ですがapt-cache、探したいメタパッケージのほとんどをすばやく見つけることができます。探しているものがすべて正確に見つからない場合、最も簡単なのはのメタパッケージセクションを調べることですSynaptic

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