Red Hat Training

A Red Hat training course is available for RHEL 8

6.3. 파일 트리거 지원

파일 트리거 는 일종의 RPM 스크립트릿 입니다.

패키지의 SPEC 파일에 정의되어 있는 것은 무엇입니까.

Trigger 와 마찬가지로 하나의 패키지로 선언되지만 일치하는 파일이 포함되어 있거나 제거된 다른 패키지가 실행되는 경우 실행됩니다.

파일 트리거 의 일반적인 사용은 레지스트리 또는 캐시를 업데이트하는 것입니다. 이러한 사용 사례에서 레지스트리 또는 캐시를 포함하거나 관리하는 패키지에는 하나 이상의 파일 트리거 가 포함되어야 합니다. 파일 트리거를 포함하면 패키지가 자체 업데이트를 제어하는 상황에 비해 시간이 절약됩니다.

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으로 설정됩니다.

각 유형의 파일 트리거에는 하나 이상의 경로 접두사 및 스크립트가 포함되어야 합니다.

6.3.2. 파일 트리거 구문의 예

다음 예제에서는 File 트리거 구문을 보여줍니다.

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

이 파일 트리거는 /usr/lib 또는 /lib 로 시작하는 파일이 포함된 패키지를 설치한 직후 /usr/bin/ldconfig 를 직접 실행합니다. 패키지에 /usr/lib 또는 /lib 로 시작하는 경로가 여러 개 포함되어 있어도 파일 트리거가 한 번만 실행됩니다. 그러나 다음과 같이 스크립트 내에서 필터링할 수 있도록 /usr /lib 또는 /lib로 시작하는 모든 파일 이름이 트리거 스크립트의 표준 입력으로 전달됩니다.

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

이 파일 트리거는 /usr/lib 로 시작하고 foo 를 동시에 포함하는 파일을 포함하는 각 패키지에 대해 /usr/bin/ldconfig 를 실행합니다. 접두사와 일치하는 파일에는 일반 파일, 디렉터리, 심볼릭 링크를 포함한 모든 유형의 파일이 포함됩니다.

6.3.3. 파일 트리거 유형

파일 트리거에 는 다음 두 가지 주요 유형이 있습니다.

파일 트리거 는 다음과 같이 실행 시간에 따라 추가로 나뉩니다.

  • 패키지의 설치 전 또는 삭제
  • 트랜잭션 전 또는 후에

6.3.3.1. 패키지 파일 트리거당 한 번 실행

패키지당 한 번 실행되는 파일 트리거 는 다음과 같습니다.

  • %filetriggerin
  • %filetriggerun
  • %filetriggerpostun
%filetriggerin

이 파일 트리거는 이 트리거의 접두사와 일치하는 하나 이상의 파일이 포함된 경우 패키지를 설치한 후에 실행됩니다. 이 파일은 이 파일 트리거가 포함된 패키지를 설치한 후 rpmdb 데이터베이스에 이 파일 트리거의 접두사와 일치하는 하나 이상의 파일이 있습니다.

%filetriggerun

이 파일 트리거는 이 트리거의 접두사와 일치하는 하나 이상의 파일이 포함된 경우 패키지를 제거하기 전에 실행됩니다. 이 파일 트리거가 포함된 패키지를 제거하기 전에 실행되고 rpmdb 에서 이 파일 트리거의 접두사와 일치하는 파일이 하나 이상 있습니다.

%filetriggerpostun

이 파일 트리거는 이 트리거의 접두사와 일치하는 하나 이상의 파일이 포함된 경우 패키지를 제거한 후 실행됩니다.

6.3.3.2. 트랜잭션 파일 트리거당 한 번 실행

트랜잭션당 한 번 실행되는 파일 트리거 는 다음과 같습니다.

  • %transfiletriggerin
  • %transfiletriggerun
  • %transfiletriggerpostun
%transfiletriggerin

이 파일 트리거는 이 트리거의 접두사와 일치하는 하나 이상의 파일이 포함된 모든 설치된 패키지에 대한 트랜잭션 후에 한 번 실행됩니다. 해당 트랜잭션에 이 파일 트리거가 포함된 패키지가 있고 rpmdb 에서 이 트리거의 접두사와 일치하는 파일이 하나 이상 있는 경우에도 트랜잭션이 실행됩니다.

%transfiletriggerun

이 파일 트리거는 다음 조건을 충족하는 모든 패키지에 대한 트랜잭션 이전에 한 번 실행됩니다.

  • 이 트랜잭션에서 패키지가 제거됨
  • 패키지에는 이 트리거의 접두사와 일치하는 파일이 하나 이상 포함됩니다.

해당 트랜잭션에 이 파일 트리거가 포함된 패키지가 있고 rpmdb 에서 이 트리거의 접두사와 일치하는 파일이 하나 이상 있는 경우에도 트랜잭션 전에 실행됩니다.

%transfiletriggerpostun

이 파일 트리거는 이 트리거의 접두사와 일치하는 하나 이상의 파일이 포함된 모든 제거 패키지에 대한 트랜잭션 후에 한 번 실행됩니다.

참고

이 트리거 유형에서는 트리거 파일 목록을 사용할 수 없습니다.

따라서 라이브러리가 포함된 여러 패키지를 설치하거나 제거하면 전체 트랜잭션이 끝나면 ldconfig 캐시가 업데이트됩니다. 이를 통해 캐시가 각 패키지에 대해 별도로 업데이트된 RHEL 7에 비해 성능이 크게 향상됩니다. 또한 모든 패키지의 SPEC 파일에서 %post 및 %postun을 ldconfig라고 하는 스크립트가 더 이상 필요하지 않습니다.

6.3.4. glibc에서 파일 트리거 사용 예

다음 예제에서는 glibc 패키지 내에서 File 트리거 의 실제 사용을 보여줍니다.

RHEL 8에서 파일 트리거 는 설치 또는 제거 트랜잭션이 끝나면 ldconfig 명령을 호출하기 위해 glibc 에서 구현됩니다.

이는 glibc 의 SPEC 파일에 다음 scriptlet을 포함하여 확인됩니다.

%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 를 호출하는 scriptlets를 더 이상 포함할 필요가 없습니다. 이렇게 하면 각 패키지에 대해 캐시가 업데이트된 RHEL 7에 비해 성능이 향상됩니다.