문제

우리는 RPM을 사용하여 내부적으로 웹 응용 프로그램을 배포하고 있습니다. RPM은 파일을 설치하고 Apache, Cron, Logging 등을 구성합니다.

APACHE, CRON 및 로깅에 대한 다른 구성으로 다른 위치에 설치되는 RPM의 테스트 버전을 구축하고 싶습니다. 동일한 기계에 생산 및 테스트 RPM을 설치할 수 있어야합니다.

두 RPM이 설치된 상태에서 나는 같은 것을 가질 것입니다

/opt/app/www/...
/opt/app-test/www/...
/etc/httpd/conf.d/app.conf
/etc/httpd/conf.d/app-test.conf
/etc/cron.d/app
/etc/cron.d/app-test
/etc/init.d/app
/etc/init.d/app-test

이것을 달성하는 좋은 방법은 무엇입니까?

  • 사양을 복사하고 모든 것을 "테스트"하도록 이름을 바꿉니다.
  • prod/test를 위해 다른 하위 포장지를 만들 수 있습니까?
  • RPM 매크로를 사용하여 사양의 위치와 이름을 변경합니까?
  • RPM -Relocate를 사용합니까?

내가 볼 수있는 기존 RPM이 있습니까?

도움이 되었습니까?

해결책

내 사양 파일에서 나는 그것을 사용한다 내장 매크로 그런 다음 테스트 계정 (루트가 아님)과 사용자 정의 ~/.rpmmacros를 사용하여 기본 접두사를 변경합니다.

%_prefix %{_home}

잘 작동합니다.

테스트 RPM 데이터베이스를 만들 수도 있습니다.

$ rpmdb --initdb --dbpath /home/test/var/lib/rpm

이것을 .rpmmacros에 넣으십시오.

%_dbpath /home/test/var/lib/rpm
%_rpmlock_path %{_dbpath}/__db.000

다른 팁

다른 해결책이 있지만, 나는 이것을 달성하기위한 또 다른 방법을 제안하기로 결정했습니다. 그래도 가상화에는 아무런 문제가 없습니다. 아마도 생산과 동일한 기계에서 테스트 환경을 실행하기 때문에 더 나은 솔루션은 아마도 안전/안전하지 않습니다. 그 말 ...

아마 하나의 사양 파일을 템플릿으로 사용한 다음 다음과 같습니다.

...
# somwwhere in the beginning of spec
%global testrel test

#rest of document
Source0: tarball-with-things%{?testrel}.tar.bz
...
%if ${?testrel:1}${!?testrel:0}
# this will execute only in test rpm
%endif
...

epostailly the %{?testrel} 매크로는 흥미로운 것입니다. 두 버전 모두에 대해 동시에 물건을 업데이트 할 수 있지만 한 버전 또는 다른 버전에 특정한 것을 유지하려면 여전히 가능합니다. 또한 ~/.rpmmacros의 데이터베이스, 사용자 정의 매크로를 변경할 필요가 없습니다 (이는 구축중인 시스템에 따라 변경됩니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top