whatprovidesで依存ライブラリを調査する

はじめに

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

問題なく使えるみたい!やったー!

使用する場面

  • あるコマンドを使いたいがパッケージがわからないとき
    →今回の記事のようなケース

  • とあるプログラムの依存ライブラリがわからないとき
    →プログラム上で依存ライブラリがあるときに、エラーメッセージなどにこの依存ライブラリ足りてないよ!と言われたが、どのパッケージでそれは入るんだい?というケース

参考

おわりに

pupetteerを使うときに依存ライブラリでかなりハマり、このパッケージどこにあるの・・・状態が多かった。
このコマンドを知って、依存ライブラリを地道に調べていって動作させるということができたので備忘録として今回記事にした。
yum, dnfはサブコマンドがいっぱいあるのでもっと便利なコマンドがあるんだろうなと思ったりする。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。