🦔

yumを習得する

2022/12/03に公開

はじめに

最近CentOSで環境構築していてyumコマンド(以下yum)をよく使う。が、正直よく分からずに使ってるオプションなどあった。
このまま、よく分からんけど記事の通りにしたらできた状態はまずいと思い、理解して使えるように調べた限りの情報をまとめておく。
この記事文字だけなので、参考記事リンクの図を見ると理解しやすいかなと思います。

yumについて

「Yellowdog Updater Modified」の略。

「yum」は、Red Hat系のLinuxディストリビューションで使われている”RPMパッケージ”を扱うためのパッケージ管理コマンドです。

https://atmarkit.itmedia.co.jp/ait/articles/1608/29/news019.html

つまり、RHELやCentOSなどでパッケージ管理をする際に使うコマンドである。
rpmコマンドで頑張ればパッケージ管理は可能。が、不便な点があるので、yumを使うと簡単にRPMパッケージ管理が行える。

RPMについて

「Red Hat Package Manager」の略。

RPM Package Manager (RPM) は、RHEL、CentOS、および Fedora で実行できるパッケージ管理システムです。RPM を使用することで、上記のオペレーティングシステム用に作成したソフトウェアを配布、管理、および更新できます。

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html-single/rpm_packaging_guide/index

つまり、RPMとはパッケージという単位で管理されるプログラムのインストール、アップデート、アンインストールが簡単に行えるシステム。
パッケージ同士、パッケージ内には依存関係がある場合がある。〇〇を使うには××が必要という依存関係が解決されないとインストールが完了しなかったり、プログラムが動作しなかったりする。

rpmについて

任意パッケージをインストールやアンインストールしたいと思ったときに、依存関係が残っていると指摘をしてくれる。rpmコマンド(以下rpm)では依存関係を管理しない。

つまり、パッケージの依存関係の解決はしないが指摘はする。

rpmの使い方は他の人に任せる
https://hara-chan.com/it/programming/linux-command-rpm/

yumとrpm

rpmは依存関係の解決をしない。つまり手動で依存関係を解決する必要がある。これは面倒だということで、自動で依存関係の解決をしてくれるのがyum。

rpmでは無理だが、yumでできること

  • yumはパッケージの依存関係を自動で解決する
  • インストールをパッケージ名で指定できる
  • インストールされていないパッケージを参照、検索ができる

https://qiita.com/Yuta_spade/items/2d829e33d7a9c1b36923
https://qiita.com/miyuki_samitani/items/9ac04ca2b783575d8371
https://hara-chan.com/it/infrastructure/yum-rpm/

つまるところ基本的にはyumを使い、リポジトリ管理されていないパッケージなどをインストールする際にrpmを使ったりする。

リポジトリとパッケージ

パッケージ

ソフトウェアを構成するファイル群。

リポジトリ

パッケージをまとめている場所。
https://qiita.com/miyuki_samitani/items/b5d302111d33485a19d2
https://hara-chan.com/it/programming/linux-repository-package/
https://tech-blog.rakus.co.jp/entry/2017/12/14/105052

サードパーティのリポジトリ

デフォルトのリポジトリで管理しているパッケージはバージョンが古かったり、インストールしたいパッケージが含まれていなかったりする。そのためサードパーティのリポジトリを使うことがある

リポジトリの有効、無効

インストールしたリポジトリの有効化、無効化することができる。具体的には*.repoファイルのenabled属性を0(無効)、1(有効)にすることでできる。
また、有効になってるリポジトリの一覧とかもできる。
https://kazmax.zpp.jp/linux_beginner/yum_repository_enable_disable.html

サードパーティリポジトリをインストールした際に基本無効にしておきたい。理由は、パッケージのアップデートを行う際にサードパーティリポジトリが適用されると困るためである。
(yumでインストールやアップデートが行われるのは基本的にバージョンが新しいものが採用されるらしいと、とある記事で見た。確証ないので、括弧で。。。)
yum実行時に--enablerepoオプションで一時的に有効にしたいリポジトリを明示的に指定する。また、--disablerepoで一時的に無効にすることも可能。
https://akamist.com/blog/archives/648

便利なyum-config-managerコマンド

*.repoファイルをいちいちいじるのが面倒だったり、リポジトリのインストールなどを簡単にするyum-utilsのyum-config-managerコマンドを使うと便利。
https://unix.stackexchange.com/questions/153110/does-yums-enablerepo-option-only-enable-a-repo-for-the-current-command
https://sig9.org/archives/1527

リポジトリの削除

https://soypocket.com/it/linux/epel-delete-rpm/

おまけ

yum provides filenameで任意のファイルがどのパッケージに含まれているのかを確認することができる。また、yum searchではパッケージ名や、用語(ワイルドカードも使える)からヒットする対象パッケージを探すことができる。

yumのprovides、search、list

yum install packagenameでライブラリが足りずにコケた時など、こういった検索をして必要なものを必要なだけインストールしていく。

https://qiita.com/r-ytakada/items/f1a24377847da394563c
https://kazmax.zpp.jp/linux_beginner/yum_search.html

yum-fastestmirrorについて

たとえば、yum repolistyum 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では元々入っている模様。

https://centos.bungu-do.jp/archives/27
https://atmarkit.itmedia.co.jp/flinux/rensai/linuxtips/903yumfastmirror.html

リポジトリIDの前に!がついている理由

ひとまず以下の出力を見てほしい。リポジトリIDの前に"!"がついている。

# yum repolist
リポジトリー ID
!base/7/x86_64
!elrepo
!epel/x86_64
!extras/7/x86_64
!remi-safe
!updates/7/x86_64

これについては以下リンクを見つけた。
https://access.redhat.com/solutions/2267871

この理由は2つあり

  • As per yum Man page yum 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上に配置されている場合にこの出力が期待される。

コンテンツホスト
https://access.redhat.com/documentation/ja-jp/red_hat_satellite/6.4/html/planning_for_red_hat_satellite_6/chap-red_hat_satellite-architecture_guide-host_grouping_concepts

ホストコレクション
https://access.redhat.com/documentation/ja-jp/red_hat_satellite/6.6/html/managing_hosts/chap-red_hat_satellite-managing_hosts-configuring_host_collections

んー、、、自分の理解が追いついておらず上記に関してはまた分かった時に書きたい。分かる方がいれば、ぜひコメントいただきたいです。
コメント的にも"!"がついてること自体はそこまで問題にはならないって感じなので、必要があればキャッシュを消してリポジトリを最新の状態にしておこう、ってニュアンスで理解している。

yumサブコマンド

チートシート

https://access.redhat.com/sites/default/files/attachments/rh_yum_cheatsheet_1214_jcs_print-ja.pdf

yumのサブコマンド

https://www.wakuwakubank.com/posts/275-linux-yum/

yum installとyum localinstallの違い

https://qiita.com/mashiro_lain/items/c37ab3e33e244784bd2f

パッケージの削除

https://kazmax.zpp.jp/linux_beginner/yum_remove.html

オプション

https://uxmilk.jp/9899

Discussion