SLES의 버전/아키텍처가 동일한 두 대의 머신이 있습니다.
머신 #A에 "foo" 소프트웨어가 설치되어 있으며 이것이 rpm -qa
.
"foo" 소프트웨어는 머신 #B에 설치되어야 합니다.
foo.rpm
이 정보는 어떤 소스(예: 인터넷 등)에서도 얻을 수 없습니다 .
질문
패키지가 foo.rpm
머신 #A에 이미 설치되어 있으므로 foo.rpm
설치된 파일을 기반으로 해당 패키지에 파일을 빌드할 수 있습니까?
rpm에도 사전/사후 스크립트가 있다고 생각합니다. 그래서 foo.rpm
(종속성이 있습니까?)을 설치할 수 있습니다.
답변1
이를 올바르게 수행하는 것은 가능하지만 매우 어렵습니다. 절실하다면 새 RPM .spec
파일을 만들고 "가짜" 소스 RPM(SRPM) 파일을 만들어서 사용할 수 있습니다 rpmbuild --rebuild
.
계속해서 실제 RPM을 찾아보겠습니다. 질문에 구체적인 내용을 명시하지 않으셨지만 제 경험상 검색 방법을 안다면 인터넷에서 무엇이든 찾을 수 있습니다. 나는 Red Hat 배포판용 RPM의 이전 버전이 10년 이상 사용되지 않았음을 발견했기 때문에 이 RPM의 남은 부분이 어디에도 없다는 것을 믿기 어렵습니다.
또한, RPM에 포함된 애플리케이션의 소스 코드로 돌아가서 이를 사용하여 RPM을 다시 빌드할 수도 있는 경우가 많습니다. 일반적으로 소스 애플리케이션에는 .spec
RPM을 재구축하는 데 필요한 파일이 포함되어 있습니다.
.spec
마지막으로 Red Hat 기반 배포용 Koji와 같은 빌드 서비스에서 소스 코드와 파일을 얻을 수 있습니다. SuSE는 유사한 빌드 서비스도 유지하므로 이러한 서비스에서 이전 빌드 아티팩트를 검색할 수 있습니다.
바이너리를 있는 그대로 가져오기
이 방법을 사용하면 한 시스템에서 실제 실행 파일을 추출하고 다른 시스템에 배포하기 위해 패키지할 수 있습니다.
기계 A
$ rpm -ql <packageNameHere> | xargs tar -zcvf /tmp/program.tgz
기계 B
$ tar -zxvf /path/to/your/program.tgz
SLES의 RPM 버전
이 스레드의 게시물에 따르면:Re: 설치된 패키지에서 RPM을 생성하는 방법 rpm
SLES에는 이 스위치가 있다고 합니다 --repackage
. 이 기능은 Red Hat 에디션(Fedora 또는 CentOS)에는 없습니다. 하지만 게시물에 따르면 다음과 같이 사용할 수 있습니다.
$ rpm -e --repackage <somepackage>
완료되면 여기에서 RPM에 액세스할 수 있습니다.
/var/spool/repackage
rpmerizor 사용
회전 속도소스 파일을 해당 RPM으로 다시 패키징하는 타사 도구/스크립트를 설치할 수 있습니다. 스크립트 사용법은 여기에서 확인할 수 있습니다.rpmerizor의 매뉴얼 페이지.
발췌
Rpmerizor는 설치된 파일에서 RPM 패키지를 생성할 수 있는 스크립트입니다. 명령줄에서 파일을 지정하고 몇 가지 대화형 질문에 답하면 rpm 메타데이터(패키지 이름, 버전...)가 채워집니다. 메타데이터에 대한 명령줄 옵션을 통해 배치 모드에서 사용할 수도 있습니다.
rpm을 사용하여 재구축
빌드 도구와 혼동하지 마십시오 rpmbuild
.rpmrebuild
설치된 RPM을 다시 패키지하는 데 사용할 수 있는 또 다른 타사 스크립트입니다.
발췌
rpmrebuild는 기본 사용을 위해 설치된 패키지에서 RPM 파일을 빌드하는 도구입니다. rpmrebuild를 사용하려면 rpm 빌드에 대한 지식이 필요하지 않습니다. (Debian에서는 dpkg-repack과 동일합니다).
예
openssh-server를 다시 패키지하고 싶다고 가정해 보겠습니다.
$ rpm -aq | grep openssh-server
openssh-server-6.2p2-8.fc19.x86_64
이제 패키지하세요:
$ rpmrebuild openssh-server-6.2p2-8.fc19.x86_64
/usr/lib/rpmrebuild/rpmrebuild.sh: WARNING: some files have been modified:
..?...... c /etc/ssh/sshd_config
..?...... c /etc/sysconfig/sshd
Do you want to continue ? (y/N) y
Do you want to change release number ? (y/N) n
result: /root/rpmbuild/RPMS/x86_64/openssh-server-6.2p2-8.fc19.x86_64.rpm
인용하다
답변2
일반적으로 말하면 그렇지 않습니다.
운이 좋다면 패키지의 출처에 대한 정보를 제공 rpm -qi
할 수 있을 것입니다 .rpm -q --changelog
실행 중인 시스템에 구축된 경우 실제 rpm을 만드는 데 사용된 사양 파일(둘 다는 아닐 경우)이 여전히 있을 수 있습니다.
일반적으로 파일/바이너리 복사를 권장하지 않지만 대부분의 메타 정보는 RPM 데이터베이스에 있으며 실제 파일이 있습니다.
rpm -q --list <pkg_name>
패키지에 의해 배포된 모든 파일을 표시합니다.
rpm -q --scripts <pkg_name>
패키지를 설치(또는 제거)하여 실행된 스크립트를 표시하면 최소한 배포된 파일만큼 해당 목적에 대한 통찰력을 얻을 수 있습니다.
설치해야 하는 모든 종속성은 를 통해 찾을 수 있습니다 rpm -q --requires <pkg_name>
.