우리 회사는 다양한 클라이언트를 위해 일부 RHEL 7 시스템을 관리합니다. 특히 한 고객은 시스템에 기본이 아닌 저장소의 패키지를 설치했습니다. 몇 주 전에 저장소가 갑자기 예기치 않게 오프라인 상태가 되었습니다. 이제 고객은 동일한 패키지가 설치된 새 시스템을 원합니다. 그러나 패키지 복사본을 얻을 수 없습니다. 업스트림 저장소는 오프라인이며 프로덕션 시스템의 디스크 공간을 절약하기 위해 /var/cache/yum
자동화된 프로세스( 사용)를 통해 매일 정리합니다. yum clean
패키지 사본을 얻기 위해 공급업체에 연락하고 있지만 아직까지 성공하지 못했습니다.
Yum 캐시에 복사본이 없다고 가정할 때 Yum을 통해 RPM 패키지를 설치한 후 RPM 패키지를 검색하거나 다시 빌드할 수 있는 방법이 있습니까?
이미 몇 가지 질문이 있습니다 (1,2) 이 주소는 설치된 패키지의 복사본을 얻는 문제를 해결하지만 모든 답변은 Yum 캐시에 따라 다릅니다.
분명히 내 특정 시나리오에서 가장 좋은 대답은 공급업체가 조치를 취할 때까지 우리가 할 수 있는 일이 없다고 고객에게 말하는 것입니다. 하지만 이 질문을 위해 고객이 우리의 가장 큰 고객이고 우리가 그렇지 않았다면 우리를 떠났을 것이라고 가정해 보겠습니다. 소프트웨어를 설치하고 새 시스템을 시작한 다음~ 해야 하다이 패키지의 사본을 구하지 않으면 우리 회사가 파산할 위험이 있습니다. (실제로 이걸 할 수 있는 방법이 있는지 궁금해서요. 사실 제 생계는 거기에 달려있지 않습니다.)
답변1
느리고 성가신 수동 방식은 다음 라인을 따라 실행될 수 있습니다.
$ rpm -ql openssh-server
...
이 파일에서 tarball을 빌드하십시오. 그러나 이에 따라 이러한 파일이나 디렉터리 중 일부를 제외해야 할 수도 있습니다. 또한 가능한 경우 스크립트를 수집해야 합니다.
$ rpm -q --scripts openssh-server
...
newhope.spec
그런 다음 소스 파일을 사용하기에 적합한 파일을 찾거나 조정하고 newhope.tar.gz
해당 사양 파일에 스크립트를 삽입한 다음 알 수 없는 양의 조작 및 테스트를 수행하여 위의 모든 스크립트를 제자리에 rpmbuild
가져오고 %files
어리석은 make -a-와의 충돌을 해결합니다. tarball 메소드는 다른 패키지 등을 사용하여 생성할 수 있습니다.
( 스펙을 확인하고 수동으로 포함할 rpm -q
--conflicts
수도 있습니다 . 기본적으로 플래그 섹션에 언급된 모든 플래그를 실행하여 설치된 RPM에 무엇이 포함되어 있는지 확인하세요...)--requires
--triggers
--provides
man rpm
query-options
답변2
응답자슈퍼유저의 오래된 질문권장됩니다 rpm --rebuild
. 그러나 RHEL 7과 함께 제공되는 RPM 버전은 이 옵션을 지원하지 않는 것 같습니다.
또 다른 방법은rpmrebuild
, RHEL 7의 EPEL을 통해 사용할 수 있습니다. 이 도구를 사용하여 설치된 패키지를 다시 만들 수 있었습니다. 결과 패키지는 원본 패키지와 거의 동일하지만 동일하지는 않습니다. 특히:
- 디스크에 있는 파일에 대한 모든 변경 사항은 새 패키지에 적용됩니다(대부분 구성 파일에서 발생함).
- 원본 패키지가 서명되더라도 원본 패키지 서명자 외에는 누구도 패키지 서명에 사용된 개인 키의 복사본을 갖고 있지 않으므로 패키지는 서명되지 않습니다.