yum history info を叩いてみたものの、なんとなくこんなコマンド叩いてたんだーくらいで、「実際何が表示されているのかよくわからない」という方いらっしゃいませんか?
「トランザクションの実行と切り替えたパッケージって何が違う?」
「この@ってなんなの??」
そんな疑問に答えたいと思います。
私自身、初めてみたときわけわからず、苦労したので、初心者の方にもわかりやすく解説しました!
yum history info で履歴を確認したいシチュエーション
そもそも、どういう意図がある場合に使うコマンドなのでしょうか?
ひとつ私が経験したケースとしては、
「このサーバーにはどんなパッケージが入っているのだろうか?」
これを調べるときですね。
なお、この文脈では、「パッケージ=パッケージソフトウェア=つまりソフトウェア」とお考えください。以下、単に「パッケージ」と連呼します。
詳しくはこちら
そんな「このサーバーにはどんなパッケージが入っているのだろうか?」を調べるときに役立つのが
$ sudo yum history list
です。
yumを使用して入れたソフト(更新や削除も含む)の履歴を全てみることができます。
しかし、依存インストールしたソフトなどの詳細までは教えてくれません。
そこで、yum history listで得たIDを指定してあげることで、詳細な情報を表示することができます。
例えばIDが16番の情報が知りたいと思った時はこんな感じです。
$ sudo yum history info 16
今回取り扱う例
例えば、こんな感じの結果が出たとします;
$ sudo yum history info 16
読み込んだプラグイン:hoge, fuga, piyo
・・・(中略)・・・
トランザクション ID : 16
開始時間 : Fri Jun 17 14:21:51 2016
開始 rpmdb : 1234:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
終了時間 : 14:21:55 2016 (4 秒)
終了 rpmdb : 1234:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
ユーザー : root <root>
終了コード : 成功
コマンドライン : install git
トランザクションの実行:
インストール rpm-4.11.3-17.el7.x86_64 @anaconda/7.2
インストール subscription-manager-1.15.9-15.el7.x86_64 @anaconda/7.2
インストール yum-3.4.3-132.el7.noarch @anaconda/7.2
切り替えたパッケージ:
インストール git-1.8.3.1-6.el7_2.1.x86_64 @rhel-7-server-rpms
依存インストール perl-Git-1.8.3.1-6.el7_2.1.noarch @rhel-7-server-rpms
依存インストール perl-TermReadKey-2.30-20.el7.x86_64 @rhel-7-server-rpms
history info
今回はこの結果を例として、詳細を解説していきたいと思います。
今回のOS:RHEL7
ちなみに、OSはRHEL7です;
$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.2 (Maipo)
プラス事前情報として、Apacheが動いていて、PHPで書かれたアプリケーションをホストしているWebサーバーであることがわかっています。
OSって何?RHELなんて初めて聞いた、という方は、こちらの記事が役に立つと思います。
合わせてチェック!
そもそもyumって?rpmとの違いは?dnfってのも聞いたけど?
要すると、
- rpmはRedHat系のLinuxで利用されるパッケージ管理ツール
- パッケージを管理(インストールしたりアップデートしたり削除したり)できる。
- yumは、rpmの高機能版
- ただ単体のパッケージを管理するだけでなく、リポジトリと連携し、未インストールのパッケージを検索できたり、依存性を解決してくれたり、自動更新してくれたりする。実質、裏ではrpmが動いている。
- dnfは、yumの後継。最新のOSでは、yumの代わりにdnfを使用することが推奨される。
です。
詳しくは下記外部サイトを参照してください。今回の前提となる知識をわかりやすく解説してくれています。
【yum入門】yumとは何か?Linuxにおけるyumとrpmの違い
【yumの履歴1】トランザクションID〜コマンドラインまで
結果を再掲します。
トランザクション ID : 16
開始時間 : Fri Jun 17 14:21:51 2016
開始 rpmdb : 1234:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
終了時間 : 14:21:55 2016 (4 秒)
終了 rpmdb : 1234:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
ユーザー : root <root>
終了コード : 成功
コマンドライン : install git
ここに関しては、見てなんとなくおわかりかと思いますが、一応。
トランザクションID:各トランザクションに割り振られた付番
開始時間:トランザクションが開始された時刻
開始 rpmdb:トランザクションが開始されたrpmdb
終了時間:トランザクションが終了した時刻(カッコ内はかかった時間)
終了 rpmdb:トランザクションが終了したrpmdb
ユーザー:トランザクションを実行したユーザー名
終了コード:トランザクションが成功したか失敗したか
コマンドライン:実行されたコマンド(sudo yumは省略されている形だと思います)
見たまんまですね。笑
そもそもトランザクションとは?
「そもそもトランザクションって?」と思った方、いきなりトランザクションと連呼して申し訳ありません・・・ここからは「トランザクションって当然知ってるよね?」というテンションで話が進みますので、そもそもトランザクションって何?な方は、まずはこちらの記事を一読下さい。時間のない方は、とりあえず「まとめてやってほしい複数の処理」と読み替えていけば一応理解できるかと思います。
トランザクションID〜コマンドラインまで
【yumの履歴2】トランザクションの実行
結果を再掲します。
トランザクションの実行:
インストール rpm-4.11.3-17.el7.x86_64 @anaconda/7.2
インストール subscription-manager-1.15.9-15.el7.x86_64 @anaconda/7.2
インストール yum-3.4.3-132.el7.noarch @anaconda/7.2
最初左列の「インストール」は、英語版では「Installed」と書かれており、要するに既にインストールされたコマンドを使用しますよ、という意味。
中央列のアルファベットと数字の羅列は、今回のトランザクションで使用された管理ツールとそのバージョンが示されています。rpm, yumは先ほど解説したパッケージ管理ツール、subscription-managerはRed Hatソフトウェアの管理ツールです。その後ろのハイフン以降はバージョンを表します。
最後右列の@anaconda/7.2は、上記管理ツールを提供しているレポジトリ(詳細後述)の名前です。
ここの3行は、どのトランザクションIDでも、同じことが書いてあります。この「トランザクションの実行」には、どんな管理ツールを実行したか?が書かれているのであって、何をインストールしたか?が書かれているのではない、というのがポイントです。
リポジトリとは
先ほど、@anaconda/7.2はレポジトリだ、というお話が出てきたかと思いますが、「そもそもリポジトリって何?」な方もいらっしゃることでしょう。
リポジトリとは、様々なパッケージの貯蔵庫&管理システムのことです。Windowsでいうところの「Vector」や「窓の杜」といったソフトウェア配布サイトみたいなイメージです。Windowsユーザーなら、一度は聞いたことがあるのではないでしょうか。開発者は、開発したパッケージを登録することで多くの人に使ってもらえるし、ユーザーはそこから欲しいパッケージをダウンロード/インストールすることができます。
Windowsにも、様々なソフトウェア配布サイトが存在するように、 LinuxにもEPELやらRemiといった複数のリポジトリが存在し、それぞれリ扱っているパッケージが異なります。特に、「公式リポジトリ」と「サードパーティリポジトリ」があることは押さえておく必要があります。公式リポジトリは最初からあるいは無効を有効に変えるだけで使用することが可能ですが、サードパーティーリポジトリは手動でダウンロードする必要があります。先ほどのEPELやRemiはRedHat系で有名なサードパーティーリポジトリのひとつです。RHEL 8の公式リポジトリにはBaseOSやAppStreamがあり、CentOS 7の公式リポジトリにはBaseやExtras、Updatesがあります。
詳しくはこちらのサイトを御覧下さい。
CentOSとパッケージとリポジトリ
「他のリポジトリにはどんなものがあるの?」という問に対しては、少し古いですが、下記外部サイトがわかりやすいです。
yumリポジトリ追加リスト 完全版
サーバーで直接確認したい方は、
$ yum repolist all
とコマンドで叩くと、ダウンロード済みのリポジトリのリストを確認することができます。
yum installの@(アットマーク)の意味
さて、リポジトリの頭についている”@”(アットマーク)が気になった方も多いのではないでしょうか。私も気になり調べましたが、検索しても、なかなか出てこないんですよね・・・何より検索エンジンで”@”が調べにくい!
先輩に確認したところ、これは「グループ」を意味する記号だそうです。
そのグループで定義されているものがまとめてインストールされるということです。
例えば、以下、Red Hatの公式サイトから引用します。
~]# yum group install "KDE Desktop"
~]# yum group install kde-desktop
~]# yum install @"KDE Desktop"
~]# yum install @kde-desktop
これらが同等の意味合いということのようです。リポジトリを丸ごとインストールしているイメージですね。
【yumの履歴3】切り替えたパッケージ
結果を再掲します。
切り替えたパッケージ:
インストール git-1.8.3.1-6.el7_2.1.x86_64 @rhel-7-server-rpms
依存インストール perl-Git-1.8.3.1-6.el7_2.1.noarch @rhel-7-server-rpms
依存インストール perl-TermReadKey-2.30-20.el7.x86_64 @rhel-7-server-rpms
history info
これが、実際にインストールされたパッケージ名+バージョンになります。
rhel-7-server-rpmsというリポジトリから、バージョンが1.8.3.1-6.el7_2.1.x86_64のGitのパッケージがインストールされていることがわかりますね。
それに伴い、「依存インストール」という形で、一緒にインストールしておくべきパッケージもインストールしてくれています。今回、コマンドラインがinstall git だったので、それとも辻褄が合います。これがyumの良いところですね。
インストールの他に、Update(更新)やRemove(削除)した場合も、インストールした場合と同様に、どんなリポジトリのどんなパッケージを操作したのか知ることができます。
yum history infoで履歴を確認まとめ
以上より、yum history infoでわかることをざっくりまとめると、
となります。
ちなみに、このコマンドでわかる履歴は、あくまでyumでインストールしたパッケージだけです。rpmや他のパッケージ管理ツール、あるいは直接ダウンロードしてインストールしたパッケージは調べることができません。その他のパッケージも知りたいんだ!という方は、こちらを参照してください。
こういったニッチで限定的な内容は触れているサイトも少なく、Google検索してもなかなかヒットしないため自学自習が非常に困難でした。同じように悩んでいる方のお役に立てれば幸いです。
最後まで読んでくださってありがとうございました!
コメント