yumを習得する
はじめに
最近CentOSで環境構築していてyumコマンド(以下yum)をよく使う。が、正直よく分からずに使ってるオプションなどあった。
このまま、よく分からんけど記事の通りにしたらできた状態はまずいと思い、理解して使えるように調べた限りの情報をまとめておく。
この記事文字だけなので、参考記事リンクの図を見ると理解しやすいかなと思います。
yumについて
「Yellowdog Updater Modified」の略。
「yum」は、Red Hat系のLinuxディストリビューションで使われている”RPMパッケージ”を扱うためのパッケージ管理コマンドです。
つまり、RHELやCentOSなどでパッケージ管理をする際に使うコマンドである。
rpmコマンドで頑張ればパッケージ管理は可能。が、不便な点があるので、yumを使うと簡単にRPMパッケージ管理が行える。
RPMについて
「Red Hat Package Manager」の略。
RPM Package Manager (RPM) は、RHEL、CentOS、および Fedora で実行できるパッケージ管理システムです。RPM を使用することで、上記のオペレーティングシステム用に作成したソフトウェアを配布、管理、および更新できます。
つまり、RPMとはパッケージという単位で管理されるプログラムのインストール、アップデート、アンインストールが簡単に行えるシステム。
パッケージ同士、パッケージ内には依存関係がある場合がある。〇〇を使うには××が必要という依存関係が解決されないとインストールが完了しなかったり、プログラムが動作しなかったりする。
rpmについて
任意パッケージをインストールやアンインストールしたいと思ったときに、依存関係が残っていると指摘をしてくれる。rpmコマンド(以下rpm)では依存関係を管理しない。
つまり、パッケージの依存関係の解決はしないが指摘はする。
rpmの使い方は他の人に任せる
yumとrpm
rpmは依存関係の解決をしない。つまり手動で依存関係を解決する必要がある。これは面倒だということで、自動で依存関係の解決をしてくれるのがyum。
rpmでは無理だが、yumでできること
- yumはパッケージの依存関係を自動で解決する
- インストールをパッケージ名で指定できる
- インストールされていないパッケージを参照、検索ができる
つまるところ基本的にはyumを使い、リポジトリ管理されていないパッケージなどをインストールする際にrpmを使ったりする。
リポジトリとパッケージ
パッケージ
ソフトウェアを構成するファイル群。
リポジトリ
パッケージをまとめている場所。
サードパーティのリポジトリ
デフォルトのリポジトリで管理しているパッケージはバージョンが古かったり、インストールしたいパッケージが含まれていなかったりする。そのためサードパーティのリポジトリを使うことがある
リポジトリの有効、無効
インストールしたリポジトリの有効化、無効化することができる。具体的には*.repoファイルのenabled属性を0(無効)、1(有効)にすることでできる。
また、有効になってるリポジトリの一覧とかもできる。
サードパーティリポジトリをインストールした際に基本無効にしておきたい。理由は、パッケージのアップデートを行う際にサードパーティリポジトリが適用されると困るためである。
(yumでインストールやアップデートが行われるのは基本的にバージョンが新しいものが採用されるらしいと、とある記事で見た。確証ないので、括弧で。。。)
yum実行時に--enablerepo
オプションで一時的に有効にしたいリポジトリを明示的に指定する。また、--disablerepo
で一時的に無効にすることも可能。
便利なyum-config-managerコマンド
*.repoファイルをいちいちいじるのが面倒だったり、リポジトリのインストールなどを簡単にするyum-utilsのyum-config-managerコマンドを使うと便利。
リポジトリの削除
おまけ
yum provides、yum search
yum provides filename
で任意のファイルがどのパッケージに含まれているのかを確認することができる。また、yum search
ではパッケージ名や、用語(ワイルドカードも使える)からヒットする対象パッケージを探すことができる。
yumのprovides、search、list
yum install packagename
でライブラリが足りずにコケた時など、こういった検索をして必要なものを必要なだけインストールしていく。
yum-fastestmirrorについて
たとえば、yum repolist
、yum check-update
などした時以下のような標準出力が出る人がいるだろう。(オプション付けずに出力が出るということはリポジトリを有効にしてるってことになるが。。。)
# yum check-update
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
epel/x86_64/metalink | 7.4 kB 00:00:00
* elrepo: ftp.ne.jp
* epel: ftp.riken.jp
* remi-safe: ftp.riken.jp
base
...
※ロケールが英語の場合Loaded plugins:fastestmirror
と出ているはず。
yum-fastestmirrorは、ダウンロードサイト(ミラーサイト)の中で一番早いサイトを検知して、そのサイトからパッケージをダウンロードするプラグイン。最近のCentOSでは元々入っている模様。
リポジトリIDの前に!がついている理由
ひとまず以下の出力を見てほしい。リポジトリIDの前に"!"がついている。
# yum repolist
リポジトリー ID
!base/7/x86_64
!elrepo
!epel/x86_64
!extras/7/x86_64
!remi-safe
!updates/7/x86_64
これについては以下リンクを見つけた。
この理由は2つあり
- As per
yum
Man pageyum repolist
output's first column as ! if the repository has expired metadata.
- メタデータの有効期限が切れてるリポジトリには1文字目に!が付く。
- This has been purposefully set to be expired, so it re-downloads the
repomd.xml
file (which is very small) to always keep repositories up to date.
- メタデータは期限が切れるように設定されており、
repomd.xml
を再ダウンロードしてリポジトリが常に最新の状態を保つようになっている。
repomd.xml
の再同期は、以下のコマンドで可能。
# yum clean expire-cache
また、記事中に以下のような注意書きがあった。
Attention Note: The ! mark is not an issue and it's expected when the Content Host is registered on Satellite/Capsule Server.
意訳:"!"自体は問題ではなく、コンテンツホストがSatellite/Capsule Server上に配置されている場合にこの出力が期待される。
コンテンツホスト
ホストコレクション
んー、、、自分の理解が追いついておらず上記に関してはまた分かった時に書きたい。分かる方がいれば、ぜひコメントいただきたいです。
コメント的にも"!"がついてること自体はそこまで問題にはならないって感じなので、必要があればキャッシュを消してリポジトリを最新の状態にしておこう、ってニュアンスで理解している。
yumサブコマンド
チートシート
yumのサブコマンド
yum installとyum localinstallの違い
パッケージの削除
オプション
Discussion