
RPM(Red Hat Package Manager)
1. RPM의 개요
- 프로그램을 ‘*.rpm’ 형태의 파일로 배포
- rpm 명령을 사용하여 설치 / 갱신 / 제거 / 검증 / 질의 등의 관리 가능
- 배포되는 rpm 파일의 형식
패키지이름-버전-릴리즈.리눅스버전.아키텍처.rpm
| 구성 | 설명 |
| 패키지이름 | 어떤 패키지인지를 알려주는 패키지의 이름 |
| 버전 | 패키지의 버전 |
| 릴리즈 | 한 버전의 패키지를 몇 번 빌드했는지 알려줌 |
| 리눅스 버전 | 기준이 되는 리눅스 버전 ex. fc38(fedora 38), el8(enterprise linux 8), centos 등 |
| 아키텍 | 패키지가 사용 가능한 시스템 ex. i386, i486, i586, i686 : 인텔 x86 호환 계열에 사용 ia64 : IA-64(Itanium) x86_64 : 최근에 사용하는 표기법으로 x86 계열 64bit CPU용을 나타냄 alpha : Digital 알파 서버용 ppc : 매킨토시 PowerPC용 ppc64 : PowerPC 64bit용 sparc : Sun Microsystems 용 s390 : IBM s/390용 aarch64 : ARM의 64Bit 용, 애플의 m1, m2 CPU가 이에 해당 |
rpm 파일 예
- 전형적인 rpm 파일의 형식
httpd-2.4.41-5.fc29.x86_64.rpm - 최근에는 아키텍처 부분에 el7과 centos를 함께 표기하기도 함
httpd-2.4.6-90.el7.centos.x86_64.rpm - 초기의 rpm 파일 형식으로 리눅스 버전이 명시되지 않고 배포됨
sendmail-8.12.8-6.i386.rpm
2. rpm 사용법
- 설치 및 갱신, 제거, 질의, 검증 모드와 소스 rpm(.src.rpm)의 리빌드(rebuild) 모드 등 총 5가지로 나뉨
rpm [option] [패키지명_파일명]
3. 설치 및 갱신(install & upgrade) 모드
주요 옵션
| 옵션 | 설명 |
| -i (--install) |
새로운 패키지를 설치할 때 사용 기본적으로 이전 버전의 같은 패키지가 있을 경우 설치가 되지 않음 |
| -U (--upgrade) |
기존의 패키지를 새로운 버전의 패키지로 업그레이드할 때 사용 만약 설치된 패키지가 없을 경우에도 새로운 버전을 설치할 수 있는데 이 경우에는 -i 옵션과 같다고 볼 수 있음 |
| -F (--freshen) |
이전 버전이 설치되어 있는 경우에만 설치 |
| -v (--verbose) |
메시지를 자세히 보여줌 |
| -h (--hash) |
설치 상황을 ‘#’ 기호로 표시 |
| --force | 기존 버전이 설치되었을 경우처럼 강제로 설치할 때 사용 (--oldpackages, --replacefiles, --replacepkgs와 같이 3개의 옵션을 포함) |
| --nodeps | 의존성 관계를 무시하고 설치 rpm 설치 시에 의존성 관계에 있는 패키지가 존재하지 않을 경우에는 설치가 되지 않는데, 그런 경우 강제로 설치할 때 사용 |
| -vv | 메시지를 아주 자세히 보여줌 |
| --test | 패키지를 실제 설치하는 것이 아니고, 설치 전 테스트할 때 사용 보통 -vv와 같이 사용 |
| --rebuilddb | 특정한 패키지를 설치 후에 rpm 패키지를 검색했으나 나타나지 않을 때 rpm 데이터베이스를 업데이트할 때 사용 |
사용 예
- 해당 rpm 패키지를 설치한다
rpm -i gftp-2.0.19-fc15.i686.rpm
- 해당 패키지를 업그레이드 설치하고, 메시지와 진행상황을 ‘#’ 기호로 출력한다
rpm -Uvh vsftpd-2.2.2-11.el6_4.1.i686.rpm
- 현재 설치된 패키지만 찾아서 업데이트하고, 메시지와 진행상황을 ‘#’ 기호로 출력한다
rpm -Fvh /usr/local/src/*.rpm
4. 제거(erase) 모드
- 패키지를 제거할 때는 -e 옵션을 사용하는데, 다른 패키지에 대한 의존성이 발생한 경우에는 제거되지 않음
- 의존성이 발생한 패키지를 제거하기 위해서는 먼저 의존성 관련 패키지를 제거하거나, 추가로 --nodeps 옵션을 지정해야 함
주요 옵션
| 옵션 | 설명 |
| -e (--erase) |
설치된 패키지를 삭제 의존성을 갖는 패키지가 있는 경우에는 삭제되지 않음 |
| --nodeps | 의존성을 갖는 패키지가 존재하는 경우에도 삭제 |
| --test | 실제로 제거하지 않고 테스트를 할 때 사용하는 옵션으로 보통 -vv 옵션과 함께 사용 |
| --allmatches | 동일한 이름을 갖는 패키지가 중복해서 설치되어 있는 경우에 모두 제거 |
사용 예
- eog라는 패키지를 제거한다. 의존성이 있는 패키지가 존재할 경우에는 제거되지 않음
rpm -e eog
- httpd라는 패키지를 제거하는데, 의존성이 있는 패키지가 존재할 경우에도 제거
rpm -e httpd --nodeps
5. 질의(query) 모드
- 패키지 관련 정보를 알아내기 위해 -q 옵션을 사용
- -q 옵션만 사용하면 패키지 설치 유무나 간단한 버전 정보만 출력
주요 옵션
| 옵션 | 설명 |
| -q (--query) |
질의 시에 꼭 사용해야 하는 옵션 패키지를 찾으면 패키지 이름과 버전만 표시 |
| -i (--info) |
설치된 패키지의 정보를 출력 -p 옵션과 같이 사용하면 rpm 패키지 파일에 대한 정보를 알 수 있음 |
| -l (--list) |
패키지에서 설치한 모든 파일 정보를 출력 -p 옵션과 같이 사용하면 rpm 패키지 파일이 설치되는 목록 파일을 알 수 있음 |
| -a (--all) |
시스템에 설치된 모든 패키지 목록을 출력 |
| -p 패키지_파일명 (--package) |
rpm 패키지의 파일에 대한 정보를 보여줌 이 옵션을 사용하려면 패키지 파일의 정확한 이름을 입력해야 함 |
| -f 파일명 (--file) |
지정한 파일을 설치한 패키지 이름을 출력 |
| -c (--configfiles) |
해당 패키지의 설정 파일이나 스크립트 파일을 출력 |
| -d (--docfiles) |
해당 패키지의 문서 파일을 출력 |
| -R (--requires) |
어떤 패키지에 의존하고 있는지를 보여줌 해당 패키지가 설치되거나 동작 시에 필요한 패키지 목록을 보여줌 |
| --changelog | 특정 패키지의 바뀐 내역을 최근부터 연대순으로 보여줌 |
| --scripts | 설치 및 제거 관련 스크립트를 보여줌 |
| --filesbypkg | rpm패키지가 많을 경우 목록으로 보이는 파일 앞에 패키지명을 붙임 |
| --queryformat (--qf) |
질의의 결과를 원하는 형태로 출력할 때 사용 C언어의 printf() 함수의 동작 방법과 유사 |
사용 예
- 시스템에 설치된 모든 패키지 정보를 출력
rpm -qa
- 시스템에 설치된 모든 패키지 중에 mail이라는 문자열이 들어있는 패키지를 출력
rpm -qa | grep mail
- sendmail 패키지에 대한 정보를 출력
rpm -qi sendmail
- sendmail 패키지가 설치한 파일 목록을 출력
rpm -ql sendmail
- sendmail 패키지 관련 환경 설정 파일이나 실행 데몬 스크립트를 출력
rpm -qc sendmail
- /bin/ls 파일을 설치한 패키지 정보를 출력
rpm -qf /bin/ls
- grub 패키지 관련 문서 및 man 페이지 파일 정보를 출력
rpm -qd grub
- sendmail이 의존하고 있는 패키지 정보를 출력
rpm -qR sendmail
- sendmail 이 바뀐 내역을 최근부터 연대순으로 보여줌
rpm -q --changelog sendmail
- sendmail의 인스톨 및 언인스톨 관련 스크립트를 보여줌
rpm -q --scripts sendmail
- 패키지 파일에 대한 정보를 출력
rpm -qip totem-2.28.6-2.el6.i686.rpm
- 패키지 파일에서 설치되는 파일 목록 정보를 출력
rpm -qlp totem-2.28.6-2.el6.i686.rpm
- 확인하려는 패키지 파일이 많은 경우 각 파일 앞에 패키지 이름을 덧붙여 출력
rpm -qp --filesbypkg *.rpm
- 패키지를 사용자가 지정한 형태로 출력
rpm -qa --queryformat "%10{size} %{name}\n"
6. 검증(verify) 모드
- rpm 데이터베이스에 저장된 패키지의 메타데이터 정보를 이용하여 변경된 정보를 찾아내는 모드
- -V(--verify) 옵션을 사용하고 파일의 크기, 허가권, 소유권, 파일 형식 등에 대한 변경 정보를 출력
검증 코드
| 코드 | 설명 |
| S | 파일 크기(File Size) 변경 |
| M | 파일 모드(Permission & File Type) 변경 |
| 5 | 메시지 다이제스트(Message Digest) 변경 (보통 MD5 값 변경) |
| D | 장치 파일의 메이저 및 마이너 번호 불일치 |
| L | 링크 파일 경로 불일치 |
| U | 소유자 변경 |
| G | 그룹 소유자 변경 |
| T | 수정 시간(Modify Time) 변경 |
| P | 권한(Capability) 변경 |
| . | 테스트 통과 |
| ? | 테스트를 수행하지 못했을 경우(예를 들면 허가권 거부 등) |
주요 옵션
| 옵션 | 설명 |
| -V (--verify) | 검증시 사용하는 기본 옵션 |
| -a | 모든 패키지를 검사할 때 사용 |
사용 예
- 시스템에 설치된 모든 패키지를 검증
rpm -Va
- vsftpd 패키지를 검증
rpm -V vsftpd
7. 리빌드(rebuild) 모드 : rpmbuild
- rpm 소스 파일인 ‘.src.rpm’ 파일을 패키지 파일로 만드는 모드
- rpmbuild라는 명령어를 사용
- 미설치시에는 ‘dnf install rpm-build’ 실행
rpmbuild [option] 소스 패키지
주요 옵션
| 옵션 | 설명 |
| --rebuild | 소스 rpm 파일을 이용해서 rpm 패키지를 생성할 때 사용 |
사용 예
- root 가 실행했을 경우에 /root/rpmbuild 디렉터리 안에 생성. 만약 x86_64 기반에서 리빌드 했을 경우 rpm 패키지 파일은 /root/rpmbuild/RPMS/x86_64 디렉터리에 생성됨
rpmbuild --rebuild gftp-2.0.19-8.fc18.src.rpm'Linux' 카테고리의 다른 글
| [Linux] 커널 컴파일(Compile) (0) | 2025.09.15 |
|---|---|
| [Linux] gcc(GNU Compiler Collection) (0) | 2025.09.07 |
| [Linux] 압축 - tar(tape archive) (3) | 2025.09.01 |
| [Linux] 소프트웨어 설치 및 관리 - yum (1) | 2025.08.26 |
| [Linux] 프로세스 관련 명령어 - ps (2) | 2025.08.25 |