Ubuntu 10.04 に Opera 11 をインストール

これまでは Ubuntu では Opera 10.10 を使っていた。これまでも flash が動かないページがあったりしたが、Youtube などでは何とか動いてたので放っていた。ところが最近、Ubuntu のアップデートがなにが原因わからないが Youtube はじめ、どのサイトでも flash がまともに動かなくなったので困り果て、しかたがないので Opera 11 を入れることにした。

これまでも何度か試してみたが Opera 11 ではフォントが汚くて使うには耐えられなかった。特に Google のページのフォントがどう設定してみても汚いフォントでしか表示されない。おそらく Opera 10.50 以降、Qt3 から Gtk に変更されたのがうまくいってない原因と思われる。(その代わり flash は動くようになっている。)

ところが、Opera 11.11 になってようやくフォントが何とか設定できるようになった。Google も VL Pゴシックでちゃんと表示される。
ただ、Yahoo!JRAアンチエイリアスが効かず汚いフォントままだった。原因を探ると、CSS で MS フォントを指定しているのが原因だった。確かに昔 AA を見るため MS フォントを入れてたが、今は MS フォントは使っていないので、.font フォルダから削除すると、ちゃんと VL Pゴシックで表示され、アンチエイリアスも効くようになった。

qmail の SMTP-AUTH 対応

うちで契約しているプロバイダが SMTP を遮断していたので、自宅鯖のメールサーバから送るメールは smptroutes ですべてプロバイダのMTAを経由して送るようにしていた。
ところがプロバイダのメールサーバが SMTP-Auth 必須になったため、自宅鯖からメール送信できなくなった。

調べてみると、qmail にパッチを当てて SMTP-Auth 対応にした qmail-remote で送信する必要があるとのこと。
下記手順でパッチを当てリビルドした qmail-remote をインストールした。

$ apt-get install qmail-src
$ build-qmail

ソースを展開したところで、別のターミナルを開く。
ソースにパッチを適用する。

$ cd; mkdir work; cd work
$ wget http://tomclegg.net/qmail/qmail-smtpd-auth-0.31.tar.gz
$ wget http://tomclegg.net/qmail/qmail-smtpd-auth-close3.patch
$ wget http://tomclegg.net/qmail/qmail-remote-auth.patch
$ tar xzf ../archives/qmail-smtpd-auth-0.31.tar.gz
$ cd /tmp/qmail/qmail-1.03/
$ cp -i ~/work/qmail-smtpd-auth-0.31/base64.? .
$ patch < ~/work/qmail-smtpd-auth-0.31/auth.patch
$ patch < ~/work/qmail-smtpd-auth-close3.patch
$ patch < ~/work/qmail-remote-auth.patch

元のターミナルに戻って、コンパイル実行。
debパッケージができるので、インストールする。

ファイル /var/qmail/control/smtproutes が無ければ新規に作成し、下記の二行を追加する。
パスワードを直書きするので、ファイルのパーミッションには注意すること。

#【プロバイダMTAホスト名】:【ポート】 【ユーザ名】 【パスワード】

smtp.example.jp
587 myuser secretpass

さるさる日記 - 2010/11/08 (月) qmail with remote SMTP-Auth patch

うちも Debian だが、上記の手順通りやると、「~/work/qmail-smtpd-auth-0.31/auth.patch」でエラーになってしまったので、以下の様に直しコンパイルした。

Makefile

open.a sig.a case.a env.a stralloc.a alloc.a strerr.a substdio.a error.a str.a \
fs.a auto_qmail.o base64.o socket.lib
./load qmail-smtpd qregex.o rcpthosts.o commands.o timeoutread.o \
timeoutwrite.o ip.o ipme.o ipalloc.o control.o constmap.o \
received.o date822fmt.o now.o qmail.o cdb.a fd.a wait.a \
datetime.a getln.a open.a sig.a case.a env.a stralloc.a \
alloc.a strerr.a substdio.a error.a str.a fs.a auto_qmail.o base64.o `cat \
socket.lib`

コンパイル→インストールし、動作確認をしてみたがうまく行かない。以下のようなエラーメールが返ってくる。

Hi. This is the qmail-send program at test.com.
I'm afraid I wasn't able to deliver your message to the following addresses.
This is a permanent error; I've given up. Sorry it didn't work out.

:
Connected to 123.123.123.123 but sender was rejected.
Remote host said: 530 5.7.0 Authentication required

      • Below this line is a copy of the message.

   :

パケットキャプチャし、メール送信時のやりとりを見ると、どうも SMTP-Auth 判定のところがうまく行ってないようだった。
パッチ当てしたソースコードを見ると、うちのプロバイダから返ってくる AUTHメカニズムの文字列が想定していないものだったのが原因だった。
以下の様に qmail-smtp.c を直して、再度コンパイルしてインストールすると、無事に送信できるようなった。

