저는 "소스 rpm"이라고도 불리는 .srpm Red Hat Package Manager 패키지의 사용을 이해하려고 합니다.
지금까지 내가 아는 한 .srpm은 소스 코드를 제공하고 개발 중에 일반적으로 사용된다는 점에서 표준 .rpm과 다릅니다. 실행해도 rpm2cpio ./myrpm-1.1-1.x86_64.rpm | cpio -idmv
여전히 소스 코드를 볼 수 있기 때문에 이것이 왜 유용한지 혼란스럽습니다.
내가 이해한 바로는 표준 RPM조차도 소스 코드가 포함된 .tar.gz/bz 파일을 다운로드하여 결국 빌드합니다. 소스 RPM이 어떻게 다른지, 왜 사용해야 하는지 명확히 설명해 주실 수 있나요?
답변1
소스 코드를 다운로드할 수 있는 RPM에 대해서는 들어본 적이 없습니다. 어쩌면 그런 사람도 있을 수 있지만 그런 사람은 드물다고 말하고 싶습니다. srpm 패키지에는 rpm 패키지를 빌드하기 위한 소스 코드와 지침이 포함되어 있습니다. rpm 패키지에는 실행할 수 있는 컴파일된 코드가 있으며 소스 코드는 포함되어 있지 않습니다. 그러나 예외가 있습니다. 예: Perl, Python, PHP 등은 C 또는 C++ 프로그램과 같은 바이너리로 컴파일되지 않습니다. 이러한 rpm 패키지에는 JIT(Just-In-Time)로 해석되거나 컴파일되는 소스 파일이 포함되어 있습니다. 따라서 컴파일된 바이너리가 없고 대신 소스 코드가 직접 사용됩니다.
rpm 패키지를 빌드하려는 경우 일반적으로 srpm을 다운로드하여 설치합니다. 그런 다음 사양 파일이 설치된 rpmbuild/SPECS 디렉터리를 입력합니다. 그런 다음 다음을 실행합니다.
rpmbuild -bb <package>.spec
그러면 RPM이 구축됩니다. 하나의 srpm 사양이 여러 rpm 패키지를 생성하는 것은 매우 일반적입니다.
<package>.rpm
<package>-devel.rpm
...
빌드된 rpm 패키지는 rpmbuild/RPMS에 저장됩니다. 그런 다음 실행할 수 있는 실제 프로그램을 설치하는 rpm 패키지를 설치할 수 있습니다.
rpm 패키지에서 파일을 추출하는 것은 rpm 패키지를 설치하는 것과 매우 다릅니다. 압축을 풀면 패키지 파일이 나옵니다. 추출된 패키지 파일에서 프로그램을 실행할 수 있지만 실행되지 않을 가능성이 높습니다. rpm 패키지를 설치한다는 것은 rpm이 프로그램에 필요한 모든 라이브러리도 설치된다는 것을 의미합니다. 설치 전후에 추가 작업을 수행해야 하는 경우 rpm 패키지의 스크립트가 해당 작업이 실행되도록 보장합니다. 일부 프로그램에서는 설치 중에 생성해야 하는 데이터베이스가 필요할 수 있고, 다른 프로그램에서는 라이브러리 캐시를 업데이트하기 위해 ldconfig를 다시 실행해야 할 수 있으며, 다른 프로그램에서는 빌드 매뉴얼이 필요할 수 있습니다. rpm에서 파일을 추출하면 이러한 스크립트가 실행되지 않습니다.