MTのDBIエラー("Got an error:DBI object version 1.628 does not match $DBI::VERSION 1.609)
環境
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 <[email protected]>) → 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のログイン画面が表示されました。
懐かしのログイン画面。。。。
補足 - 足りないモジュールの確認方法 -
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はエラーとなっており、最初黄色に色付けされていましたが、今回の対応を行うことでクリアとなりました。
Author And Source
この問題について(MTのDBIエラー("Got an error:DBI object version 1.628 does not match $DBI::VERSION 1.609)), 我々は、より多くの情報をここで見つけました https://qiita.com/miwato/items/8f5f77f03ca35ff10327著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .