検索

6.3. ファイルトリガーのサポート

download PDF

File triggersRPM スクリプトレット の一種です。

これらはパッケージの SPEC ファイルで定義されます。

Triggers と同様、これらはあるパッケージで宣言されますが、一致するファイルを含む別のパッケージをインストールまたは削除したときに実行されます。

ファイルトリガー の一般的な用途は、レジストリーまたはキャッシュを更新することです。このようなユースケースでは、レジストリーまたはキャッシュを含む、または管理するパッケージにも、単一または複数の ファイルトリガー が含まれている必要があります。ファイルトリガー を含めると、パッケージがそれ自体の更新を制御する場合と比べて時間を短縮できます。

6.3.1. ファイルトリガー構文

ファイルトリガー の構文は以下のとおりです。

%file_trigger_tag [FILE_TRIGGER_OPTIONS] — PATHPREFIX…​
body_of_script

詳細は以下のようになります。

file_trigger_tag は、ファイルトリガーのタイプを定義します。使用可能なタイプは次のとおりです。

  • filetriggerin
  • filetriggerun
  • filetriggerpostun
  • transfiletriggerin
  • transfiletriggerun
  • transfiletriggerpostun

FILE_TRIGGER_OPTIONS は、-P オプションを除き、RPM スクリプトレットオプションと同じ目的で使用されます。

トリガーの優先度は数字で定義されます。この数字が大きいほど、ファイルトリガースクリプトの実行優先度が高くなります。優先度が 100000 を超えるトリガーは、標準のスクリプトレットの前に実行され、その他のトリガーは標準のスクリプトレットの後に実行されます。デフォルトの優先度は 1000000 に設定されています。

各タイプのすべてのファイルトリガーには、1 つ以上のパス接頭辞とスクリプトが含まれている必要があります。

6.3.2. ファイルトリガー構文の例

次の例は、File triggers の構文を示しています。

%filetriggerin — /lib, /lib64, /usr/lib, /usr/lib64
/usr/sbin/ldconfig

このファイルトリガーは、/usr/lib または /lib で始まるパスを含むパッケージのインストール後に、/usr/bin/ldconfig を直接実行します。/usr/lib または /lib で始まるパスを持つ複数のファイルがパッケージに含まれている場合でも、ファイルトリガーは 1 度のみ実行されます。ただし、/usr/lib または /lib で始まるファイル名はすべて、以下のようにスクリプト内でフィルタリングできるように、トリガースクリプトの標準入力に渡されます。

%filetriggerin — /lib, /lib64, /usr/lib, /usr/lib64
grep "foo" && /usr/sbin/ldconfig

このファイルトリガーは、/usr/lib で始まり、foo を同時に含むファイルがある各パッケージに対して /usr/bin/ldconfig を実行します。接頭辞に一致するファイルには、通常のファイル、ディレクトリー、シンボリックリンクなど、すべての種類のファイルが含まれることに注意してください。

6.3.3. ファイルトリガータイプ

ファイルトリガー には、以下の 2 つの主要タイプがあります。

ファイルトリガー は、以下のように、実行時間に基づいてさらに分割されます。

  • パッケージのインストールまたは消去の前または後
  • トランザクションの前または後

6.3.3.1. パッケージファイルトリガーごとの実行

パッケージごとに 1 回実行される ファイルトリガー:

  • %filetriggerin
  • %filetriggerun
  • %filetriggerpostun
%filetriggerin

このファイルトリガーは、このトリガーの接頭辞に一致するファイルが 1 つ以上パッケージに含まれている場合にパッケージのインストール後に実行されます。また、これはこのファイルトリガーを含むパッケージのインストール後に実行されます。rpmdb データベースにこのファイルトリガーの接頭辞に一致するファイルが 1 つ以上存在します。

%filetriggerun

このトリガーの接頭辞に一致するファイルが 1 つ以上このパッケージに含まれている場合、このファイルトリガーはパッケージのアンインストールの前に実行されます。また、これはこのファイルトリガーを含むパッケージをアンインストールする前に実行されます。rpmdb には、このファイルトリガーの接頭辞に一致するファイルが 1 つ以上あります。

%filetriggerpostun

このファイルトリガーは、このトリガーの接頭辞に一致するファイルが 1 つ以上含まれている場合に、パッケージのアンインストール後に実行されます。

6.3.3.2. トランザクションファイルトリガーごとに 1 の回実行

トランザクションごとに 1 回実行される ファイルトリガー:

  • %transfiletriggerin
  • %transfiletriggerun
  • %transfiletriggerpostun
%transfiletriggerin

このファイルトリガーはトランザクション後に、このトリガーの接頭辞に一致する 1 つ以上のファイルを含むすべてのインストール済みパッケージに対して実行されます。このトランザクションにこのファイルトリガーを含むパッケージがあり、rpmdb にこのトリガーの接頭辞に一致するファイルがつ以上ある場合は、トランザクションの後にも実行されます。

%transfiletriggerun

このファイルトリガーは、以下の条件を満たすすべてのパッケージのトランザクションの前に 1 度だけ実行されます。

  • このトランザクションでパッケージがアンインストールされます。
  • パッケージには、このトリガーの接頭辞に一致する 1 つ以上のファイルが含まれています。

このトランザクションにこのファイルトリガーを含むパッケージがあり、rpmdb にこのトリガーの接頭辞に一致するファイルが 1 つ以上ある場合は、トランザクションの前にも実行されます。

%transfiletriggerpostun

このファイルトリガーは、トランザクション後に、このトリガーの接頭辞に一致する 1 つ以上のファイルを含むすべてのアンインストール済みパッケージに対して実行されます。

注記

このトリガータイプでは、トリガーファイルのリストは利用できません。

そのため、ライブラリーを含む複数のパッケージをインストールまたはアンインストールすると、トランザクション全体の最後で ldconfig キャッシュが更新されます。これにより、キャッシュが各パッケージに対して個別に更新されていた RHEL 7 に比べて、パフォーマンスが大幅に改善されます。また、すべてのパッケージの SPEC ファイルで ldconfig と %postun を呼び出していたスクリプレットが必要ではなくなりました。

6.3.4. glibc でのファイルトリガーの使用例

次の例は、glibc パッケージ内での File triggers の実際の使用法を示しています。

RHEL 8 では、インストールまたはアンインストールトランザクションの最後に ldconfig コマンドを呼び出すために、ファイルトリガーglibc に実装されています。

これは、glibc SPEC ファイルに以下のスクリプトレットを含めることで実現されました。

%transfiletriggerin common -P 2000000 – /lib /usr/lib /lib64 /usr/lib64
/sbin/ldconfig
%end
%transfiletriggerpostun common -P 2000000 – /lib /usr/lib /lib64 /usr/lib64
/sbin/ldconfig
%end

そのため、複数のパッケージのインストールまたはアンインストールを行うと、トランザクション全体が終了してから、インストールしたすべてのライブラリーに対して ldconfig キャッシュが更新されます。そのため、個別のパッケージの RPM SPEC ファイルに ldconfig を呼び出すスクリプトレットを含める必要はありません。これにより、RHEL 7 に比べてパフォーマンスが改善され、各パッケージに対してキャッシュが別途更新されるようになりました。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.