2009年11月アーカイブ

突然ネットが繋がらなくなったと家人が言うので、マシンルームに行ってみるとサーバが落ちている。
電源ボタンを押しても、後ろの主電源を触ってもうんともすんとも言わない。
電源かマザーでも逝ったか!?と青くなったんだけど、ふと横を見たらUPSの電源LEDがついていない。
そこで、UPSの電源を入れると、無事にサーバも立ち上がった。
しかし、UPSがぴーぴーぴーぴーうるさい。マニュアルを見ると、バッテリー運転に切り替わっているらしい。
で、商用電源が正常なのにバッテリー運転をする場合、と言うところを見ると、「サーキットブレーカがトリップしている可能性があります。ただちに接続機器(負荷)を停止し、本装置をオフにしてください。接続機器(負荷)を減らしてからサーキットブレーカを押し戻してリセットしてください。」だそうなので、再度サーバをシャットダウンしてUPSの電源をOFFにして、ブレーカをリセットした。
サーバを立ち上げてログを見ると、以下のような感じ。
/var/log/messages
Nov  4 21:55:10 sv apcupsd[1080]: Reached remaining time percentage limit on batteries.
Nov  4 21:55:10 sv apcupsd[1080]: Initiating system shutdown!
Nov  4 21:55:10 sv apcupsd[1080]: User logins prohibited
Nov  4 21:55:10 sv apcupsd[1080]: Attempting to kill the UPS power!
Nov  4 21:55:10 sv shutdown: halt by root: apcupsd initiated shutdown
Nov  4 21:55:38 sv kernel: pid 1913 (asterisk), uid 0: exited on signal 11 (core dumped)
Nov  4 21:55:38 sv kernel: encode_long: negative value -52 in accounting record
Nov  4 21:55:43 sv rc.shutdown: 30 second watchdog timeout expired. Shutdown terminated.
Nov  4 21:55:43 sv init: /bin/sh on /etc/rc.shutdown terminated abnormally, going to single user mode
Nov  4 21:55:43 sv syslogd: exiting on signal 15
/var/log/apcupsd.events
Wed Nov 04 21:22:30 JST 2009  Power failure.
Wed Nov 04 21:22:36 JST 2009  Running on UPS batteries.
Wed Nov 04 21:55:10 JST 2009  Reached remaining time percentage limit on batteries.
Wed Nov 04 21:55:10 JST 2009  Initiating system shutdown!
Wed Nov 04 21:55:10 JST 2009  User logins prohibited
Wed Nov 04 21:55:10 JST 2009  Attempting to kill the UPS power!
Wed Nov 04 21:55:43 JST 2009  apcupsd exiting, signal 15
Wed Nov 04 21:55:43 JST 2009  apcupsd shutdown succeeded
停電があったわけではないので、過負荷か何かでUPSのブレーカが落ちてバッテリーモードに入り、電池がなくなってシャットダウンしたらしい。いまいち綺麗に落ちれてないみたいだけど。
UPSも買ってから1年半なので、バッテリーの寿命の2年までそろそろかな?ログからみると、バッテリーで30分運用できるみたいなので、まだ行けそうな気はするけど。

おまけ。UPSの状態のcactiグラフ。
graph_47_5.png
あれ、充電が上がってないな。
結局次の日もUPSが落ちたので、諦めてamazonで注文。
昨日注文して今日届いたので、お急ぎ便必要ないじゃんって感じ。
前回はyodobashi.comで14,500円だったけど、今回はamazonで8,790円。APCでバッテリーだけ注文(8,610円)しても良かったんだけど、いまいち挙動が怪しかったので本体ごと買うことにした。
数日運用して問題がなければ古いのの処分を考えないといけない。鉛蓄電池は普通に捨てられないので、APCに送り返すか、ハードオフみたいなところに持っていくといいらしい。
Apacheが2.2.12からSNIに対応したと言うので、試してみようと思ったが、SNIに対応するにはopensslが0.9.8f以降でないといけないらしい。
FreeBSD 7.1のopensslは0.9.8eなので保留していたのだが、portsに0.9.8lが入っていたので試してみた。
portsからsecurity/opensslをインストールして、www/apache22を再インストールすると、勝手に-with-ssl=/usr/localとか言ってportsから入れた0.9.8lを認識してくれるようだ。
早速、以前作ってあった別名用のサーバ証明書を見るようにssl.confを書き換えてみたが、
SSL peer was unable to negotiate an acceptable set of security parameters.

