본문 바로가기
Old Posts/Linux

[Linux] 빈 RPM 패키지 만드는 방법

by A6K 2023. 8. 10.

리눅스 서버를 운영하다보면 빈 RPM 패키지를 만들어 설치해야할 때가 있다.

특정 소프트웨어를 Makefile로 직접 빌드해 설치하는 경우 서버에는 소프트웨어가 설치되지만 rpmdb에는 패키지 정보가 추가되지 않는다. 소프트웨어를 사용할 수는 있지만 rpm을 통해 설치하지 않아서 의존성 체크는 계속 실패하게 된다. 이 경우 빈 rpm 패키지를 만들어 설치하는 식으로 rpm의 의존성 체크를 우회할 수 있다.

예를 들어 python 패키지는 특정 버전 이후부터 python2와 python3로 패키지 이름이 변경되었다. 오래된 버전의 운영체제에서 동작하던 소프트웨어 중에는 python 이라는 이름의 패키지에 의존성이 걸려있는 경우가 있다. python2, python3가 설치되어 있고 alias도 되어 있어 python 명령을 사용할 수 있지만 python 패키지는 rpmdb에 없어서 계속 실패한다. 이 경우 python이라는 이름의 더미 패키지를 만들어 설치하면 우회할 수 있다.

STEP 1. Dummy 파일 생성

RPM 패키지를 정의하기 위해서 필요는 없더라도 파일이 포함되어 있어야 한다. 패키징에 필요한 더미 파일을 생성한다.

mkdir -p SOURCES
touch SOURCES/DUMMY
tar -cvf SOURCES/dummy.tar.gz SOURCES/DUMMY
rm SOURCES/DUMMY

STEP 2.  RPM 패키지 생성

RPM 패키지는 SPEC 파일로부터 정의된다. python이라는 이름의 더미 rpm 패키지는 다음과 같이 정의할 수 있다.

Name : python
Version : 2.6
Release : noop
Summary : fake python rpm package
License : MIT
Source0 : dummy.tar.gz
BuildArch : noarch

Requires : python2 >= 2.7

%description
A fake pyton rpm package to bypass rpm dependency check.

%prep
%setup -c -q -T -D -a 0

%build

%install

%files

%changelog

rpm 정의에 딱히 내용이 없다. %build, %install 섹션에 내용이 없다.

SPEC 파일을 생성한 다음 RPM 패키지 빌드를 다음 명령어를 통해 수행한다.

rpmbuild --define "_topdir $(pwd) /" -bb python.spec

생성된 RPM 패키지를 확인한다.

rpm -qlp RPMS/noarch/python-2.6-noop.noarch.rpm

"(contains no files)"라는 문자열이 나오는 것을 확인할 수 있다.

STEP 3. RPM 설치

생성한 rpm 파일을 설치하려는 서버로 옮긴 후 설치하면 된다.

sudo rpm -ivh python-2.6-noop.noarch.rpm

설치가 종료된 이후 제대로 설치되었는지 확인한다.

$ rpm -q python
python-2.6-noop.noarch

설치가 제대로 되었다.

이제 python 패키지에 의존성을 가지고 있는 rpm 패키지를 설치하면 정상 설치가 된다.

댓글