zt日記

書いているのは Kazuhiro NISHIYAMA a.k.a. ZnZです。
2001|09|10|11|12|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|
2012|04|05|06|09|

この日記にはツッコミを入れられます。 ツッコミを入れたい日付をクリックすると、フォームが現れます。

xreaでtDiaryを使う方法はxrea.com で tDiary を使う方法インストールメモXREA + tDiary + Namazuをどうぞ。


2008年05月03日(Sat)

scala-ja

帰省の途中に途中下車すれば交通費がかからないということで、Scala勉強会@岡山-1に参加してみた。

Scalaは言語的にはおもしろくて、インタプリタもirb的に使えておもしろそうな感じだった。 クラスライブラリはほとんどがJavaのものをそのまま使うという感じで、今のところはJavaを知らないと使いこなすのは難しそうだと感じた。


2008年05月06日(Tue)

オープン

オープンをみて4音で名前をつけるを思い出した。


2008年05月10日(Sat)

[ruby] 地震情報処理

地震情報 - livedoor 天気情報のRSSから震度3以上の場合のみ抜き出したいという話。

rubyで処理しようと思って、まずRSS::Parserを使ってみたけど、ldWeather:earthquakeがとれずにあきらめ。 RSSを処理しようと思ってRSS::Parserを使おうとすると使えないことが多いのはなぜだろう。 普通のRSSはRSS Readerで読むからRSS::Parserで処理したいと思うことが滅多にないんだけど、そういうRSSなら便利なんだろうか。

結局RSS::ParserはあきらめてREXMLを使ってXPathで処理した。 「5弱」などの強弱がついた場合にどうなるのかわからなかったので、「5+」のようになっても対応できるように1と2の場合をnotで除くようにしてみた。 ldWeather:earthquake要素の存在チェックも入れているのは広告itemを除くため。

#!/usr/bin/ruby
require 'rexml/document'
require 'open-uri'

uri = ARGV.shift || 'http://weather.livedoor.com/forecast/rss/earthquake.xml'
doc = open(uri) {|f| REXML::Document.new(f) }
doc.elements.each("//item[ldWeather:earthquake and not(ldWeather:earthquake/@maximumintensity<3)]") do |e|
  #puts e
  puts e.elements["description/text()"]
  puts e.elements["link/text()"]
  puts Time.parse(e.elements["pubDate/text()"].to_s)
end

2008年05月14日(Wed)

[debian] Debian -- セキュリティ情報 -- DSA-1571-1 openssl

opensslの方のDSAではdowkdというPerlスクリプトでチェックするようになっているが、DSA-1576でopenssh-blacklistというパッケージが増えていて、sshの鍵についてはssh-vulnkeyというコマンドでもチェックできるようになっている。

自分が管理しているサーバは、sarge以前にインストールして生成された鍵を使っているものが多いので、グローバルにおいているサーバへの影響は少なそう。 LAN内においているマシンはetch以降をインストールしたものがいくつかあるので、そちらは思いっきり影響を受けていた。

[debian] sshのユーザ鍵更新

ユーザ鍵の更新のため、うっかり古い鍵を消してしまったら、一部のマシンに入れなくなってしまった。 ほとんどのマシンは複数の鍵をauthorized_keysに登録していたから、別のマシンから入って登録し直しでなんとかなったけど。

入れなくなったマシンは、明日直接コンソールから入って何とかするか、root権限がある他の人に頼むかするしかなさそう。

鍵を更新するときはちゃんと順番を考えてやりましょうという話でした。


2008年05月15日(Thu)

[ruby] Phusion Passenger (a.k.a. mod_rails)を使ってみた

Creative Commonsによるオープンソース・ソフトウェアという嘘を書いているサイトもあるけど、ライセンスはGPL2だった。 Passenger users guideのライセンスをみて勘違いしたのではないかと予想。

インストールもpassenger-install-apache2-moduleを実行したときに「apt-get install apache2-prefork-dev」を実行しろとか具体的にどうすればいいのかが出てきて簡単だった。

設定はとりあえず以下のような感じでRailsMaxPoolSizeはちょっと減らしてRailsPoolIdleTimeは長めにしてみた。

