문제

RPM을 사용하여 배포하려는 몇 가지 응용 프로그램이 있습니다. 내 응용 프로그램 배포의 일부 파일은 다른 배포 된 패키지의 파일을 대체합니다. 배포 패키지에 새 파일을 포함 시키면 RPM 충돌이 발생합니다.

RPM을 사용하여 이미 설치된 파일을 업데이트/교체하는 적절한 방법을 찾고 있습니다.

나는 이미 몇 가지 해결책을 제시했지만 아무것도 옳지 않은 것 같습니다.

  • 원본 파일을 포함하는 RPM의 사용자 정의 버전을 유지하십시오.

이것은 다른 가능한 솔루션보다 해킹처럼 느껴지더라도 비교적 작은 보상을위한 많은 작업처럼 보입니다.

  • 다른 이름으로 RPM에 파일을 포함시키고 게시물 섹션에서 복사하십시오.

이것은 작동하지만 파일의 여러 사본으로 시스템을 쓰레기로 만드는 것을 의미합니다. 또한 각 파일에 대한 RPM 빌드 사양의 추가 유지 보수를 의미합니다.

  • 게시물 섹션에서 wget을 사용하여 알려진 일부 서버에서 원본 파일을 교체하십시오.

이것은 사본 기술과 유사하지만 파일은 RPM에도 살지 않습니다. 이것은 멋진 중앙 구성 기관처럼 작용할 수 있습니다.

  • 파일을 새 파일로 배포 한 다음 Symlinks를 사용하여 원본을 무시하십시오.

이것은 또한 사본 기술과 유사하지만 혼란이 적습니다. 여기서 문제는 일부 파일이 Symlinks와 잘 작동하지 않는다는 것입니다.

도움이 되었습니까?

해결책

내가 아는 한, RPM은 기존 파일을 업데이트 / 교체 할 수 있도록 설계되지 않았으므로 귀하가하는 모든 일은 해킹이 될 것입니다.

당신이 나열하는 옵션 중에서, 대상 시스템이 내가 관리하는 시스템 인 경우 #1을 최소한으로 선택한 것입니다 (당신이 말한 것처럼, 그것은 더 많은 일이지만 가장 깨끗한 솔루션이지만) #2와 #4의 조합입니다 ( #2와 #4). 다른 RPM을 배포하지 않아도 된 경우 가능한 경우 가능한 경우 Symlinks, NOT가 아닌 경우 사본을 복사합니다). 매우 내가하고있는 일을 문서에서 명확하게하십시오).

업데이트 또는 교체해야 할 파일과 업데이트 해야하는 파일을 설명하지 않았습니다. 이러한 질문에 대한 답변에 따라 몇 가지 다른 옵션이있을 수 있습니다.

  • 많은 프로그램이 단일 기본 구성 파일을 사용하고 또한 .d 하위 디렉토리. 예를 들어, Apache가 사용합니다 /etc/httpd/conf/httpd.conf 그리고 /etc/httpd/conf.d/*.conf, RPMS가 파일을 삭제할 수 있습니다 /etc/httpd/conf.d 수정하는 대신 /etc/httpd/conf/httpd.conf. 수정 해야하는 파일 이이 패턴을 따르지 않지만 만들 수있는 구성 파일 인 경우 패키지 관리자 에게이 기능을 추가 할 것을 제안 할 수 있습니다. 이것은 즉시 도움이되지 않지만 향후 릴리스를 더 쉽게 만들 수 있습니다.
  • 명령 줄 유틸리티와 같은 sendmail 그리고 lpr 여러 패키지로 제공 할 수 있습니다 alternatives 시스템 (참조 man alternatives)이 유틸리티를 나란히 설치할 수있는 1 rpm 이상을 허용합니다. 다시 말하지만, 수정해야 할 파일 이이 패턴을 따르지 않지만 만들 수있는 명령 줄 유틸리티 인 경우 패키지 관리자 에게이 기능을 추가 할 것을 제안 할 수 있습니다.
  • 관리하는 시스템의 구성 파일 변경 사항은 다음과 같은 도구를 통해 더 잘 관리됩니다. cfengine 또는 인형 맞춤형 RPM을 통해보다는. 나는 붉은 모자가 인형을 선호한다고 생각합니다.
  • 관리하지 않는 시스템 용 RPM을 만들고 있다면 BitRock과 같은 타사 도구를 사용하고 내 모든 것을 버리는 것을 고려할 것입니다. /opt 다른 Admins의 RPM이 설치 한 파일을 밟을 필요가 없습니다.

다른 팁

당신은 또한 실행할 수 있습니다 rpm -U --replacefiles --replacepkgs ..., 당신이 원하는 것을 줄 것입니다.

RPM %파일 지침에 대한 자세한 내용은 여기를 참조하십시오.

http://www.rpm.org/max-rpm/s1-rpm-inside-files-list-directives.html

RPM 스크립트의 %게시물 및 %프리 섹션의 인수를 사용하여 패키지를 설치, 업그레이드 또는 제거하는지 확인할 수 있습니다.

$ 1이 0이면 오래된 물건을 제거하고 있습니다. 타겟팅 0 패키지 설치. $ 1이라면 1 인 경우 새로운 물건을 설치하고 있습니다. 설치할 총 1 개의 패키지를 대상으로합니다. $ 1 이상이면이 패키지를 업그레이드하고 $ 1은 이미 설치된 패키지 수를 나타냅니다.

이 섹션은 버전간에 파일을 관리하는 데 도움이됩니다. 버전간에 수행하는 일을 추적하고 버전을 건너 뛰는 경우 어떤 일을하는지 고려하십시오.

이런 것들을 고려해 보면 가면 좋을 것입니다!

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