시스템에 쉽게 프로그램을 설치하기 위한 것으로 레드햇 사에서 만들어 졌지만 대부분의 배포판에서 사용할 수 있는 패키지 관리자이다.

사용법 : rpm [옵션] 
-w : 아주 자세하게 디버깅 정보를 출력한다. 
--keep-temps : 임시 파일을 지우지 않는다. (/tmp/rpm-*).rpm을 디버깅할 때만 주로 사용한다. 
--quiet : 최대한 출력을 자제하며, 오로지 에러 메시지만 출력한다. 
--help : 좀 더 긴 사용법 설명서를 출력한다. 
--version : 사용중인 rpm의 버전을 한 줄로 표시한다. 
--rcfile <파일> : /etc/rpmcr 또는 $HOME/.rpmrc을 사용하지 않고 <file>을 사용 하도록 한다. 
--root <dir> : 모든 동작에 대하여 최상위 디렉토리를 주어진 디렉토리로 설정하고 작업한다. 예를 들어 설치할 떼 주어진 디렉토리를 / 라고 생각하고 그것을 기준으로 설치해나간다. 

------------------------------------------------
설치모드 : rpm -i [설치옵션] <패키지파일>+
질문모드 : rpm -q [질문옵션]
검증모드 : rpm-V|-y|--verify [검증옵션]
서명확인모드 : rpm --checksig <패키지파일>+
제거모드 : rpm -e <패키지명>+
제작모드 : rpm -bO [제작옵션] <패키지스팩>+
------------------------------------------------
많이 사용하는 옵션에 대해서는 위에서 설명했지만, 여기에서는 각각의 옵션에 대해 좀 더 자세히 알아 보기로 하겠다.
설치 옵션
rpm 설치 명령의 일반적인 형태는 다음과 같다.

rpm -i [설치옵션들]<패키지파일>+ 

