Displaying posts filed under

未分類

cciss経由で取得したHDDの温度をmuninでグラフ化

CCISS (HP/Compaq Smart Array Controller) に接続された HDD の SMART 情報を読み出し、温度を munin の hddtemp_smartctl プラグインでグラフ化する。

cciss に対応する smartmontools は 5.38 以降(stable)。CentOS 5.3 では標準でこのバージョンがインストールされるが、あいにく対象サーバはCentOS 4だったので、ソースからインストールした。

tar xvzf smartmontools-5.38.tar.gz
cd smartmontools-5.38
./configure
make
sudo make install

/usr/local/sbin に新たにインストールされた smartctl を使用して、温度その他の情報が取得できることを確認。以下表示例。

$ sudo /usr/local/sbin/smartctl -A -d cciss,0 /dev/cciss/c0d0
smartctl version 5.38 [i686-pc-linux-gnu] Copyright (C) 2002-8 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

Current Drive Temperature:     26 C
Drive Trip Temperature:        65 C
Manufactured in week 50 of year 2006
Recommended maximum start stop count:  10000 times
Current start stop count:      19 times
Elements in grown defect list: 0

続いてmunin のプラグイン設定ファイル(/etc/munin/plugin-conf.d/hddtemp_smartctl )に設定を追加する。デバイス名の後に _[番号] を付けるのがポイント。

[hddtemp_smartctl]
user root
env.smartctl    /usr/local/sbin/smartctl
env.drives      cciss/c0d0_0 cciss/c0d0_1
env.type_cciss/c0d0_0  cciss,0
env.type_cciss/c0d0_1  cciss,1

これで値が取得できるようになる…のだが、うまくグラフが表示されない。デバイス名に / が含まれているのがまずいらしいので、プラグインファイル /usr/share/munin/plugins/hddtemp_smartctl を少し改造。munin-node-1.2.5用のパッチを置いておく。

こんな感じで表示されるようになる。

hddtemp_smartctlによるグラフ表示

hddtemp_smartctlによるグラフ

visitors でリモートホストの集計

高速・軽量なアクセス解析ツール visitors およびその日本語化バージョン。素晴らしいツールなのだが、デフォルトではアクセス元ドメインの集計が全て「numeric IP」になってしまうのが難点だった。

そこで日本語化バージョンを元に、まずはIPアドレスごとに集計を行うよう修正した(パッチダウンロード)。

diff -ur visitors_0.7.orig/visitors.c visitors_0.7/visitors.c
--- visitors_0.7.orig/visitors.c	2007-08-20 19:11:54.000000000 +0900
+++ visitors_0.7/visitors.c	2009-03-28 17:38:59.000000000 +0900
@@ -1607,13 +1607,9 @@
 	char *tld;
 	int res;
 
-	if (vi_is_numeric_address(hostname)) {
-		tld = "numeric IP";
-	} else {
-		tld = strrchr(hostname, '.');
-		if (!tld) return 0;
-		tld++;
-	}
+	tld = hostname;
+	if (!tld) return 0;
+
 	res = vi_counter_incr(&vih->tld, tld);
 	if (res == 0) return 1;
 	return 0;

あとは出力時に逆引きを行えば良い。本当は visitors.c 内で行うように修正すべきなんだろうが、よく分からないのでPerlのワンライナーで変換することにした(下例ではIPアドレスっぽいテキストを全て変換してしまうので、もう少し真面目に書いた方が良いとは思うが……)。

visitors -A -m 45 -o html access_log | perl -pe \
's%(\d{1,3}\.){3}\d{1,3}%gethostbyaddr(pack("C4", split(/\./, $&)), 2) || $&%e' \
> out.html

元々 visitors のこの機能は、トップレベルドメインを集計して国別のアクセス傾向を知るためのものなので、リモートホストの集計に用いるのは邪道かも知れない。しかし実用上はこの方が役に立つ機会は多いと思う。

この改造にあたっては以下のページを参考にした:

こちらではまずアクセスログに記録されたIPアドレスを全て逆引きする方法を紹介されているが、ログが何十万行もある場合は逆引きに時間がかかり過ぎる……。この用途に限って言えば、IPアドレスで集計して上位のアドレスだけ逆引きするという方針で十分だろう。

OpenX のインストール(日本語対応)

オープンソースの広告配信サーバ OpenX。バージョン2.6からは日本語リソースファイルもデフォルトで含まれているが、若干問題が残っている。

以下、OpenX 2.6.4 を $OPENX_PATH に www.example.com というドメインでインストールした場合の説明。MySQLは 5.0 系を使用。

データベースの文字コード設定

インストール完了後、管理画面からデータを追加する前に設定ファイルを修正する。修正すべきファイルは
$OPENX_PATH/var/www.example.com.conf.php
このファイルの中の clientCharset を utf8 に変更する。デフォルトでは多分 latin1 になっているはず。

[databaseCharset]
checkComplete=1
clientCharset=utf8

この設定をしておかないと「一見正常に動いているがDB内部では文字列が壊れている」という状態になる。

