CentOS7でよく使いそうなrpmやyumコマンドのメモです。
対象環境 :
$ cat /etc/centos-release
CentOS Linux release 7.2.1511 (Core)
rpmdevtools-8.3-5.el7.noarch
redhat-rpm-config-9.1.0-68.el7.centos.noarch
rpm-python-4.11.3-17.el7.x86_64
rpm-sign-4.11.3-17.el7.x86_64
rpm-build-libs-4.11.3-17.el7.x86_64
rpm-4.11.3-17.el7.x86_64
perl-srpm-macros-1-8.el7.noarch
rpm-libs-4.11.3-17.el7.x86_64
rpm-build-4.11.3-17.el7.x86_64
yum-metadata-parser-1.1.4-10.el7.x86_64
yum-utils-1.1.31-34.el7.noarch
yum-3.4.3-132.el7.centos.0.1.noarch
yum-cron-3.4.3-132.el7.centos.0.1.noarch
yum-plugin-fastestmirror-1.1.31-34.el7.noarch
yum-plugin-priorities-1.1.31-34.el7.noarch
Red Hat Enterprise Linux 7 からのドキュメント
- RPM
- yum
RPMパッケージの情報取得系(rpm -q)
よく使うの:
-
-a
: インストール済みパッケージ名とバージョンの一覧表示 -
-f
: ファイル名を指定して、そのファイルをインストールしたパッケージ名を表示 -
-i
: 名前やバージョンなど基本情報 -
-l
: ファイル一覧 -
-R
: 依存パッケージの一覧 -
--scripts
: インストール・アンインストール・アップデート時に実行されるスクリプトを表示 -
--changelog
: パッケージのchangelogを表示 -
-p
(他と組み合わせて) : インストールされたパッケージ名ではなく、RPMファイル名を指定して情報を取得できる。
全部 : man 8 rpm
の "query options" を参照。
場面別よく使う組み合わせ:
- 「(パッケージ名)はインストールしてたっけ?」
rpm -qa | grep -i (パッケージ名)
- 「(パッケージ名)の基本情報・ファイル一覧・インストール/アンインストール時のスクリプトを調べたい。」
rpm -qilR --scripts (パッケージ名)
- 「このファイルはどのパッケージがインストールしたものか?」
-
rpm -qf /xxx/yyy/zzz
(ファイル一覧ではなくインストール/アンインストールスクリプトで自動生成してる場合はこれでは引っかからない)
-
- 「このRPMファイルをインストールすると何が起こる?」
rpm -qpilR --scripts (RPMファイル名)
- 「セキュリティパッチでアップデートがかかったが、何が変更されたのか?」
-
rpm -q --changelog
(パッケージ名)`
-
- 「セキュリティパッチでアップデートされたRPMファイルをDLしたが、何が変更されたのか?」
rpm -qp --changelog (RPMファイル名)
yumの使い方全般
man 8 yum
- Red Hat Enterprise Linux の Yum コマンドのチートシート - Red Hat Customer Portal
- @IT:yumコマンドでよく利用するコマンド
Qiitaより:
- yumまとめ - Qiita
- yumコマンド - Qiita
個人的によく使ったり使いそうなコマンド:
-
yum clean all
: キャッシュなどすべて一旦全クリアしたい時に。 -
yum grouplist hidden
: 環境の条件などにより、非表示になるグループもすべて表示する。 -
yum check-update
: アップデート可能なパッケージを表示 -
yum provides (ファイル名)
: まだインストールしてないパッケージについても検索できるので便利。- 例えばこれからインストールしたいパッケージの使い方を解説してる記事をみて、「ここで編集してるファイル名、本当にこのパッケージで提供してるファイルかな?」というのを確認するときに使う。
- あるいは、Tipsレベルで調べ物してる時に、「いきなりこんなファイル名がでてきたけど、これどのパッケージが提供してるんだろう?」というのを確認するときに使う。
- アスタリスクでのglobマッチも使えるため、コマンド名だけから、どのパッケージで提供しているのか調べられる :
yum provides */dig
など。
-
--enablerepo
/--disablerepo
: リポジトリをいろいろ追加しすぎた場合に、パッケージ名の衝突を避けたりでこのオプションを使う。
古いカーネルを削除
$ sudo yum install yum-utils
$ sudo package-cleanup --oldkernels
(確認あり)
参考:
- 古いカーネルを削除するには - @IT
- CentOS/RHELで古いカーネルを削除して/bootを整理する方法 - Qiita
定期的に自動でパッケージ更新したい
$ sudo yum install yum-cron
※CentOS6 <> 7 とで大幅に設定ファイルの内容が変わったりしてるので、必ず自分が使う環境での設定ファイルの説明を参照すること。
EPELリポジトリを追加したい
- 公式 : EPEL/ja - FedoraProject
- https://fedoraproject.org/wiki/EPEL/ja
- アップデートによりバージョンが変わった時も、ここからたどり直せば大丈夫と思われます。
- 基本的にはここから、使うCentOSのバージョンとアーキテクチャに対応したRPMファイルをダウンロードして、rpmコマンドでインストールすればEPLリポジトリを追加できます。
- CentOS7だと
- minimalインストールの状態から、
yum install epel-release
でインストールできます。(CentOS7のExtraパッケージに存在)
- minimalインストールの状態から、
EPELリポジトリなどをデフォルトで無効化したり、優先度を調整したい
-
デフォルトで無効化
-
/etc/yum.repos.d/epel.repo
,epel-testing.repo
の、各[(セクション名)]
のenabled=
をenabled=0
にする。 - 明示的にEPELを参照したいときは、yumコマンド実行時に
--enablerepo=epel
を指定する。
-
-
優先度を調整したい
yum install yum-plugin-priorities
-
/etc/yum.repos.d/*.repo
の各[(セクション名)]
で、優先度調整が必要なセクションについてpriority=整数値
を追加。 - 数字が小さいほうが優先度が高くなります。
コマンドラインからリポジトリのenable/disableを設定したい
$ sudo yum install yum-utils
例:/etc/yum.repos.d/epel.repo の [epel]セクションを有効化
$ sudo yum-config-manager --enable epel
例:/etc/yum.repos.d/epel.repo の [epel]セクションを無効化
$ sudo yum-config-manager --disable epel
有効な/無効なリポジトリの一覧を確認したい
$ sudo yum repolist enabled
$ sudo yum repolist disabled
RPMのダウンロードだけしたい
$ sudo yum install yum-utils
例 : kernelパッケージのRPMをカレントディレクトリにDL
$ yumdownloader kernel
詳しくは man 1 yumdownloader
参照。
-
--destdir
: ダウンロード先ディレクトリを指定できる。省略時のデフォルトはカレントディレクトリ -
--resolve
: 依存関係で必要なパッケージについてもDL -
--archlist=ARCH1[,ARCH2...]
: アーキテクチャを指定可能 - CentOS5/6では、
yum-downloadonly
というパッケージをインストールすることで、「インストールせずにダウンロードだけ」できた。- CentOS5/6 のyum-utilsのyumdownloaderは「インストール済みパッケージをダウンロード」用だったらしい。
- 参考 : https://access.redhat.com/ja/node/395763
- CentOS7では、インストールした/していない に関わらず、yum-utilsのyumdownloaderだけでダウンロードが可能になってる。
- 逆に
yum-downloadonly
パッケージが無くなったっぽい。
- 逆に
※パッケージのダウンロードであれば yum install --downloadonly --downloaddir=xxxx (パッケージ名)
でもできるが、yum操作のトランザクションに影響を与えます。そのため、より副作用が少なく直感的に扱える、yum-utilsのyumdownloaderの方を紹介してます。
SRPMをダウンロードして中身を確認したい
$ sudo yum install yum-utils
例 : kernelパッケージのSRPMをカレントディレクトリにDL
$ yumdownloader kernel --source
- 昔のスタイル : SRPMをインストールする前に、初回だけ以下の設定作業が必要です。これをしておかないと、SRPMがどこにインストールされたのか、ソースはどこか、どこでビルドされたのか、というのが追いづらくなり、最悪、システムに破壊的な影響を与えてしまい、泣きます。
$ sudo yum install rpm-build
- 作業ディレクトリの作成:
$ mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
(好きなところでOK) $ echo "%_topdir $HOME/rpmbuild" > ~/.rpmmacros
-
$ rpmbuild --showrc | grep topdir
で設定が有効なの確認 $ rpm -i xxxx.src.rpm
- (もしかしたら cpio コマンドで展開すれば↓のrpmdev-extractと同じだったかも・・・)
- モダンスタイル :
rpmdevtools
が提供しているrpmdev-extract
で展開すればOKです。SRPMのインストールが無くて純粋に展開してるだけなので、副作用が無くて安心です。$ sudo yum install rpm-build
$ sudo yum install rpmdevtools
-
$ rpmdev-extract xxxx.src.rpm
- tarと同じ感じで現在ディレクトリにディレクトリ作成されてその中に展開されます。
SRPMのビルドも試してみたい場合
$ rpmdev-setuptree
- HOMEディレクトリの下に
rpmbuild/{BUILD|BUILDROOT|RPMS|SOURCES|SPEC|SPECS|SRPMS}
ディレクトリを作成します。 -
~/.rpmmacros
を調整します。 - 詳細な処理は
/usr/bin/rpmdev-setuptree
を確認(シェルスクリプトです)。
$ rpmbuild --recompile xxxx.src.rpm
-
rpmdev-setuptree
を実行済みのユーザであれば、どこのディレクトリからでも実行可能です。 -
$HOME/rpmbuild
の下に、ソースとspecファイルを展開し、コンパイルします。この後、$ rpmbuild -ba rpmbuild/SPECS/xxx.spec
などでパッケージのビルド作業をを進められます。
SRPMの展開やビルドは、いろいろなバリエーションがありますので、以下の記事も参考にしてみてください。rpmdevtoolsが無かった時は結構泥臭い作業が必要でした。
- SRPMの扱い方法メモ - Qiita
- SRPMからソースを取り出す方法 - shohu33's diary
- Re: How do I change the SRPM install path ?
- rpmbuild環境の構築 - Qiita
- いまさら聞けないrpmbuildことはじめ - hack in 3 minutes
- CentOS7.1 64bit rpmbuildコマンドによるRPMの作成 | kakiro-web カキローウェブ