検索

6.2. ブール型依存関係のサポート

download PDF

バージョン 4.13 以降では、RPM は以下の依存関係でブール式を処理できます。

  • Requires
  • Recommends
  • Suggests
  • supplements
  • Enhances
  • Conflicts

このセクションでは、ブール値の依存関係構文 を説明し、ブール値演算子 のリストを紹介して、ブール値の依存関係のセマンティクス およびブール値の 依存関係のセマンティクス について説明します。

6.2.1. ブール値の依存関係構文

ブール値は、常に括弧で囲まれています。

これは、通常の依存関係から構築されます。

  • 名前のみまたは名前
  • 比較
  • バージョンの説明

6.2.2. ブール値の演算子

RPM 4.13 では、以下のブール値演算子が導入されました。

表6.2 RPM 4.13 で導入されたブール値演算子
ブール値演算子説明使用例

and

用語が真となるには、すべてのオペランドを満たす必要があります。

Conflicts: (pkgA and pkgB)

または

用語が真となるには、いずれかのオペランドを満たす必要があります。

Requires: (pkgA >= 3.2 or pkgB)

if

第 2 のオペランドが満たされる場合、第 1 オペランドも満たされる必要があります (リバースインプリケーション)

Recommends: (myPkg-langCZ if langsupportCZ)

if else

if 演算子と同じで、2 番目のオペランドが一致しない場合は、第 3 オペランドが満たされる必要があります。

Requires: myPkg-backend-mariaDB if mariaDB else sqlite

RPM 4.14 では、以下のブール値演算子がさらに導入されています。

表6.3 RPM 4.14 で導入されたブール値演算子
ブール値演算子説明使用例

with

用語が真となるには、すべてのオペランドが同じパッケージで満たされる必要があります。

Requires: (pkgA-foo with pkgA-bar)

without

最初のオペランドを満たすが、2 番目のオペランドを満たさない単一のパッケージが必要

Requires: (pkgA-foo without pkgA-bar)

unless

2 番目のオペランドが満たされない場合、最初のオペランドを満たす必要があります (リバースネガティブインプリケーション)。

Conflicts: (myPkg-driverA unless driverB)

unless else

unless 演算子と同じで、2 番目のオペランドが一致しない場合は、第 3 オペランドが満たされる必要があります。

Conflicts: (myPkg-backend-SDL1 unless myPkg-backend-SDL2 else SDL2)

重要

if 演算子と or 演算子は同じコンテキストで使用できず、unless 演算子は and と同じコンテキストで使用できません。

6.2.3. ネスト化

以下の例のように、オペランド自体をブール式として使用できます。

このような場合は、オペランドを括弧で囲む必要もあります。andor 演算子を組み合わせて、括弧で囲った同じ 1 セットと同じ演算子を繰り返すことができます。

例6.2 ブール式として適用されるオペランドの使用例

Requires: (pkgA or pkgB or pkgC)
Requires: (pkgA or (pkgB and pkgC))
Supplements: (foo and (lang-support-cz or lang-support-all))
Requires: (pkgA with capB) or (pkgB without capA)
Supplements: ((driverA and driverA-tools) unless driverB)
Recommends: myPkg-langCZ and (font1-langCZ or font2-langCZ) if langsupportCZ

6.2.4. セマンティクス

ブール値の依存関係 を使用しても、通常の依存関係のセマンティックは変更されません。

ブール値の依存関係 が使用されている場合は、名前が一致するものをすべてチェックし、一致する名前のブール値をブール値演算子で集計します。

重要

Conflicts: を除くすべての依存関係では、インストールを防ぐために、結果が True である必要があります。Conflicts: については、インストールを防ぐために、結果が False である必要があります。

警告

Provides は依存関係ではないため、ブール式を含めることはできません。

6.2.5. if 演算子の出力の理解

if 演算子もブール値を返します。これは、直感的に理解しやすいものです。ただし、以下の例では、if の直感的な使用が誤解を招く可能性がある場合を示しています。

例6.3 if 演算子の出力の誤解

このステートメントは、pkgB がインストールされていない場合には真になります。ただし、このステートメントを、デフォルトの結果が偽であるところで使用すると、事が複雑になります。

Requires: (pkgA if pkgB)

このステートメントは、pkgB がインストールされていて、pkgA がインストールされていない場合に競合します。

Conflicts: (pkgA if pkgB)

そのため、以下を使用することが推奨されます。

Conflicts: (pkgA and pkgB)

if 演算子が or にネストされている場合も同様です。

Requires: ((pkgA if pkgB) or pkgC or pkg)

pkgB がインストールされていない場合に if が真となるため、用語が完全に真となります。pkgB がインストールされている場合にのみ pkgA が役立つ場合は、代わりに and を使用します。

Requires: ((pkgA and pkgB) or pkgC or pkg)
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.