Failed to add groups file for repository: base – comps file is empty/damaged

先日、CentOS 7サーバーでWordPress環境を構築しているとき、いつもどおり、yumコマンドで「ベース(Base)」と「開発ツール(Development Tools)」のパッケージグループをインストールを試みたところ、以下のように失敗してしまいました。

 # yum groupinstall 'Base' 'Development Tools'

読み込んだプラグイン:fastestmirror, langpacks
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
リポジトリーのグループファイルに追加できませんでした: base - comps file is empty/damaged
Warning: no environments/groups match:

「リポジトリーのグループファイルに追加できませんでした」は、英語環境(LANG=C)では、「Failed to add groups file for repository」です。

そういえば、その前にscreenコマンドをインストールしたときも、コマンド自体は正しくインストールされましたが、以下のようなメッセージが出力されていました。

依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ screen.x86_64 0:4.1.0-0.23.20120314git3c2946.el7_2 を インストール
--> 依存性解決を終了しました。
/var/cache/yum/x86_64/7/base/gen/comps.xml: no element found: line 1, column 0
...

パッケージリストファイル /var/cache/yum/x86_64/7/base/gen/comps.xml が壊れているようです。

※このサーバーは、他の方がISOイメージからCentOS 7をインストールした状態で作業を引き継いだのですが、なぜパッケージリストファイルが壊れていたのかは、よくわかりません。

こんなときは、yumのキャッシュをすべてクリアしてみます。

 # yum clean all

読み込んだプラグイン:fastestmirror, langpacks
リポジトリーを清掃しています: base extras updates
Cleaning up everything
Cleaning up list of fastest mirrors

再度 yum groupinstall を実行すると、パッケージ情報を再構築して、今度は正しく実行され、パッケージグループをインストールできました。

 # yum groupinstall 'Base' 'Development Tools'

読み込んだプラグイン:fastestmirror, langpacks
base                                                     | 3.6 kB     00:00
extras                                                   | 3.4 kB     00:00
remi-safe                                                | 2.9 kB     00:00
updates                                                  | 3.4 kB     00:00
(1/5): extras/7/x86_64/primary_db                          | 151 kB   00:00
(2/5): base/7/x86_64/group_gz                              | 155 kB   00:00
(3/5): updates/7/x86_64/primary_db                         | 4.8 MB   00:01
(4/4): base/7/x86_64/primary_db                            | 5.6 MB   00:02
Determining fastest mirrors
 * base: ftp.yz.yamagata-u.ac.jp
 * extras: ftp.yz.yamagata-u.ac.jp
 * updates: ftp.yz.yamagata-u.ac.jp

...

※yum clean all のところは、メタ情報のみを削除する yum clean metadata でもよかったのかもしれません。

ちなみに、僕がWebサーバーやDBサーバーを構築するときは、「ベース(Base)」と「開発ツール(Development Tools)」のパッケージグループを必ずインストールします。
サーバー構築やサーバー運用で必須となるようなツールは、早めにそろえておきたいためです。

パッケージグループのリストは、yum grouplist コマンドで確認できます。
英語環境(LANG=C)のほうがわかりやすいと思います。

 # export LANG=C
 # yum grouplist

Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: ftp.yz.yamagata-u.ac.jp
 * extras: ftp.yz.yamagata-u.ac.jp
 * updates: ftp.yz.yamagata-u.ac.jp
Available Environment Groups:
   Minimal Install
   Compute Node
   Infrastructure Server
   File and Print Server
   Basic Web Server
   Virtualization Host
   Server with GUI
   GNOME Desktop
   KDE Plasma Workspaces
   Development and Creative Workstation
Installed Groups:
   Development Tools
Available Groups:
   Compatibility Libraries
   Console Internet Tools
   Graphical Administration Tools
   Legacy UNIX Compatibility
   Scientific Support
   Security Tools
   Smart Card Support
   System Administration Tools
   System Management
Done

また、パッケージグループに含まれるパッケージは、yum groupinfo コマンドで確認できます。

 # yum groupinfo Base

Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: ftp.yz.yamagata-u.ac.jp
 * extras: ftp.yz.yamagata-u.ac.jp
 * remi-safe: repo1.sea.innoscale.net
 * updates: ftp.yz.yamagata-u.ac.jp

Group: Base
 Group-Id: base
 Description: The basic installation of CentOS Linux.
 Mandatory Packages:
    acl
    at
    attr
    authconfig
    bc
    bind-utils

...