はじめに
yum
, dnf
でパッケージ管理を行なっている場合に、このコマンドって何をインストールすれば使えるようになる?がわからなかった。
これを調査する whatprovides
というサブコマンドがあるため、これについての備忘録を書いておく。
環境
Mac OS Sonoma 14.2.1
Docker 24.0.6
whatprovidesとは?
例によって、 man
を読んでみる。
https://man7.org/linux/man-pages/man8/yum.8.html
元は、 provides
コマンドで、whatprovides
はエイリアスとなっているようだ。
説明を読むと、
与えられた
を提供するパッケージを検索する。 これは、ファイル名を知っていて、そのファイルを提供するパッケージ(インストールされているかどうかにかかわらず)を見つけたいときに便利である。 (インストールされているかどうかにかかわらず) どのパッケージがこのファイルを提供しているかを調べたいときに便利である。 指定された は徐々に以下の場所で検索される。
と記載がある。
ユースケースが1~4として記載されているが、実際に試してみた方がわかりやすいので、やってみる。
whatprovidesを使ってみる
自分のホストマシンがMacのため、Docker内でyumをパッケージ管理ツールとして使用しているイメージで試してみる。
今回は、AmazonLinux2のOSでやってみることにする。
psコマンドの依存関係を調査
プロセスの死活調査でよく使用する ps
コマンドだが、Dockerのイメージには入っていないことがある。
そのため、これをwhatprovides
を使って、何をインストールすれば入るのかを調査してみよう。
では、現在の状態を見てみる。
bash-4.2# ps
bash: ps: command not found
ps
コマンドは入っていないようだ。
順当に行けば、 yum install ps
とかで入りそうな気もするのでやってみよう。
yum install ps
bash-4.2# yum install ps
Loaded plugins: ovl, priorities
amzn2-core | 3.6 kB 00:00:00
13 packages excluded due to repository priority protections
No package ps available.
Error: Nothing to do
どうやら、パッケージが見つからないようだった。
じゃあ、どうすれば ps
は使えるように・・・?
ここで、whatprovides
のサブコマンドを使ってみる。
yum whatprovides ps
bash-4.2# yum whatprovides ps
Loaded plugins: ovl, priorities
13 packages excluded due to repository priority protections
AmazonCorretto/x86_64/filelists_db | 101 kB 00:00:00
amzn2-core/2/x86_64/filelists_db | 64 MB 00:00:01
procps-ng-3.3.10-16.amzn2.x86_64 : System and process monitoring utilities
Repo : amzn2-core
Matched from:
Filename : /bin/ps
procps-ng-3.3.10-17.amzn2.2.x86_64 : System and process monitoring utilities
Repo : amzn2-core
Matched from:
Filename : /bin/ps
procps-ng-3.3.10-17.amzn2.2.2.i686 : System and process monitoring utilities
Repo : amzn2-core
Matched from:
Filename : /bin/ps
procps-ng-3.3.10-17.amzn2.2.2.x86_64 : System and process monitoring utilities
Repo : amzn2-core
Matched from:
Filename : /bin/ps
procps-ng-3.3.10-26.amzn2.i686 : System and process monitoring utilities
Repo : amzn2-core
Matched from:
Filename : /bin/ps
procps-ng-3.3.10-26.amzn2.x86_64 : System and process monitoring utilities
Repo : amzn2-core
Matched from:
Filename : /bin/ps
procps-ng-3.3.10-16.amzn2.x86_64 : System and process monitoring utilities
Repo : amzn2-core
Matched from:
Filename : /usr/bin/ps
procps-ng-3.3.10-17.amzn2.2.x86_64 : System and process monitoring utilities
Repo : amzn2-core
Matched from:
Filename : /usr/bin/ps
procps-ng-3.3.10-17.amzn2.2.2.i686 : System and process monitoring utilities
Repo : amzn2-core
Matched from:
Filename : /usr/bin/ps
procps-ng-3.3.10-17.amzn2.2.2.x86_64 : System and process monitoring utilities
Repo : amzn2-core
Matched from:
Filename : /usr/bin/ps
procps-ng-3.3.10-26.amzn2.i686 : System and process monitoring utilities
Repo : amzn2-core
Matched from:
Filename : /usr/bin/ps
procps-ng-3.3.10-26.amzn2.x86_64 : System and process monitoring utilities
Repo : amzn2-core
Matched from:
Filename : /usr/bin/ps
bash-4.2#
/usr/bin/ps
のパスかつ、説明を読むと、System and process monitoring utilities
と書いてあるので、これっぽさそうだとわかる。
いっぱい見つかっているように見えるが、末尾を見るとアーキテクチャの違いによるもののようだ。(x86_64
, i686
とか)
ということなので、procps-ng
というパッケージを入れてあげれば良いようだ。
yum install procps-ng
bash-4.2# yum install procps-ng
Loaded plugins: ovl, priorities
13 packages excluded due to repository priority protections
Resolving Dependencies
--> Running transaction check
---> Package procps-ng.x86_64 0:3.3.10-26.amzn2 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
========================================================================================================================================================
Package Arch Version Repository Size
========================================================================================================================================================
Installing:
procps-ng x86_64 3.3.10-26.amzn2 amzn2-core 292 k
Transaction Summary
========================================================================================================================================================
Install 1 Package
Total download size: 292 k
Installed size: 740 k
Is this ok [y/d/N]: y
Downloading packages:
procps-ng-3.3.10-26.amzn2.x86_64.rpm | 292 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : procps-ng-3.3.10-26.amzn2.x86_64 1/1
Verifying : procps-ng-3.3.10-26.amzn2.x86_64 1/1
Installed:
procps-ng.x86_64 0:3.3.10-26.amzn2
Complete!
無事インストールができた。
さて、ps
コマンドを叩いてみると、
bash-4.2# ps
PID TTY TIME CMD
13 pts/0 00:00:00 bash
31 pts/0 00:00:00 ps
問題なく使えるみたい!やったー!
使用する場面
あるコマンドを使いたいがパッケージがわからないとき
→今回の記事のようなケースとあるプログラムの依存ライブラリがわからないとき
→プログラム上で依存ライブラリがあるときに、エラーメッセージなどにこの依存ライブラリ足りてないよ!と言われたが、どのパッケージでそれは入るんだい?というケース
参考
yum(8) — Linux manual page
https://man7.org/linux/man-pages/man8/yum.8.htmlYUM コマンド チートシート | Red Hat Customer Portal https://access.redhat.com/sites/default/files/attachments/rh_yum_cheatsheet_1214_jcs_print-ja.pdf
B.2.2.3. 解決できない依存関係 | Red Hat Customer Portal https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/deployment_guide/s3-rpm-unresolved-dependency
YUM WHATPROVIDESのすすめ
https://qiita.com/cvusk/items/07fbbcc35a69a1431738rpm の依存関係調査メモ
https://qiita.com/8ya43/items/295bd62901d059dbff96
おわりに
pupetteer
を使うときに依存ライブラリでかなりハマり、このパッケージどこにあるの・・・状態が多かった。
このコマンドを知って、依存ライブラリを地道に調べていって動作させるということができたので備忘録として今回記事にした。yum
, dnf
はサブコマンドがいっぱいあるのでもっと便利なコマンドがあるんだろうなと思ったりする。