RPM 설치 시 호스트가 UAT인지 PROD인지 확인하고 싶습니다. 일단 알고 나면 RPM의 어느 곳에서나 사용할 수 있는 변수(예: %user, %group)를 설정할 수 있습니다(우리 앱은 다른 Unix를 사용합니다). PROD 및 UAT의 경우 user:group) 지금 당장 %pre 및 %post 섹션 모두에서 호스트가 PROD인지 UAT인지 알아야 하는 경우 변수 범위로 인해 각 섹션에서 이를 확인해야 합니다. 즉, %user인 경우 %pre에 정의되어 있으므로 %post에서는 사용할 수 없습니다.
호스트가 PROD인지 UAT인지 확인하는 방법은 호스트 이름에 대한 간단한 정규식입니다.
%global 매크로를 살펴봤지만 어려움을 겪고 있으므로 더 많은 청중에게 질문을 드립니다.
미리 감사드립니다
답변1
SPEC 파일의 매크로는 rpmbuild 중에 설정됩니다. 즉, rpm 패키지를 생성하는 동안에는 확장되며 나중에(예: 설치 중에) 변경할 수 없습니다.
디스크의 일부 콘텐츠를 기반으로 SPEC 파일에 매크로를 설정하면 RPM 패키지를 생성한 호스트의 파일 콘텐츠를 기반으로 설정됩니다.
설치 중에 동작을 변경하려면 각 섹션에서 다시 수행해야 합니다.
%pre
if [ `hostname` -eq 'foo' ]; then
.....
%post
if [ `hostname` -eq 'foo' ]; then
.....
이 섹션은 두 개의 별도 쉘 스크립트로 해석되며 두 실행 사이에 변수를 유지할 방법이 없습니다. 즉, 첫 번째 스크립틀릿에서 쉘 변수를 설정하면 두 번째 스크립틀릿으로 전파되지 않는 것이 좋습니다. 두 번째 스크립틀릿에서 다시 읽는 파일입니다.https://docs.fedoraproject.org/en-US/packaging-guidelines/Scriptlets/#_saving_state_between_scriptlets
답변2
사후 및 사전 매크로에 대해 단일 전역 범위가 있어야 한다고 생각하지 마십시오. 결국 이들은 실제로 별도로 실행되는 독립적인 스크립트입니다.