RPM(RedHat Package Manager)
RPM이란 RedHat Pacage Manager의 약자로 레드햇 계열의 리눅스 배포판에서 사용하는 프로그램(패키지) 설치 관리 도구 입니다. 현재는 RPM Package Manager의 재구적 약자로 사용되어 지고 있습니다. 오픈소스 진영 특유의 유머가 느껴지는 약자로 GNU의 GNU is Not Unix 와 같은 원리라고 볼 수 있습니다.



RPM 등장 배경
초기의 리눅스에서는 모든 패키지를 tar와 gzip으로 묶인 소스 파일을 가지고 직접 컴파일 한 후에 수동으로 설치해야 했습니다.  이때 만약 A라는 패키지(프로그램)을 개발하는데에 B라는 패키지가 사용되었다면 B패키지를 먼저 수동으로 설치 후 A패키지를 수동으로 설치해 주어야 했습니다. 만약 하나의 패키지가 아니라 이런식으루 줄줄이 여러 패키지에 의존하는 경우 문제는 더욱 더 복잡해 졌습니다.

따라서 패키지 설치에 너무 많은 시간과 노력이 투자 되었기에 RedHat 사에서 리눅스를 더 편하게 사용하고자 패키지 관리 프로그램인 RPM을 만든 것입니다. RPM을 이용하면 Windows의 setup.exe와 비슷하게 패키지를 자동으로 설치할 수 있게 도와줍니다. 
그러나 패키지 사이에 의존하고 있는 패키지까지 자동으로 설치되지는 않습니다. (패키지 의존 관리까지 원하는 경우 이후 등장한 yum을 사용합니다.)



RPM 패키지 구성
RPM 패키지는 컴파일되어 설치한 실행파일, 설정파일, 라이브러리 등을 묶은것입니다.
설치 전후로 스크립트를 사용하여 필요한 작업들이 수행되며, 삭제도 마찬가지로 패키지로 묶인 파일 리스트를 보관하여 관련 파일들을 삭제하게 됩니다. 설정 파일의 경우에는 설정하고 싶은 설정파일이 있을 때 설정파일명.RPMNEW 파일을 생성하고, 패키지를 삭제하려는 경우 설정파일은 .RPMSAVE 확장자로 설정파일이 백업됩니다.


SRPM
SRPM은 RPM 패키지 제작 과정에서 소스파일을 유지하면서 원본 소스에 패치를 적용하여 수정 이력을 관리합니다. 그리고 RPM 제작을 위해 사용되는 소스와 패치파일 제작과정에 대한 명세파일(*.spec) 을 묶어 ~.src.rpm 형태로 배포합니다.




RPM 패키지 파일의 이름 규칙
RPM 파일은 *.rpm 식의 파일 이름을 갖고 패키지의 버전과 실행 환경에 따라 규칙성 있는 패키지 명을 가지게 됩니다.
따라서 수 많은 패키지를 이름만 보고도 어느것을 설치해야 할지 결정할 때 필요한 많은 정보를 얻을 수 있습니다.

예를 들어 mysql DB와 Java를 연결해주는 jdbc 커넥터의 패키지명은 다음과 같습니다.
mysql-connector-java-5.1.25-3.el7.noarch.rpm


위의 mysql java connector를 예로 RPM 패키지명의 이름은 다음의 형식을 따릅니다.

패키지 이름
-
소스 버전
-
릴리즈 버전
.
배포판(OS) 버전
.
아키텍처
.
rpm
mysql-connector-java
-
5.1.25
-
3
.
el7
.
noarch
.
rpm


패키지 이름
패키지 이름은 말 그대로 패키지의 이름으로 어떤 패키지인지를 구분할 수 있는 가장 중요한 항목입니다.
'gedit' 처럼 단순할수도 있으며 예와 같이 -으로 구분되어진 긴 이름을 갖을 수도 있습니다.


