メタパッケージの正式な定義はありません。非公式の定義では、メタパッケージは依存関係のためにのみインストールされることを意図しており、独自の有用なファイルは含まれていません。
ファイルを含まないパッケージとしてメタパッケージを定義できます。パッケージデータベースからこれを判断する方法はありません。あなたは使用することができ、ファイルのデータベースを、パッケージは、(多くのそのようなパッケージは、いくつかのディレクトリが含まれている)ディレクトリのみが含まれていることを確認してください。実際、ほとんどのメタパッケージには/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 show
1つで実行すると、「パッケージ 'zcav'は純粋に仮想であるため、バージョンを選択できません」と表示されます。実行aptitude show
すると、それを提供するパッケージがリストされます。仮想パッケージを表示する便利な方法はapt-cache
次のとおりです。これにより、非仮想パッケージの場合は1行、仮想パッケージの場合は複数行(プロバイダーごとに1行)が出力されます。プロバイダーの名前が異なるためです。
apt-cache -n search "^$package\$"