Excelの文字化け修正

デフォルトではレポート画面で出力できるExcelファイルが文字化けする。これは OpenX が内部で使用しているPEARパッケージ Spreadsheet_Excel_Writer の問題。バグレポートからパッチを落としてきて適用する。

cd $OPENX_PATH
patch -p0 < excel-all-in-one-patch.diff

ちなみにこのパッチは私が投稿したものだが、フォーラムで紹介されていた複数のパッチを一つにまとめただけで、修正の内容は理解していない。また mbstring が必須となっているため、このまま本体に取り込まれる可能性はまずないと思われる。

CentOSで最新のPHP 5.2を使用する

サードパーティのリポジトリを利用することで、2009年3月20日現在最新のphp-5.2.9をyumでインストールすることができる。リポジトリ管理者の素晴らしい仕事には頭が下がるばかりだ…。

注意:この方法でインストールされる php-mysql は MySQL 5.1.30 の libmysqlclient とリンクされる。

English : Repository Configuration – Les RPM de Remiに従ってEPELとLes RPM de Remiのリポジトリを追加。CentOS 5の場合は

wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-2.noarch.rpm
wget http://rpms.famillecollet.com/el5.i386/remi-release-5-6.el5.remi.noarch.rpm
rpm -Uvh remi-release-5*.rpm epel-release-5*.rpm

php-mysql をインストールする場合は、予め remi-test リポジトリから mysqlclient16 パッケージをインストールしておく。

sudo yum --enablerepo=remi-test install mysqlclient16

自分が必要とするパッケージをインストールする(パッケージによってはEPEL内のパッケージに依存することがある)。

sudo yum --enablerepo=epel,remi install php php-cli php-mysql php-gd

インストール後はリポジトリ管理者のブログLes RPM de Remiを常にチェックしておくことをおすすめする。PHPの新しいバージョンが出た場合、今までは数日中には対応されてきた。しかしアップデートに伴って、時々パッケージの構成が変わったりライブラリのバージョンが変わったりして、すんなりアップデートできなくなることもあった。そのあたりは自己責任で。

ノンデザイナーズ・デザインブック

自分でデザインした文書やWebページや壁紙から漂ってくる、あの如何ともしがたい素人臭はこれが原因だったのか!

タイトル通り、非デザイナー向けのデザイン本。本屋で立ち読みして衝動買い。「Third Edition」「新装増補版」とあるのを見ると、その筋では結構有名な本だったりするんだろうか。基本的に英語圏の本なのだが、大部分はそのまま日本語でも通用するはず。本文中に載っている”悪い見本”が、これまで自分が作ってきたダサダサなデザインとあまりにも似過ぎていて、「これ!まさにこれ!」と思わず叫び出してしまうほど。

個人的に特に参考になった内容をまとめておく:

  • 関連のある要素は近付け、関連のない要素は離す。空白を恐れてはいけない
  • 全ての要素をきちんと整列させる
  • 文字の中央揃えは使ってはいけない
  • コントラストは大胆につける
  • 似て非なる要素は衝突を起こす。全く同じか、はっきり違うか、どちらかにする
  • 活字にはカテゴリーがあり、組み合わせ方にルールがある

あと、非英語圏の人間にはあまり参考にはならないのだが、「文字を全部大文字にしてはいけない」としきりに強調しているのも印象的だった。あれはやっぱり読み難いよなあ。ネイティブはそうは思わないんだろうかと前々から疑問だった。

新約聖書 訳と註 3 パウロ書簡 その一

田川建三訳著『新約聖書 訳と註 3 パウロ書簡 その一』。夕食後に少しずつ読み進め、1ヶ月ほどかけて読了。

この翻訳が読める時代・言語圏に生まれて幸運だったと思える。同著者の『書物としての新約聖書』を読んでいると心底そう思う。訳文からも膨大な訳注からも、著者の学問的誠実さがひしひしと伝わってきて、読んでいて清々しく感じる。一方、他翻訳(主に口語訳と新共同訳)の誤りを指摘する際にはかなり頻繁に露骨な嫌味が添えられているので、読んでいて何だか荒んだ気分になってくる……。

この第3巻にはパウロの真筆書簡が収められている。日本では宗教・信仰と言うと『信じるものは救われる』的な考え方が一般的だと思うのだが、パウロ本来の考え方はその真逆と言っていいもので、有り体に言えばもっとずっと「深い」。パウロの書簡の中にはそういう思想的に深いところと、その思想ゆえの自己矛盾と驕りとが隣り合わせになっている。

そういったことは、その筋の人にとっては良く知られた事実なのだろうけれども、一般人が漠然と聖書の本文を読んでいるだけではやはり分からない。翻訳の質がどうという以前に、一言一節の意図を考える一つのきっかけとして、註の存在はとてもありがたい。

仕事の忙しさと精神的健康

仕事が忙しい。自宅勤務ということもあって、自主的に休日返上状態で働いている。