(エラーコード: ssl_error_handshake_failure_alert)
なんてエラーで繋がらない。(Firefoxの場合)
どうも、SSLVerifyClient require の指定があるとうまくいかないようだ。
別の環境に一からapacheをインストールして、証明書関連も作り直して試してみたところ、以下のことがわかった。
Listen *:443
NameVirtualHost *:443
<VirtualHost *:443>
ServerName hoge.example.com
SSLEngine on
SSLCertificateFile /usr/local/etc/apache22/ssl/server.crt
SSLCertificateKeyFile /usr/local/etc/apache22/ssl/server.key
SSLCertificateChainFile /usr/local/etc/apache22/ssl/ca.crt
SSLCACertificateFile /usr/local/etc/apache22/ssl/ca.crt
<Location /test>
SSLVerifyClient require
</Location>
</VirtualHost>
のように、Locationの中にSSLVerifyClient require があるとそのURLでのみ失敗する。Locationの外側(サイト全体)に書いてやると、ちゃんとクライアント認証した上で接続できる。
これが、proxyがある場合とない場合でも微妙に挙動が違うようだが整理しきれていない。
Bug 12355 - POST incompatible w/ renegotiate https: connectionと言うのが見つかったが、この問題自体は2.2では修正済みとも読める。
WebDAV/Apache/HTTPSクライアント認証と言うのも見つけたので試してみたが効かないようだ。
[debian-users:53339] [Translate] [SECURITY] [DSA-1934-1] New apache2 packages fix severalissuesみたいな話も見つけたが、関係あるだろうか?

他にも、SSLOptionsに+OptRenegotiateを付けてみたり、CA.shを使って証明書を作り直したりしてみたが改善せず。
wiresharkでパケットを覗いてみたりもしたがさっぱりわからないので、とりあえずお手上げ状態です。

