LoginSignup
3
1

More than 5 years have passed since last update.

MTのDBIエラー("Got an error:DBI object version 1.628 does not match $DBI::VERSION 1.609)

Last updated at Posted at 2017-07-08

環境

OS : CentOS 6
MovableType : 6.0.3

現象

脆弱性対応のためにyum update をした後、管理画面にログインしようと
"http://<ドメイン>/XXX/mt.cgi" にアクセスしたところ、こんなエラーが出力されました。

Got an error:DBI object Version 1.628 does not match $DBI::VERSION 1.609)

推測

yum update によってyumで管理されているperlたちが全体的にupdate されたにも関わらず、
モジュールたちが取り残されて必要とされているバージョンに差分が発生したのだろうと推測しました。

エラー内容からも1.628 じゃないといけないのに、1.609だぞと怒られている模様。

調査

エラー内容をいろいろな形でGoogle検索しても、いまいちよく分からない。
とりあえず推測に基づいて、現在のDBIバージョンを確認。
確かに古い。

# perl -MDBI -e'print $DBI::VERSION'
1.609

対処策

1.DBIもバージョンアップしましょう。
yum update perl-DBI をしても、最新版が適用されているとのことで1.609 以上にはならなかったので、個別に入れるしかありません。CPANの力を借りて、DBI、およびDBD::MySQLモジュールをインストールします。
いでよCPAN!

# perl -MCPAN -e shell
cpan> install DBI
cpan> install DBD::MySQL
cpan> quit

なんかさっくりインストールできます。

2.再びブラウザで "http://<ドメイン>/XXX/mt.cgi" にアクセスしますが、現象変わらず。
出力される文字も変わらず。おかしい・・・・バージョンを確認しよう。

# perl -MDBI -e'print $DBI::VERSION'
1.631

うーん。1.631 じゃなく、1.628 を入れたい!


# cpan
Terminal does not support AddHistory.

cpan shell -- CPAN exploration and modules installation (v2.00)
Enter 'h' for help.

cpan[1]> m DBI
  (省略)
Module id = DBI
    CPAN_USERID  TIMB (Tim Bunce <Tim.Bunce@pobox.com>)        →   TIMBと判明!
  (省略)

cpan[2]> ls TIMB/DBI                   → モジュールを確認
cpan[3]> install TIMB/DBI-1.628.tar.gz

これでインストールは完了しますが、現象が変わらないということちゃんとリンクが張れてないっぽい。

3.余計なものを削除しましょう。

# rpm -qa | grep perl-DBI
perl-DBI-1.609-4.el6.x86_64

消しちゃえ!

# yum remove perl-DBI
================================
 パッケージ          アーキテクチャ    バージョン    リポジトリー    容量
============================================================================
削除:
 perl-DBI               x86_64     1.609-4.el6        @base     1.7 M
依存性関連での削除をします。:
 perl-CPANPLUS          x86_64     0.88-144.el6       @base     767 k
 perl-DBD-SQLite        x86_64     1.27-3.el6         @base     221 k
 perl-DBIx-Simple       noarch     1.32-3.el6         @base     62 k
 perl-core              x86_64     5.10.1-144.el6     @base      0.0

トランザクションの要約
===================================================
削除                 5 パッケージ

関連するパッケージたちとともに抹殺しました。

4.どうだ?! 再びブラウザで "http://<ドメイン>/XXX/mt.cgi" にアクセスしますが、あ!文字が変わった!

Can't locate DBI.pm in @INC (@INC contains: ・・・・・

認識してないっぽい。どうも @INC contains:の後ろに記載されるパスの中にDBI.pm がないと言ってるように見えます。

5.DBI.pm を検索しましょ。

# find / -name DBI.pm
/root/.cpan/build/DBI-1.628-51Whd2/blib/lib/DBI.pm
/root/.cpan/build/DBI-1.628-51Whd2/blib/lib/Bundle/DBI.pm
/root/.cpan/build/DBI-1.628-51Whd2/DBI.pm
/root/.cpan/build/DBI-1.628-51Whd2/lib/Bundle/DBI.pm

なんと先ほど削除したperl-DBI パッケージがまだ健在だったころ、上記find コマンドを叩いており、
/usr/lib64/perl5/DBI.pm にパスが張られていたのを確認しておりました。(正確にはログを見て発見)
リンクを張ってやりましょう。

# ln -fs /root/.cpan/build/DBI-1.628-51Whd2/DBI.pm /usr/lib64/perl5/DBI.pm

6.三度確認すると、OK!!! MTのログイン画面が表示されました。
懐かしのログイン画面。。。。

module02.png

補足 - 足りないモジュールの確認方法 -

mt-config.cgi を一時的にRenameします。

# cd /var/www/cgi-bin/src      → パスは環境によって異なります。 find / -name mt-config.cgi で探してください。
# cp -p mt-config.cgi mt-config.cgi.bak
# rm -f mt-config.cgi

ブラウザから "http://<ドメイン>/XXX/mt-check.cgi" にアクセスして、どのモジュールが足りていないのか確認しましょう。
今回、DBI、DBDはエラーとなっており、最初黄色に色付けされていましたが、今回の対応を行うことでクリアとなりました。

module01.png

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1