「平日だから」「休日だから」とか、あまり考え過ぎない方が良い。その区別にこだわり過ぎると、逆に生活が仕事に支配されて、精神的健康を害してしまう。仕事なんてしょせん自分の人生の一部分に過ぎない。休日だろうが平日だろうが、すべきと思うことがあるならやれば良いし、無いならやらなくて良い。

ただし、「すべき」と思って実際に行動できるなら良いが、心の中で心配することしかできない状況なら、一切何もしない方がマシだ。『明日のことは明日自らが思い悩む。その日の苦労は、その日だけで十分である。』(マタイ福音書6.34)

CentOSにMovable Type4をインストールする

RPMForgeをリポジトリに追加しておけば、全てのPerlモジュールをyumでインストールすることができる。

sudo yum --enablerepo=rpmforge install \
     perl-Image-Size perl-SOAP-Lite perl-Crypt-DSA perl-XML-Atom \
     ImageMagick-perl perl-Archive-Zip perl-IO-Compress-Zlib perl-PerlIO-gzip

#DB接続モジュールはお好みでどれか一つ
sudo yum --enablerepo=rpmforge install perl-DBD-MySQL \
     perl-DBD-Pg perl-DBD-SQLite perl-DBD-SQLite2

MTが扱い難い点の一つは、依存するPerlモジュールを揃えるのが大変だという点だ。モジュール同士の依存関係はcpanコマンドで解決できるのだが、全てをコンパイルするにはそれなりの時間がかかるし、ちょっと環境が古いとImageMagickやXML::Atomなどの重要なモジュールがコンパイルできなかったりして、面倒なことこの上ない。まったくyum様々、RPMForge様々だ。

Movable Typeを使ったサイト制作はプログラマの想像を越える世界だった

正直、現代的なサイト制作というものを侮っていた。

このブログでWordPressを使ってみて、その扱いやすさに感心したので、MTの代わりにサイト制作用CMSとして使えないかデザイナーに提案してみたところ、あっさりと却下された。

理由は「複数のブログを扱えないから」だそうだ。

詳しく話を聞いていくうちに、彼/彼女らにとって「ブログ」とはサイトを構造化する際の基本単位であり、権限の委譲もコンテンツとデザインの分離も、この単位に沿ってなされるものらしいということが分かってきた。

プログラマとしては、「ブログ」よりももっと根源的な構造があるのではないか、と考えたくなるのだが、多分それは違う。多くのCMSが提示するようなプレーンなツリー構造や、静的サイトに見立てたファイルの比喩では、そこまで役に立たない。あくまでもフル機能を備えた「ブログ」だからこそ意味がある。

  • 一定の構造を持つデータ=記事のリストである
  • 記事は基本的に投稿日時で分類されるが、必要ならカテゴリ/タグといった追加の属性で分類できる
  • 投稿日時や属性に基づく何通りかのビューを標準で備える
  • 記事にはメディアファイルを含めることができる
  • 記事は、必要ならばフィードバックを受け付けることができる
  • デザインには関与しない、記事のみを書く投稿者を複数割り当てることができる
  • 以上を管理するための洗練されたWebインターフェイスがある

こういう特徴を備えた構造/システムをなんと呼ぶべきか?やはり「ブログ」としか言い様がないのだ。ちょうどプログラマにとってのRDBMSをイメージすると分かりやすいかも知れない。RDBMSが便利なのは、単にある構造でデータを保存できるからというだけではない。Database/Table/Rowという標準的な構造があり、SQLという標準的なインターフェースがあり、権限管理や様々なツールを含むMS(Management System)の部分があってこそ、プロフェッショナルな道具として役に立つ。

WordPressは、ブログを基本単位として自在に扱う能力を欠いている。いわば個人向けの用途特化型データベースソフトだ。その点では現状、MTの方がずっと優れている。

プログラマとして、プロフェッショナルとして、いろいろと考えさせられる経験だった。

XREAでWordPress 2.7

インストール自体は特に何も考えなくてもOK。safe_mode制限ありのモジュール版でも普通にインストールできる。

ただしそのままだとメディアファイルのアップロードや管理画面からのプラグインのインストールができない。少なくとも関連するphpファイルだけはCGIで動くように変更しておく必要がある(全phpをCGIで動くようにしても良い)。

具体的には、次のような .htaccess を wp-admin に置いておく。

<filesmatch "^(async-upload|plugin-install|update-core)\.php$">
  SetHandler application/x-httpd-php5cgi
</filesmatch>

それと、細かい話になるが、safe_modeオンの状態でインストールを実行するとメディアファイルのアップロード先が wp-content になってしまうので、管理画面の「設定」→「その他の設定」でアップロード先のパスをデフォルトに戻しておくこと。あと好みで「アップロードしたファイルを年月ベースのフォルダに整理」にもチェックを入れておく。

これでファイルアップロードとプラグインのインストールができることは確認した。コアのアップグレードは機会があれば試してみる。

参考:セーフモードによる制限と対処方法 WordPress Codex

(続きを読む…)