소스버전
소스 버전은 5.1.25와 같이 보통 세 레벨에 따라 구성되어지며 major 버전. minor 버전. patch 버전 순으로 구성 되어 집니다. 당연하게도 버전의 숫자가 높을수록 최신 버전이며, major 버전이 바뀐 경우는 기능상 아주 큰 업데이트가 있었을 경우, minor는 그보다는 작은 이슈들이 업데이트 되었을 경우이며, patch 버전은 자잘한 버그나 사용시 체감하지 못하는 정도의 변화가 있었을 경우 증가됩니다. 딱 이렇다 할 기준선은 없으나 major 버전쪽이 변화 할수록 큰 변화가 있었다고 생각하면 됩니다.


릴리즈 버전
이또한 문제점을 개선할 때마다 붙여지는 버전입니다.
정확히는 패키지를 만들때 사용된 원본 소스에 패치를 적용하거나 수정하여 배포하는 경우 배포 버전을 올려 rpm 패키지를 제작하는데 릴리즈 버전이 3인 경우 3번 수정하여 릴리즈한 패키지라는 뜻입니다.


배포판(os) 버전
CentOS를 포함한 RHEL(RedHat EnterPrise Linux) 의 경우에는 배포판 버전을 rpm 패키지 파일명에 사용합니다. el7은 RHEL 7을 의미합니다.


아키텍처
패키지가 컴파일된 아키텍처(CPU) 를 의미하며, 이는 곧 이 패키지를 설치할 수 있는 CPU를 의미합니다.
아키텍처 부분에는 다음과 같은 것들이 있습니다.
i386, i486, i586, i686 : 인텔 또는 AMD 계열의 32비트 CPU를 의미합니다.
x86_64 : 인텔 또는 AMD 계열의 64비트 CPU를 의미합니다.
alpha/sparc/ia64 : 미국 dec사의 알파, 썬 마이크로 시스템즈의 스팍, 인텔의 아이테니엄 프로세서로 CPU 명령어를 줄여 하드웨어 구조를 심플하게 만드는 RISC(Reduced Instruction Set Computer) 설계 방식의 CPU를 의미하나 잘 사용되지는 않습니다.
src : 소스 파일 패키지로 설치 이후 별도로 컴파일 해야 합니다.
noarch : (No Architecture) 모든 CPU에 설치 가능합니다.


.rpm
rpm 확장자로 rpm 패키지임을 알려줍니다.




RPM 명령어 사용
rpm 명령어 사용 방법을 간단히 설명하자면 다음과 같습니다.
rpm [옵션] [rpm 패키지파일 또는 rpm 패키지이름]


먼저 rpm 패키지가 이미 설치 되어 있는 상태 인지 조회합니다.
파이프와 grep을 통해 더욱 세밀하게 조회할 수 있습니다.
rpm -qa
rpm -qa 패키지이름
rpm -qa | grep 패키지이름


패키지를 실질적으로 설치하기 위해서는 다음의 옵션을 가장 많이 사용합니다.
rpm -Uvh 패키지파일

U 옵션은 패키지를 설치하되 만약 패키지가 이미 설치된 경우 업그레이드로 진행하라는 뜻입니다.
v 옵션은 패키지 설치시 설치 과정을 출력하라는 뜻입니다.
h 옵션은 설치 진행률을 # 기호로 채워나가도록 화면에 출력하라는 뜻입니다.


패키지를 삭제하는 경우는 e 옵션(erase)을 사용합니다.
rpm -e 패키지이름



RPM 명령어의 동작별 실행 옵션
RPM 명령어는 다양한 옵션들이 존재하며, 크게 어떤 동작을 할 것인지에 대한옵션들이 존재합니다.
다음은 각각 설치 또는 업그레이드, 질의, 검증, 서명 확인, 제거, 데이터베이스 다시 제작 등 총 여섯 가지의 동작 옵션입니다.

동작
옵션
사용법

설치
설치 -i
rpm -i [옵션] 패키지명
업그레이드
-U
-F
rpm -U [옵션] 패키지명
rpm -F [옵션] 패키지명
질의
-q
rpm -q [옵션] 패키지명
검증
-v
rpm -v [옵션] 패키지명
서명 확인
-checksig
rpm --checksig 패키지명
삭제
-e
rpm -e [옵션] 패키지명
데이터베이스 다시 제작
--rebuilddb
rpm --rebuilddb