% cat /etc/apache2/conf.d/mod_rails.conf
# vim: set filetype=apache:
LoadModule passenger_module /opt/ruby-1.8.6/lib/ruby/gems/1.8/gems/passenger-1.0.5/ext/apache2/mod_passenger.so
RailsSpawnServer /opt/ruby-1.8.6/lib/ruby/gems/1.8/gems/passenger-1.0.5/bin/passenger-spawn-server
RailsRuby /opt/ruby-1.8.6/bin/ruby-1.8.6

RailsAutoDetect off

RailsMaxPoolSize 10
RailsPoolIdleTime 1200
% cat /etc/apache2/sites-available/hoge.example.jp
# vim:set filetype=apache:
<VirtualHost *>
      ServerAdmin webmaster@localhost
      ServerName hoge.example.jp

      DocumentRoot /home/kazu/rails_apps/hoge/public
      RailsBaseURI /
      <Directory /home/kazu/rails_apps/hoge/public>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
      </Directory>

      ErrorLog /var/log/apache2/hoge.example.jp_error.log

      # Possible values include: debug, info, notice, warn, error, crit,
      # alert, emerg.
      LogLevel warn

      CustomLog /var/log/apache2/hoge.example.jp_access.log combined
</VirtualHost>
%

2008年05月16日(Fri)

[debian] sshd[nnnn]: Public key xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx blacklisted (see ssh-vulnkey(1))

バックアップ用のrsyncがetchで生成した鍵を使っていて、新しいsshdにつなごうとしても拒否されて、サーバ側のログにblacklistedと出ていた。

[debian] open-vm-toolsとネットワークにつながらない問題

lenny(testing)でopen-vm-toolsを入れていると、pcnet32を削除してvmxnetに入れ替えるところでネットワークが切れてしまう。

ログインした後にnm-appletをクリックして有線ネットワークを選べばつながるが、毎回なので面倒で困る。

[debian] open-vm-toolsに対処

#479090 - open-vm-tools: replacing vmxnet/pcnet32 drivers on start/stop - network loses configuration - Debian Bug report logsの4に近い対処としてdebian/rulesのdh_installinitに「-u"start 39 S ."」という引数をつけて「dch -l local」でローカルパッケージを作って、(/etc/rc?.dのシンボリックリンクを消すために)open-vm-toolsを一度purgeして、ローカルパッケージを入れて試してみたところ、networkingでの接続はうまく動くようになったが、その後でNetworkManagerが起動するとupしているのにつながっていない状態になるのは直らなかった。(/etc/default/NetworkManagerを作ってその中でexitするようにして起動しないようにしたり、NetworkManager起動前にifconfigを出力するようにしたりして確認)

[debian] NetworkManagerは何をやっているのか

NetworkManagerはdbus経由でいろいろやっていて、dbus-monitorというコマンドでdbusに流れているメッセージを調べられると言うことがわかったが、「sudo dbus-monitor --system」としてもNetworkManager関連のメッセージは見えなかった。

調べてみるとeavesdropの設定が必要とわかったので、「/etc/dbus-1/system.d/NetworkManager.conf」に以下のように「<allow eavesdrop="true"/>」を追加してroot権限ならdbus-monitorでのぞけるようにした。

       <policy user="root">
               <allow own="org.freedesktop.NetworkManager"/>

               <allow send_destination="org.freedesktop.NetworkManager"/>
               <allow send_interface="org.freedesktop.NetworkManager"/>
               <allow eavesdrop="true"/>
       </policy>

この状態でnm-appletをクリックして「dbus-send --system --type=method_call --print-reply --dest=org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.NetworkManager.setActiveDevice objpath:/org/freedesktop/NetworkManager/Devices/eth0」というコマンドで同じことが出来ることがわかった。

objpathは「dbus-send --system --type=method_call --print-reply --dest=org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.NetworkManager.getDevices」の出力で調べられる。

結局NetworkManagerの起動時にネットワークが切れてしまう原因はまだわかっていない。


2008年05月17日(Sat)

[ruby] 第26回 Ruby勉強会@関西

