Linux

[Linux] 소프트웨어 설치 -rpm

thdwldud 2025. 9. 2. 19:39

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