rpm command 정리 및 사용법
rpm 명령어와 사용법 정리
주요 명령어와 옵션
rpm 은 command 와 option 으로 이루어져 있고 command 마다 별도의 옵션을 지정해 줄 수 있다. GNU 의 옵션 처리기인 getopt 를 사용하므로 간단 옵션(short option)과 긴 옵션(long option) 둘 다를 지원한다.
다음은 주요 명령어를 표로 정리한 것이다.
주요 명령어 도표
명령어 | long 명령어 | 용도 |
---|---|---|
-q | --query | 패키지 정보 질의 |
-i | --install | 패키지 설치 |
-U | --upgrade | 패키지 업그레이드 |
-e | --erase | 패키지 삭제 |
-V | --verify | 패키지 검증 |
-K | --checksig | 서명 검증 |
General options
명령어마다 mode가 다르므로 사용할 수있는 별도의 옵션이 있지만 일반적으로 사용할 수 있는 옵션들이 있다. 아마 가장 많이 사용하는 옵션은 -v 일 것이다.
- -?, --help : 도움말 출력
- --version : rpm 버전 출력
- -v : 자세한 정보 출력
- -vv : 디버깅용 정보 출력
- --dbpath DIRECTORY_PATH: rpm 데이타베이스 파일 경로 설정. 기본 경로는 /var/lib/rpm
- --root DIRECTORY_PATH: 파일 시스템의 루트 디렉터리 경로 설정. rpm 을 사용자 디렉터리에 설치했을 경우등에 유용함. 기본 경로는 /
- --pipe CMD: rpm 명령어의 출력을 CMD 명령어로 전송
설치 및 업그레이드
설치(-i)와 업그레이드(-U) 모드에 주로 사용하는 추가 옵션은 vh 이며 의미는 다음과 같다.
- -v : verbose 자세한 정보 출력
- -h: print hash marks: 설치 진행 상황을 # 문자를 이용하여 출력한다.
설치
-ivh 옵션뒤에 설치할 패키지 파일명을 적어준다. 만약 의존성 있는 프로그램이나 라이브러리가 없을 경우 설치가 실패한다.
rpm -ivh gzip-1.3.12-19.el6_4.x86_64.rpm
설치나 업그레이드시 패키지 경로는 URL 도 가능하다. 다음은 URL 에서 rpm 으로 바로 설치하는 예제이다.
rpm -ivh http://mirror.centos.org/centos/6/os/x86_64/Packages/gzip-1.3.12-19.el6_4.x86_64.rpm
업그레이드
기존에 설치된 my-package보다 업그레이드된 my-package.rpm 을 설치한다.
rpm -Uvh my-package.rpm
가능한 옵션
--nodeps
rpm 은 기본적으로 의존성을 확인하므로 의존성 있는 패키지가 설치되지 않았을 경우 설치나 업그레이드가 안 될수 있다. --nodeps 옵션을 지정하면 의존성을 확인하지 않으므로 통과하게 된다.
--replacepkgs
패지키가 이미 설치되어 있으면 rpm 은 설치를 거부하나 이 옵션을 추가하면 설치를 진행한다.
--replacefiles
설치하려는 패키지가 기존에 설치된 패키지의 파일을 교체하는 경우 rpm 은 설치를 거부하나 이 옵션을 추가하면 설치를 진행한다.
--oldpackage
업그레이드 옵션(-U) 으로 패키지 설치시 설치하려는 버전이 기존에 설치된 버전보다 낮으면 설치를 진행하지 않는다. --oldpackage 옵션을 사용하면 버전이 낮아도 설치되므로 패키지 downgrade 시 유용하다.
--force
위에서 설명한 --replacepkgs, --replacefiles, 그리고 --oldpackage 세 개 옵션을 사용한 것과 동일하다. 패키지 다운그레이드나 강제 재설치등에 사용할 수 있으나 기존 파일을 덮어쓰므로 주의해야 한다.
RPM Query
-q, --query 옵션은 패키지의 정보를 질의하는 메인 명령어이다. 여러 가지 하위 옵션이 있으므로 다양한 질의를 사용할 수 있다.
전체 설치 패키지 보기
시스템에 설치된 전체 패키지의 목록을 보려면 -a 옵션을 추가하면 된다.
# rpm -qa |less biosdevname-0.5.0-2.el6.x86_64 libssh2-1.4.2-1.el6.x86_64 filesystem-2.4.30-3.el6.x86_64
자세한 정보 보기
목록 보기에서는 패키지의 용도나 라이선스, 홈페이지등을 알 수가 없다. -i (--info) 옵션을 추가하면 자세한 정보를 볼 수 있다.
# rpm -qi httpd Name : httpd Relocations: (not relocatable) Version : 2.2.15 Vendor: CentOS Release : 30.el6.centos Build Date: Fri Apr 4 08:57:21 2014 Install Date: Fri May 23 15:56:20 2014 Build Host: c6b10.bsys.dev.centos.org Group : System Environment/Daemons Source RPM: httpd-2.2.15-30.el6.centos.src.rpm Size : 3076415 License: ASL 2.0
설치된 패키지의 정보는 위와 같이 볼 수 있지만 만약 설치하기 전에 패키지의 정보를 보고 싶을수 있다. 이 경우 -p 옵션뒤에 패키지 명을 기술하면 설치전 패키지의 정보를 출력한다.
# rpm -qpi httpd-2.2.15-29.el6.centos.x86_64.rpm Name : httpd Relocations: (not relocatable) Version : 2.2.15 Vendor: CentOS Release : 29.el6.centos Build Date: Wed Aug 14 02:30:33 2013 Install Date: (not installed) Build Host: c6b8.bsys.dev.centos.org Group : System Environment/Daemons Source RPM: httpd-2.2.15-29.el6.centos.src.rpm Size : 3076447 License: ASL 2.0 Signature : RSA/SHA1, Wed Aug 14 02:32:39 2013, Key ID 0946fca2c105b9de Packager : CentOS BuildSystem <http://bugs.centos.org> URL : http://httpd.apache.org/ Summary : Apache HTTP Server Description : The Apache HTTP Server is a powerful, efficient, and extensible web server.
패키지의 change log 보기
패키지 업그레이드시 어떤 부분이 변경되었는지 궁금할 경우가 있다. --changelog 옵션을 사용하면 패키지의 개정 이력을 확인할 수 있다. 특정 버그나 보안 문제때문에 패키지를 업그레이드할 경우등에 유용하게 사용할 수 있다.
다음 명령어는 2014년 큰 이슈가 되었던 openssl 의 HeartBleed 버그를 해결했는지 확인하기 위한 명령어다.
# rpm -q --changelog openssl * Mon Apr 07 2014 Tomáš Mráz <tmraz@redhat.com> 1.0.1e-16.7 - fix CVE-2014-0160 - information disclosure in TLS heartbeat extension * Tue Jan 07 2014 Tomáš Mráz <tmraz@redhat.com> 1.0.1e-16.4 - fix CVE-2013-4353 - Invalid TLS handshake crash * Mon Jan 06 2014 Tomáš Mráz <tmraz@redhat.com> 1.0.1e-16.3 - fix CVE-2013-6450 - possible MiTM attack on DTLS1 * Fri Dec 20 2013 Tomáš Mráz <tmraz@redhat.com> 1.0.1e-16.2 - fix CVE-2013-6449 - crash when version in SSL structure is incorrect
파일이 속한 패키지 알기
패키지의 내용과 설치 경로를 알수 있지만 반대로 어떤 프로그램이나 파일이 어떤 패키지로부터 설치되었는지 궁금할 수도 있다. 이럴 경우 -f ,–file 옵션을 추가하면 파일이 포함된 패키지를 알 수 있다.
# rpm -qf `which httpd` httpd-2.2.15-30.el6.centos.x86_64
위에 -d 옵션을 추가하면 해당 패키지에 포함된 문서의 설치 경로를 볼 수 있다.
# rpm -qdf `which httpd` /usr/share/doc/httpd-2.2.15/ABOUT_APACHE /usr/share/doc/httpd-2.2.15/CHANGES /usr/share/doc/httpd-2.2.15/LICENSE /usr/share/doc/httpd-2.2.15/NOTICE /usr/share/doc/httpd-2.2.15/README
설치 경로 보기
패키지내 어떤 파일이 어디에 설치되었는지는 -l (–list) 옵션을 추가하면 된다.
# rpm -ql httpd /etc/httpd /etc/httpd/conf /etc/httpd/conf.d /etc/httpd/conf.d/README /etc/httpd/conf.d/welcome.conf
아직 설치하지 않은 패키지의 경우 -p 옵션뒤에 패키지명을 기술하면 설치될 전체 경로를 알수 있다.
# rpm -qpl httpd-2.2.15-29.el6.centos.x86_64.rpm /etc/httpd /etc/httpd/conf /etc/httpd/conf.d /etc/httpd/conf.d/README /etc/httpd/conf.d/welcome.conf /etc/httpd/conf/httpd.conf /etc/httpd/conf/magic /etc/httpd/logs
문서 파일 목록 보기
패키지내 문서 파일 목록만 보려면 -d (–docfiles) 옵션을 사용한다. 소스 rpm 파일내 %doc 에 있는 목록과 동일하다.
# rpm -qd httpd /usr/share/doc/httpd-2.2.15/ABOUT_APACHE /usr/share/doc/httpd-2.2.15/CHANGES /usr/share/doc/httpd-2.2.15/LICENSE /usr/share/doc/httpd-2.2.15/NOTICE /usr/share/doc/httpd-2.2.15/README
설정 파일 목록 보기
패키지내 설정 파일 목록만 보려면 -c (–configfiles) 옵션을 사용한다. 소스 rpm 파일내 %config에 있는 목록과 동일하다.
# rpm -qc httpd /etc/httpd/conf.d/welcome.conf /etc/httpd/conf/httpd.conf /etc/httpd/conf/magic /etc/logrotate.d/httpd /etc/sysconfig/htcacheclean /etc/sysconfig/httpd /var/www/error/HTTP_BAD_GATEWAY.html.var
스크립트 파일 목록 보기
패키지내 스크립트 파일 목록만 보려면 --scripts 옵션을 사용한다. 소스 rpm 파일내 %pre, %post, %preun, 그리고 %postun에 있는 목록과 동일하다.
# rpm -q --scripts httpd preinstall scriptlet (using /bin/sh): # Add the "apache" user getent group apache >/dev/null || groupadd -g 48 -r apache getent passwd apache >/dev/null || \ useradd -r -u 48 -g apache -s /sbin/nologin \ -d /var/www -c "Apache" apache exit 0 postinstall scriptlet (using /bin/sh): # Register the httpd service /sbin/chkconfig --add httpd
패키지의 의존성 목록 보기
rpm 의 장점인 의존성 관리 기능이다. -R, --requires 옵션을 이용하면 패키지를 설치하려면 필요한 의존성 목록을 확인할 수 있다.
# rpm -qR mod_ssl /bin/cat /bin/sh config(mod_ssl) = 1:2.2.15-30.el6.centos httpd httpd = 0:2.2.15-30.el6.centos httpd-mmn = 20051115 libc.so.6()(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3.4)(64bit) libc.so.6(GLIBC_2.4)(64bit) libcrypto.so.10()(64bit) libcrypto.so.10(OPENSSL_1.0.1)(64bit) libcrypto.so.10(libcrypto.so.10)(64bit) libssl.so.10()(64bit) libssl.so.10(libssl.so.10)(64bit) openssl >= 0.9.7f-4 rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rtld(GNU_HASH) rpmlib(PayloadIsXz) <= 5.2-1
설치전 패키지는 마찬가지로 -p 옵션을 추가하여 의존성 정보를 확인할 수 있다.
# rpm -qRp mod_ssl-2.2.15-29.el6.centos.x86_64.rpm /bin/cat /bin/sh config(mod_ssl) = 1:2.2.15-29.el6.centos httpd httpd = 0:2.2.15-29.el6.centos httpd-mmn = 20051115 libc.so.6()(64bit) ...
Verify
대문자 -V 명령을 사용하면 패키지를 검증할 수 있다.
설치 검증
설치한 패키지가 원래 패키지와 어떻게 다른지 확인할 수 있다. 다음 명령은 httpd 패키지가 설치후 어떻게 변경되었는지 표시해 준다. 왼쪽 항목의 의미는 다음과 같다.
- S file Size differs
- M Mode differs (includes permissions and file type)
- 5 MD5 sum differs
- D Device major/minor number mismatch
- L readlink(2) path mismatch
- U User ownership differs
- G Group ownership differs
- T mTime differs
# rpm -V httpd S.5....T. c /etc/httpd/conf/httpd.conf ..?...... /usr/sbin/suexec .M....... /var/log/httpd
httpd.conf 가 설치후 수정되어서 사이즈(S)와 MD5 해쉬값(5)이 달라졌고 수정(T)되었으므로 mTime 이 변경되었다. -p 옵션을 추가하고 패키지의 절대 경로를 입력하면 해당 패키지와 현재 설치된 패키지를 비교해 준다.
다음은 현재 시스템은 httpd-2.2.15-30이 설치되어 있는데 httpd-2.2.15-29 패키지로 검증했을 경우 결과이다. 마이너 버전이 다르므로 MD5 해쉬값과 변경날자가 다르다고 표시된다
# rpm -Vp httpd-2.2.15-29.el6.centos.x86_64.rpm Unsatisfied dependencies for httpd-2.2.15-29.el6.centos.x86_64: httpd-tools = 2.2.15-29.el6.centos is needed by httpd-2.2.15-29.el6.centos.x86_64 .......T. /etc/httpd/conf.d/README .......T. c /etc/httpd/conf.d/welcome.conf S.5....T. c /etc/httpd/conf/httpd.conf .......T. c /etc/httpd/conf/magic .......T. c /etc/logrotate.d/httpd .......T. /etc/rc.d/init.d/htcacheclean .......T. /etc/rc.d/init.d/httpd .......T. c /etc/sysconfig/htcacheclean .......T. c /etc/sysconfig/httpd ..5....T. /usr/lib64/httpd/modules/mod_actions.so ..5....T. /usr/lib64/httpd/modules/mod_alias.so ..5....T. /usr/lib64/httpd/modules/mod_asis.so ..5....T. /usr/lib64/httpd/modules/mod_auth_basic.so ..5....T. /usr/lib64/httpd/modules/mod_auth_digest.so ..5....T. /usr/lib64/httpd/modules/mod_authn_alias.so ..5....T. /usr/lib64/httpd/modules/mod_authn_anon.so
경로명으로 패키지 검증
-f 옵션을 추가하면 특정 경로에 있는 프로그램이나 파일이 속한 패키지의 변경 내역을 확인할 수 있다. 다음은 httpd 패키지를 검증한다.
# rpm -Vf `which httpd` S.5....T. c /etc/httpd/conf/httpd.conf ..?...... /usr/sbin/suexec .M....... /var/log/httpd
전체 패키지 검증
-Va 옵션으로 시스템에 설치된 전체 패키지중 변경된 파일을 검증할 수 있다.
# rpm -Va prelink: /usr/bin/vim: at least one of file's dependencies has changed since prelinking S.?...... /usr/bin/vim prelink: /usr/sbin/powertop: at least one of file's dependencies has changed since prelinking S.?...... /usr/sbin/powertop prelink: /usr/bin/unzip: at least one of file's dependencies has changed since prelinking S.?...... /usr/bin/unzip
전자서명 검증
rpm 포맷은 전자서명을 첨부할 수 있으므로 위변조 여부를 확인할 수 있다. 검증은 -K 옵션으로 수행할 수 있다.
# rpm -K gcc-4.4.7-4.el6.x86_64.rpm gcc-4.4.7-4.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
rpm 패키지가 위변조 되었을 경우 다음과 같이 에러가 발생한다.
# rpm -K mod_ssl-2.2.15-29.el6.centos.x86_64.rpm mod_ssl-2.2.15-29.el6.centos.x86_64.rpm: rsa sha1 (MD5) PGP MD5 NOT OK
다른 벤더가 서명했는데 서명자의 검증용 키가 없을 경우도 검증이 실패하게 된다. 이럴 경우 검증용 키를 구한후에 --import 명령으로 rpm 에 추가해야 한다.
rpm --import /usr/share/rhn/RPM-GPG-KEY
사용자 계정으로 rpm 패키지 설치
root 권한이 없는 시스템에서 작업하는데 필요한 패키지가 설치되어 있지 않을 경우가 있다.
고객사 시스템등 root 권한 요청이 어려운 경우 사용자 계정으로 rpm db 를 생성하고 필요한 패키지를 설치하고 작업할 수 있다.
rpm database 를 생성한다.
rpm --initdb --root /home/lesstif/var --dbpath /home/lesstif/var/lib/rpm
- -ivh 옵션으로 패키지(ex: make-3.82.rpm)를 설치한다. 주의할 점은 --root 와 --dbpath, --relocate 옵션을 추가해야 한다.
rpm --root /home/lesstif/var --dbpath /home/lesstif/var/lib/rpm \ --relocate /usr=/home/lesstif/var --nodeps -ivh gcc*.rpm
-r, --root=DIR : use ROOT as top level directory (default:"/")
- --dbpath=DIR : use database in DIRECTORY
- --relocate=<old>=<new>: relocate files from path <old> to <new>
같이 보기
Ref
- RPM Command: 15 Examples to Install, Uninstall, Upgrade, Query RPM Packages
- 20 Practical Examples of RPM Commands in Linux
- rpm command cheat sheet for Linux