Linux - 레드햇 패키지 관리기법 : RPM
RPM
레드햇사에서 만든 패키지 관리 기법으로 프로그램을 .rpm 형태의 파일로 배포하고, rpm 명령을 사용하여 손쉽게 설치 및 갱신, 제거, 검증, 질의 등의 관리를 할 수 있다. 배포되는 rpm파일의 형식은 다음과 같다.
패키지이름-버전-릴리즈.리눅스버전.아키텍처.rpm
구성 | 설명 |
패키지이름 | 어떤 패키지인지를 알려주는 패키지의 이름을 나타낸다. |
버전 | 패키지의 버전을 의미한다. |
리눅스 버전 | 기준이 되는 리눅스 버전을 나타낸다. |
아키텍처 | 패키지가 사용 가능한 시스템을 의미한다. |
rpm 사용법
rpm 명령의 사용법은 설치 및 갱신, 제거, 질의, 검증 모드와 소스 rpm(.src.rpm)의 리빌드 모드 등 총 5가지로 나눌 수 있다.
rpm [option] [패키지_파일명]
① 설치 및 갱신(install & upgrade) 모드
새로운 패키지를 설치하거나 갱신을 할 수 있다.
■ 주요 옵션
옵션 | 설명 |
-i | 새로운 패키지를 설치할 때 사용한다. 기본적으로 이전 버전의 같은 패키지가 있을 경우 설치가 되지 않는다.(--install) |
-U | 기존의 패키지를 새로우 ㄴ버전의 패키지로 업그레이드할 때 사용한다. 만약 설치된 패키지가 없을 경우에도 새로운 버전을 설치할 수 있는데 이 경우에는 -i 옵션과 같다고 볼 수 있다.(--upgrade) |
-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/localsrc/*.rpm
② 제거(erase) 모드
설치된 패키지를 제거한다. 패키지를 제거할 때는 -e 옵션을 사용하는데, 다른 패키지에 대한 의존성이 발생한 경우에는 제거되지 않는다. 의존성이 발생한 패키지를 제거하기 위해서는 먼저 의존성 관련 패키지를 제거하거나, 추가로 --nodeps 옵션을 지정해야 한다.
■ 주요 옵션
옵션 | 설명 |
-e | 설치된 패키지를 삭제한다. 의존성을 갖는 패키지가 있는 경우에는 삭제되지 않는다.(--erase) |
--nodeps | 의존성을 갖는 패키지가 존재하는 경우에도 삭제한다. |
--test | 실제로 제거하지 않고, 테스트를 한다. 보통 -vv 옵션과 함께 사용한다. |
--allmatches | 동일한 이름을 갖는 패키지가 중복 설치되어 있는 경우에 모두 제거한다. |
■ 사용 예
eog라는 패키지를 제거한다. 의존성이 있는 패키지가 존재할 경우에는 제거되지 않는다.
rpm -e eog
httpd라는 패키지를 제거하는데, 의존성이 있는 패키지가 존재할 경우에도 제거한다.
rpm -e httpd --nodeps
③ 질의(query) 모드
패키지 관련 정보를 알아내기 위해 -q 옵션을 사용한다. -q 옵션만 사용하면 패키지 설치 유무나 간단한 버전 정보만 출력한다. 더욱 정확한 정보 출력을 위해서 -i, -a, -l, -d 등의 옵션과 연동해서 쓴다.
■ 주요 옵션
옵션 | 설명 |
-q | 질의 시에 꼭 사용해야 하는 옵션이다. 패키지를 찾으면 패키지 이름과 버전만 표시한다.(--query) |
-i | 설치된 패키지의 정보를 출력한다. -p 옵션과 같이 사용하면 rpm 패키지 파일에 대한 정보를 알 수 있다.(--info) |
-l | 패키지에서 설치한 모든 파일 정보를 출력한다. 역시 -p와 함께 사용하면 rpm 패키지 파일이 설치되는 목록 파일을 알 수 있다.(--list) |
-a | 시스템에 설치된 모든 패키지 목록을 출력한다.(--all) |
-p 패키지_파일명 | rpm 패키지의 파일에 대한 정보를 보여준다. 이 옵션을 사용하려면 패키지 파일의 정확한 이름을 입력해야 한다.(--package) |
-f 파일명 | 지정한 파일을 설치한 패키지 이름을 출력한다.(--file) |
-c | 해당 패키지의 설정 파일이나 스크립트 파일을 출력한다.(--configfiles) |
-d | 해당 패키지의 문서 파일을 출력한다.(--docfiles) |
-R | 어떤 패키지에 의존하고 있는지를 보여준다. 즉, 해당패키지가 설치되거나 동작 시에 필요한 패키지 목록을 보여준다.(--requires) |
--changelog | 특정 패키지의 바뀐 내역을 최근부터 연대순으로 보여준다. |
--scripts | 설치 및 제거 관련 스크립트를 보여준다. |
--filesbypkg | rpm패키지가 많을 경우 목록으로 보이는 파일 앞에 패키지명을 붙인다. |
--queryformat | 질의의 결과를 원하는 형태로 출력할 때 쓴다. C언어 printf() 함수의 동작 방법과 유사하다.(--qf) |
■ 사용 예
시스템에 설치된 모든 패키지 정보를 출력한다.
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
④ 검증(Verify) 모드
검증 모드는 rpm 데이터베이스에 저장되어 있는 패키지의 메타데이터 정보를 이용하여 변경된 정보를 찾아내는 모드이다. 검증 모드는 -V(--verify) 옵션을 사용하고 파일의 크기, 허가권, 소유권, 파일 형식 등에 대한 변경 정보를 출력한다. 관련 검증 코드는 다음의 표와 같다.
■ 검증 코드
코드 | 설명 |
S | 파일 크기(File Size) 변경 |
M | 파일 모드(Permission & File Type) 변경 |
5 | 메시지 다이제스트(Message Digest) 변경(보통 MD5 값 변경) |
D | 장치 파일의 메이저 및 마이너 번호 불일치 |
L | 링크 파일 경로 불일치 |
U | 소유자 변경 |
G | 그룹 소유권 변경 |
T | 수정 시간 변경 |
P | 권한 변경 |
. | 테스트 통과 |
? | 테스트를 수행하지 못했을 경우(예를 들면 허가권 거부 등) |
■ 주요 옵션
옵션 | 설명 |
-V | 검증 시 사용하는 기본 옵션이다.(--verify) |
-a | 모든 패키지를 검사할 때 사용한다. |
■ 사용 예
시스템에 설치된 모든 패키지를 검증한다.
rpm -Va
vsftpd 패키지를 검증한다.
rpm -V vsftpd
⑤ 리빌드(rebuild) 모드 : rpmbuild
rpm 소스 파일인 .src.rpm 파일을 패키지 파일로 만드는 모드로서 rpmbuild라는 명령어를 사용한다.
옵션 | 설명 |
--rebuild | 소스 rpm 파일을 이용해서 rpm 패키지를 생성할 때 사용한다. |
■ 사용 예
root가 실행했을 경우에 /root/rpmbuild 디렉터리 안에 생성한다. 만약 x86_64 기반에서 리빌드 했을 경우 rpm 패키지 파일은 /root/rpmbuild/RPMS/x86_64 디렉터리에 생성된다.
rpmbuild --rebuild gftp-2.0.19-8.fc18.src.rpm
참고자료
CentOS 7으로 리눅스마스터 1급 정복하기