2017-12-09 13 views
1

우리는 32 비트 및 64 비트 플랫폼 용으로 우리 제품의 RPM을 빌드합니다. RPM 사양의 제품의 이름은 우리는 64 비트 rpm을 구축하기 위해 32 비트 RPM 및 --target x86_64을 구축하는 명령 줄을 rpmbuild하는 --target i586을 통과특정 아키텍처 용 rpm 업그레이드

Name: foo 

과 같이 정의된다. 32bit 및 64bit 버전의 제품을 동시에 설치할 수 있도록 rpm arch를 제품의 설치 디렉토리에 인코딩합니다.

우리는 rpms를 잘 설치할 수 있습니다. 예 : foo 제품의 32 비트 및 64 비트 변종을 설치, 버전 4.1 :

rpm -i foo-4.1-i586.rpm 
rpm -i foo-4.1-x86_64.rpm 

그러나 우리는 버전에 설치된 제품의 4.2 32 비트 변형을 업그레이드하려고하면

rpm -U foo-4.2-i586.rpm 

RMP는 32 비트 모두를 제거 설치된 제품의 64 비트 변형. 이것은 바람직하지 않습니다. 그래서 질문은 : 우리가 spec 파일이나 rpm 커맨드 라인을 조정해서 선택된 아키텍처에 대해서만 업그레이드 할 수있는 방법은 무엇입니까? 확실한 해결책은 다음과 같이 스펙 파일에 패키지 이름에서 아치를 인코딩하는 것입니다 :

Name: foo-%{_arch} 

을하지만이 패키지 이름에 대한 일반적인 접근 방식처럼 보이지 않는다. 제발 조언.

답변

0

--target % _target, % _target_cpu 및 % _target_os 매크로 만 설정하면됩니다. Makefile에서 허용하지 않는 한 타겟 플랫폼 용으로 빌드되었는지는 확인하지 않습니다. 올바른 방법은 모의 사용하여 구축하는 것입니다 :

mock -r epel-7-i386 foo.src.rpm 

그런 다음 R32 비트 비트 패키지를 얻을 것이다 당신은 그들 중 하나를 업그레이드 할 수 있어야한다.

+0

rpmbuild는 내 바이너리 rpms에서 올바른 아키텍처를 설정합니다. 따라서 다른 도구로 전환해도 문제가 해결되지 않습니다. –