2011-09-13 11 views
25

프로젝트 RPM을 업그레이드하고 있습니다. 문제는 내가 projectname-1.0-0에서 projectname-1.0-1로 업그레이드 할 때 새로운 프로젝트를 먼저 설치하고 전체 프로젝트에서 전체 프로젝트를 완전히 제거하는 이전 프로젝트를 제거하는 것입니다. 업그레이드하는 동안 "vv"옵션을 사용했고 설치 후에 설치 제거가 완료되었음을 출력으로 보여주었습니다.RPM 업그레이드로 RPM을 제거합니다

누군가이 문제를 도와주세요. RPM spec 또는 rpmbuild 옵션에서 특별히 변경해야 할 것이 있습니까?

답변

5

예. rpm 설치 중에 % install 및 % post 스크립트가 호출됩니다. 설치가 완료되면 % preun 및 % postun 스크립트가 호출되어 이전 rpm 버전을 설치 제거합니다. 제대로 처리하지 않으면 % preun 및 % postun 스크립트가 % install 스크립트 및 % post 스크립트에서 가져온 변경 사항을 조작 할 수 있습니다.

rpm은 설치된 rpm 버전 수를 구별하기 위해 적절한 값으로 $ 1 인수를 설정합니다. projectname-1.0-0을 새로 설치하는 동안 % install 및 % post 스크립트가 호출되어 $ 1이 1로 설정되어 이것이 유일하게 활성화 된 버전임을 나타냅니다. projectname-1.0-1로 업그레이드하면 $ 1을 2로 설정하여 % install 스크립트와 % post 스크립트를 호출합니다. 그 다음에 $ 1을 1로 설정하여 % preun 및 % postun 스크립트가 호출되어 projectname의 내용을 정리합니다 -1.0-0. 따라서 $ 1 값을 기반으로 spec 파일을 작성함으로써 우리는 업그레이드를 효과적으로 처리 할 수 ​​있습니다.

+0

'%의 install'이다는 RPM 설치 중에 있지만 * 빌드 * 동안 실행되지 않는다 (예, 이름이 꽤 오해를 불러 일으킬 수 있습니다.) 나는 당신이'% pre'을 의미한다고 생각합니다. –

56

예, RPM 업그레이드가 발생하면 RPM은 먼저 새 버전의 패키지를 설치 한 다음 이전 버전의 패키지를 제거합니다. 이전 패키지의 파일 만 제거됩니다. 하지만 스크립트 (예 : % pre, % post, % preun, % postun)는 업그레이드를 처리하는지 아니면 일반 설치 또는 제거인지를 알아야합니다.

rpm 명령은 스크립트에 하나의 인수, 즉 설치된 패키지의 버전 수인 $ 1을 전달합니다. 아래 표 (Eric Foster-Johnston의 RedHat RPM 안내서에서)는 가능한 값의 샘플을 제공합니다.

Install the first time:   1 
Upgrade:       2 or higher 
           (depending on the number of versions installed) 
Remove last version of package: 0 

따라서 % preun에서 서비스를 제거하기 전에 "$ 1 = 0"인지 확인하고 싶을 것입니다. 자세한 내용은 (그리고 더 나은 테이블)에 대한

은 다음을 참조하십시오 http://docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch09s04s05.html

+1

프로덕션 환경에서 패키지 1.0.0을 이미 사용하고 있으며 프리온 또는 포스트 언스를 수정할 수없고 잘못된 작업을 수행하면 어떻게됩니까? 방금 설치 한 패키지 1.0.1을 덮어 쓰듯이. – DavidG

+0

RPM은 사전 또는 사후 스크립트가 실행되지 않도록하기 위해'--noscripts' 플래그를 가지고 있습니다. 어떤 것이 든 yum과 동등한지 확실하지 않습니다. –

4

당신이 RPM 패키지를 업그레이드 할 때 스크립트는 다음과 같은 순서로 실행됩니다 설치가 신선

1. %Pre of new package 
2. %Post of new package 
3. %Preun of old package 
4. %Postun of old package 

여부가 업그레이드 각 스크립트에 전달되는 하나의 인수로, 동일한 패키지에 다른 버전으로 설치된 RPM 수를 나타냅니다. 사전 & 포스트 스크립트의 경우 처음 설치하는 경우 1이됩니다. preun & postun 스크립트의 경우 마지막 제거시 0이됩니다.

예를 들어 preun 또는 postun 스크립트가 새 패키지에 유용한 파일을 삭제할 수 있습니다. postun 스크립트에서 수동 파일 삭제에 대해 걱정할 필요가 없습니다. RPM 자체로 지능적으로 처리됩니다.

심판 : Upgrading & uninstalling

관련 문제