rpmコマンド備忘録

RedHat系のLinuxではよくお世話になるrpmコマンド。
今更ながら自分自身の備忘録です。

ある意味manが全てです。

インストールされているRPMパッケージの一覧を取得


よく「grep」と組み合わせて使います。

 # rpm -qa | grep "openssl"
 openssl-0.9.8e-12.el5_4.6
 openssl-devel-0.9.8e-12.el5_4.6


「--last」をつけると最近インストールしたものから順に表示するらしいのでやってみました。
最近インストールしたパッケージを上から順に5つ。

 # rpm -qa --last | head -5
 pcre-devel-6.6-2.el5_1.7                      2010年06月21日 20時08分57秒
 db4-devel-4.3.29-10.el5                       2010年06月21日 20時02分24秒
 sqlite-devel-3.3.6-5                          2010年06月21日 19時58分45秒
 expat-devel-1.95.8-8.3.el5_4.2                2010年06月21日 19時58分21秒
 tcl-devel-8.4.13-4.el5                        2010年06月21日 19時57分58秒
パッケージの詳細情報を表示


パッケージの説明ですね。

 # rpm -qi openssl
 Name        : openssl                      Relocations: (not relocatable)
 Version     : 0.9.8e                            Vendor: CentOS
 Release     : 12.el5_4.6                    Build Date: 2010年03月27日 06時46分11秒
 Install Date: 2010年05月01日 22時25分38秒      Build Host: builder16.centos.org
 Group       : System Environment/Libraries   Source RPM: openssl-0.9.8e-12.el5_4.6.src.rpm
 Size        : 3495415                          License: BSDish
 Signature   : DSA/SHA1, 2010年03月28日 02時29分07秒, Key ID a8a447dce8562897
 URL         : http://www.openssl.org/
 Summary     : The OpenSSL toolkit
 Description :
 OpenSSL ツールキットはマシン間の安全な通信をサポートします。OpenSSL
 には、証明書管理ツールと、各種の暗号化アルゴリズムとプロトコルを提供する
 共有ライブラリが含まれています。
パッケージに含まれるファイルリストを表示/ファイルが含まれるパッケージ名を表示