qmail-smtp.c

while*1;

ちなみに、自宅鯖のメールサーバが SMTP-Auth対応の必要がなければ、qmail-remote のみの置き換えでOK。

*1:i += str_chr(smtptext.s+i,'\n') + 1) && (i+14 < smtptext.len) && str_diffn(smtptext.s+i+4,"AUTH LOGIN\n",11) && str_diffn(smtptext.s+i+4,"AUTH LOGIN ",11) && str_diffn(smtptext.s+i+4,"AUTH PLAIN LOGIN\n",17) && str_diffn(smtptext.s+i+4,"AUTH PLAIN LOGIN ",17) && str_diffn(smtptext.s+i+4,"AUTH CRAM-MD5 PLAIN LOGIN ",17) && str_diffn(smtptext.s+i+4,"AUTH=LOGIN\n",11) && str_diffn(smtptext.s+i+4,"AUTH=LOGIN ",11

第2次大戦の戦没者

先週、実家に帰った際に、墓参りをした。実家の方では、村のはずれにその村内の家専用の共同墓地がある。

ほとんどは、普通の四角い墓石なのだが、他に先の尖った墓石がいくつかある。これは、戦争に出兵して戦死した人の墓石で、私の大叔父にあたるような人の墓石もあった。

いくつか墓をみると、出兵した日や戦死した際の階級・場所などが書いてあった。
終戦の数日前になくなっている人もいた。

村の戸数は30戸そこそこなのだが、その先の尖った墓石は10数個ある。無くなった年齢はほとんどが20代で、こんな片田舎の小さな村から、10数人の戦死者が出たということをよく考えると、ぞっとした。
自分の子供時代とは、子供の人数は違うだろうけど、おそらくその年代の男性の半分近くは亡くなったんじゃないだろうか?

ある意味、初めて第二次大戦の悲惨さを肌身に感じたように思う。

幼児虐待の厳罰化

相次ぐ児童虐待の防止策を国に求め川崎市と神戸市の女性が別々に始めた署名活動への賛同者が合わせて10万人を超えたことが11日、分かった。署名のきっかけの一つになった大阪市の松本聖香さん=当時(9)=が虐待され死亡した事件以降、全国ですでに20人を超える子供の命が失われた。2人は新たな虐待防止策が一刻も早く確立されることを願い、歩調を合わせることを確認。集めた署名を9月の次期通常国会にそろって提出する。

イザ! - 虐待死を防げ! 厳罰化求め署名10万人、国会へ

最近、虐待により子供が殺されたり、大怪我をする事件が非常に多い。特に、大阪市で 3 歳と 1 歳の姉弟が置き去りにされて死亡した事件や、奈良でロフトに閉じ込められて衰弱しした事件などは、同じ位の子供を持つ身としては、ニュースを読んで非常に心が痛んだ。

ただ、虐待を厳罰化したところで、本当に虐待が減るのかどうかは疑問に感じる。

厳罰化する意味としては、犯罪を犯すことへの抑止力を持たせるということが主目的だと思うが、虐待の場合、虐待している本人は、しつけだと思っているのがエスカレートする場合と、ネグレクトの場合がほとんどだと思われる。
この場合、厳罰化したところで、本人には犯罪を犯しているという意識がないか、そこまで考える余裕がない状態だと思われるため、厳罰化が虐待防止の有効策となることは、ほとんど期待できないのと思うのである。

それよりも、そういう状況になる前に、親や子供をサポートする仕組みなどを作ることの方が重要であると思われる。
具体的にどういう手を打てばいいのかということや、子供の数だけ家庭の状況が様々あり、全てをサポートして虐待を完全になくすことは、現実的には難しいと思うが、厳罰化よりも有効なのではないかと思う。

そして、今、自分にできることは、自分の子供を同じような目に遭わせないようにすることだと思う。

今年の秋刀魚

久しぶりの日記。


今日の晩ご飯は秋刀魚を焼いて食べたけど、あまりおいしくなかった。
秋になってから何度か食べたけど、今年の秋刀魚は全体的に美味しくない気がする。
去年や一昨年はもっとおいしかった気がするんだが・・・

今年は冷夏だったからか、エルニーニョ現象のためなのかわからないが、秋刀魚の育ちが悪いのかもしれない。今年の夏は涼しくて良いなと思ってたけど、こんなところに影響があるんだなぁ。そういえば、地元の黒豆も今年は粒が小さくて、おいしくないと父が言っていたな。

Ruby から Subversion を利用 on Windows (その2)

昨日の記事の通りにすることでライブラリを読み込めるようになったので、今日はサーバへの接続をやってみる。

以下のようにすることで、ログを取得することができる。

require 'svn/client'

repos_uri = "http://svn-server/repos/my-proj"
user = "root"
pass = "root-passwd"

ctx = Svn::Client::Context.new
ctx.add_simple_prompt_provider(0) do |cred, realm, username, may_save|
  cred.username = user
  cred.password = pass
end
ctx.log(repos_uri, 1, "HEAD", 3, true, nil) {|changed_path, rev, auther, date, message|
  puts [changed_path, rev, auther, date, message].join("\t")
}

上記ではリビジョン1 からHEADまでのログのうち、最新から最大3件を表示するサンプルだ。
changed_path の実態は Hash となっており、キーがコミットしたファイルのパス、バリューが変更前後のパスなどの情報を保持するクラスとなっている。

なお、上記でSSLを利用したサーバへ接続しようとするとエラーが発生する。

Svn::Error::RaDavRequestFailed: C:\Projects\subversion-1.5.4\subversion\libsvn_ra_neon\util.c:592 OPTIONS of 'https://svn-server/repos/my-proj': Server certificate verification failed: issuer is not trusted (https://svn-server/)

SSLの認証情報が足りないためエラーとなる。
今回は Windows なので以下のコードを追加することで上記のエラーは発生しなくなる。

ctx.add_windows_ssl_server_trust_provider

ただ上記だけではまだ足りないようで、以下のエラーが発生する。

Svn::Error::RaNotAuthorized: C:\Projects\subversion-1.5.4\subversion\libsvn_ra_neon\util.c:592 OPTIONS of 'https://svn-server/repos/my-proj': authorization failed (https://svn-server)

これはユーザ名・パスワードの情報が足りていないためエラーとなっている。
以下のコードを追加することでエラーを解消できる。

ctx.add_ssl_client_cert_prompt_provider(0) do |cred, realm, username, may_save|
  cred.username = user
  cred.password = pass
end

上記のコードを追加したコードは以下のようになる。

require 'svn/client'

repos_uri = "https://svn-server/repos/my-proj"
user = "root"
pass = "root-pass"

ctx = Svn::Client::Context.new

ctx.add_simple_prompt_provider(0) do |cred, realm, username, may_save|
  cred.username = user
  cred.password = pass
end

ctx.add_windows_ssl_server_trust_provider
ctx.add_ssl_client_cert_prompt_provider(0) do |cred, realm, username, may_save|
  cred.username = user
  cred.password = pass
end

ctx.log(repos_uri, 1, "HEAD", 3, true, nil) do |changed_path, rev, auther, date, message|
  puts [changed_path, rev, auther, date, message].join("\t")
end

Ruby から Subversion を利用 on Windows

Ruby から Subversion を操作できるものが無いか探したところ以下のページを発見。

というわけで、ruby(ruby 1.8.6 i386-mswin32)でSubversionを操作できるライブラリがないかと調べてみるとドキュメント & ファイル: Windows Apache 2.2.xsvn-win32-1.5.4_rb.zipがありました。 解凍したスクリプトとext配下のdllをC:\Ruby\lib\ruby\1.8\svnにコピーして使っています。

ゴリッとメモ - windowsでrubyを使ってSubversionを操作する

というわけで、早速ダウンロードしてインストールしてみたが動かない。

上記のページでは簡単に「スクリプトとext配下のdllをコピー」と書いてあるが、色々ためして以下のように配置するのが正しいようだと分かってきた。(常識かもしれんが・・・)

   %RUBY_ROOT%
      +-- bin
      +-- doc
      +-- include
      +-- lib
      |    +-- ruby
      |         +-- 1.8
      |         +-- site_ruby
      |              +--1.8
      |                  +-- i386-msvcrt
      |                  |     +-- svn
      |                  |          +-- ext ← ここに dll を配置
      |                  +-- svn            ← ここにスクリプトを配置
      +-- man
      +-- share

で、上記のように配置して

require 'svn/clinet'

とやると、エラーが発生する。

序数 XXXX がダイナミックライブラリ LIBEAY32.dll から見つかりませんでした。

「XXXX」は数字が入っている。ググると openssl のライブラリを入れろというページが見つかるが、bin 配下にすでにある。
どうやら、svn-win32-1.5.4_rb.zip と対応した dll じゃないとダメなようなので、再度ここ (tigris.org) から、svn の本体である svn-win32-1.5.4.zip をダウンロードし、以下の3つの dll を bin 配下にコピーすればやっとエラーが出なくなった。

  • libeay32.dll
  • ssleay32.dll
  • libsasl.dll

続きは明日。