![rpm 스크립틀릿에서 제거할 버전을 얻는 방법은 무엇입니까?](https://linux55.com/image/92833/rpm%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8B%80%EB%A6%BF%EC%97%90%EC%84%9C%20%EC%A0%9C%EA%B1%B0%ED%95%A0%20%EB%B2%84%EC%A0%84%EC%9D%84%20%EC%96%BB%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
다음과 같은 시나리오가 있습니다.
- 설치 후 사용자 지정 작업을 수행하는 패키지 버전 1을 설치했습니다(일부 파일을 특정 위치에 복사).
- 동일한 패키지의 버전 2를 설치했습니다.
- 버전 1을 제거하고 싶습니다. 정리를 하려면 복사된 파일을 정리하기 위해 제거 후 정확한 버전을 알아야 합니다.
rpm 스크립틀릿에서 버전 번호를 얻는 방법이 있습니까?
답변1
%
파일의 관련 버전에서 스크립트를 호출합니다 rpm
. 따라서 버전 1.0에서 1.1로 업그레이드하는 경우 사전/사후 설치 스크립트는 버전 1.1 rpms에서 실행되고 사전/사후 제거 스크립트는 버전 1.0에서 실행됩니다.
이렇게 하면 스크립트가 자체 버전을 올바르게 처리하기가 쉬워집니다.
예를 들어 다음은 SPEC 파일에서 발췌한 내용입니다.
%pre
echo Pre called with version %{version}-%{release}
%post
echo Post called with version %{version}-%{release}
%preun
echo Pre-un called with version %{version}-%{release}
%postun
echo Post-un called with version %{version}-%{release}
그것들은 매우 간단하며 이것을 보여주기 위한 것입니다. 이 값은 rpm을 빌드할 때 rpm에 포함됩니다.
예를 들어
% rpm -q --scripts -p sweh-test-1.0-0.x86_64.rpm
preinstall scriptlet (using /bin/sh):
echo Pre called with version 1.0-0
postinstall scriptlet (using /bin/sh):
echo Post called with version 1.0-0
preuninstall scriptlet (using /bin/sh):
echo Pre-un called with version 1.0-0
postuninstall scriptlet (using /bin/sh):
echo Post-un called with version 1.0-0
이제 이 패키지의 버전 1.0.0을 설치해 보겠습니다.
% sudo rpm -i sweh-test-1.0-0.x86_64.rpm
Pre called with version 1.0-0
Post called with version 1.0-0
지금까지는 매우 흥미로웠습니다. 설치 전/설치 후 스크립트를 실행합니다.
이제 버전 1.1로 업그레이드해 보겠습니다.
% sudo rpm -U sweh-test-1.1-0.x86_64.rpm
Pre called with version 1.1-0
Post called with version 1.1-0
Pre-un called with version 1.0-0
Post-un called with version 1.0-0
호출 순서와 버전 번호에 주의하세요. 설치 전/설치 후를 호출하면 버전 릴리스가 새 버전과 일치합니다. 그런 다음 이전 버전 번호를 사용하여 설치 전/제거 후를 호출합니다.
그래서 아이디어는 당신이 필요하지 않다는 것입니다파생된%
매크로를 사용하여 이 정보를 rpm 사양 파일에 직접 포함할 수 있습니다 .
답변2
간접적. 설치하면 rpm 데이터베이스가 잠깁니다. 가장 쉬운 방법은 이 정보를 유지 관리하는 rpm에 텍스트 파일로 제공하는 것입니다.