. force : --replacepkgs, --replacefiles, --oldpackage를 모두 사용한 것과 같다.
. h, --hash : 패키지를 풀 때 해쉬마크(#)를 표시한다. 총 갯수는 50 개이다.
좀 더 나은 출력을 위해서는 -v를 함께 사용하라.
. oldpackage : 새로운 패키지를 지우고 더 예전 패키지로 교체할 때 사용한다.
. precent : 패키지 파일을 풀 때 퍼센트 표시를 한다.
. replacefiles : 이미 설치된 다른 패키지의 파일을 덮어쓰면서라도 패키지를 강제로 설치한다.
. replacefiles : 이미 설치된 다른 패키지의 파일을 덮어쓰면서라도 패키지를 강제로 설치한다.
. replacepkgs : 패키지가 이미 설치되어 있다 하더라도 다시 설치한다.
. root <디렉토리> : <디렉토리>를 루트로 하는 시스템에 설치를 수행한다. 데이터베이스는 <디렉토리> 밑에서 갱신되고 pre 또는 post 스크립트는 <디렉토리>로 chroot()한 후 실행됨을 의미한다.
. noscripts : preinstall, postinstall 스크립트를 실행하지 않는다.
. excludedocs : 문서라고 표시되어 있는 파일(맨페이지와 textinfo문서)은 설치하지 않는다.
. includedocs : 문서 파일을 포함한다. 이 옵션은 rpmrc파일에 excludedocs:1 이라는 것이 명시되어 있을 때만 필요하다.
. nodeps : 패키지를 설치하기 전에 의존성 검사를 하지 않는다.
. test : 패키지를 실제로 설치하지는 않고 충돌 사항이 있는지 점검하고 보고한다.
. -U, --upgrade : 현재 설치되어 있는 패키지를 새로운 버전의 RPM으로 업그레이드한다. -i 옵션과 같지만 예전 버전의 것이 자동으로 지워진다는 것이 다른다.

질문 옵션
rpm 질문 옵션의 일반적인 형식은 다음과 같다.

rpm -q [질문옵션] 

여기에서는 패키지 정보가 표시될 형식을 결정해주어야 한다. --queryformat옵션 뒤에 형식 문자열을 적어주면 된다.
질문 형식은 표준 printf 형식을 약간 변형한 것이다. 형식은 정적 문자열과 (개행문자,탭, 그리고 다른 특수문자에 대한 표준 C 문자 이스케이프 표기) printf 형식지정자로 구성되어 있다. rpm은 이미 출력 형태를 알고 있으므로 타입 지정자는 생략하고 {} 문자로 묶어서 헤더 태그의 이름으로 바꾸어 주어야 한다. 태그명 중 RPMTAG_ 부분은 생략해야 하며 태그명 앞에는 -문자를 적어주어야 한다.
예를 들어 질문 대상 패키지의 이름만 출력하고자 하는 경우 여러분은 %{NAME}을 형식 문자열로 사용해야 한다. 패키지명과 배포판 정보를 두 개의 칼럼으로 표시하고자 할 때는 %-30{NAME}%{DISTRIBUTION}라고 적는다.
rpm은 --querytags 옵션을 주면 인식하고 있는 모든 태그의 목록을 보여준다.
질문 옵션에는 패키지 선태과 정보 선택의 2가지가 있다. 먼저 패키지 선택 옵션을 살펴 보겠다.
. <패키지명> : 라는 이름을 패키지에 대한 질문을 수행한다.
. a : 모든 패키지에 대하여 질문을 수행한다.
. whatrequires <기능> : 제대로 작동하기 위해서는 <기능>을 필요로 하는 모든 패키지에 대하여 질문을 수행한다.
. whatprovides <가상> : 기능을 제공하는 모든 패키지에 대하여 질문을 수행한다.
. f <파일> : <파일>을 포함하는 패키지에 대하여 질문을 수행한다.
. F : -f 와 같지만 파일명을 표준 입력에서 읽는다.
. p <패키지파일> : 설치된 또는 설치되지 않은 <패키지파일> 에 대하여 질문을 수행한다.
. P : -p와 같지만 패키지 파일명을 표준 입력에서 읽는다.

다음은 정보선택 옵션을 살펴 보겠다.

. -i : 패키지 이름, 버전, 설명등의 정보를 출력한다. 만약 --queryformat이 주어져 있다면 그것을 이용하여 출력한다.
. R : 현재 패키지가 의존하고 있는 패키지 목록을 보여준다.
(--reauires와 같음)
. provides : 패키지가 제공하는 기능을 보여준다.
. l : 패키지 안의 파일을 보여준다.
. s : 패키지 안에 든 파일의 상태를 보여준다. (-l은 포함) 각 파일의 상태는 normal(정상), not installed(설치되지 않음), replaced(교체)의 값을 갖는다.
. d : 문서 파일만 보여준다.(-l은 포함)
. c : 설정 파일만 보여준다.(-l은 포함)
. scripts : 설치, 제거 과정에 사용되는 셀 스크립트가 있다면 그 내용을 출력한다.
. dump : 다음과 같은 파일 정보를 덤프한다: 경로 크기 수정일, MD5 체크섬, 모드, 소유자, 그룹, 설정 파일 여부, 문서 파일 여부, rdev, 심볼릭 링크 여부. 최소한 -l, -c, -d 이들 옵션 중 하나가 사용되어야 한다.

검증 옵션
rpm 검증 옵션의 일반적인 형태는 다음과 같다.

rpm -V|-y|--verify [검증옵션] 

설치되어 있는 파일들에 대하여 rpm 데이터베이스에 저장된 내용과 오리지널 패키지의 내용을 비교한다. 검증 내용은 크기, MD5 체크섬, 퍼미션, 타입, 소유자, 그룹 등이다. 차이점이 발견되면 출력한다. "c"은 설정 파일을 으미하며 그리고 파일명이 나타난다. 각각의 8개 문자는 RPM 데이터베이스에 저장된 속성과 비교한 결과를 나타낸다 "."(피리어드) 문자는 이상 없음을 나타낸다. 비교 결과 문제점이 발견되면 다음과 같은 문자가 나타난다.
5 : MD5체크섬
S : 파일크기
L : 심볼릭 링크
T : 갱신일
D : 장치
U : 사용자
G : 그룹
M : 퍼미션과 파일 타입을 포함함 모드

서명 확인
rpm 서명 확인 명령은 다음과 같다.

rpm --checksig <패키지파일>+ 

패키지의 오리지널 여부를 가려내기 위하여 패키지 안에 든 PGP 서명을 점검한다. PGP설정 정보는 /etc/rpmrc에서 읽어온다.

제거 옵션
rpm 제거 명령의 일반적인 형태는 다음과 같다.

rpm -e <패키지파일>+ 

. noscripts : preuninstall, postuninstall 스크립트를 실행하지 않는다.
. nodeps : 패키지 제거시 의존성을 검사하지 않는다.
. test : 실제로 패키지를 제거하는 것은 아니고 테스트해본다.

제작 옵션
rpm 제작 명령의 일반적 형식은 다음과 같다.

rpm -bO [제작옵션] <패키지스펙>+ 

-bO은 제작 단계와 제작할 패키지를 나타내는 것으로서 다음 중 하나의 값을 갖는다.
. bp : 스펙 파일의 "%prep" 단계를 실행한다. 보통 소스를 풀고 패치를 가하는 작업이다.
. bl : "목록 점검"을 한다, "%files" 섹션은 확장 메크로이다. 이 파일들이 존재하는지 여부를 알아본다.
. bc : "%build" 단계를 수행한다.(prep 단계를 한 후) 보통 make에 해당하는 일을 해낸다.
. bi : "%install" 단계를 수행한다.(prep, build단계를 거친 후) 보통 make install에 해당하는 일을 한다.
. bb : 바이너리 패키지를 만든다.(prep, build, install 단계를 수행한 후)
. ba : 바이너리와 소스 패키지를 만든다.(prep, build, intall 단계를 수행한후)

다음 옵션도 사용할 수 있다.

. short-circuit : 중간 단계를 거치지 않고 지정한 단계로 직접 이동한다. -bc와 -bi하고만 쓸 수 있다.
. timecheck : "시간점검"을 0 (불가능)으로 설정한다. 이 값은 rpmrc에서 "timecheck:"로 설정할 수 있다. 시간 점검 값은 초로 표시되는데 파일이 패키징되는 걸리는 최대 시간을 정한다. 시간을 초과하는 파일들에 대하여 경고 메시지가 출력된다.
. clean : 패키지를 만든 후 build 디렉토리를 지운다.
. test : 어떠한 build 단계를 거치지 않는다. 스펙 파일을 테스트할 때 유용한다.
. sign : 패키지 안에 PGP 서명을 넎는다. 패키지를 누가 만들었는지 확인할 수 있다.
. rpm --recompile <소스패키지파일>+ 또는 rpm --rebuild <소스패지파일>+ : rpm은 주어진 소스 패키지를 설치하고 prep, 컴파일, 설치를 해준다. --rebuild는 새로운 바이너리 패키지도 만들어준다. 제작을 마치면 build 디렉토리는 --clean 옵션에서와 마찬가지로 지워진다. 패키지로부터 나온 소스와 스펙 파일은 삭제된다.

기존의 RPM에 서명하기

rpm --resign <바이너리패키지파일>+ 

패키지 파일에 새로운 서명을 한다. 기존의 서명은 삭제된다.
서명 기능을 사용하기 위해서는 PGP를 사용할 수 있어야 한다. 그리고, RPM 공개키를 포함하는 공개키 링을 찾을 수 있어야 한다. 기본적으로 RPM은 PGPPATH에서 지시하는 PGP 기본 설정을 사용한다. PGP가 기본적으로 사용하는 키 링을 갖고 있지 않을 때는 /etc/rpmrc 파일에 설정해 두어야 한다.
pgp_path는 /usr/lib/rpm 대신 쓰일 경로 이름이다. 이 경로에는 여러분의 키 링을 포함해야 한다. 여러분이 만든 패키지에 서명을 하려면, 여러분은 자신의 공개키와 비밀키 한쌍을 만들어두어야 한다. (PGP 메뉴얼 참고) /etc/rpmrc 에 적는 것 말고도 다음 사항을 추가해야 한다.
. signature : 서명 유형. 현재로서는 pgp만 지원된다.
. pgp_name : 여러분의 패키지에 서명할 user 명을 적는다. 패키지 제작시 --sign 옵션을 추가한다. 여러분의 입력을 받고 나면 패키지가 만들어지고 동시에 서명된다.

데이터베이스 재생성 옵션
rpm 데이터베이스를 다시 만드는 명령은 다음과 같다.

rpm --rebuilddb 

패키지에서 나온 소스와 스펙 파일은 삭제된다.
rpm은 강력한 패키지 관리자로서 각각의 소프트웨어 패키지를 만들고 설치하고 질문 하고 검증하고 갱신하며 제거할 수 있다. 패키지란 설치할 파일들과 이름, 버전, 설명등을 포함하는 패키지 정보를 지닌 저장 파일이다. 기본적인 7가지 동작 모드가 있으며 각각 다른 옵션들을 갖는다. 설치, 질문, 검증, 서명확인, 제거, 제작, 그리고 데이터베이스 재건설 이 바로 그것이다.

1) RPM 파일 읽는법
패키지 이름은 일정한 규칙으로 되어 있다. 한 예로 다음과 같은 아파치 RPM 패키지가 있다고 가정한다.
apache-1.3.26-i686.rpm
. linux : RPM 패키지 이름이다.
. 2.0.2 : linux 패키지의 버전이다.
. i686 : 실행 바이너리의 시스템 아키텍쳐이다.

