« September 2010 | Main | November 2010 »

October 2010

2010.10.31

Trac/今日更新したチケットの一覧を表示したい

Trac0.12以降の場合、タイムラインで更新者を絞り込むことができますが、Trac0.11では残念ながらその機能はなく。

タイムラインの機能を改造するという方法もあるのですが、とりあえず知りたいのは今日自分(ログイン中のユーザー)が更新したチケットの一覧(と、おおよその内容)なので、「レポート機能」で対応してみました。

こんな感じ。

SELECT
time(datetime(tc.time, 'unixepoch'), '+09:00:00')||' - #'||t.id||' : '||t.summary as __group__,
t.id as ticket,
tc.field as 項目,
tc.newvalue as description
FROM ticket t
LEFT OUTER JOIN ticket_change tc ON tc.ticket=t.id
WHERE
date(datetime(tc.time,'unixepoch'), '+09:00:00')>=date(datetime('now'), '+09:00:00')
and tc.newvalue<>''
and tc.author=$USER
ORDER BY tc.time,tc.ticket

欠点は、ticket_changeのテーブルの更新日を条件に指定しているため、「今日新規登録して、それ以降更新していない」チケットは抽出対象外になってしまうってことでしょうかね(^^;

| | Comments (0) | TrackBack (0)

2010.10.30

I Love, Your Love / SHUUBI

数日前の話ですが、無事に届きました。

RIDERはライブ等で何度か聴いたことがありますが、(ラジオを含め)きちんと(?)聴くのは初めてかな。Miss&Mr. Babyは、リズム感が面白いですね。

最近行ったライブでは去年の12月の京都なのですが、曲リストを見てみると結構演奏していたんですね。マキシ収録の宝物、マイシーズンはさておき、他にExcuse me.とかDearとか。

しかし、学生の頃は、ちょうどラジオ(α-station)でDJ担当していたこともあり、周りに知っている人も多かったのですが、職場では知っている人はほとんどいないんですよねぇ・・・。11/6のJEUGIA三条のインストア、強引に誰かを連れて行くか?(笑

#明らかにスペル間違えていると思われる箇所が・・・(^^;

| | Comments (0) | TrackBack (0)

2010.10.29

D7000入手

D7000無事入手。本当は昨日入荷の連絡が来ていたのですが、都合が合わず取りに行けず。今日も閉店間際でしたが(^^;

本体のみ(5年保証付加)+予備のバッテリー+レリーズケーブルに16GBのSDカード2枚の体制。
「何でも下取り」の1万円引きのおかげで、約14万円。あぁ、カードの引き落としが怖い・・・(笑

残念ながら、今日は撮影までたどり着けず(涙)。明日は、朝早くから外出で戻りが夜遅くなる予定。デビューは明日の晩か、日曜日か??

D70s使って10ヶ月ちょっと。結構いろんなものを撮ってきました。ありがとう、D70s。
これからよろしく、D7000。

#D70s(約140(W)×111(H)×78(D)mm)よりちょっと小柄なんですね(約132×105×77 mm)。重量は100gほど増えていますが。シグマの18-125mmがちょっと大きくなったように見えてしまいます(笑

| | Comments (0) | TrackBack (0)

2010.10.28

複数のIPアドレスが存在する環境でのIPMessenger

複数のIPアドレスが存在する環境において、IP Messengerが他の端末を見つけることができないという現象に遭遇。

調べてみると、VMwarePlayerをインストールするとIPMSGが正常動作しなくなる件についての現象と同じでした。

/NICオプションを指定してIP Messengerを実行すると、無事に他の端末を見つけることができました。

ただ、DHCPでIPアドレスを取得しているので、スタートアップに組み込むのであれば、「現在のIPアドレス」を指定するバッチファイルか何かを作ってあげる必要があるかな。

#それを考えると、ブロードキャストした方が確実なのかもしれません(^^;

| | Comments (0) | TrackBack (0)

2010.10.27

mod_expiresでクライアントのキャッシュを最大限に(?)使用する

mod_expiresを使うと、クライアントのキャッシュを最大限に使用することができるとのことです。

これらのヘッダはクライアントに文書の 有効性と継続性を指示します。文書がキャッシュされた場合には、 指定時刻に達するまでは、元の場所から取得する代わりに キャッシュされているものを使うことができます。

処理対象としたいところ(Locationディレクティブ等)に以下のような感じで設定を追加。

ExpiresActive On
ExpiresByType image/x-icon "access plus 1 day"
ExpiresByType image/gif "access plus 1 day"
ExpiresByType text/css "access plus 1 day"
ExpiresBytype appliation/x-javascript "access plus 1 day"

ってな感じで設定を追加。

pngに関しては、(Tracの)Ticketの添付ファイルで使用される可能性があるので、敢えて除外。Tracにおいては、いろんなJavaScriptファイルが使用されているので、データ転送量およびリクエスト数そのものを減らすという観点からすると効果は期待できるはず。

プラグインの修正を行うことなども考慮し、有効期限は敢えて1日と短く設定しています。

で、設定完了後、ブラウザのctrl + Rで再読み込みを行うと・・・普通にアクセスしてきている??(レスポンスコードは304ですが)
いろいろと調べてみると、どうも明示的に再読込を行った場合は、Expiresは無視されるとのこと(Expiresが効かない)。
普通にURLを再入力してみると、.jsファイルなどに対するリクエストが飛んできていないことを確認。

元々304(NotModified)が戻されていたので、ファイルそのものの転送は行われていませんでしたが、リクエスト数そのものが減ることにより、クライアント側の体感速度が上がるといいなぁ・・・。

| | Comments (0) | TrackBack (0)

2010.10.26

Tracのテキストデータを圧縮転送(mod_deflate)

充分な転送速度が得られない環境において、何とかレスポンス速度を上げることができないか、ということで、mod_deflateを使用してみることに(サーバーのCPUリソースにある程度の余力がないと、逆にそっちがボトルネックになってしまいますが)。

画像とか動画とかを大量に使用している場合、deflateの効果はほとんどありませんが、Tracのチケット運用のように、テキストが多い場合は効果が見込めるはず(もちろん、zip等の添付ファイルのダウンロードには効果はありませんが)。

懸念点としては、mod_pythonと組み合わせてきちんと動くのか否か? どうも、mod_pythonでTracを運用している環境でもmod_deflateを使っている、という話を見かけないので・・・(単に、あまりにも普通に設定できてしまうので、敢えて書くまでもないだけなのかもしれませんが)。

まずは、mod_deflateが組み込まれていることを確認。

LoadModule deflate_module modules/mod_deflate.so

続いて、delfateの設定・・・なのですが、最初、httpd.confの中にそのまま書いて、deflateが反応してくれないという状況に。理由は、SSLで運用しているため、正しくはそちら側に設定する(VirtualHostでポート443を分けている)必要があっただけですが(^^;

気を取り直して、SSLの設定を行っているssl.confに記述。

基本設定はこんな感じ。この部分の設定は、VirtualHostの外側に記述(なので、この部分は別にhttpd.confなどに記述しても問題ないはず)。リクエストURLが gif/jpg/jpeg/png/zip/lzh/gz のいずれかで終わる場合、deflateの対象外となるようにしています。

BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE\s(5\.5|6\.0) no-gzip
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|zip|lzh|gz)$ no-gzip dont-vary

DeflateFilterNote Input instream
DeflateFilterNote Output outstream
DeflateFilterNote Ratio ratio

LogFormat '%h %u %t "%r" %{outstream}n/%{instream}n (%{ratio}n%%) %{User-agent}i' deflate

VirtualHostディレクティブ内でログ出力を実施。

CustomLog logs/ssl_deflate_log deflate

Tracは、/trac ~にマッピングしているため、Locationディレクティブでdeflateの対象に(VirtualHost内に記述)。

<Location /trac>
  SetOutputFilter DEFLATE
  Header append Vary User-Agent env=!dont-vary
</Location>

なお、この部分はTracの設定を行っているconfファイル側に記述しても問題ないはず(そっちでもLocationの設定は行っているので)。この辺は、好みの問題かと(コンテンツ(Trac)を基準に設定を記述するか、機能(deflate)を基準に設定を記述するか)。

ちなみに、テスト環境で試してみたところ、Ticket閲覧においては20~25%のサイズに圧縮されていました。もちろん、カスタムフィールドの内容など、環境に依存する内容ではありますが、元のサイズが35KB~40KB程度あるので(思いの外大きくてちょっとびっくり)、1/4~1/5程度に圧縮できるってのは結構効果ありそう。

ちなみに、同一のサーバーでは他にSubversionなども運用しておりますが、今回は適用外としております。ただ、検証の時間の都合で見送っているだけなので、Subversion側にも適用の効果があるかどうか、いずれ調べてみる予定。

参考:
【帯域対策】Apacheのモジュールmod_deflateで転送量を大幅削減!
WEB+DB PRESS vol.59

#WEB+DB PRESSでmod_deflateの話が掲載されていて、「そういえば、そんな機能もあったなぁ~」って思い出しました(^^;


| | Comments (0) | TrackBack (0)

2010.10.25

撮影可能枚数

D7000のバッテリは、カタログ値で約1050コマ(CIPA規格準拠)撮影可能。D70sのバッテリはマニュアルによると約2500コマ(条件2では約500コマ)。

測定の前提条件が違うので単純な比較はできませんが、D70sのバッテリってかなりの容量があったんですね。確かに、1000枚ほど撮影しても、バッテリ残量メーター全然減らないことも(日中の屋外での撮影時)。

画素数が全然違う(⇒メモリカードへのアクセス量が異なる)、液晶画面が小さい&解像度が全然違うなどなど、電力を消費しそうなスペック部分の違いも影響しているとは思いますが。

#ちなみに、カタログスペックだけで言うと、ホワイトバランスのセンサー分割数、シャッタースピード、フラッシュ同調シャッタースピードなど、D90よりD70sの方が上回っているんですね。もっとも、D70sのAWBはかなりアレですが・・・。

| | Comments (0) | TrackBack (0)

2010.10.24

Picasa 3.8

Picasa 3.8がリリースされたとのことで早速インストールしてみました(Picasa3.6からの「アップデート」を行おうとしても、「最新版です」というメッセージが出てしまうのは何故??)。

今回追加された主な機能としては、
・フェイスムービー
・一括アップロード
・Picnikによる編集
だそうです。ただ・・・これらの恩恵は受けないなぁ(^^;

基本的に人物写真は(滅多に)撮影しないですし、一括アップロードが必要となるほど大量にアップロードするものがあるわけではないですし(まぁ、複数アルバムの公開設定を同時に編集できたりするなどはつ買うケースもあるのかもしれませんが)。強いていうならPicnikによる編集? ただ、基本的に編集はしないようにしているので・・・(編集し始めると、きりがなくなってしまいそうなので・・・)。

プロパティ画面を表示しっぱなしにできるようになったことは便利かも。確か、3.6の時は別ウィンドウ(ダイアログ風)の表示だったような気がするので。欲を言うと、Exifの項目毎に表示/非表示を切り替えることができればもっと嬉しかったですが(笑)。

この機能が、Picasa付属のフォトビューアーでも使えたらいいのになぁ・・・。もっとも、フォトビューアーはExif情報を表示することもできませんが・・・。フォトビューアーは、拡大した情報を(ビューアーを終了するまで)覚えていてくれるので、等倍画像を見比べる時に便利なんですよね。

| | Comments (0) | TrackBack (0)

2010.10.23

SHUUBIライブ!

2011/01/16(sun)@心斎橋 JANUS
17時半開場、18時開演

一般向けには2010/11/20(sat)発売開始とのこと。

| | Comments (0) | TrackBack (0)

2010.10.22

シャープがパソコン事業から撤退

シャープがパソコン事業から撤退とのこと。

一時期、MURAMASAを数年間使っていました。あの薄さはある種、感動的でしたね・・・。CPUスペックはさておき、最大メモリ搭載可能量が少なかった(512MB・・・しかも、256MBの増設メモリがかなり高い)ことから、XP SP2あたりになってくると(スペック的に)きつくなってきていましたが。

軽量Linuxを入れると、案外今でもいい感じで使えたりするのかもしれませんね(今使っているPC入手後、知人に譲って手元にないので試しようがありませんが)。

全く関係はありませんが、その昔、X68000に憧れていた頃もありました(笑)。残念ながら(?)、MZシリーズやX1シリーズに憧れたことはありませんが(^^;

#MZシリーズとX1シリーズとでは、同じシャープでも部署が全然違っていたんですよね、確か。

| | Comments (0) | TrackBack (0)

2010.10.21

遊佐未森@α-station

そういえば、10月から遊佐未森が担当しているコーナーがあるというのを思い出して、久しぶりにラジオを(といっても、昨日の話ですが)。

高校生の頃は、NHK-FMで加藤いづみを聴いてて、大学生の頃はα-stationでSHUUBIを(もっとも、大学生の頃は他もいろいろと聞いていましたが)。

なんていうか、「ほわ~ん」とした感じですね。声の質とか、しゃべり方に寄るところが大きいんですかね??

その時間帯に家にいれば、来週以降も頑張って聴きたいところです。

#「フレンズ」のカバーはなかなか味があってよかったかも。

| | Comments (1) | TrackBack (0)

2010.10.20

久しぶりのunbound

過去に書いたUnbound関連のネタ。
unboundをインストールしてみた
unboundをもう少し使ってみる
Unbound、難しい・・・
Unbound、頑張って設定する
Unbound、もう少し頑張る

久しぶりにUnboundの環境構築を行う機会があったのですが、設定方法がちょっと分散してしまっていて混乱してしまったので、要点のみをまとめてみることに。なお、今回インストールしたのは、1.4.6で、普通にソースコードからインストール。

# cd /work
# wget http://www.unbound.net/downloads/unbound-1.4.6.tar.gz
# tar zxvf unbound-1.4.6.tar.gz
# cd unbound-1.4.6
# ./configure
# make
# make install
# cp contrib/unbound.init /etc/init.d/unbound
# ln -s /usr/local/etc/unbound /var/unbound
# /usr/sbin/groupadd -r unbound
# /usr/sbin/useradd -r -g unbound -d /var/unbound -s /sbin/nologin unbound
# chown -R unbound:unbound /var/unbound
# chmod a+x /etc/init.d/unbound
# chkconfig --add unbound

インストール手順は、過去のと特に違いは無し。ただ、/etc/init.d/unbound ファイルを書き換える必要がありました。
exec="/usr/sbin/unbound"

の行を、
exec="/usr/local/sbin/unbound"

に。

/var/unbound/unbound.conf ファイルの修正ポイントは以下のような感じ。LAN内を、仮に「testdomain」としておきます。

interface: 192.168.100.101
access-control: 192.168.100.0/24 allow
local-zone: "testdomain." static
local-data: "testsvr.testdomain. IN A 192.168.100.102"
local-data: "svnserver.testdomain. IN A 192.168.100.101"
local-data: "dns.testdomain. IN A 192.168.100.101"
local-data-ptr: "192.168.100.101 dns.testdomain."

※192.168.100.101 が、unboundをインストールした端末に割り当てているIPアドレスです。

また、 /etc/resolve.conf ファイルのsearch行を

search testdomain

にします。

ルーター側で、ドメイン名(DNSサフィックス)としてtestdomainを配布するように設定しておけば(設定方法はルーターに依存)、DHCPでIPアドレスを取得する端末は(特にhostsファイルに記述することなく) http://testsvr/ や http://svnserver/ でLAN内のサーバーにアクセスできるようになります。

※既にIPアドレスを取得している場合は、ipconfig /renew(Windowsの場合)でIPアドレスを再取得する必要があります。

| | Comments (0) | TrackBack (0)

2010.10.18

DAVフォルダに新規フォルダを作成する

(メモ)JackrabbitでDAVフォルダに新規フォルダを作成する場合は、MkColMethodを使用。

#releaseConnection() を使用するのを忘れて、フォルダ作成後のアップロード(PUT)ができずにはまったりもしつつ。

| | Comments (0) | TrackBack (0)

2010.10.17

muninで所定のディレクトリのファイル容量をチェックしてみる

muninで所定のディレクトリのファイル容量をチェックするプラグインを作ってみました。プラグイン作成で参考にしたのは以下のページ。
Munin の plugin の仕様
Muninプラグインの作り方

/var/tracdata/ ディレクトリ内にTracの各プロジェクトが、/var/svndata/ ディレクトリ内にSubversionの各リポジトリが格納されていると仮定し、Trac全体およびSubversion全体としてどの程度の容量があるか。

環境特有のプラグインで充分なので、(autoconf等)ちょっと手抜きしているところもありますが、以下のような感じで目的とするプラグインを作ることができました。


#!/bin/sh

#%# family=auto
#%# capabilities=autoconf

if [ "$1" = "autoconf" ]; then
  echo yes
  exit 0
fi

if [ "$1" = "config" ]; then

  echo 'graph_title Directory Usage'
  echo "graph_order trac svn"
  echo "graph_args --base 1024 -l 0"
  echo 'graph_vlabel bytes'
  echo 'graph_info Directory Usage'
  echo 'graph_category disk'

  echo 'trac.label Trac'
  echo 'trac.draw LINE2'
  echo "trac.info Trac"

  echo 'svn.label Svn'
  echo 'svn.draw LINE2'
  echo "svn.info Subversion"

  exit 0
fi

echo -n "trac.value "
du -b --max-depth=0 /var/tracdata/ | awk '/tracdata/ { print $1}'
echo -n "svn.value "
du -b --max-depth=0 /var/svndata/ | awk '/svndata/ { print $1}'

上記の内容を記述したスクリプトを /usr/share/munin/plugins/ ディレクトリ内に作成し、実行権限を与えた後、/etc/munin/plugins/ にシンボリックリンクを作成すればOK。

なお、ちょっとはまったのが、スクリプトの修正を行った際、古いデータを削除するために
/var/lib/munin/(domain-name)/(domain-name)-(script-name)-(key-name).rrd ファイル群
および
/var/www/munin/(domain-name)/(domain-name)-(script-name)-(key-name).png ファイル群
を削除したのですが、rrdは自動的に再作成されるにも関わらず、pngファイル群が再作成されなかったことでしょうか・・・(もちろん、munin-nodeの再起動は行っています)。

シンボリックリンクの削除&再作成を行っても改善しなかったので、試しに別名でシンボリックリンクを作成すると、pngファイルも再作成されるようになりました。

どこに原因があるのかわからないので、非常に気になるところではありますが・・・。どこかのファイルに、何らかの情報を保存してしまっていたりするんでしょうかね??

| | Comments (0) | TrackBack (0)

2010.10.16

D7000の高感度撮影は?

Test digitální zrcadlovky Nikon D7000 に、D7000の画像サンプルがいくつか掲載されていました(チェコ語だそうです(^^; )。

気になる高感度(ISO6400)でのサンプルもいくつか掲載されているので、フルサイズで見てみました。
さすがに、フルサイズ(等倍)で見ると、細かい設定(NRなど)はわかりませんが、結構ざらついてしまっていますね・・・。ただ、このくらいの状態であれば、はがきサイズ程度へのプリントであれば、充分実用の範囲内かも?(実際に印刷したわけではないので、推測に過ぎませんが)

| | Comments (0) | TrackBack (0)

2010.10.15

SHUUBIインストアライブ

ニューアルバム「I Love, Your Love」発売を記念して、京都JEUGIA三条本店にてインストアライブ開催!

11/6(土) 1回目PM3:00~/2回目PM5:00~

その日は、おそらくD7000も入手済みでしょうから、ついでに京都観光もしてこようかな。多分、紅葉はまだちょっと先だと思いますが・・・(時間帯的に、インストアライブ終わってからライトアップ観にいくっていうのもよさげではあるのですが)。

| | Comments (0) | TrackBack (0)

2010.10.14

KeepAliveTimeoutの値の適正値は?

Apache2.2系列のconfファイルの場合、KeepAliveTimeoutの初期値は15です(少なくとも、CentOS5.Xに同梱されているApacheの場合)が、実際にはこの値は(多くの環境で)大きすぎることも多いという情報をいろんなところで目にします。

試しに、5に設定して運用してみているのですが、確かに、15より5の方が全体的なパフォーマンスは向上したような感じでしょうか。

muninでApacheのプロセス数も監視しているのですが、同時に稼働しているプロセス数が減っている(⇒メモリ消費量も少なくなった)ようです。もちろん、通常運用状態での比較なので、アクセス数などの条件が同じというわけではありませんが。mod_pythonでTracを稼働させていると、Apacheの各プロセスが結構メモリを消費してしまうので、プロセス数が少なく済むというのは非常に助かります。

#ブロードバンドが一般的になり、1単位のリクエストの所要時間が短くなったというのも影響しているのかもしれませんね。

| | Comments (0) | TrackBack (0)

2010.10.13

ApacheとSubversionの両方をビルドする(2)

ApacheとSubversionをビルド・・・したのはいいのですが、Tracでページを開くと、時々(不定期に)

RuntimeError: instance.__dict__ not accessible in restricted mode

というエラーが・・・。調べてみると、Debian Etchに更新したら、Tracが時々RuntimeErrorを出すようになった にたどり着きました。

そういえば、Subversionのインストールの際に、

# make swig-py
# make install-swig-py

を処理するのを忘れていたような(苦笑)。ついでに、mod_pythonの再ビルドも忘れていたような・・・。その前に作業した時は、きちんと忘れずに処理していたのに。

で、mod_pythonのビルドを行ってみたのですが、makeの際にエラーが発生。調べてみると、mod_pythonのインストールでconnobject.c:142: error: request for member `next' in something not a structure or unionがそのものズバリ、でした。

1文字だけの修正とのことなので、patchを適用せずにsrc/connobject.cファイルを直接編集。

!(b == APR_BRIGADE_SENTINEL(b) ||

の部分を、
!(b == APR_BRIGADE_SENTINEL(bb) ||

にして再度ビルドすれば解決。

今のところ、問題なく動いてくれているようです。

| | Comments (0) | TrackBack (0)

2010.10.12

SubversionでSSLクライアント証明書(Linux)

数年前にSubversionとSSLクライアント証明書あるいはSubversionとSSLクライアント証明書(2)でWindows環境において試してみました。

今回、Linuxで同様の処理を行う必要が生じたので、そのメモ(正確には、svnsyncを使うための設定ですが)。

手動で行う際は、svn関連のコマンドを実行したタイミングで証明書のファイルパスおよびパスワードを聞いてくるので、そこで入力すればOK。

Client certificate filename: /filepath/cert.p12
Passphrase for '/filepath/cert.p12':

ただ、これだと夜間バッチでの自動実行を行うことができないので、証明書情報をどこかに保存しておくことに。もちろん、パスワードなどをファイルに保管しておくのはセキュリティ的にはよろしくないと思うのですが、そこは別の方法でファイルを保護するということで。

で、p12ファイルのファイルパスおよびパスワードは、 ~/.subversion/servers ファイルに記述するようです。ま、Windows版とほぼ同様ですね。

[global]
ssl-client-cert-file = /filepath/cert.p12
ssl-client-cert-password = certpassword

ってな感じで記述しておけば、クライアント証明書を都度入力することなくsvnsyncなどを行うことが可能となります。

| | Comments (0) | TrackBack (0)

2010.10.11

JackrabbitでSSLクライアント証明書を使う

もっとも、通信部分はHttpClientを使用しているので、Jackrabbitに特化した話ではないと思いますが。

openSSLで作成したp12ファイル(PKCS#12形式)を使用する場合、以下のような感じで指定すればOKです。

System.setProperty("javax.net.ssl.keyStoreType", "pkcs12"); System.setProperty("javax.net.ssl.keyStore", "p12のファイルパス"); System.setProperty("javax.net.ssl.keyStorePassword", "p12ファイルのパスワード");

keyStoreTypeを指定しておかなければ、

java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)

の例外が発生してしまいますので注意。

| | Comments (0) | TrackBack (0)

2010.10.10

ServersMan@VPS muninでswapの監視をやめる

ServersMan@VPSはswapが使えないので、muninで監視する意味はありません。

ってことで、muninの監視対象から除外することに。除外する方法はすごく簡単で、/etc/munin/plugins ディレクトリからシンボリックリンクを削除すればOK。

# cd /etc/munin/plugins/
# rm swap

rm: remove symbolic link `swap'? という確認メッセージが表示されるので、yを入力してリンクを削除し、munin-nodeを再起動( /etc/init.d/munin-node restart )。

| | Comments (0) | TrackBack (0)

2010.10.09

ServersMan@VPS muninでprivvmpagesの値を監視する

OpenVZ/Virtuozzoの場合、freeが示すメモリの値が当てにならない場合もあるようです。確かに、某所のVPS(Virtuozzo)においては、freeは全然小さな値なのに、メモリ不足と思われる現象でエラーが発生する、ということがあったように思います。もっとも、面倒なのでプロセス再起動でその場を凌いでいたので、本当にメモリ不足だったのかどうかは不明ですが(^^;

それはさておき、VPS (Virtuozzo) のメモリー使用量をmuninで記録する! で、OpenVZ/Virtuozzoのprivvmpagesの値を取得するスクリプトが公開されていたので、使ってみました。

1.muninの他のプラグインに習い、/usr/share/munin/plugins/ディレクトリー内に、vps_memoryというファイル名でスクリプトを作成。
2.chmodでスクリプトに実行権限を付与。
3.シンボリックリンクを作成。

ln -s /usr/share/munin/plugins/vps_memory /etc/munin/plugins/vps_memory

4./etc/munin/plugins.conf ファイルおよび /etc/munin/plugin-conf.d/munin-node ファイルに以下の2行を追加(もしかしたら、いずれか一方のファイルのみでいいのかもしれませんが)。
[vps_memory]
user root

5./etc/init.d/munin-node restart で再起動。

■余談
/proc/user_beancounters の取得結果を256で割った値を描画していますが、画面に表示される単位に換算するとちょっと微妙かも・・・。「4096を掛ける」&「graph_argsのオプションに --base 1024 を追加する」&「graph_vlabelの値を Bytes にする」とした方がしっくりくるかもしれません??(memoryスクリプトを参考) もっとも、この辺は好みの分かれるところかとは思いますが。
得られる値としては、memoryの値(内部では/proc/memory の値を取得しているようです)に近い値なので、memoryだけでもある程度の目安にはなるかも・・・?(この辺は、OpenVZのホスト側(?)の設定に依存してくるのかもしれませんが)

| | Comments (0) | TrackBack (0)

2010.10.08

ServersMan@VPS vsftpd

ひょんなことから、FTPサーバーを構築することに。調べてみると、CentOSにおいてはvsftpdがパッケージで提供されているとのことなので、それを使用することに。

参考:FTPサーバー構築(vsftpd)

基本的に、上記サイトの通りにインストールするわけですが、いくつか変えたところも。

【インストール】

# yum -y install vsftpd

【/etc/vsftpd/vsftpd.conf】
・Webalizerで解析させるため、xferlog_std_formatの指定はYESに。
・SFTPを使おうとした場合、OpenSSHにパッチを当てないとchrootを防げないとのことなので、とりあえずはSSLを使用しない設定に(本当はSFTPに制限したいところなのですが)。
FTPサーバ(vsftpd)の構築(RedHat系編)によると、「対応済みルータで本設定を行うと逆にLISTで止まるようになるので注意が必要。」とあったので、pasv関連の設定をpasv_enable=YESのみに(pasv_addr_resolve などは指定しない)。

【その他】
・localtimeのセットアップスクリプトは省略(まぁ、設定しなくてもとりあえずは何とかなるだろう、と(笑))。
・iptablesの設定を変更し、ポート 21 を開放。
・ftp接続用のユーザーを追加し、パスワードを設定(目的がファイルのやりとりなので、とりあえず「専用のアカウント」を準備)。

Windowsのftp.exeやFFFTPでアクセスできることを確認。
単純な(?)ftpサーバーなら、案外簡単に準備することができるんですね。もちろん、セキュリティやら何やらを考慮し始めると、もっとじっくりとやる必要はあると思いますが・・・(特に、SFTP化など)。

| | Comments (0) | TrackBack (0)

2010.10.07

ノーベル賞の成果

ノーベル化学賞受賞、すごいですね(根岸英一さん、鈴木章さん)。

学生時代、1年間(4回生の時)だけではありますが、有機合成系の研究室に所属していたことがあります。その時に、こういった金属触媒を使った実験をしている人もいたような・・・それがパラジウム触媒だったかどうかは残念ながら覚えておりませんが。

30年ほど前の研究成果は、それ以来長年にわたりいろんな分野で活用されていましたが、今になって広く脚光を浴びるということが、「基礎研究の重要性」っていうのを再認識させるきっかけになってくれると非常に嬉しいです。もちろん、「営利」を考えると、どうしても「超長期的な」ものっていうのは難しいんだとは思いますが・・・。

今回の受賞のニュースを見て、学生時代に使用した有機化学の教科書を引っ張り出してきたのですが(ボルハルトショアーの有機化学)、残念ながら索引には「鈴木カップリング」「根岸カップリング」の単語は見つかりませんでした(^^; さすがに、全部を読み返す気力もなく(苦笑)。ちなみに、ボルハルトショアーの有機化学の監訳の1人に、野依良治さんが入っていたんですね(2001年ノーベル化学賞受賞)。

※ちなみに、2008年にノーベル化学賞を受賞した下村脩さんが発見した緑色蛍光タンパク質(GFP)は、大学院生の時に実験で使っていました。



| | Comments (0) | TrackBack (0)

2010.10.06

JackrabbitでWebDAVでファイルを保存する

HttpClientの初期化処理等は前回と同様なので省略。処理の本体は、ざっくりと書くと、以下のような感じになります。

PutMethod method = new PutMethod("https://example.com/dav/sample.txt");
RequestEntity entity = new InputStreamRequestEntity(new FileInputStream("C:\\Test\\sample.txt"));
method.setRequestEntity(entity);
int result = client.executeMethod(method);
System.out.println("result : " + result);

戻り値に関しては、とりあえずレスポンスコードの処理のみを行っていますが、もしかすると他にも情報を取得することができるのかもしれません。

| | Comments (0) | TrackBack (0)

2010.10.05

JackrabbitでSSL通信

Jackrabbitでとりあえずファイル一覧を取得することができたので、経路をSSLで保護することに。

例によって例のごとく、「オレオレ証明書」を使用しているので、そのままでは通信エラーになってしまいます。内部的に、Commons HttpClientを使用しているので、その資料が参考になるのではないかと・・・。

JavaのSSL通信でオレオレ証明書を使う方法は2つあって、1つはKeyStoreを使用する方法で、もう1つは「証明書のエラーを無視する」という方法。普段は後者を使用しているので、今回も後者を使用してみることに。

もっとも、独自(自作)のHttpクライアントでのSSL通信は行ったことがある(X509TrustManagerも含め)のですが、Commons HttpClientでのSSL通信は初めてだったので、いろんなものを参考にしながら。
で、参考にしたのは、HttpClientのSSL通信。ほとんどコピペの状態でクラスを作成し、いざ通信! を行ってみたのですが、エラー・・・。

DAVでのアクセスではなく、通常のGetMethodを使用してのアクセスの場合、問題なく結果を取得できているので、クラスの作り方自体は間違っていないはず。デバッガーで追ってみると、GetMethodの場合は、自作のSocketFactoryがきちんと呼び出されているのですが、PropFindMethodの場合、自作のSocketFactoryが呼び出されていないようです。そりゃ、エラーになってしまいます・・・。

仕方がないので、KeyStoreを使用する方法を採用することに。参考資料はこちら・・・って、過去の実験結果そのまんまですが(^^;
まずは、サーバーの証明書を取得。例えば、InternetExplorerでアクセスした場合、「詳細」→「ファイルにコピー」→「DER encoded bynary X509」形式でファイルを保存しておきます。
JDKに付属しているkeytool.exeを用いて、keystoreを作成します(新規ファイル作成時は、keystoreのパスワードも合わせて指定することとなります)。

keytool.exe -keystore c:\tmp\cer\.keystore -import -alias hogesvrca -file hogesvrca.cer

実際にこのkeystoreを使用する場合は、起動時に-Dでパラメータを与えるか、あるいは、通信関係の処理を行う前に、System.setPropertyで指定しておきます。

System.setProperty("javax.net.ssl.trustStore", "C:\\tmp\\cer\\.keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "password");

とりあえず、keystoreを使用することで、Jackrabbitでも(オレオレ証明書で)SSL通信を行うことができました。

次は、元々の目的である、ファイルの保存(PUT)を行ってみることに。

| | Comments (0) | TrackBack (0)

2010.10.04

JavaでWebDAVクライアントを実装してみる

JavaでWebDAVクライアントの実装を試みてみることに。ただし、目的は「並列アップロード」(笑)。並列ダウンロードは、ブラウザなどを使うことで対応できるかと思いますので(^^; (並列アップロードも工夫すれば既存のもので簡単に実現できると思いますが)。

で、何かライブラリがあるかなぁ・・・と思って調べていたところ、Java用のWebDAVクライアントライブラリとしては、以下のようなものがあるようです。
Apache Jackrabbit
webdavclient4j
Jakarta Slide

Jakarta Slideは既に2007年に引退しているとのことで、WebDAVクライアントを使いたいのであれば、Jackrabbitを検討してみて欲しい、とのこと。ということで、Jackrabbitを試してみることにしました。

・・・ただ、かなり、資料が少ないようですね(苦笑)。まぁ、WebDAVクライアントなんて、作ろうと思う人はあまりいないでしょうしねぇ・・・。参考資料としては、Jackrabbit Wiki WebDAVあたりでしょうか。

Jackrabbitのダウンロードページから、「standalone版」をダウンロード(今回は、jackrabbit-standalone-2.1.1.jar)し、Eclipseに取り込んでクラスパスに追加。依存ライブラリなどを取り込んだ状態のjarファイルで、ファイルサイズは30MBを超えていますが、まぁ、気にしない(笑)。

細かいことは気にせず、とりあえず指定したフォルダのファイル一覧を取得する場合、以下のような感じになるようです(Basic認証で保護されていると仮定)。

HostConfiguration hostConfig = new HostConfiguration();
hostConfig.setHost("example.com");
HttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
HttpConnectionManagerParams params = new HttpConnectionManagerParams();
int maxHostConnections = 20;
params.setMaxConnectionsPerHost(hostConfig, maxHostConnections);
connectionManager.setParams(params);

HttpClient client = new HttpClient(connectionManager);
Credentials creds = new UsernamePasswordCredentials("userid", "password");
client.getState().setCredentials(AuthScope.ANY, creds);
client.setHostConfiguration(hostConfig);

// ファイル一覧を取得する。
DavMethod pFind = new PropFindMethod("http://example.com/dav/", DavConstants.PROPFIND_ALL_PROP, DavConstants.DEPTH_1);
client.executeMethod(pFind);

MultiStatus multiStatus = pFind.getResponseBodyAsMultiStatus();
MultiStatusResponse[] responses = multiStatus.getResponses();
MultiStatusResponse currResponse;
List<?> files = new ArrayList();
for (int i=0; i<responses.length; i++) {
  currResponse = responses[i];
  System.out.println(currResponse.getHref());
}

細かいところまではまだ調べていませんが、内部的にはCommons HttpClientが使用されているようです。

| | Comments (7) | TrackBack (0)

2010.10.03

ApacheとSubversionの両方をビルドする

ApacheのWebDAVでの容量制限 において、初めてApacheをソースコードからビルドしてみたのですが、思わぬところで落とし穴にはまってしまいました。

現象としては、「Subversionでロックを取得する運用にしている場合、コミット時にロックの開放に失敗して結果としてコミットも失敗してしまう」という状況。

Apacheのエラーログには、以下のようなメッセージが出力されています。

Could not MERGE resource
An error occurred while committing the transaction.
Cannot verify lock on path (リソースのパス) no matching lock-token available

さてさてさて・・・いろいろと調べてみると、SubversionとApacheで使用するAPRのバージョンが違っていると、上手く動かないことがあるらしい(参照したページはメモってなかったのですが、そんな感じのことが記載されていました)。他のページなどをみると、APRのバージョンが違うと、そもそも動かない(コミット時だけの問題ではない)ようなのですが、とりあえず、もう一度Apache/Subversionをコンパイルし直してみることに。

参考資料
 ・Subversionをソースからインストール
 ・Subversionコンパイル方法
 ・コンパイルとインストール

作業手順
実際には試行錯誤しながらいろんな作業を行ったため、どの作業が必要で、どの作業が不要か、精査しきれておりません(苦笑)。

・ApacheのConfigure:--with-ldap および --with-included-apr オプションを追加する。

# ./configure --enable-so --enable-mods-shared=all --with-ldap --enable-ssl=shared --enable-suexec=shared --enable-proxy=shared --enable-cache=shared --enable-disk-cache=shared --enable-file-cache=shared --enable-mem-cache=shared --enable-authnz-ldap=shared --enable-ldap=shared --with-included-apr

 --with-ldap の指定を忘れると、LDAP関連のモジュールをビルドする際にエラーが発生してしまいます(configureは通るのですが、makeの際にエラーが発生する)。

・SubversionのConfigure:--with-apr および --with-apr-util オプションを追加。他のサイトに習って、 --with-ssl オプションも付加してみましたが、効果があるのかどうかは不明。

# ./configure --with-apxs=/usr/local/apache2/bin/apxs --with-apr=/usr/local/apache2/bin/apr-1-config --with-apr-util=/usr/local/apache2/bin/apu-1-config --with-ssl

ちなみに、他に、aprやapr-utilのmakeも別途行っていたりしますが、Apache本体で--with-included-aprを指定した場合、個別のmakeは不要なのかな、と思ったりもします。

その他参考資料など
Apache 2.2.4 configureでエラー
Apacheのconfigure時にAPR-Utilでエラーが出る
Linux Apache2.2 OpenLDAP 連携
Apache22のBasic認証をLDAPで
・apr-utilを個別にmakeする場合、--with-ldap=yesオプションを指定してconfigureを実行する必要があるかもしれません。

./configure --prefix=/usr/local/apr-util-httpd/ --with-apr=/usr/local/apr-httpd/ --with-ldap=yes

| | Comments (0) | TrackBack (0)

2010.10.02

秋の味覚

現実逃避に、突発的に芋掘りに行きたくなったので、高槻北部の樫田(田能)に行ってきました。

芋掘りはさておき。

樫田(厳密にはもう少し北の方?)の上空は、結構飛行機が飛んでいるんですね。伊丹空港から関東方面へ行く路線の通り道になっているんでしょうか?

30分くらいの間に4~5機ほど見かけたのですが、東に飛んでいく飛行機からは飛行機雲が長く延びているのに対し、西に飛んでいく飛行機の場合は飛行機雲は全然ないんですよね。

上昇中か、着陸に向けて準備中(下降中)か、ってことなんでしょうか。

ちなみに、芋は、1株から、大きいの・小さいの含めて数個って感じでしょうか。多い場合で何個くらい取れるんでしょうかね?? しかし、芋を傷付けないように土を掘って芋を探していくのって、なかなか難しいですね。根っこがどこまで伸びていくんだろう~って感じで(笑)。出荷用の芋って、どうやって回収しているのか、ちょっと気になりました。

| | Comments (0) | TrackBack (0)

2010.10.01

muninでServersMan@VPSのトラフィックを監視する

ServersMan@VPSのトラフィックをmuninで監視する方法・・・実は簡単。もっとも、参考資料([VPS] Munin で venet0 のトラフィック監視)があってこそ、ではありますが(^^;

ifconfigでインタフェース名をチェックすると、venet0となっていたので、

# ln -s /usr/share/munin/plugins/if_ /etc/munin/plugins/if_venet0
# ln -s /usr/share/munin/plugins/if_err_ /etc/munin/plugins/if_err_venet0
# /etc/init.d/munin-node restart

でOK。

しばらく待つと、venet0 trafficなどのモニターが表示されるようになるはずです。

| | Comments (0) | TrackBack (0)

« September 2010 | Main | November 2010 »