rpmbuild 방법

rpm(RedHat Pakcage Management)는 RedHat 계열에서 사용되는 패키지 시스템이다. 레드햇이 리눅스로 사업을 시작하는데 가장 큰 영향을 줬다고 해도 과언이 아닌 시스템이 바로 RPM이다. 아주 간단하면서도 손쉽게 만들 수 있어서 지금도 많이 사용된다.

Source RPM 은 RPM을 작성하기 위한 소스를 제공하는데, RPM 작성에 필요한 모든 것이 담겨 있다. 그래서 뭔가 약간의 기능을 추가/삭제를 하고 싶은 RPM을 제작하고 싶다면 Source RPM 을 다운받아서 설치해서 리빌드해주면 된다. 이때 사용하는 명령어가 rpmbuild 명령어다.

이 포스트는 rpmbuild 를 위한 기초를 다룹니다.

설치

rpmbuild 도 명령어이기 때문에 패키지를 설치하면 된다. 다음과 같이 설치할 수 있다.

Source RPM 다운받기

Source RPM 을 인터넷을 통해서 다운로드 받을 수 있지만, dnf 명령어를 통해서 다운로드 받을 수 있다. 시스템에 패키지 저장소가 설치되어 있다면 대부분 Source RPM 도 함께 제공한다. Source RPM 은 확장자가 src.rpm 으로 끝남으로 쉽게 알아 볼 수 있다.

dnf 를 통해서 Kernel 소스를 다운은 다음과 같다.

명령어를 입력한 디렉토리에 Kernel 에 Source RPM 이 다운로드 된다.

Source RPM 빌드를 위한 의존성 패키지 설치

RPM 도 소스를 컴파일해서 나온 바이너리를 패키지로 묶은 것이다. 소스를 컴파일을 하기 때문에 의존성 패키지가 필요하게 된다. 대부분 rpmbuild 명령어를 이용해서 패키지를 빌드할때에 에러 메시지를 통해서 어떤 의존성 패키지가 필요한지를 알게 되는데, 이러한 의존성 패키지를 하나하나 설치하기란 여간 귀찮은 것이 아니다.

dnf 는 이렇게 패키지가 필요로하는 의존성 패키지만 설치하는 방법을 제공하는 다음과 같다.

‘–enalberepo=crb’ 는 레드햇의 CodeReady Builder Repository 로 소프트웨어를 빌드하거나 개발할 때 필요한 헤더 파일, 라이브러리, 개발 도구등을 포함하고 있다. 소스 코드를 컴파일 할때에는 대부분 의존성 패키지의 헤더 파일, 라이브러리를 필요로 하는데 레드햇은 이런 것들을 별도의 패키지 저장소로 만들었는데 그게 바로 crb 다.

Source RPM 설치

Source RPM 설치는 rpm 명령어를 이용해서 설치하면 된다.

src.rpm 은 바이너피 패키지가 아니기 때문에 시스템 레이아웃에 맞게 설치가 되지 않는다. 이 명령어를 실행한 사용자에 홈디렉토리에 rpmbuild 디렉토리가 생성되면서 관련 디렉토리와 파일이 설치된다. 만일 이것을 변경하고 싶다면 다음과 같이 할 수 있다.

홈디렉토리에 .rpmmacros 파일에 디렉토리를 설정해 주면된다.

Source RPM 을 설치하고 나면 rpmbuild 디렉토리에는 SOURCES, SPECS 디렉토리가 생기며 SPECS 디렉토리 안에는 RPM제작을 위한 SPEC 파일이 보인다.

Spec 파일 수정

kernel source rpm 을 설치했는데, SPECS 디렉토리를 보니 kernel.spec 파일이 있다. 이 파일이 소스 코드를 컴파일 하고 패키징 하는 일련의 과정을 자동화하는 명령어 조합 파일이라고 보면 된다. 일종에 배쉬 쉘 스크립트와 비슷한데, 매크로 파일이라고 부른다.

본인이 필요로 하는 기능이나 불필요한 패키지등을 제거하거나 할 수 있다.

rpmbuild 하기

이제 SPEC 파일을 원하는대로 수정했다면 패키지를 만들 차례다. 이때 rpmbuild 명령어를 사용한다.

‘-bb’ 는 ‘build binary’ 로 바이너리 패키지만 생성하도록 한다. ‘-ba’ 는 ‘build all’ 로 바이너리와 Source Rpm 을 생성하도록 한다.

rpmbuild 를 할때에 옵션을 통해서 필요한 것만 제작할 수 있다. 자주 사용하는 옵션은 다음과 같다.

더 많은 옵션들이 있지만, 대략 위 옵션만으로도 충분하다.

결론

RedHat 계열의 리눅스를 사용하고 있다면 Source RPM 을 이용해서 나만의 패키지를 만들어서 설치할 수 있다. 나의 경우에는 RedHat 계열이지만 Rocky 에서 제공하지 않는 패키지의 경우에 다른 RedHat 계열에 Source RPM 을 받아서 패키지를 만들어서 사용하는 편이다. 컴파일 설치도 가능하지만 컴파일 설치를 하게 되면 설치된 파일들이 어디에 설치되는지 기억하기 어렵다. 따라서 왠만하면 RPM 을 만들어서 설치하는 편이다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다