누구나 단일 요구 사항이 아닌 사양 파일에서 대체 요구 사항 또는 요구 사항 집합을 지정하는 방법 (또는 가능 여부)을 알고 있습니까?
예를 들어, 편리라는 이름의 두 가지 패키지가있다라고 foo-bar
하고 bar-foo
. 내 패키지에는 이들 중 하나가 필요하지만 둘 다 필요하지는 않으며 어느 패키지가 있는지 상관하지 않습니다. 런타임에 사용 가능한 것을 사용합니다.
그래서 효과적으로 말하는 방법을 원합니다.
Requires: foo-bar OR bar-foo
그것이 불가능하다는 것을 알 수있는 한, 여기보다 RPM에 대해 더 많이 알고있는 사람들이 있다고 생각하므로 그렇게 할 수있는 방법이 있습니다.
업데이트 : 난 단지의 포장을 제어 bar-foo
하지, foo-bar
그래서 모두가 가상 패키지가 작동하지 않습니다 제공 필요.
업데이트 : 실제로 필요한 것은 각 패키지 내부 의 가상 패키지입니다. 말의 foo-bar provides eagle' and
바 - 푸 비글 제공 and my package works with either (or both); but other packages require either
독수리 or
비글 or
foo는 바 or
바 foo` 및 대상 시스템이 가질 수 중 하나 또는 둘 모두가 설치되어 있어야합니다.
나는 현재 다음과 같은 %pre
스크립트를 사용 하여이 문제를 해결하려고합니다 .
rpm -q eagle || rpm -q beagle || echo "need eagle or beagle" && /bin/false
나는 그것이 효과가 있다고 확신하지만 RPM의 의존성 추적을 잔인하게 우회하는 것처럼 보입니다. 당신이 물었을 때 예를 들어 당신이 내 패키지를 볼 수 없을 것 whatrequires foo-bar
나 whatrequires beagle
.
업데이트 : 두 번째 생각으로, 사람들이 설치할 foo-bar
수 있도록 해야하는 고통은 적어도 내 상황에서 RPM 종속성 관리를 우회하는 고통보다 적습니다. 따라서 누군가가 "this OR that"을 올바르게 요구하는 방법을 제시하지 않는 한 (일반적으로 RPM에서 갖는 훌륭한 기능이라고 생각합니다), 필요한 경우 에만 계획 foo-bar
하고 런타임에 bar-foo
사용 가능한 경우 다음 중 하나를 선택합니다. 내가 원하는 기준에 따라
업데이트 : 또 다른 아이디어는 RPM을 부정하지만 물건을 올바른 상태로 만들 수 있습니다. 에서에서 %post
RPM의 데이터베이스를 직접 사용할 수도 있습니다. 따라서 %pre
설치 잘못된에서 저를 보호 할 수 있고, %post
나도 필요로하는 소급 RPM을 말할 것 foo-bar
나 bar-foo
또는 두 가지 모두, 무엇에 따라 내가 거기 설치할 때.
제안 해 주셔서 감사합니다!
Provides: foo-bar
두 가지 종속성을 모두 만족시킬 수 있습니다. 최신 rpm 버전의 경우 부울 종속성을 확인하십시오 . 멀리 %pre
하고 %post
, 섹션 시스템을 물리 칠하려고하지 않습니다 .