対で覚えとくと良いですよね。
まずはパッケージに含まれるファイルリストの表示。

 # rpm -ql openssl
 /etc/pki/CA
 /etc/pki/CA/private
 /etc/pki/tls
 /etc/pki/tls/cert.pem
 /etc/pki/tls/certs
 /etc/pki/tls/certs/Makefile
 /etc/pki/tls/certs/ca-bundle.crt
 /etc/pki/tls/certs/make-dummy-cert
 /etc/pki/tls/misc
 /etc/pki/tls/misc/CA
 /etc/pki/tls/misc/c_hash
 /etc/pki/tls/misc/c_info
 /etc/pki/tls/misc/c_issuer
 /etc/pki/tls/misc/c_name
 /etc/pki/tls/openssl.cnf
 /etc/pki/tls/private
 /lib/.libcrypto.so.0.9.8e.hmac
 /lib/.libcrypto.so.6.hmac
 /lib/.libssl.so.0.9.8e.hmac
 /lib/.libssl.so.6.hmac
 /lib/libcrypto.so.0.9.8e
 /lib/libcrypto.so.6
 /lib/libssl.so.0.9.8e
 /lib/libssl.so.6
 /usr/bin/openssl
 /usr/lib/openssl
 /usr/lib/openssl/engines
 /usr/lib/openssl/engines/lib4758cca.so
 /usr/lib/openssl/engines/libaep.so
 /usr/lib/openssl/engines/libatalla.so
 /usr/lib/openssl/engines/libchil.so
 /usr/lib/openssl/engines/libcswift.so
 /usr/lib/openssl/engines/libgmp.so
 /usr/lib/openssl/engines/libnuron.so
 /usr/lib/openssl/engines/libsureware.so
 /usr/lib/openssl/engines/libubsec.so
 /usr/share/doc/openssl-0.9.8e
 /usr/share/doc/openssl-0.9.8e/CHANGES
 /usr/share/doc/openssl-0.9.8e/FAQ
 /usr/share/doc/openssl-0.9.8e/INSTALL
 /usr/share/doc/openssl-0.9.8e/LICENSE
 /usr/share/doc/openssl-0.9.8e/NEWS
 /usr/share/doc/openssl-0.9.8e/README
 /usr/share/doc/openssl-0.9.8e/README.FIPS
 /usr/share/doc/openssl-0.9.8e/c-indentation.el
 /usr/share/doc/openssl-0.9.8e/openssl.txt
 /usr/share/doc/openssl-0.9.8e/openssl_button.gif
 /usr/share/doc/openssl-0.9.8e/openssl_button.html
 /usr/share/doc/openssl-0.9.8e/ssleay.txt
 /usr/share/man/man1/asn1parse.1ssl.gz
 /usr/share/man/man1/ca.1ssl.gz
 /usr/share/man/man1/ciphers.1ssl.gz
 /usr/share/man/man1/crl.1ssl.gz
 /usr/share/man/man1/crl2pkcs7.1ssl.gz
 /usr/share/man/man1/dgst.1ssl.gz
 /usr/share/man/man1/dhparam.1ssl.gz
 /usr/share/man/man1/dsa.1ssl.gz
 /usr/share/man/man1/dsaparam.1ssl.gz
 /usr/share/man/man1/ec.1ssl.gz
 /usr/share/man/man1/ecparam.1ssl.gz
 /usr/share/man/man1/enc.1ssl.gz
 /usr/share/man/man1/errstr.1ssl.gz
 /usr/share/man/man1/gendsa.1ssl.gz
 /usr/share/man/man1/genrsa.1ssl.gz
 /usr/share/man/man1/md2.1ssl.gz
 /usr/share/man/man1/md4.1ssl.gz
 /usr/share/man/man1/md5.1ssl.gz
 /usr/share/man/man1/mdc2.1ssl.gz
 /usr/share/man/man1/nseq.1ssl.gz
 /usr/share/man/man1/ocsp.1ssl.gz
 /usr/share/man/man1/openssl.1ssl.gz
 /usr/share/man/man1/pkcs12.1ssl.gz
 /usr/share/man/man1/pkcs7.1ssl.gz
 /usr/share/man/man1/pkcs8.1ssl.gz
 /usr/share/man/man1/req.1ssl.gz
 /usr/share/man/man1/ripemd160.1ssl.gz
 /usr/share/man/man1/rsa.1ssl.gz
 /usr/share/man/man1/rsautl.1ssl.gz
 /usr/share/man/man1/s_client.1ssl.gz
 /usr/share/man/man1/s_server.1ssl.gz
 /usr/share/man/man1/s_time.1ssl.gz
 /usr/share/man/man1/sess_id.1ssl.gz
 /usr/share/man/man1/sha.1ssl.gz
 /usr/share/man/man1/sha1.1ssl.gz
 /usr/share/man/man1/smime.1ssl.gz
 /usr/share/man/man1/speed.1ssl.gz
 /usr/share/man/man1/spkac.1ssl.gz
 /usr/share/man/man1/sslpasswd.1ssl.gz
 /usr/share/man/man1/sslrand.1ssl.gz
 /usr/share/man/man1/verify.1ssl.gz
 /usr/share/man/man1/version.1ssl.gz
 /usr/share/man/man1/x509.1ssl.gz
 /usr/share/man/man5/config.5ssl.gz
 /usr/share/man/man5/x509v3_config.5ssl.gz
 /usr/share/man/man7/des_modes.7ssl.gz


今度は逆に特定のファイルが含まれるパッケージ。

# rpm -qf /usr/bin/openssl
openssl-0.9.8e-12.el5_4.6
パッケージの更新履歴を表示する


