RPM에서 일반적으로 사용되는 서브루틴

RPM에서 일반적으로 사용되는 서브루틴

내가 사용하고 싶은 몇 가지 공통 코드가 있습니다.%예비의그리고%우편 엽서내 역할회전 속도사양 문서. 서브루틴을 넣었을 때%예비의섹션에 동일한 서브루틴을 추가해야 합니다.%우편 엽서RPM 섹션. 동일한 서브루틴을 두 번 유지하는 것은 좋지 않습니다. 예는 다음과 같습니다.

회전 속도사양 문서%예비의그리고%우편 엽서부분:

%pre
log_file=/var/log/myrpminstall.log
#-------------------------------------
# Send text log_file
#-------------------------------------
log_it() {
  log_msg=$1
  echo -e $log_msg >> $log_file
}

log_it "pre section log information"

%post

log_it "Post section log informations"

현재 언제%우편 엽서부분회전 속도설치 중에 실행하는 동안 다음 오류 메시지를 받았습니다.

/var/tmp/rpm-tmp.36557: line 5: log_it: command not found

그럼, 이런 서브루틴을 만드는 방법이 있나요?통나무(전역 기능)의 모든 부분에 접근 가능회전 속도??현재 해야 할 일통나무기능하다%우편 엽서거기에 사용하고 싶다면.

답변1

이것이 작동하지 않는 이유는 각 스크립틀릿( %post%pre)이 독립형 스크립트로 작성되어 실행을 위해 bash/sh에 전달되기 때문입니다. 따라서 이를 실행하는 셸은 다른 스크립틀릿에 정의된 함수에 대해 알지 못합니다.

이 목적으로 RPM 매크로를 사용하는 것이 좋습니다. ~/.rpmmacros또는 에 넣을 수 있습니다 /etc/rpm/macros. 이 같은:

%define log \
log_it() { \
  log_msg=$1 \
  echo -e $log_msg >> $log_file \
}

%pre
%log

log_it test

%post
%log

log_it test

바라보다http://rpm5.org/docs/rpm-guide.pdf자세한 내용은 /usr/lib/rpm/macros.

관련 정보