前田修吾さんと青木峰郎さんがリファレンスマニュアルについての話をするので、都合がつくようなら参加してほしいということだったので、懇親会に参加した。 直接懇親会に行くのは場所がわからないので、勉強会の方も最後の方だけ参加した。

内容についてはログをとっていたyharaさんがMLに出してくれるはず。

追記

yharaさんがいなくなってから話した内容として、redmineの話があって、るりまのチケット管理にるりまWiki #2 - FrontPageを使っているけど、redmineに移動するといいのではないかという話になった。 利点としては、疑問点などをコミッターの人などにもassign出来ていいのではないかという話などがあった。


2008年05月26日(Mon)

[mail] Qエンコード

redmineからのメールのSubjectがUTF-8のQエンコードになっていて、Wanderlustで文字化けしていたので、原因を調べてみた。

  • Thunderbirdなどではデコード出来る。
  • RFC 2047では(Upper case should be used for hexadecimal digits "A" through "F".)となっているのに、小文字でエンコードされている。
  • Wanderlustはhttp://lists.airs.net/wl/archive/200805/msg00010.htmlのパッチをFLIMにあてて入れ直せばデコードできるようになる。
  • そんなエンコードをする方が悪いということで原因を探してみるとaction_mailer/quoting.rbでエンコードしていたので、バグ報告した。

2008年05月27日(Tue)

[linux] bootchart

bootchartについて調べてみた。仕組みとしては以下のような感じだった。

  1. /sbin/bootchartd でログをとる。
    1. カーネルパラメータにinit=/sbin/bootchartdと指定して/sbin/initとの間に挟んで起動する。
    2. README.logger に書いてあるように適当なディレクトリに bootchartd.conf をコピーしてBOOTLOG_DESTの設定をして、「/sbin/bootchart start; sleep 5; /sbin/bootchartd stop」や「/sbin/bootchart start evolution」のように起動する。
  2. ログをアーカイブした bootchart.tgz から画像へ変換する。
    1. Debianならbootchart-viewパッケージに入っている/usr/bin/bootchartコマンドで変換する。
    2. bootchartのサイトのフォームにアップロードして変換してもらう。

/usr/bin/bootchartはjavaを使っていて、etchのgijの「/usr/lib/jvm/java-gcj/jre/bin/java」だとログによっては「java.lang.OutOfMemoryError」で変換できなかったので、「sudo /usr/sbin/update-alternatives --config java」でsun-java5-jreの「/usr/lib/jvm/java-1.5.0-sun/jre/bin/java」に変更したら、簡単に変換できた。

% bootchart bootchart.tgz
Parsing bootchart.tgz
GC Warning: Repeated allocation of very large block (appr. size 75501568):
        May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 113250304):
        May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 150999040):
        May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 18878464):
        May lead to memory leak and poor performance.
GC Warning: Out of Memory!  Returning NIL!
Exception in thread "main" java.lang.OutOfMemoryError
   <<No stacktrace available>>

2008年05月28日(Wed)

[debian] usbrhドライバをusbhidの前にロード

USBRH ドライバではなく USB HID ドライバがロードされてしまっているの対策として早めにusbrhをロードするようにした。

  • /etc/modulesに書くのでは遅すぎる。
  • usbhidはudev経由でロードされるようなので、udevより前に読み込まないとだめ。
  • 早めにロードするためにはinitrdの中に入れる必要がある。
  • /lib/modules/$(uname -r)/misc/usbrh.koにおいてdepmod -aしただけだと入らない。
  • initrdに追加したいモジュールは/etc/initramfs-tools/modulesに書けば良い。(/usr/sbin/update-initramfs経由で/usr/sbin/mkinitramfsを見て確認)
  • /usr/share/initramfs-tools/hook-functionsのforce_loadでinitrdの中のconf/modulesに書かれて、initrdの中のscripts/functionsのload_modulesで「"Loading essential drivers..."」のタイミングで読み込まれる。

copyright © 2001-2013 ZnZ
Key fingerprint = 6E14 2C9C DBD7 874D 8B3C CAA8 9B58 5538 ED7E 1B73