ここのblogシステムはMovableTypeを使っているのだけれど、最近5.0がリリースされたので早速インストールしてみた。
まず、5.0からは正式なサポートがMySQLだけになって、SQLiteとPostgreSQLは使えなくなってしまったらしい。
私はMySQLよりもPostgreSQLが好きなので、どうしようかと悩んでいたが、どうせperlのDBDとかDBIとかその辺のパッケージを使っているはずなので、PostgreSQLのまま行ってみることにした。
ためしに、mt-check.cgiを動かして見ると、相変わらずSQLiteとかPostgreSQLのパッケージのチェックもしているから行けるのではないかと思ったのだ。
まずは、公式のインストールガイドの「既存のデータベースを残す方式のアップグレード」を参考に、別のDB、別のパスでインストールすることにする。
MT4をインストールしているディレクトリの横に mt5 と言う名前で一式を置き、mt-config.cgiをmtから持ってくる。
DBは、mtと言うDBからmt5と言うdbにコピー。PostgreSQLの場合は、
# createdb -T mt mt5
でそのまんまコピーができる。
mt5/mt.cgi にアクセスすると、アップグレードの確認になるので、そのまま進む。
無事に終わって再度mt.cgiにアクセスすると、新しいダッシュボードにアクセスできる。
ここで、Web site と言うのがあるはずなのに、何もなくって、新しく作るしか選べない。
新しいものを作ろうとすると、デフォルトの言語が英語になっている。Movable Type 5.0 の変更点、注意事項、および既知の問題を見ると、mt-config.cgiに 「DefaultLanguage ja」を追加しろとあったので、追加してみたら日本語がデフォルトになった。
しかし、試しに新しいWeb siteを作って見たりしても、ブログが一個も出てこない。
アップグレード時のウェブサイト自動作成を見ると、勝手にウェブサイトができるように見える。
このドキュメントを見ると、サイトのURLからウェブサイト(?)の何かを決めるように見えるので、その辺が怪しいのかと思って、mt-config.cgiの StaticWebPath をフルのURLにして、StaticFilePath に絶対パスを書いてみたりしたが、効果なし。
しょうがないので、アップグレード周りのソースをつらつらと眺めていたら、lib/MT/Upgrade/v5.pm の中で、以下のような箇所が。
sub upgrade_functions {
    return {
        #'v5_migrate_blog' => {
        #    version_limit => 5.0004,
        #    priority      => 3.2,
        #    code          => \&_v5_migrate_blog,
        #},
ここにある_v5_migrate_blog を読むと、そのまんまgeneric website の作成的な感じなので、このコメントを外して試して見たら、無事に移行ができた。
後は、pluginを移行して試しにリビルドしてみるが、動いている感じ。
これで本格的に移行できるかと思って、blog entryの編集画面に行ってみたら、本文が表示されない。
Firefoxだと編集領域にカーソルが行かなくて、IEだとカーソルが行くけど本文が出てない。
調べて見たら、MacでMT4の本文が編集できない事態が発生!?と言う記事を発見。
さきほど変更した StaticWebPath と StaticFilePath が悪かったらしい。
元のようにStaticWebPathだけにして、中身は /mt-static だけにする。
これでなんとなく動きそうな雰囲気なので、/mt5 から /mt にして、mt-config.cgiも直し、DBをコピーし直して MovableType 5.0 で運用を開始することにした。
新しいバージョンのMTをインストールすると、以下のカスタマイズを実施する。
この辺は、昔のMTの方が良かったな~と思う部分だ。

1. 画像をアップロードする場所

画像をアップロードする場所は、デフォルトでblogのディレクトリ。この場所を決めるのは、tmpl/cms/include/asset_upload.tmpl。このファイルを、alt-tmpl/cms/include/ にコピーして、以下の修正をする。
*** tmpl/cms/include/asset_upload.tmpl  2009-09-11 18:10:24.000000000 +0900
--- alt-tmpl/cms/include/asset_upload.tmpl      2009-11-29 15:10:50.000000000 +0900
***************
*** 168,174 ****
              <select name="site_path" id="site_path" onchange="setExtraPath(this)">
                  <option value="1">&#60;<__trans phrase="Site Root">&#62;</option>
              <mt:if name="enable_archive_paths">
!                 <option value="0"<mt:if name="archive_path"> selected="selected"</mt:if>>&#60;<__trans phrase="Archive Root">&#62;</option>
              </mt:if>
              <mt:if name="extra_paths">
                  <mt:loop name="extra_paths">
--- 168,174 ----
              <select name="site_path" id="site_path" onchange="setExtraPath(this)">
                  <option value="1">&#60;<__trans phrase="Site Root">&#62;</option>
              <mt:if name="enable_archive_paths">
!                 <option value="0" selected="selected">&#60;<__trans phrase="Archive Root">&#62;</option>
              </mt:if>
              <mt:if name="extra_paths">
                  <mt:loop name="extra_paths">
***************
*** 176,182 ****
                  </mt:loop>
              </mt:if>
              </select>
!             / <input type="text" name="extra_path" id="extra_path" class="extra-path" value="<mt:var name="extra_path" escape="html">" />
              &nbsp;<a href="javascript:void(0);" mt:command="open-folder-selector"><__trans phrase="Choose Folder"></a>
          </mtapp:setting>
      </mt:if>
--- 176,182 ----
                  </mt:loop>
              </mt:if>
              </select>
!             / <input type="text" name="extra_path" id="extra_path" class="extra-path" value="images" />
              &nbsp;<a href="javascript:void(0);" mt:command="open-folder-selector"><__trans phrase="Choose Folder"></a>
          </mtapp:setting>
      </mt:if>
これ、ソース的には mt の変数 archive_path, extra_path に依存しているコードの様なので、これらの変数が適切に設定されていれば動きそうなもんなんだけど、その辺の仕組みがわからないので直接テンプレートをいじってしまっている。

2. 画像の表示とか

これは、MTのバージョン云々じゃなくて、細かい趣味の問題。ひとつは、imgタグに border="0" を付けること。(CSSでやれって話ではある)、もう一つは画像をクリックしたときに開くウィンドウの属性が気に入らないので修正、最後は、サムネイルのデフォルトのサイズの修正。
そもそも、昔のMTはサムネイルのサイズを、pixelだけじゃなくてpercentで指定できたのに、今のはできないのが気に入らない。
*** lib/MT/Asset/Image.pm.orig  2009-11-24 09:51:41.000000000 +0900
--- lib/MT/Asset/Image.pm       2009-11-29 15:25:49.000000000 +0900
***************
*** 314,326 ****
              my $link =
                $thumb
                ? sprintf(
!                 '<img src="%s" %s alt="%s" %s />',
                  MT::Util::encode_html( $thumb->url ),   $dimensions,
                  MT::Util::encode_html( $asset->label ), $wrap_style
                )
                : MT->translate('View image');
              $text = sprintf(
! q|<a href="%s" onclick="window.open('%s','popup','width=%d,height=%d,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false">%s</a>|,
                  MT::Util::encode_html( $popup->url ),
                  MT::Util::encode_html( $popup->url ),
                  $asset->image_width,
--- 314,326 ----
              my $link =
                $thumb
                ? sprintf(
!                 '<img src="%s" %s alt="%s" %s border="0" />',
                  MT::Util::encode_html( $thumb->url ),   $dimensions,
                  MT::Util::encode_html( $asset->label ), $wrap_style
                )
                : MT->translate('View image');
              $text = sprintf(
! q|<a href="%s" onclick="window.open('%s','popup','width=%d,height=%d,scrollbars=yes,resizable=yes,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false">%s</a>|,
                  MT::Util::encode_html( $popup->url ),
                  MT::Util::encode_html( $popup->url ),
                  $asset->image_width,
***************
*** 331,337 ****
          else {
              if ( $param->{thumb} ) {
                  $text = sprintf(
!                     '<a href="%s"><img alt="%s" src="%s" %s %s /></a>',
                      MT::Util::encode_html( $asset->url ),
                      MT::Util::encode_html( $asset->label ),
                      MT::Util::encode_html( $thumb->url ),
--- 331,337 ----
          else {
              if ( $param->{thumb} ) {
                  $text = sprintf(
!                     '<a href="%s"><img alt="%s" src="%s" %s %s border="0" /></a>',
                      MT::Util::encode_html( $asset->url ),
                      MT::Util::encode_html( $asset->label ),
                      MT::Util::encode_html( $thumb->url ),
***************
*** 386,392 ****
        ( $blog->image_default_wunits || 'pixels' ) eq $_ ? 1 : 0
        for qw(percent pixels);
      $param->{thumb_width} = $blog->image_default_width
!       || $asset->image_width
        || 0;

      return $app->build_page( 'dialog/asset_options_image.tmpl', $param );
--- 386,392 ----
        ( $blog->image_default_wunits || 'pixels' ) eq $_ ? 1 : 0
        for qw(percent pixels);
      $param->{thumb_width} = $blog->image_default_width
!       || $asset->image_width / 4
        || 0;

      return $app->build_page( 'dialog/asset_options_image.tmpl', $param );

3. bookmarklet

昔のMTは、bookmarkletからポストしようとすると、blockquoteにしてくれたり、トラックバック先が自動で入力されたり、blogが選べたり、他にもいろいろオプションがあったんだけど、今のはできない。
せめて、blogのURLへのリンクやページタイトルと、選択部分のblockquoteくらいやりたくて、以下の修正。
*** lib/MT/CMS/Entry.pm.ORIG    2009-11-29 21:06:37.000000000 +0900
--- lib/MT/CMS/Entry.pm 2009-11-29 21:10:16.000000000 +0900
***************
*** 2223,2229 ****
          or return $app->error($app->translate('Can\'t load blog #[_1].', $blog_id));
      my %args    = ( '_type' => $type, blog_id => $blog_id, qp => 1 );
      my $uri = $app->base . $app->uri( 'mode' => 'view', args => \%args );
!     my $script = qq!javascript:d=document;w=window;t='';if(d.selection)t=d.selection.createRange().text;else{if(d.getSelection)t=d.getSelection();else{if(w.getSelection)t=w.getSelection()}}void(w.open('$uri&title='+encodeURIComponent(d.title)+'&text='+encodeURIComponent(d.location.href)+encodeURIComponent('<br/><br/>')+encodeURIComponent(t),'_blank','scrollbars=yes,status=yes,resizable=yes,location=yes'))!;
      # Translate the phrase here to avoid ActivePerl DLL bug.
      $app->translate('<a href="[_1]">QuickPost to [_2]</a> - Drag this link to your browser\'s toolbar, then click it when you are visiting a site that you want to blog about.', encode_html($script), encode_html($blog->name));
  }
--- 2223,2229 ----
          or return $app->error($app->translate('Can\'t load blog #[_1].', $blog_id));
      my %args    = ( '_type' => $type, blog_id => $blog_id, qp => 1 );
      my $uri = $app->base . $app->uri( 'mode' => 'view', args => \%args );
!     my $script = qq!javascript:d=document;w=window;t='';if(d.selection)t=d.selection.createRange().text;else{if(d.getSelection)t=d.getSelection();else{if(w.getSelection)t=w.getSelection()}}void(w.open('$uri&title='+encodeURIComponent(d.title)+'&link='+encodeURIComponent(d.location.href)+'&text='+encodeURIComponent(t),'_blank','scrollbars=yes,status=yes,resizable=yes,location=yes'))!;
      # Translate the phrase here to avoid ActivePerl DLL bug.
      $app->translate('<a href="[_1]">QuickPost to [_2]</a> - Drag this link to your browser\'s toolbar, then click it when you are visiting a site that you want to blog about.', encode_html($script), encode_html($blog->name));
  }
*** lib/MT/CMS/Common.pm.ORIG   2009-11-29 21:24:34.000000000 +0900
--- lib/MT/CMS/Common.pm        2009-11-29 21:25:10.000000000 +0900
***************
*** 515,520 ****
--- 515,527 ----
              my $data = $q->param($_);
              $q->param( $_, $data );
          }
+       my $title = $q->param('title');
+       my $link = scalar $q->param('link');
+       my $text = $q->param('text');
+       $text = sprintf qq(<blockquote>\n<div class="quote-head"><a title="%s" href="%s">%s</a></div>\n\n%s\n</blockquote>), $title, $link, $title, $text;
+       $q->param('title', '');
+       $q->param('link', '');
+       $q->param('text', $text);
      }

      $param{autosave_frequency} = $app->config->AutoSaveFrequency;
ダッシュボードのデザインは4よりは5の方が趣味にあっているので、使い続けようと思うけど、とっくの昔に自前サーバでblogをやると言う時代は終わっているのかも知れないな~と思った。
2009年11月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          

このアーカイブについて

このページには、2009年11月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2009年9月です。

次のアーカイブは2009年12月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 6.1.1