2) RPM 패키지 설치
보통 RPM을 설치하려면 rpm -ivh 옵션을 혼합하여 설치하고자 하는 패키지 명을 지정하게 된다.

# rpm -ivh apache-1.3.22-i686.rpm 

하지만 위의 명령처럼 쉽게 rpm이 설치되면 다행이지만 rpm은 설치 시 기존 파일 이나 의존성 관계 등으로 여러 가지 에러를 볼 수 있다. 크게 3가지 경우로 해서 각각의 에러에서의 해결 방법에 대해 알아보자

a. 이미 동일 패키지가 설치되어 있는 경우

# rpm -ivh apache-1.3.22-i686.rpm 
apache package apache-1.3.22 Is already installed 
error : apache-1.3.22-i686.rpm cannot be installed 

. 해결책 : --replacepkgs 옵션을 설치시 추가적으로 입력하여, 기존 패키지를 덮어쓴다.

b. 설치될 패키지의 파일이 총돌나는 경우.

# rpm -ivh apache-1.3.22-i686.rpm 
apache /usr/lib/xxx.a conflicts with file from mod_ssl-2.8.4 
error : apache-1.3.22-i686.rpm cannot be installed

패키지에 포함된 파일의 라이브러리가 있는데, 현재 설치하는 패키지가 동일한 라이브러리의 다른 버전을 설치하려고 하는 경우로, 차근차근 원인을 해결해야 한다. --replacepkgs 옵션으로 강제 설치하는 방법이 있다.

