2010年8月22日 日曜日

FreeBSDの定期メールが来なくなったら

カテゴリー: FreeBSD
タグ:, , , , , ,
時間:0時51分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

テスト環境およびファイルサーバーとして、FreeBSD を使ったローカルサーバーがあります。cron での実行結果などを日々メールで送ってくれるようになっているのですが、7.3R にアップグレードをしてから来なくなってしまいました。

前回のアップグレードでも同じ現象があったのですが、どうやって直したのか忘れてしまっていて手間取ったので、メモとして残しておきます。

結論から言いますと、原因は/etc/mail/mailer.conf の構文エラーでした。

アップグレードは freebsd-update を使用したのですが、その際に変更内容を示すデータがそのまま反映されてしまい、次のようになっていました。

CODE:
  1. <<<<<<<current version
  2. =======
  3. # $FreeBSD: src/etc/mail/mailer.conf,v 1.3.38.1 2010/02/10 00:26:20 kensmith Exp $
  4. >>>>>>> 7.3-RELEASE
  5. #
  6. # Execute the Postfix sendmail program, named /usr/local/sbin/sendmail
  7. #
  8. sendmail    /usr/local/sbin/sendmail
  9. send-mail   /usr/local/sbin/sendmail
  10. mailq      /usr/local/sbin/sendmail
  11. newaliases  /usr/local/sbin/sendmail

1・2・4行目が追加された行で、それぞれをコメントアウトすることで修正できます。

なお、解決に至ったのは、ログファイル/var/log/dmesg.today に次のようなエラーが記録されていたためです。

CODE:
  1. pid 44294 (mailwrapper), uid 0: exited on signal 11 (core dumped)

先ほどの /etc/mail/mailer.confmailwrapper の設定ファイルです。cron で実行する簡単なプログラムをコンソールから実行してみたところ、その時刻に上記ログが記録されていたため解決することができました。

コメント (0)

2010年7月25日 日曜日

RADEON HD 5670 を省電力版 GeForce 9600 GT と比較

カテゴリー: 自作パソコン
タグ:, , , , , , , ,
時間:16時30分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

1週間ほど前に SAPPHIRE HD5670 512M GDDR5 PCI-E HDMI/DVI-I/VGA の開封レポート記事を書きましたが、今度は省電力版の GeForce 9600 GT との比較記事です。といっても、ベンチマークはすでにがやっているのでもっと地味なところだけです。

今回の比較対象は、それまで使用していた ASUS の EN9600GT/DI/512MD3。そのほかのパーツ構成については、組み立てたときの記事を見てください。OS が Windows 7 Home Premium(32bit)になった以外はそのままです。モニタは解像度1680×1050でフルカラー。

性能比較

ビデオカードとドライバのみの変更で、同じことをしたときのステータスを比較しました。作業時の周辺気温は約25度。

以下、SAPPHIRE HD5670 512M GDDR5 PCI-E HDMI/DVI-I/VGA をRADEON、EN9600GT/DI/512MD3 を GeForce と表記します。グラフ中の凡例についても同様です。

作業内容

GPU-Z 0.4.4 でログをとりながら、次の作業を行いました。

  1. シールオンラインという DirectX 9.0c 相当のライト3Dゲームを起動してログイン。1440×900のウィンドウモードで、グラフィックの画質はデフォルトの最高画質。
  2. おそらくもっとも混雑していると思われる場所を1往復。
  3. ログアウト。
結果

以下、ログから作成したグラフです。開始のタイミング等は合わせていませんので、時間(X軸)については参考になりません。

GPU クロック
CPU コアクロック

CPU コアクロック

GeForce は300MHz と 600MHz の2段階で上がったら上がりっぱなしですが、RADEON は少なくとも3段階で、途中何度も変化しています。また、変化の範囲も
157MHz から 775MHz と広くなっています。

RADEON はアイドル状態での発熱の低さが話題になっていますが、こういった微調整があるからなのかもしれません。

GPU メモリクロック
GPU メモリクロック

GPU メモリクロック

