rpm 패키지 생성하기
- OS : rhel 8.2 에서 진행
1. 환경 설정
$ yum install rpm-build
$ yum install rpmdevtools
$ which rpmbuild
$ which rpmdev-setuptree
$ rpmdev-setuptree // rpm 패키지 생성 환경 구축하기위함
$ ls -lh
drwxr-xr-x. 7 root root 72 4월 2 17:29 rpmbuild
2. rpm build 환경 구축
$ tree rpmbuild/
rpmbuild/
├── BUILD
├── RPMS
├── SOURCES
├── SPECS
└── SRPMS
3. rpm build 테스트 스크립트 생성
$ cat myscript.sh
#!/bin/bash
echo "hello world"
4. rpm build 를 위한 spec 파일 생성
- spec 파일의 내용을 통해, rpm에 추가할 파일, 설치/삭제 시 동작을 참고하여 rpm 파일을 생성하게 됨.
- 필수적으로 (Name, Version, Release, Source0, License) 값은 입력되어야 함.
$ cat myscript.spec
Name: myscript
Version: 1.0
Release: 1
Summary: rpm package
License: GPL
Source0: myscript.sh
%description
%prep
%build
%install
mkdir -p /root/rpmbuild/BUILDROOT/myscript-1.0-1.x86_64/usr/bin
install -m 755 /root/rpmbuild/SOURCES/myscript.sh /root/rpmbuild/BUILDROOT/myscript-1.0-1.x86_64/usr/bin/myscript
%files
/usr/bin/myscript
%changelog
* Thu Apr 3 2025 root
$ mv myscript.spec rpmbuild/SPECS/
$ mv myscript.sh rpmbuild/SOURCES/
$ tree rpmbuild/
rpmbuild/
├── BUILD
├── RPMS
├── SOURCES
│ └── myscript.sh
├── SPECS
│ └── myscript.spec
└── SRPMS
5 directories, 2 files
5. rpmbuild 로 rpm 패키지 생성하기
$ rpmbuild -ba rpmbuild/SPECS/myscript.spec
실행 중(%prep): /bin/sh -e /var/tmp/rpm-tmp.bxtscv
+ umask 022
+ cd /root/rpmbuild/BUILD
+ exit 0
실행 중(%build): /bin/sh -e /var/tmp/rpm-tmp.HMRn2K
+ umask 022
+ cd /root/rpmbuild/BUILD
+ exit 0
실행 중(%install): /bin/sh -e /var/tmp/rpm-tmp.2kabU0
+ umask 022
+ cd /root/rpmbuild/BUILD
+ '[' /root/rpmbuild/BUILDROOT/myscript-1.0-1.x86_64 '!=' / ']'
+ rm -rf /root/rpmbuild/BUILDROOT/myscript-1.0-1.x86_64
++ dirname /root/rpmbuild/BUILDROOT/myscript-1.0-1.x86_64
+ mkdir -p /root/rpmbuild/BUILDROOT
+ mkdir /root/rpmbuild/BUILDROOT/myscript-1.0-1.x86_64
+ mkdir -p /root/rpmbuild/BUILDROOT/myscript-1.0-1.x86_64/usr/bin
+ install -m 755 /root/rpmbuild/SOURCES/myscript.sh /root/rpmbuild/BUILDROOT/myscript-1.0-1.x86_64/usr/bin/myscript
+ '[' '%{buildarch}' = noarch ']'
+ QA_CHECK_RPATHS=1
+ case "${QA_CHECK_RPATHS:-}" in
+ /usr/lib/rpm/check-rpaths
+ /usr/lib/rpm/check-buildroot
+ /usr/lib/rpm/redhat/brp-ldconfig
/sbin/ldconfig: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf: No such file or directory
+ /usr/lib/rpm/brp-compress
+ /usr/lib/rpm/brp-strip /usr/bin/strip
+ /usr/lib/rpm/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump
+ /usr/lib/rpm/brp-strip-static-archive /usr/bin/strip
+ /usr/lib/rpm/brp-python-bytecompile '' 1
+ /usr/lib/rpm/brp-python-hardlink
+ PYTHON3=/usr/libexec/platform-python
+ /usr/lib/rpm/redhat/brp-mangle-shebangs
Processing files: myscript-1.0-1.x86_64
Provides: myscript = 1.0-1 myscript(x86-64) = 1.0-1
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires: /bin/bash
Checking for unpackaged file(s): /usr/lib/rpm/check-files /root/rpmbuild/BUILDROOT/myscript-1.0-1.x86_64
작성: /root/rpmbuild/SRPMS/myscript-1.0-1.src.rpm
작성: /root/rpmbuild/RPMS/x86_64/myscript-1.0-1.x86_64.rpm
실행 중(%clean): /bin/sh -e /var/tmp/rpm-tmp.dA0soh
+ umask 022
+ cd /root/rpmbuild/BUILD
+ /usr/bin/rm -rf /root/rpmbuild/BUILDROOT/myscript-1.0-1.x86_64
+ exit 0
$ tree rpmbuild/
rpmbuild/
├── BUILD
├── BUILDROOT
├── RPMS
│ └── x86_64
│ └── myscript-1.0-1.x86_64.rpm
├── SOURCES
│ └── myscript.sh
├── SPECS
│ └── myscript.spec
└── SRPMS
└── myscript-1.0-1.src.rpm
7 directories, 4 files
6. 생성한 rpm 패키지의 동작 검증
$ cp rpmbuild/RPMS/x86_64/myscript-1.0-1.x86_64.rpm .
$ ls -lh
-rw-r--r--. 1 root root 6.6K 4월 3 09:58 myscript-1.0-1.x86_64.rpm
drwxr-xr-x. 8 root root 89 4월 3 09:49 rpmbuild
$ rpm -ivh myscript-1.0-1.x86_64.rpm
Verifying... ################################# [100%]
준비 중... ################################# [100%]
Updating / installing...
1:myscript-1.0-1 ################################# [100%]
$ which myscript
-----------------------------------
/usr/bin/myscript
-----------------------------------
$ myscript
-----------------------------------
hello world
-----------------------------------
6-1. rpm 패키지 삭제
$ rpm -evh myscript
준비 중... ################################# [100%]
Cleaning up / removing...
1:myscript-1.0-1 ################################# [100%]
$ myscript
-bash: /usr/bin/myscript: 그런 파일이나 디렉터리가 없습니다