C. 의존성 문제가 발생하는 경우
이 경우에는 이 패키지를 설치하기 전에 먼저 설치해야 하는 패키지가 있으므로, 에러에 나타나는 패키지를 먼저 설치 진행하여야 한다.

3) 패키지 제거
rpm 패키지 제거는 rpm -e 옵션과 함께 제거하고자 하는 패키지 명을 지정한다. 패키지 제거는 패키지 명만 입력하여도 제거 가능한다.

rpm -e apache 

하지만, 이 또한 의존성 문제로 에러 메시지를 만날 수 있다.

# rpm -e apache 
removing these packages would break dependencies: 
linux is needed by mod_ssi-2.8.4 

의존성이 걸리는 패키지를 먼저 삭제하여야 한다. 만일, 의존성을 무시하려면 --nodeps 옵션으로 삭제하면 삭제하려고 하는 패키지만 삭제 가능하지만, 주의가 필요하다.

4) 패키지 업그레이드
기존 설치된 패키지에 새로 나온 패키지로 업그레이드 할 때에는 rpm -Uvh 옵션을 사용한다.

# rpm -Uvh apache-1.3.26-i686.rpm 
linux ##################### 

만일 다운 그레이드가 필요하다면, --oldpackage 옵션을 사용한다.
5) 패키지 정보 확인

# rpm -q apache 
apache-1.3.22-i686.rpm 

rpm -ql 옵션과 함께 패키지 이름을 지정하면 지정한 패키지의 설치된 디렉토리와 파일들을 볼 수 있다.

# rpm -ql apache 
/etc/httpd 
/etc/httpd/conf 
/etc/httpd/conf/access.conf 
/etc/httpd/conf/httpd.conf 
/etc/httpd/conf/magic 
/etc/httpd/conf/srm.conf 
/etc/httpd/logs 
/etc/httpd/modules 
/etc/logrotate.d/apache 
/etc/rc.d/init.d/httpd 
------생략------ 
2005/06/17 10:05 2005/06/17 10:05

트랙백 주소 :: 이 글에는 트랙백을 보낼 수 없습니다