GPU クロックと同様、GeForce が 100MHz と 900MHz の2段階で、RADEON が 300・600・1000MHz の3段階。
なお、GeForce が GDDR3 であるのに対して、RADEON は GDDR5 を使用しています。データの点速度は5倍になったとのこと。

GPU 温度
GPU 温度

GPU 温度

個人的に一番注目している温度です。メーカーもクーラーも違うので単純な比較をすることはできませんが、少し低くなりました。

GeForce が 44~51℃、RADEON が40~48℃です。アイドル状態では4℃下がっていますので、軽いゲームをたまにやるだけの人にはいいかもしれません。

ファン速度
ファンスピード

ファンスピード

ファンの回転速度を、フルスピードに対するパーセンテージで表したものです。フルスピードが違うと思いますので、これもあまり参考にはならないでしょう。

GeForce が 35%の固定、RADEON が 28~44%の可変です。どちらも Windows 起動前を含めてうるさく感じることはありませんでした。

GPU ロード
GPU ロード

GPU ロード

GPU にかかる負荷の割合です。クロック自体はどちらも上限まで上がりますが、負荷自体はそんなになかったようです。RADEON が一時的に上限近く(96%)まで上がっていますが、1秒以内に戻っていますので結構余裕があります。

Windows エクスペリエンス インデックス

参考値として、Windows エクスペリエンス インデックスの値を記載します。

プロセッサ
7.1
メモリ(RAM)
7.1
グラフィックス
7.0
ゲーム用グラフィックス
7.0
プライマリ ハードディスク
5.9

ビデオカード変更直前のデータを記録し忘れてしまったので比較できませんが、Windows 7 Ultimate RC ではグラフィックスおよびゲーム用グラフィックスの値は5.9でした。もともと不満があったわけではないので、体感による違いはほとんどありません。ゲームの反応と彩度が若干向上したかなというくらいです。

まとめ

久しぶりの RADEON であり、初めての AMD ビデオカード(間に ATI は AMD になりました)ということで不安もありましたが、性能は微アップ、発熱ダウン、DirectX11 対応でいい感じになりました。

また、AMD マザーボードのドライバはビデオカードのドライバを含むため、違うメーカーのドライバを混在させるという状況の回避もできました。動いてはいましたが、なんとなく気になっていたのです。

結果的には、非常に満足できました。

コメント (0)

2010年7月17日 土曜日

SAPPHIRE HD5670 512M GDDR5 PCI-E HDMI/DVI-I/VGA 開封レポート

カテゴリー: 自作パソコン
タグ:, , , , ,
時間:16時24分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

初めてパソコンを自分で組んだのがおそらく2003年ごろ。当時使っていた玄人志向の RADEON70-AGP64C 以来、7年ぶりに RADEON GPU のビデオカードを購入しました。ものは、SAPPHIRE のSAPPHIRE HD5670 512M GDDR5 PCI-E HDMI/DVI-I/VGA

現在使用しているのは、去年10月に購入した省電力版の GeForce 9600 GT を使用した、ASUS の EN9600GT/DI/512MD3。

GeForce 9600 GT は DirectX 9 までの対応ですが、RADEON はゲームとの相性が悪いと言う固定観念で避けていました。現在マザーボードが RADEON チップのもので、OS インストール時に内臓 GPU で問題なかったことから考えを変えたのですが、さすがにすぐに RADEON に買い換える意義が見出せなかったのでそのままでした。

現在 RADEON は絶好調で、ハイエンドからローエンドまで細かく製品が販売され、低発熱と処理能力の高さからかなりの人気商品となっています。省電力版 GeForce 9600 GT と近い HD 5670 が登場したことで、乗換えることにしました。

と言うわけで、前置きが長くなりましたが開封レポートから。

化粧箱の表

化粧箱の表

化粧箱の表側。代理店はASKです。

化粧箱の裏

化粧箱の裏

化粧箱の裏側。代理店による保証書と日本語マニュアルが、ビニール袋に入れられた状態で貼り付けてあります。こう言うのって結構邪魔に感じますが、何かいい方法はないものなんでしょうか。

茶箱

茶箱

