最近はWindowsサーバのメンテナンスばかりを行っているのですが、今回はFireWallとして利用しているCentOSサーバにて、Perlで動くswatchを起動させようと思った時に遭遇したログを元に、Perlモジュールが不足している場合の必要パッケージ特定方法と解決方法をご紹介します。作業環境はCentOS6.3です。すでにインストールされているPerlモジュール一覧を確認する方法は Perlモジュール確認方法 をご覧ください。
以下が遭遇したログです。今回はswatchの起動が問題になったため、ログは/var/log/swatch/swatch.logにありました。
Can't locate File/Tail.pm in @INC (@INC contains: /usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5 .) at /tmp/.swatch_script.2532 line 90.
BEGIN failed--compilation aborted at /tmp/.swatch_script.2532 line 90.
上記の「Can’t locate *.pm in @INC」は、Perlを使ったCGIの利用時などに遭遇しやすいエラーです。*.pmというのは「Perl Module」の頭文字をとった拡張子。Module(もじゅーる)ってのは、プラグインとかアドオンって言葉の方がわかりやすい人もいるのかなぁ、Perlに追加機能を提供する特別なファイルのことです。このエラーログは、Perlの特殊変数である「@INC」に含まれるディレクトリ(モジュールを探すディレクトリ)配下に「File/Tail.pm」が見つからないといっています。
今回は、エラーログから必要なモジュールの特定を行いインストールを行うまでを簡単に説明します。
1.欠けているファイルを含むパッケージを探す
どのパッケージをインストールすれば該当の「File/Tail.pm」を補えるかを確認するには、yumコマンドの「provides」を利用します。
# yum provides '*File/Tail.pm'
providesは、「*File/Tail.pm」に合致するファイルを提供するパッケージを一覧表示してくれます。
その中からふさわしいものを選び、インストール対象とします。
2.対象のパッケージをインストールする
今回対象となるのは、「perl-File-Tail」というモジュールです。このモジュールは定期的に更新されるファイルを継続的に読むことを可能とするモジュールです。
# yum -y install perl-File-Tail
以上で、インストールが完了しました。
再度Perlを実行してみて、該当のエラーが表示されるかお試しあれ\(・o・)/!
コメント
epelにあったんで3月くらいに作ったのですが、エラーでできませんでした。
もう一度ためしてみたら、いつの間にかできるようになっておりましたね。
くりくりさん
書き込みありがとうございます!
その時のエラー。
ローカルにログで残ってたりしませんか?
残ってたら楽しかったのにー(^◇^)