RPM(Redhat Package Manager)
☆ RPM(Redhat Package Manager)
RPM(Redhat Package Manager)이란 Redhat사에서 패키지를 좀 더 쉽게 설치하고 관리하기 위해 만든 패키지 관리 프
로그램이다. 복잡한 컴파일 과정 없이 간단하게 패키지를 설치할 수 있는 장점이 있지만 반대로 사용자에게 맞는
다양한 옵션들은 설정할 수 없다는 것이 단점이다. 그래서 간단한 프로그램의 경우에는 RPM으로 설치하고 서버와
같은 중요한 프로그램은 소스를 컴파일 하여 설치하는 것이 좋다.rpm명령어는 rpm패키지를 설치하고 삭제 또는 관
리하는 명령어이다.
(명령어 형식)
# rpm [옵션]
질의 옵션 (-q 또는 --query 옵션과 함께 사용): -c, --configfiles 모든 설정 파일을 나열합니다 -d, --docfiles 모든 문서 파일을 나열합니다 --dump 기본 파일 정보를 보여줍니다 -l, --list 패키지 안의 파일을 나열합니다 -s, --state 나열된 파일의 상태(state)를 보여줍니다 -a, --all 모든 패키지에 대해 질의/검증합니다 -f, --file 파일이 들어있는 패키지에 대해 질의/검증 합니다 -g, --group 그룹 안의 패키지를 질의/검증합니다 -p, --package query/verify a package file
검증 옵션 (-V 또는 --verify 옵션과 함께 사용): --nodeps 패키지의 의존성을 검사하지 않습니다. -a, --all 모든 패키지에 대해 질의/검증합니다. -f, --file 파일이 들어있는 패키지에 대해 질의/검증 합니다. -g, --group 그룹 안의 패키지를 질의/검증 합니다 -p, --package query/verify a package file
서명 옵션: --addsign sign package(s) (identical to --resign) -K, --checksig verify package signature(s) --delsign delete package signatures --import import an armored public key --resign sign package(s) (identical to --addsign) --nodigest don't verify package digest(s) --nosignature don't verify package signature(s)
데이터베이스 옵션: --initdb 데이터베이스를 초기화 합니다. --rebuilddb 설치된 패키지 헤더에서 상반된 목록(inverted lists)의 데이터베이스를 재구축 합니다
설치/업그레이드/삭제 옵션: -e, --erase=<패키지>+ 패키지를 (제거) 삭제합니다 --excludedocs 패키지에 포함된 문서 파일을 설치하지 않습니다 --excludepath=<경로> <경로>로 시작되는 파일은 설치하지 않습니다 --force --replacepkgs 와 --replacefiles 옵션을 동시에 사용합니다 -F, --freshen=<패키지파일>+ 기존에 설치된 패키지를 업그레이드 합니다 -h, --hash 패키지 설치를 해시마크(#)로 표시합니다 (-v 옵션과 함께 사용하는 것이 좋습니다) -i, --install install package(s) --nodeps 패키지의 의존성을 검사하지 않습니다 --oldpackage 이전 버전의 패키지로 다운그레이드 합니다 (--force 옵션을 사용시에는 이 옵션이 자동으로 적용됩니다) --percent 패키지 설치를 퍼센트(%)로 표시합니다 --prefix=<디렉토리> 재배치 기능이 있는 패키지의 경우, 지정한 <디렉토리>로 재배치하여 설치합니다. --replacepkgs 패키지가 이미 설치되어 있는 경우에도 설치합니다 --test 패키지를 설치하지 않고, 제대로 설치되는지만 확인합니다 -U, --upgrade=<패키지파일>+ 패키지를 업그레이드 합니다
Common options for all rpm modes and executables: -v, --verbose 자세한 출력을 제공합니다 |
(명령어 사용예)
■ RPM 패키지 설치 및 업데이트
# rpm -ivh package-filename.rpm /* 패키지 설치, 이전 버전의 패키지를 삭제하지 않고 새 버전 설치 */
(-i: install, -v: verbose, -h: hash)
# rpm -Fvh package-filename.rpm /* 패키지 없데이트, 이전 버전의 패키지가 있을 경우만 패키지를 설치 */
(-F: Freshen)
# rpm -Uvh package-filename.rpm /* 패키지 업데이트, 이전 버전이면 업그레이드 하고 없으면 설치 */
(-U: Upgrade) 보통은 Uvh로 설치하는게 좋다.
# rpm -ivh --nodeps package-filename.rpm /* 의존성 체크 안함, 의존성 문제를 무시하고 설치 */
(-nodeps: no dependency)
# rpm -Uvh --force package-filename.rpm /* 패키지 충돌이 방생해도 강제적으로 설치 */
■ RPM 패키지 삭제
# rpm -e package-filename /* 패키지 삭제 */
(-e: erase)
# rpm -e --nodeps package-filename /* 패키지 삭제, 의존성 문제를 무시하고 패키지 삭제 */
(--nodeps: no dependency)
■ RPM 패키지 정보 확인
# rpm –qa /* 지정된 패키지 설치 유무 확인 */
(-q: query, -a: all)
# rpm -qa | grep package-filename /* 전체 패키지 목록에서 지정된 패키지 설치 유무 확인 */
# rpm -qi package-filename /* 설치된 패키지의 자세한 정보 확인 */
(-i: information)
# rpm -ql package-filename /* 설치된 패키지의 파일과 디렉토리 목록 확인 */
(-l: list)
# rpm -qf /usr/bin/ls /* 지정된 파일이 포함된 패키지 이름 확인 */
(-f: file)
# rpm –qi -p package-filename.rpm /* 설치하고자 하는 패키지의 자세한 정보 확인 */
(-p: packages file)
(패키지 파일 이름 형식)
(예) name-version-release.architecture.rpm ( -(dash) 기호가 구분자이다.)
kernel-2.6.9-42.0.2.EL.i686.rpm
kernel-2.6.18-164.el5.x86_64.rpm
kernel-2.6.18-164.el5.src.rpm
종류 | 필드 이름 | 설명 |
kernel | 패키지 이름 | 어떤 패키지인가를 설명해주는 패키지의 이름을 나타낸다. |
2.6.9 | 패키지 버전 | 패키지의 버전을 의미한다. (기능이 증가해서 추가된 경우가 많다.) (정식으로 나오는건 짝수번호만이다. 홀수번호는 베타버전이다.) |
49.0.2.EL | 패키지 릴리즈 | 한 버전의 패키지를 몇 번 빌드했는지알 수 있다. EL(Enterprise Linux) (기능이 fix된 패치같은것들임) |
i686 | 패키지 아키텍쳐 | 패키지 아키텍쳐를 나타낸다. source : .src.rpm noarch : .noarch.rpm 플랫폼에 상관없이 설치 가능. binary : .i386.rpm (i386, i586, i686, x86, x86_64 등) |
rpm | 패키지 확장자 | 레드햇(RedHat) 운영체제에서 사용하는 패키지의 이름은 .rpm이다. |
[EX1] 패키지 설치 확인
① 패키지 전체 목록 확인
# rpm -qa | more
centos-release-notes-5.9-0 rootfiles-8.1-1.1.1 atk-1.12.2-1.fc6 nspr-4.9.1-6.el5 bzip2-libs-1.0.3-6.el5_5 nss-3.13.5-8.el5 audiofile-0.2.6-5 libgcrypt-1.4.4-5.el5_8.2 procps-3.2.7-22.el5 ..... (중략) ..... |
# rpm -q openssh (# rpm -qa | grep openssh)
openssh-4.3p2-82.el5 |
[참고] 패키지 이름을 가지고 패키지 목록 점검
# rpm -q openssh
or
# rpm -qa openssh
or
# rpm -qa | grep openssh
# rpm -qa | grep openss
openssl-0.9.8e-26.el5_9.1 openssh-askpass-4.3p2-82.el5 openssh-4.3p2-82.el5 openssh-server-4.3p2-82.el5 openssh-clients-4.3p2-82.el5 |
# rpm -q openssh openssh-server openssh-clients
openssh-4.3p2-82.el5 openssh-server-4.3p2-82.el5 openssh-clients-4.3p2-82.el5 |
# rpm -qa | egrep '(openssh|openssh-server|openssh-clients)'
[EX2] 시스템에 설치된 패키지 삭제
설치된 패키지를 제거하는 것은 -e 옵션을 사용한다. 제거할 패키지가 다른 패키지에 영향을 미친다면 패키지를 제
거할 수 없다는 메시지가 나타나는데 이것을 의존성이라 한다. 의존성을 무시하고 함부로 제거하면 다른 패키지를
사용하는데 문제가 생길 수 있다. 꼭 패키지를 삭제해야하는 경우 먼저 의존적인 패키지를 먼저 삭제한 후 원하는
패키지 삭제 해야지만 된다.
① php 패키지 삭제
# rpm -qa | grep php
php-5.1.6-39.el5_8 php-common-5.1.6-39.el5_8 php-cli-5.1.6-39.el5_8 php-ldap-5.1.6-39.el5_8 |
-> 삭제 할 패키지 확인(EX: php-5.1.6-39.el5_8)
# rpm -e php (# rpm -e php-5.1.6-43.el5_10)
# rpm -qa | grep php
php-common-5.1.6-39.el5_8 php-cli-5.1.6-39.el5_8 php-ldap-5.1.6-39.el5_8 |
-> 정상적으로 잘 삭제 되었다.
-> php-5.1.6-24.el5_4.5 패키지와 의존성 관계에 있는 패키지는 없는 것 같다.