内箱はシンプルな茶箱。

内容

内容

内箱を開けたところ。

マニュアルとCD-ROM

マニュアルとCD-ROM

一番上には、デバイスドライバのCD-ROMと簡易マニュアル。

内箱の中のビデオカード

内箱の中のビデオカード

その下にビデオカード。箱よりも少し小さいため、緩衝材としてスポンジが一緒に入っています。

ビデオカードの下

ビデオカードの下

ビデオカードを出すと、変換コネクタと変換ケーブル。

ビデオカードの表側

ビデオカードの表側

ビデオカード本体の表側。ファンの高さは2スロット分の空間を必要としていますが、バックプレートは1スロットだけですので、GPUの熱をPCケースの外に吐き出してはくれません。写真を忘れましたが、ファン部分の厚みは3.2センチほど。

また、CrossFire 用のコネクタはありません。外箱の説明によると、ソフトウェアによる CrossFireX には対応しているようです。

ビデオカードの裏側

ビデオカードの裏側

裏側。クーラーは4箇所でねじ止めされているだけのようです。
左下のシールには、「Made in China」とありました。

基盤の長さ

基盤の長さ

基盤の長さは約17センチ。これなら小型のPCケースにも入りそうですね。

DVI - VGA 変換アダプター

DVI - VGA 変換アダプター

付属品1。DVI を VGA に変換するためのアダプター。樹脂部分が半透明であること以外は、何の変哲もないものです。

HDMI - DVI 変換アダプター

HDMI - DVI 変換アダプター

HDMI を DVI に変換するアダプターケーブル。袋に書かれている型番らしきものを検索してみたところ、SAPPHIRE の同名商品があることがわかりました。ASKでも単体で取り扱っていて、3,600円前後で販売されているようです。

簡易マニュアル

簡易マニュアル

付属の簡易マニュアル。17ヶ国語ですが、日本語は含まれていません。英語のところを少し読んでみましたが、ごく一般的なことしか書かれていないようです。慣れている人には不要でしょう。

デバイスドライバ CD-ROM

デバイスドライバ CD-ROM

デバイスドライバおよびコントロールパネルインストール用と思われる CD-ROM。対応は、Windows XP・Vista・7 のみ。SAPPHIRE のロゴシール入り。

日本語マニュアルと保証書

日本語マニュアルと保証書

ASK による日本語マニュアルと保証書。
このマニュアルも汎用的なものです。最新ドライバの入手やトラブルシューティングなどの情報があるため、自作初心者には便利かもしれません。

以上、開封レポートでした。これから記録をとりながらインストールを開始します。

コメント (1)

2010年4月17日 土曜日

Head Cleaner と ImageManager は相性に問題あり

カテゴリー: WordPress, プラグイン
タグ:, , , ,
時間:19時24分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

Googleがサイトの表示速度も評価対象に加えると言う発表をしたため(現時点では米国版のみ)、対応策として Head Cleaner を導入してみました。現時点ではほとんど影響はないとのことですが、やって置いて損はないし、表示が速くなるのはいいことです。

配布サイトに書いてある説明に従って導入したところ、AddClips のスクリプトが AddClipsId の設定をしていないとエラーを出すようになって、しかもページの表示が途中で止まってしまうようになってしまいました。ソースを確認してみると、ヘッダ部分の途中に出力されている JavaScript コードが加工され、記事部分まで文字列に含まれるようになっていました。

正常な状態