パッケージ自身の更新履歴を見たい場合。

 # rpm -q --changelog openssl
 * 土  3月 13 2010 Tomas Mraz <tmraz@redhat.com> 0.9.8e-12.6
 - fix CVE-2009-3245 - add missing bn_wexpand return checks (#570924)
 
 (長いので略)
 
 * 水 10月 27 1999 Bernhard Rosenkrdnzer <bero@redhat.de>
 - inital packaging
 - changes from base:
   - Move /usr/local/ssl to /usr/share/ssl for FHS compliance
   - handle RPM_OPT_FLAGS
パッケージの設定ファイルリストを表示


意外に便利です。

 # rpm -qc openssh-server
 /etc/pam.d/sshd
 /etc/ssh/sshd_config
パッケージのドキュメントファイルリストを表示


こっちはドキュメントの場所。

 # rpm -qd openssh-server
 /usr/share/man/man5/sshd_config.5.gz
 /usr/share/man/man8/sftp-server.8.gz
 /usr/share/man/man8/sshd.8.gz
共有ライブラリ関連


「--provides」オプションでそのパッケージが提供するもの。

 # rpm -q --provides openssl
 config(openssl) = 0.9.8e-12.el5_4.6
 lib4758cca.so
 libaep.so
 libatalla.so
 libchil.so
 libcrypto.so.6
 libcswift.so
 libgmp.so
 libnuron.so
 libssl.so.6
 libsureware.so
 libubsec.so
 openssl = 0.9.8e-12.el5_4.6


「--requires」で必要とするもの。

 # rpm -q --requires openssl
 /bin/sh
 /sbin/ldconfig
 /sbin/ldconfig
 config(openssl) = 0.9.8e-12.el5_4.6
 libc.so.6
 libc.so.6(GLIBC_2.0)
 libc.so.6(GLIBC_2.1)
 libc.so.6(GLIBC_2.1.3)
 libc.so.6(GLIBC_2.3)
 libc.so.6(GLIBC_2.3.4)
 libc.so.6(GLIBC_2.4)
 libcom_err.so.2
 libcrypto.so.6
 libdl.so.2
 libdl.so.2(GLIBC_2.0)
 libdl.so.2(GLIBC_2.1)
 libgssapi_krb5.so.2
 libk5crypto.so.3
 libk5crypto.so.3(k5crypto_3_MIT)
 libkrb5.so.3
 libkrb5.so.3(krb5_3_MIT)
 libresolv.so.2
 libssl.so.6
 libz.so.1
 mktemp
 rpmlib(CompressedFileNames) <= 3.0.4-1
 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
 rtld(GNU_HASH)
パッケージの依存関係

「--whatrequires」で指定したパッケージを使っているパッケージリストを表示。

 # rpm -q --whatrequires openssl
 curl-7.15.5-2.1.el5_3.5
 libpcap-0.9.4-14.el5
 sendmail-8.13.8-2.el5
 openssh-4.3p2-36.el5_4.4
 openssl-devel-0.9.8e-12.el5_4.6
 NetworkManager-0.7.0-9.el5_4
 vsftpd-2.0.5-16.el5_4.1
パッケージのアンインストール

アンインストールは「-e」オプション

 # rpm -e vsftpd


「--test」オプション付けると事前のチェックになります。

# rpm -e --test openssl
エラー: 依存性の欠如:
        libcrypto.so.6 は (インストール済み)python-2.4.3-27.el5.i386 に必要とされています
        libcrypto.so.6 は (インストール済み)openldap-2.3.43-3.el5.i386 に必要とされています
パッケージのインストール

「-v」「-h」を付ける事でインストール状況が詳細に表示されます。
インストールは「-ivh
(指定したパッケージがインストールされてなければ何もしない)更新は「-Fvh」
(指定したパッケージがインストールされてなければ新規にインストール)更新は「-Uvh」


rpm コマンドって他にもいっぱいオプションあるんですよね〜。
そのうちカスタムRPMパッケージの作成も覚えたいところ。


今日はこんなところで。