가장 많이 사용되는 옵션은 -U, -q, -e 옵션입니다.
또한 위의 동작 옵션과 같이 사용되는 옵션은 다음과 같습니다.
옵션
설명
-v
상세 정보를 출력합니다.
-vv
아주 자세한 디버깅 정보를 출력합니다.
--quiet
최대한 불필요한 출력을 줄이며 에러 메시지만 출력합니다.
--version
사용중인 rpm 버전을 출력합니다.
--root <dir>
모든 동작을 <dir> 을 기준으로 최상위 디렉터리로 인식하고 작업합니다.
--root /myDir 를 사용하면 이후 모든 경로에 대해 '/' 는 /myDir을 의미하게 됩니다.
--help
사용 설명을 출력합니다.




설치 및 업그레이드시의 옵션
RPM의 주요 기능인 패키지 설치 및 업그레이드 옵션으로 i 와 U 옵션이 있습니다.
원칙적으로는 이미 설치된 패키지는 재설치가 불가능하지만 U옵션을 사용하여 이미 설치된 패키지의 경우에는 업그레이드로 진행할 수 있습니다.

-v 옵션은 설치시에 상세 정보를 실시간으로 출력하고, -h 옵션해시(#) 라는 뜻으로 # 기호를 windows 설치 로딩바와 같이 실시간으로 출력하므로써 설치가 얼마나 진행 됐는지를 출력해 줍니다.

다음은 gedit를 rpm 명령으로 설치한 것이며, 설치 진행상태와 이미 해당버전의 패키지가 설치되어 있다는 정보를 출력하고 있습니다.




추가적으로 설치 명령과 같이 사용되는 옵션
옵션
설명

--nodeps
패키지 설치시 현재 설치하는 패키지가 필요로 하는 의존 패키지의 설치 여부를 검사하지 않습니다.
rpm 패키지는 또 다른 패키지의 기능을 사용하기도 하는데 당연히 해당 패키지가 먼저 설치되어 있어야 하지만 해당 옵션을 사용하면 검사를 하지 않습니다.
--force
설치중 발생하는 에러를 무시하고 강제로 설치를 진행합니다.
--replacepkgs --replacefiles --oldpackage 옵션들을 동시에 사용한것과 같은 효과입니다.
--oldpackage
새로운 패키지를 지우고 구 버전의 패키지를 설치할 때 사용합니다.
--replacepkgs
이미 같은 패키지가 설치되어 있으면 재설치 합니다.
--root <dir>
모든 동작을 <dir> 을 기준으로 최상위 디렉터리로 인식하고 작업합니다.
--root /myDir 를 사용하면 이후 모든 경로에 대해 '/' 는 /myDir을 의미하게 됩니다.
--test
패키지를 실제로 설치하지 않고 가상으로 설치해본 뒤 오류나 충돌사항이 있는지 점검합니다.
--noscript
설치 전후로 실행하는 preinstall, postinstall 스크립트를 실행하지 않습니다.
--excludedocs
문서파일(man page, info page)를 제외하고 설치합니다.
-h --hash
해시(# 기호)를 사용하여 현재 몇 퍼센트나 설치가 진행되었는지 진행상태를 표시합니다.
--percent
패키지 설치 진행상태를 %로 표시합니다. FTP 설치 시 유용합니다.




질의 기능 옵션
RPM 패키지에 대한 정보를 질의할 때 사용하는 기능입니다.
패키지의 역할 및 패키지에 포함된 파일에 대한 정보를 확인할 때 사용합니다.

이미 설치 되어 있는 패키지에 대해 자주 사용하는 질의 명령어는 다음과 같습니다.
rpm -qa 패키지명  #시스템에 해당 패키지가 설치되어 있는지 확인합니다.
rpm -qf 패키지파일  #이미 설치된 파일이 어느 패키지에 포함된 것인지를 확인합니다.
rpm -ql 패키지명  #특정 패키지에 어떤 파일들이 포함되어 있는지 확인합니다.
rpm -qi 패키지명  #설치된 패키지의 상세 정보를 확인합니다.


아직 설치 되지 않은 패키지 파일에 대해 자주 사용하는 질의 명령어는 다음과 같습니다.
rpm -qlp 패키지파일  #패키지 파일에 어떤 파일들이 포함되어 있는지 확인합니다.
rpm -qip 패키지파일  #패키지 파일의 상세 정보를 출력합니다.



추가적으로 질의 명령과 같이 사용되는 옵션
- 하늘색은 질의 대상 지정에 대한 옵션이며, 황색은 어떤 정보를 얻을 것인지에 대한 옵션입니다.
옵션
설명
-a
모든 패키지에 대하여 질의를 실행합니다.
-f <파일명>
특정 패키지 파일에 대하여 질의를 실행합니다.
-F
-f 옵션과 비슷하나 파일명을 표준 입력을 통해서 입력받아 수행합니다.
-p <파일명>
설치되거나 설치되지 않은 패키지 파일에 대해 질의를 수행합니다.
-P
-p 옵션과 비슷하나 파일명을 표준 입력을 통해서 입력받아 수행합니다.
-i
패키지에 관한 정보들을 보여줍니다.
-R
패키지가 의존하고 있는 패키지들의 목록을 보여줍니다.
--provides
패키지가 제공하는 기능을 보여줍니다.
-l
패키지 안의 파일들을 보여줍니다.
-s
패키지 안의 파일의 상태를 보여줍니다.
-d
문서 파일만 보여주며 -l 옵션과 함께 사용합니다.
-c
설정 파일만 보여줍니다.
-scripts
패키지 설치 또는 제거에 실행되는 쉘 스크립트를 확인합니다.
--dump
MD5 체크섬, 소유자, 그룹, 설정파일 여부, 심볼릭 링크 여부등의 정보를 dump합니다.




검증 기능 옵션
RPM 패키지가 설치된 이후 RPM 데이터베이스에 저장된 내용과 원본 내용을 비교하여 최초 설치시와 다른점을 검사합니다. MD5, 타입, 퍼미션, 소유자, 그룹등의 8개 항목을 검사하며, 오휴가 발생하는 경우 항목에 대한 문자를 출력합니다.

다음의 셋 중 하나를 사용합니다.
rpm -Va
rpm -ya
rpm -a --verify

출력값
문자
설명
.
이상이 없음을 의미합니다.
5
MD5 체크섬 불일치를 의미합니다.
D
사용자 불일치를 의미합니다.
G
그룹 불일치를 의미합니다.
S
파일 크기 불일치를 의미합니다.
L
심볼릭 링크 경로 불일치를 의미합니다.
M
퍼미션 및 파일 타입 불일치를 의미합니다.
P
기능 불일치를 의미합니다.
T
갱신일 불일치를 의미합니다.
U
디바이스의 Major/Minor 넘버 불일치를 의미합니다.



RPM 제거 기능
설치된 RPM 패키지를 제거(erase) 하는 방법입니다.
rpm -e 패키지명


의존성 문제로 삭제되지 않는 경우
설치와 마찬가지로 삭제시에 현재 삭제하고자 하는 패키지를 다른 패키지에서 사용중이라면, 삭제가 되지 않는 경우가 있습니다. 이때는 의존성 무시 옵션인 --nodeps를 사용하여 강제 삭제할 수 있습니다.




서명 기능
RPM 패키지 파일은 이곳 저곳에서 얻어오는 경우가 많고 출처를 알 수 없는 경우도 존재합니다. 만약 누군가 악의적으로 만든 RPM 파일을 가져온 경우 시스템에 치명적인 보안 결함이 발생할 수 있습니다. 이때 정상 RPM 파일인지 확인할 수 있는 기능이 서명 기능입니다.
rpm --checksig 패키지명




데이터베이스 리빌드(다시 제작) 기능
만약 설치된 패키지에 대한 정보가 저장되어 있는 RPM 데이터베이스에 문제가 생기는 경우 rpm 명령어가 동작하지 않을 수 있는데, 데이터베이스 리빌드 기능을 수행하면 됩니다.
rpm --rebuilddb




블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

댓글을 달아 주세요! 질문 환영합니다!