HTML:
  1. <script type="text/javascript">
  2.             //<![CDATA[
  3.            
  4.                 function basename (path) { return path.replace( /.*\//, "" ); }
  5.        
  6.                 var winimg=null;
  7.                 function ps_imagemanager_popup(imgurl,title,w,h) {
  8.                     lpos=(screen.width)?(screen.width-w)/2:100;
  9.                     tpos=(screen.height)?(screen.height-h)/2:100;
  10.                     settings='width='+w+',height='+h+',top='+tpos+',left='+lpos+',scrollbars=no,location=no,directories=no,status=no,menubar=no,toolbar=no,resizable=yes';
  11.                     winimg=window.open('about:blank','imagemanagerpopup',settings);
  12.        
  13.                     var doc = '';
  14.                     doc += '<html><head>';
  15.                     doc += '<title>' + title + ' - ' + basename(imgurl) + '(' + w + 'x' + h +')</title>';
  16.                     doc += '<style type="text/css"><!-- body { margin:0px; padding:0px; } --></style>';
  17.                     doc += '</head>';
  18.                     doc += '<body onload="self.focus();">';
  19.                     doc += '<img style="cursor:pointer;" src="' + imgurl + '" title="' + title + '" onclick="self.close();"/>';
  20.                     doc += '</body></html>';
  21.                    
  22.                     winimg.document.writeln(doc);
  23.                     winimg.document.close();
  24.                 }   
  25.                
  26.             //]]>
  27.             </script>
  28.  
  29.     </head>

異常な状態

HTML:
  1. <script type="text/javascript">
  2.             //<![CDATA[
  3.            
  4.                 function basename (path) { return path.replace( /.*\//, "" ); }
  5.        
  6.                 var winimg=null;
  7.                 function ps_imagemanager_popup(imgurl,title,w,h) {
  8.                     lpos=(screen.width)?(screen.width-w)/2:100;
  9.                     tpos=(screen.height)?(screen.height-h)/2:100; settings="width="+w+',height='+h+',top='+tpos+',left='+lpos+',scrollbars=no,location=no,directories=no,status=no,menubar=no,toolbar=no,resizable=yes';
  10.                     winimg=window.open('about:blank','imagemanagerpopup',settings);
  11.        
  12.                     var doc = '';
  13.                     doc += '
  14. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
  15. <head>';
  16.                     doc += '
  17. <title>' + title + ' - ' + basename(imgurl) + '(' + w + 'x' + h +')</title>
  18. <link rel="canonical" href="http://blog.yoshitomo.org/" />
  19. <style type="text/css" media="all">/*<![CDATA[ */
  20. /***** inline CSS *****/
  21. <!-- body { margin:0px; padding:0px; } -->
  22. /* ]]>*/</style>
  23. </head>

この部分を出力しているのは、WordPress の画像アップ機能がまだいまいちだったころの定番であった ImageManager 2.5.3 です。サムネイルをクリックしたときにポップアップウィンドウを開くためのものだと思いますが、私の場合は同じウィンドウで開くようにしているので停止させることにしました。

ちなみに、Head Cleaner の効果はなかなかのようです。設定も特にまだ変えてませんが、速度の向上が体感できました。

コメント (0)

2010年4月3日 土曜日

AmazonLink 2.0.0 beta3 リリース

カテゴリー: AmazonLink
タグ:,
時間:17時39分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

AmazonLink 2.0.0 beta3 をリリースしました。

今回のリリースのメインは、コードを1行に表示した場合に1つめしか変換されなかったバグの修正です。自分の古い記事で偶然私が見つけたのとほぼ同時期に、テンプレート方式に移行した方が記事にしていたのに気がついたのと、Twitter で @boka_kabo さんから報告をいただきました。

そのほか、Powerd by のリンク先をカテゴリーページではなく専用の固定ページに変更しました。このことはすでに先月記事にしていますが、これはなんだろうと見に来てくれた方に概要を伝えるためのポータル的な役割を持たせています。

2010年4月10日追記

WordPressが認識する部分のバージョンが古いままでした。本日11時40分以降ダウンロードした場合は正しいファイルになっています。

訂正前のファイルでも動作には問題ありませんが、気になる方は「AmazonLink.php」の差し替えまたは書き換えを行ってください。書き換える場合は7行目を次のようにします。

PHP:
  1. <?php
  2. /*
  3. Plugin Name: AmazonLink
  4. Plugin URI: http://wppluginsj.sourceforge.jp/amazonlink/
  5. Description: Amazon.co.jp の商品情報を同一の設定で表示します。ブログのデザイン変更に簡単に対応できます。
  6. Author: よしとも
  7. Version: 2.0.0 beta3
  8. Author URI: http://blog.yoshitomo.org/
  9. */

コメント (6)

2010年3月22日 月曜日

AmazonLink の案内ページを作成

カテゴリー: AmazonLink
タグ:,
時間:22時02分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

AmazonLink の Powerd by 表示からのリンク先は現在記事カテゴリーになっていますが、これの変更先として固定ページを作りました。

ダウンロード案内ページは WordPress Plugins/JSeries、実際のダウンロードは SourceForge.jp、新しい情報の通知はこのサイトとばらばらになってしまっているので、ポータル的な案内ページの形に持って行きたいと思っています。

コメント (0)

2010年3月13日 土曜日

ブルースクリーンの原因

カテゴリー: コンピューター
タグ:, , , , , ,
時間:8時44分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

Wndows 7 にしてから発生するようになった不具合が1つだけありまして、それがずっと悩みでしたが原因がつかめたようです。

不具合は突然のブルースクリーンと再起動。私はあるMMORPGをやっていまして、アイテムの売買でほったらかしにすることが結構あります。気がつくとパソコン自体が再起動されていて、画面にはそれを通知する小さなウィンドウが表示されているだけになっていたということが何度もあり、非常に気になっていたのです。

また、何度か目の前で唐突にブルースクリーンになり、あせっている間に再起動がかかったこともあります。メッセージが英語な上にあっという間に再起動が始まるので、表示された内容はほとんど把握できません。

原因がつかめたきっかけは、偶然 GIGAZINEさんでの紹介記事で知った BlueScreenView というソフト。Windows は不具合が発生するとさまざまな情報を記録したファイル(クラッシュダンプ)を作成します。マイクロソフトへレポートを送るときにも、このファイルが一緒に送信されます。

BlueScreenView はこのクラッシュダンプを解析して、そのときの情報を表示してくれます。原因と思われるファイルを強調してくれたり、ブルースクリーンに近い表示をすることもできます。

GIGAZINEさんでの記事ではインストーラー版を使用していましたが、私はZIP版にしました。中身は本体・ヘルプファイル・readme の3つだけ。最低限本体だけで使えました。使い方については、GIGAZINEさんがスクリーンショットつきで解説していますのでそちらをご覧ください。

さて、肝心の原因ですが、MMORPGのクライアントに組み込まれた GameGuard の生成する dump_wmimmc.sys というファイルのようです。morisobaさんの記事によると、このファイルと avast! antivirus という無料のアンチウィルスソフトが相性がよくないらしいのです。

ここしばらくはブルースクリーンも再起動も起きていないので対処されたのかもしれませんが、念のため記事を参考に dump_wmimmc.sys をスキャン対象からはずしておきました。

現象自体が突発的であるため、これで直ったかどうかの判断が難しいですが、しばらくは様子を見てみることにします。

コメント (0)

2010年2月14日 日曜日

IEからはMS10-015(KB977165)が適用できてしまう

カテゴリー: ソフトウェア
タグ:, , , , ,
時間:17時17分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

Windows XP にMS10-015(パッチリストではKB977165)というセキュリティアップデートパッチを適用すると不具合が発生することがあるそうです。

現在はこのパッチは公開停止になっていると発表されていますが、先ほど仮想PCにインストールした XP で確認したところ、IE から Microsoft Update を行った場合には表示されてしまっていました。

KB977165

ニュース以外にこの件についての情報を見つけることができませんでしたので、まったく知らずにアップデートを行ってしまう人もいるかもしれません。「重要」となっているため、自動的に適用されるように設定している場合は、ある日突然パソコンが使えないとなっていることも考えられます。

コメント (0)

2009年12月13日 日曜日

WordPressのアップグレードとユーザー権限

カテゴリー: WordPress, ハック
タグ:, , ,
時間:17時43分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

WordPress の自動アップグレードをしようとすると「このブログのプラグインを更新するための十分な権限がありません。」となってしまうので調査をしていたのですが、原因が判明しましたので記事にします。

まず、調査対象のバージョンは2.8.4です。2.6系から直接アップグレードしたもので、一番初めは2.0ME系でした。接頭辞は wp です。

権限がないといわれてしまう原因ですが、そのまま権限が与えられていないためです。管理者で作業しているので普通はそんなことはありえないのですが、どうやらアップグレード時に行われるデータベースの更新に問題があったようです。

権限情報の記録場所

権限の情報はオプションとしてデータベース上に記録されていて、次のSQLで見つけることができます。

SQL:
  1. SELECT `option_name`,`option_value` FROM `wp_options` WHERE `option_name` = 'wp_user_roles';

このオプションの値はPHPでシリアライズしたもので、管理者や編集者といったロール(役割)ごとに権限を配列の形で格納しています。wp-includes/capabilities.php の冒頭には、次のように書かれています。

PHP:
  1. * The role option is simple, the structure is organized by role name that store
  2.  * the name in value of the 'name' key. The capabilities are stored as an array
  3.  * in the value of the 'capability' key.
  4.  *
  5.  * <code>
  6.  * array (
  7.  *    'rolename' => array (
  8.  *      'name' => 'rolename',
  9.  *      'capabilities' => array()
  10.  *    )
  11.  * )
  12.  * </code>

権限の記録は20行目の配列で、権限名がキーでその権限があるかどうかを示す真偽値が値となります。

現状の確認

さて、ここまでを踏まえて実際にどのように権限情報が記録されているかを確認します。PHPで表示させるプログラムを書いてみてもいいのですが、面倒なのでもっと手っ取り早い方法を使いました。

前述したSQLでオプション値を取得し、それをテキストエディタ(私は秀丸エディタを使いました)に貼り付けます。このままではすべてが1行に繋がってわかりにくいので、{ と } と ; の後ろにテキスト置換で改行を入れました。
こうすると、権限名と真偽値が交互になってわかりやすくなります。

準備ができたら権限名を探します。自動アップグレードのアドレスから、きっかけとなるコードは wp-admin/update-core.php であることがわかりますので確認します。

冒頭の12行目に次のようにあります。

PHP:
  1. if ( ! current_user_can('update_plugins') )
  2.     wp_die(__('You do not have sufficient permissions to update plugins for this blog.'));

update_plugins という名前の権限を確認して、権限がなければメッセージを表示して終了するという処理ですね。早速この権限名を先ほど準備したテキストデータで探しますと、見当たりません。この名前をキーとする配列要素がないということになりますので、PHPでは真偽値は false となります。

念のため新規に同じバージョンのインストールをしてみた場合で確認したところ、しっかりとこの権限については true となっていました。

なぜこうなったのか

こうなると原因が気になります。アップグレードスクリプトの権限処理をするところを探してみました。アップグレードインストールをするときのファイル名を基点にしてたどってみたところ、wp-admin/includes/upgrade.php に定義されている upgrade_all() という関数の中で、WordPressデータベースのバージョンによってアップグレード用の関数を呼び出していることがわかりました。

PHP:
  1. /**
  2. * Functions to be called in install and upgrade scripts.
  3. *
  4. * {@internal Missing Long Description}}
  5. *
  6. * @since unknown
  7. */
  8. function upgrade_all() {
  9.     global $wp_current_db_version, $wp_db_version, $wp_rewrite;
  10.     $wp_current_db_version = __get_option('db_version');
  11.  
  12.     // We are up-to-date.  Nothing to do.
  13.     if ( $wp_db_version == $wp_current_db_version )
  14.         return;
  15.  
  16.     // If the version is not set in the DB, try to guess the version.
  17.     if ( empty($wp_current_db_version) ) {
  18.         $wp_current_db_version = 0;
  19.  
  20.         // If the template option exists, we have 1.5.
  21.         $template = __get_option('template');
  22.         if ( !empty($template) )
  23.             $wp_current_db_version = 2541;
  24.     }
  25.  
  26.     if ( $wp_current_db_version <6039 )
  27.         upgrade_230_options_table();
  28.  
  29.     populate_options();
  30.  
  31.     if ( $wp_current_db_version <2541 ) {
  32.         upgrade_100();
  33.         upgrade_101();
  34.         upgrade_110();
  35.         upgrade_130();
  36.     }
  37.  
  38.     if ( $wp_current_db_version <3308 )
  39.         upgrade_160();
  40.  
  41.     if ( $wp_current_db_version <4772 )
  42.         upgrade_210();
  43.  
  44.     if ( $wp_current_db_version <4351 )
  45.         upgrade_old_slugs();
  46.  
  47.     if ( $wp_current_db_version <5539 )
  48.         upgrade_230();
  49.  
  50.     if ( $wp_current_db_version <6124 )
  51.         upgrade_230_old_tables();
  52.  
  53.     if ( $wp_current_db_version <7499 )
  54.         upgrade_250();
  55.  
  56.     if ( $wp_current_db_version <7796 )
  57.         upgrade_251();
  58.  
  59.     if ( $wp_current_db_version <7935 )
  60.         upgrade_252();
  61.  
  62.     if ( $wp_current_db_version <8201 )
  63.         upgrade_260();
  64.  
  65.     if ( $wp_current_db_version <8989 )
  66.         upgrade_270();
  67.  
  68.     if ( $wp_current_db_version <10360 )
  69.         upgrade_280();
  70.  
  71.     maybe_disable_automattic_widgets();
  72.  
  73.     update_option( 'db_version', $wp_db_version );
  74.     update_option( 'db_upgraded', true );
  75. }

呼び出されている upgrade_***() という関数の中では、さらに必要に応じて populate_roles_***() という関数を呼び出しています。

この関数の定義は wp-admin/includes/schema.php にあり、そこではまさにロールごとに権限の追加を行っていました。

次のSQLでデータベースバージョンを確認して呼び出されるはずの関数の処理を確認してみました。

SQL:
  1. SELECT `option_name`,`option_value` FROM `wp_options` WHERE `option_name` = 'db_version';

2.6の新規インストール環境では8201となっていましたので、upgrade_all() の342~346行目が該当します。呼び出される関数の定義は次のとおり。

PHP:
  1. /**
  2. * Execute changes made in WordPress 2.7.
  3. *
  4. * @since 2.7.0
  5. */
  6. function upgrade_270() {
  7.     global $wpdb, $wp_current_db_version;
  8.  
  9.     if ( $wp_current_db_version <8980 )
  10.         populate_roles_270();
  11.  
  12.     // Update post_date for unpublished posts with empty timestamp
  13.     if ( $wp_current_db_version <8921 )
  14.         $wpdb->query( "UPDATE $wpdb->posts SET post_date = post_modified WHERE post_date = '0000-00-00 00:00:00'" );
  15. }
  16.  
  17. /**
  18. * Execute changes made in WordPress 2.8.
  19. *
  20. * @since 2.8.0
  21. */
  22. function upgrade_280() {
  23.     global $wp_current_db_version;
  24.  
  25.     if ( $wp_current_db_version <10360 )
  26.         populate_roles_280();
  27. }

PHP:
  1. /**
  2. * Create and modify WordPress roles for WordPress 2.7.
  3. *
  4. * @since 2.7.0
  5. */
  6. function populate_roles_270() {
  7.     $role =& get_role( 'administrator' );
  8.  
  9.     if ( !empty( $role ) ) {
  10.         $role->add_cap( 'install_plugins' );
  11.         $role->add_cap( 'update_themes' );
  12.     }
  13. }
  14.  
  15. /**
  16. * Create and modify WordPress roles for WordPress 2.8.
  17. *
  18. * @since 2.8.0
  19. */
  20. function populate_roles_280() {
  21.     $role =& get_role( 'administrator' );
  22.  
  23.     if ( !empty( $role ) ) {
  24.         $role->add_cap( 'install_themes' );
  25.     }
  26. }

populate_roles_***() で追加している権限を確認したところ、3つとも登録されていました。今度はさかのぼって確認してみると、populate_roles_260() で追加される2つの権限のみがありませんでした。しかもその1つは今回問題となっている update_plugins です。

どうやらここで失敗していたようです。

PHP:
  1. /**
  2. * Create and modify WordPress roles for WordPress 2.6.
  3. *
  4. * @since 2.6.0
  5. */
  6. function populate_roles_260() {
  7.     $role =& get_role( 'administrator' );
  8.  
  9.     if ( !empty( $role ) ) {
  10.         $role->add_cap( 'update_plugins' );
  11.         $role->add_cap( 'delete_plugins' );
  12.     }
  13. }

修復方法

原因まで判明したので、権限情報の修復を行います。直接書き換えてもいいのですが、間違えると面倒なので簡単なプログラムを作りました。

データを抽出して権限を追加し、再度シリアライズして表示するだけ。表示されたテキストデータをデータベース用の管理画面(ここのサーバーは phpMyAdmin が使えるのでそれを使いました)から直接反映させました。

このプログラムは自由に使っていただいてかまいませんが、何かあったときの補償はできませんので自己責任でお願いします。

PHP:
  1. <?php
  2. header('Content-type: text/plain;charset=UTF-8');
  3. $link = mysql_connect('データベースサーバー', 'ユーザー', 'パスワード');
  4.  
  5. if ( $link )
  6. {
  7.     mysql_set_charset('utf8');
  8.     if ( mysql_select_db('データベース') )
  9.     {
  10.         $sql = "SELECT `option_name`,`option_value` FROM `wp_options` WHERE `option_name` = 'wp_user_roles'";
  11.         if ( $res = mysql_query($sql) )
  12.         {
  13.             if ( $rows = mysql_fetch_assoc($res) )
  14.             {
  15.                 $rol_data = unserialize($rows['option_value']);
  16.                 $rol_data['administrator']['capabilities']['update_plugins'] = true;
  17.                 $rol_data['administrator']['capabilities']['delete_plugins'] = true;
  18.                 print serialize($rol_data);
  19.             }
  20.         }
  21.         else
  22.         {
  23.             print mysql_error();
  24.         }
  25.     }
  26.     else
  27.     {
  28.         print mysql_error();
  29.     }
  30. }
  31. else
  32. {
  33. }
  34. ?>

というわけで、無事自動アップグレードの画面を拝むことができました。

コメント (1)

2009年10月12日 月曜日

EN9600GT/DI/512MD3 開封レポート

カテゴリー: 自作パソコン
タグ:, , ,
時間:2時26分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

ASUS のビデオカード、EN9600GT/DI/512MD3 の開封レポートです。
省電力版の GeForce 9600 GT を使用したカードです。消費電力を従来よりも40%抑えているとのことで、補助電源なしとなっています。ビデオ出力ポートはD-Sub・DVI-I・HDMIの3つ。

パッケージ

パッケージ

縦23.3cm、幅41cmと、ビデオカードとしては大きな箱です。部分的にエンボス加工が施されています。

開けたところ

開けたところ

箱は大きいですが、中は隙間が結構あります。

一式

一式

中に入っているのはこれだけ。
本体のほかには、汎用の簡易マニュアルが2種類とCD-ROMが2枚に HDMI用と思われるS/P DIFケーブルが1本。CD-ROMはドライバと汎用簡易マニュアルです。CD-ROM版のマニュアルは印刷用データをファイル化しただけのようで、色見本やトンボがそのままでした。

本体(表側)

本体(表側)

本体の表側です。
2スロットを使用する大型のオリジナルファンが搭載されています。このファンは吹き付け方向になっていて、Windows 起動前でもなかなか静かです。

本体(裏側)

本体(裏側)

裏側。普通ですね。

本体(横側)

本体(横側)

本体を横方向から。

クーラー

クーラー

クーラーのアップ。風をヒートシンクに吹き付けて、そのまま外側へ流す構造のようです。

カード長

カード長

カードの長さは基盤部分で約20cm。

クーラーの高さ

クーラーの高さ

クーラーは基盤込みで約3cm。隣接スロットは当然使えませんが、そのさらに隣にも大型のスロットは避けたほうがいいかもしれません。

以上、開封レポートでした。

コメント (1)
次ページへ »

HTML convert time: 2.759 sec. Powered by

Images is enhanced with WordPress Lightbox JS by Zeo