RPM 패키지 직접 빌드하기 완전 가이드

RPM 패키지 직접 빌드해야 하는 이유와 기본 개념

리눅스 시스템을 사용하다 보면 원하는 소프트웨어를 설치하거나 업데이트해야 할 때가 많습니다. 이때 가장 일반적인 방법은 패키지 관리 시스템을 이용하는 것입니다. Red Hat 계열 리눅스(CentOS, Fedora, Red Hat Enterprise Linux 등)에서는 RPM (Red Hat Package Manager) 패키지 관리 시스템을 사용합니다. RPM은 소프트웨어를 설치, 업데이트, 제거하는 데 사용되는 표준 포맷입니다.

대부분의 경우, 공식 저장소에서 제공하는 RPM 패키지를 사용하는 것이 가장 편리합니다. 하지만 다음과 같은 이유로 직접 RPM 패키지를 빌드해야 할 필요가 있습니다.

RPM 패키지 빌드는 처음에는 복잡하게 느껴질 수 있지만, 기본적인 원리를 이해하고 나면 생각보다 어렵지 않습니다. 이 가이드에서는 RPM 패키지를 직접 빌드하는 데 필요한 모든 과정을 단계별로 자세하게 설명합니다.

RPM 패키지 빌드 과정 미리보기

RPM 패키지 빌드는 크게 다음과 같은 단계로 이루어집니다.

    • 빌드 환경 설정: 필요한 도구 및 디렉토리 구조를 설정합니다.
    • 소스 코드 준비: 빌드할 소프트웨어의 소스 코드를 준비합니다.
    • SPEC 파일 작성: 패키지 정보, 빌드/설치 과정 등을 정의하는 SPEC 파일을 작성합니다.
    • 소스 코드 적용 (선택 사항): 필요한 경우 패치를 적용합니다.
    • 빌드 실행: SPEC 파일을 이용하여 RPM 패키지를 빌드합니다.
    • 테스트: 빌드된 RPM 패키지를 테스트합니다.

빌드 환경 구축하기

필수 패키지 설치

RPM 패키지를 빌드하기 위해서는 다음과 같은 패키지들이 필요합니다. 이 패키지들은 대부분의 리눅스 배포판에서 기본적으로 제공되거나 쉽게 설치할 수 있습니다.

CentOS/RHEL에서는 다음 명령어를 사용하여 필요한 패키지를 설치할 수 있습니다.

sudo yum install rpm-build gcc make rpmdevtools

Fedora에서는 다음 명령어를 사용합니다.

sudo dnf install rpm-build gcc make rpmdevtools

빌드 디렉토리 구조 설정

RPM 빌드 시스템은 특정 디렉토리 구조를 필요로 합니다. rpmdevtools 패키지에서 제공하는 rpmdev-setuptree 명령어를 사용하여 표준 디렉토리 구조를 쉽게 설정할 수 있습니다.

rpmdev-setuptree

이 명령어는 현재 사용자 홈 디렉토리에 다음과 같은 디렉토리들을 생성합니다.

SPEC 파일 작성 방법

SPEC 파일은 RPM 패키지 빌드의 핵심입니다. 이 파일은 패키지에 대한 정보 (이름, 버전, 라이선스 등)와 빌드 및 설치 과정을 정의합니다. SPEC 파일은 ~/rpmbuild/SPECS 디렉토리에 위치해야 합니다.

SPEC 파일 구조 이해

SPEC 파일은 크게 다음과 같은 섹션으로 구성됩니다.

SPEC 파일 예시

다음은 간단한 “hello world” 프로그램을 위한 SPEC 파일의 예시입니다.

Name: hello

Version: 1.0

Release: 1%{?dist}

Summary: A simple "hello world" program

License: GPLv2+

URL: http://example.com/hello

Source0: hello-1.0.tar.gz

BuildRequires: gcc

%description

This is a simple "hello world" program.

%prep

%autosetup

%build

make

%install

make install DESTDIR=%{buildroot}

%files

%{buildroot}/usr/bin/hello

%{buildroot}/usr/share/doc/hello-1.0/README

%changelog

* Mon Oct 23 2023 Your Name <[email protected]> - 1.0-1

- Initial release.

각 섹션별 설명

RPM 패키지 빌드 실행

SPEC 파일을 작성했으면, 이제 RPM 패키지를 빌드할 수 있습니다. rpmbuild 명령어를 사용하여 빌드를 실행합니다.

rpmbuild -ba ~/rpmbuild/SPECS/hello.spec

-ba 옵션은 소스 RPM (SRPM)과 바이너리 RPM을 모두 빌드하라는 의미입니다. 빌드 과정에서 오류가 발생하면 오류 메시지를 확인하고 SPEC 파일을 수정해야 합니다. 성공적으로 빌드가 완료되면, RPM 패키지는 ~/rpmbuild/RPMS~/rpmbuild/SRPMS 디렉토리에 생성됩니다.

빌드된 RPM 패키지 테스트 및 설치

빌드된 RPM 패키지를 설치하기 전에, 먼저 테스트하는 것이 좋습니다. rpm -qp 명령어를 사용하여 패키지 정보를 확인할 수 있습니다.

rpm -qp ~/rpmbuild/RPMS/x86_64/hello-1.0-1.el7.x86_64.rpm

rpm -ql 명령어를 사용하여 패키지에 포함된 파일 목록을 확인할 수 있습니다.

rpm -ql ~/rpmbuild/RPMS/x86_64/hello-1.0-1.el7.x86_64.rpm

패키지를 설치하려면 rpm -i 명령어를 사용합니다.

sudo rpm -i ~/rpmbuild/RPMS/x86_64/hello-1.0-1.el7.x86_64.rpm

설치 후에는 프로그램을 실행하여 정상적으로 동작하는지 확인합니다.

hello

자주 묻는 질문 (FAQ)

Q: RPM 빌드 시 “No such file or directory” 오류가 발생합니다.

A: SPEC 파일에서 지정한 소스 파일이나 디렉토리가 실제로 존재하지 않는 경우 발생합니다. SPEC 파일의 Source 섹션을 확인하고, 필요한 파일을 ~/rpmbuild/SOURCES 디렉토리에 복사했는지 확인하십시오.

Q: RPM 빌드 시 “BuildRequires” 오류가 발생합니다.

A: SPEC 파일의 BuildRequires 섹션에 지정된 패키지가 설치되어 있지 않은 경우 발생합니다. 필요한 패키지를 설치하고 다시 빌드하십시오.

Q: RPM 패키지를 설치할 때 의존성 오류가 발생합니다.

A: 설치하려는 패키지가 필요로 하는 다른 패키지가 설치되어 있지 않은 경우 발생합니다. yum 또는 dnf 명령어를 사용하여 의존성 문제를 해결하십시오.

Q: RPM 패키지 빌드 과정에서 오류가 발생하면 어떻게 해야 하나요?

A: 오류 메시지를 자세히 확인하고, SPEC 파일이나 소스 코드에 문제가 있는지 확인하십시오. 인터넷 검색이나 관련 문서들을 참고하여 문제 해결 방법을 찾을 수도 있습니다.

유용한 팁과 조언

답글 남기기

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