how to use nadoka with ssh port forwarding
nadoka さんを設定してみたのでメモ。
- Nadoka: IRC Client Server Program - nadokaさんとあそぼう
- %!zt! diary(2009-04-16)
- RubyForge: nadoka: SCM Repository
インストールは Rubyforge からソースコードをチェックアウトすればよい。(atdot.net のは SSL 対応が入ってないらしい)
設定はささださんとこのを見ながら適当に。 うちでは basicconfig を作って接続先ごとに server の設定だけ異なるサブクラスを作って継承させた設定ファイルを用意した。 接続先は社内 IRC と Ruby と Debian だけ。
で、うちでは自宅サーバに nadoka さんを常駐させているが port を開けていないので SSH port forwarding を利用して nadoka さんに接続することにした。
nadoka さんがいくつかのポートで待っているので以下のようにしてみた。
ssh -N -f -L 6661:localhost:6661 foo@example.com
ssh -N -f -L 6662:localhost:6662 foo@example.com
ssh -N -f -L 6663:localhost:6663 foo@example.com一応、 nadoka さん起動 -> ssh 起動という順番で操作する必要があるっぽい。
いくつか気になった点。
- /nadoka reload しても basicconfig の変更は反映されない?
- pid ファイルを指定出来ないので終了がめんどい
後者については bitclust の standalone.rb を参考に適当にオプション追加してみた。
diff --git a/nadoka.rb b/nadoka.rb
index 2eeca7e..8627ee6 100644
--- a/nadoka.rb
+++ b/nadoka.rb
@@ -31,6 +31,7 @@ $stdout.sync=true
$NDK_Debug = false
rcfile = nil
+pid_file = nil
optparse = OptionParser.new{|opts|
opts.banner = "Usage: ruby #{$0} [options]"
@@ -53,6 +54,11 @@ optparse = OptionParser.new{|opts|
puts 'Enter Nadoka Debug mode'
}
+ opts.on("-p PATH", "--pid-file=PATH",
+ "Write pid of the daemon to the specified file."){|path|
+ pid_file = path
+ }
+
opts.separator ""
opts.separator "Common options:"
@@ -72,12 +78,25 @@ unless rcfile
puts optparse
exit
end
+if pid_file
+ if File.exist?(pid_file)
+ $stderr.puts "There is still #{pid_file}. Is another process running?"
+ exit 1
+ end
+ pid_file = File.expand_path(pid_file)
+ File.open(pid_file, 'w'){|f| f.write(Process.pid) }
+end
begin
GC.start
Nadoka::NDK_Server.new(rcfile).start
rescue Nadoka::NDK_QuitProgram
#
+ begin
+ File.unlink(pid_file) if pid_file
+ rescue Errno::ENOENT
+ # do nothing
+ end
rescue Nadoka::NDK_RestartProgram
retry
rescue Exception => e
@@ -85,6 +104,11 @@ rescue Exception => e
f.puts e
f.puts e.backtrace.join("\n")
}
+ begin
+ File.unlink(pid_file) if pid_file
+ rescue Errno::ENOENT
+ # do nothing
+ end
end
end
追記
friendfeed 経由で knu さんに指摘してもらった。 ssh コネクションは一本でいけるそうだ。
ssh -N -f -L 6661:localhost:6661 \
-L 6662:localhost:6662 \
-L 6663:localhost:6663 foo@example.comこれでコネクション切るときも kill 一回で済むようになった。
Posted in Ruby, 雑記, Debian | コメントはありません |
Rabbit のテーマを作る方法
Rabbit のテーマを作る方法を調べてみた。自分のテーマを試行錯誤して作っている途中なのでツッコミ歓迎。
基本的なことは README.ja にも書いてある。
既に存在しているテーマの色違いのテーマを作るのは簡単で、置き場所に適当な名前でファイルを作成して以下のようにすれば良い。
# include_theme の前にカスタマイズしたい色の設定を記述する
@block_quote_frame_width = 1
@block_quote_fill_color = "#eeeeee" # 引用の色を変える
include_theme("foo")この場合は include_theme しているテーマが他のテーマを include_theme している場合が多いのでそれらを順番に辿っていくと好みの色に設定することができると思う。大抵の場合は default-* を参照してそれっぽいインスタンス変数を探すといいです。
参考になるテーマがあるけど、デザインが違う場合はちょっとだけ難しい。 しかし、まだなんとかなるレベル。
参考にするテーマから該当するブロックを自分のテーマファイルにコピペして編集するのが手っ取り早い。 試行錯誤が必要ですが、何回も繰り返せばなんとか目的のものを作ることができると思う。
フルスクラッチで作る場合というのは実はそんなになくて、ほとんどの場合は参考になるテーマから色々といただいてくればやりたいことはできるはず。
# 色などのカスタマイズ
include_theme("default")
# 以降にその他のカスタマイズ上のような感じでやれば、そこそこ見られるテーマができると思う。
このへん を参照して参考にするテーマを探すと早いかもしれない。
一応、今回作ったテーマ (未完成) 。
@block_quote_frame_width = 1
@block_quote_fill_color = "#eeeeee"
# FIXME
@default_item1_mark_color = "#000000"
@default_item2_mark_color = "#333333"
@default_item3_mark_color = "#666666"
@default_enum_item1_mark_color = "#333333"
@default_enum_item2_mark_color = "#666666"
@default_description_item1_mark_color = "#ff9933"
@default_block_quote_item1_mark_color = "#ff9933"
@description_term_line_color = "#3333aa"
@preformatted_frame_width = 1
@preformatted_fill_color = "#eeeeee"
@table_frame_width = 1
@table_caption_color = "#000000"
@table_head_fill_color = "#dddddd"
@table_fill_color = "#eeeeee"
include_theme("default")
set_foreground("black")
set_background("white")
match(Slide, HeadLine) do |heads|
name = "head-line"
heads.delete_post_draw_proc_by_name(name)
heads.horizontal_centering = false
heads.prop_set("foreground", "white")
x_space = screen_x(2)
y_space = screen_y(1)
heads.padding_top = y_space * 2
heads.padding_bottom = y_space * 2
color = "#3333aa"
heads.each do |head|
pre_y = nil
width = nil
height = nil
head.add_pre_draw_proc(name) do |canvas, x, y, w, h, simulation|
pre_y = y
unless simulation
border_x = x - x_space * 2
border_y = y - y_space * 2
border_width = width + x_space * 4
border_height = height + y_space * 4
canvas.draw_rectangle(true, border_x, border_y,
border_width, border_height, color)
end
[x, y, w, h]
end
head.add_post_draw_proc(name) do |canvas, x, y, w, h, simulation|
width = w
height = y - pre_y
[x, y, w, h]
end
end
endたぶん、これ以上凝ったものを作ろうと思ったらソースを真面目に読まないといけない気がする。
Posted in Ruby, 雑記 | 2 comments |
emacs で起動時のエラー処理がわからない
auto-install を使っているのだけど、最初の方に読み込んでいるせいか emacs 起動時にネットワークに つながっていないとその後の処理がうまくいかなくて非常に使いづらい状態で起動してしまう。
なんとかならないものだろうか。
auto-install を最後に読み込むだけでいいのかなぁ。。。
PayPal のアカウントを作ってみた
RubyKaigi2009 のチケットを買うのに必要なので PayPal のアカウントを作ってみた。
誰かのブログでクレジットカードの認証に一ヶ月かかるって書いてあったけど 思いっきりガセでした。2,3 日後に web 明細を見たらいいよって書いてあった。 今日、手続きしたらギリギリで6/1に間に合う可能性はあるはず。
そもそも、あの手続きはクレジットカードで送金できる限度額を引き上げるものなので チケットを購入するくらいなら必要ないのかもしれない。
rubykaigi.org に詳しく PayPal の使い方 (へのリンク) とか書いてあると親切なんだけどなぁ。
追記
その後の情報でチケット購入には PayPal アカウントは必要ないということがわかりました。 ちなみに自分が買うチケットは他の人の分です。
Posted in Ruby, 雑記 | コメントはありません |
Iceweasel (Firefox) の sqlite3 なファイルを vacuum して reindex するワンライナー
for f in $(ls -1 ~/.mozilla/firefox/*.default/*.sqlite); do sqlite3 $f vacuum; sqlite3 $f reindex;doneいや、書いてみたかっただけです。最近はこれくらいなら何も見なくても書けるようになってきた。
見辛いので複数行に整形。
for f in $(ls -1 ~/.mozilla/firefox/*.default/*.sqlite); do
sqlite3 $f vacuum;
sqlite3 $f reindex;
donePosted in 雑記 | 2 comments |
vlad 使ってみた
Vlad the Deployer を使ってみた。
Rails アプリケーションのデプロイツールを Capistrano から vlad に移行してみたら簡単だったけどメモっておくことにする。 ほとんど vlad のドキュメントに書いてあるのだけど、一応。
インストール
$ sudo gem install vlad
で OK.
セットアップ
Rakefile に以下のように記述する。
begin
require 'vlad'
Vlad.load :app => :thin, :web => :nginx
rescue LoadError
# nothing to do
endまた RAILS_ROOT/config/deploy.rb を用意する。
set :application, "application name"
set :domain, 'example.com'
set :repository, "file:///path/to/repository"
set :deploy_to, "/path/to/#{application}"これだけで完了。
SSH を使う
SSH を使ってリモートデプロイする場合は ~/.ssh/config を編集する必要があるかもしれない。 うちの場合はデフォルトの秘密鍵をデプロイ先のサーバに登録してあるので必要なかった。
パスフレーズを入力するのが面倒な人は ssh-agent とか keychain とか使うといいです。 Debian なら両方共パッケージが用意されているし。
さらにうちの場合は、リポジトリをデプロイ先のサーバに同居させているので ‘file://’ になるわです。 そうでない場合は svn で使えるパスの記述形式は全部通るはずなので、好きな様に書くといいと思います。
デプロイ
以下で OK です。 capistrano の時より簡単かもしれないです。 あと、 vlad:setup で thin の設定ファイルを生成してくれたのは地味に便利だった。
$ rake vlad:setup # 最初の一回だけ
$ rake vlad:update # 毎回 (デプロイ先で必要なファイルを SCM 経由で取得する)
$ rake vlad:migrate # 毎回 (デプロイ先で rake db:migrate する)
$ rake vlad:start # 毎回 (app, web を restart する)
nginx まで再起動しないで欲しい
バカ正直に vlad に web server は nginx ですって教えてあげたら rake vlad:start で nginx まで再起動されて迷惑だった。 いくら nginx が再起動早くても一つのサービスをデプロイするのに複数のサービスを止めたら意味ないので、何もしないようにするにはどうすればいいか調べてみた。
ソースを読んだら :web => nil でいけそうだったけど、エラーが発生して無理だったので 何もしないタスクを作って以下の様に Rakefile を修正した。 特に passenger や thin を使っている人には必要だと思うのだけど、どうなんでしょう。
begin
require 'vlad'
Vlad.load :app => :thin, :web => :nothing
rescue LoadError
# nothing to do
endんで、 vlad/nginx.rb のあるディレクトリに vlad/nothing.rb をコピーして中身を編集したら予想通り nginx の再起動は実行されなくなりました。
Vlad.load のオプションを使えば色々なことが出来そうです。 デフォルトが、結構充実しているのですが、いらんこともしてくれる vlad なのでした。 しかし、そのデフォルトの挙動を簡単に変えられるのであまり困りませんでした。
ただ、デフォルトで何もしないターゲットを読み込むファイルは各オプションにあってもいいのかなぁとか思いました。
追記
やっぱり :web => nil で OK だった。
:web => nil だと vlad:start などが定義されないようだ。 なので、そのときは rake vlad:start_app を実行する必要がある、と。
:web => nil でも vlad:start は定義されて欲しいなぁ。
Posted in Ruby | コメントはありません |
friendfeed を使ってみている
Posted in 雑記 | コメントはありません |
Let's note + Linux Kernel 2.6.29
Kernel を上げてから、ハイバネートとかできなくて不便だなぁと思って最新のドライバを入れようと思って上記サイトをチェックしたら、2.6.28 から Kernel のソースコードに入ったと書いてあった。
まあ、試してみたらいけたのでこれでいいのだと思う。
$ sudo modprobe panasonic-laptop
できるようになったのは以下。
- 音量調整
- ミュートの切り替え
- サスペンド
- ハイバネート
できないのは以下。
- 明るさ調整
いい時代になったもんです。
Posted in 雑記, Debian | コメントはありません |
update backend of doc.okkez.net (webrick -> mongrel)
doc.okkez.net のバックエンドを更新しました。 今回の更新内容は以下のとおり。
- 以前、znz さんが Rack 対応にしてくれたのでそれを使用して Rack 対応にしてみました。
- AP サーバは Mongrel 一個
- 静的なファイルは nginx から返すようにしたつもり。(といっても CSS くらいしか無いですが。。。)
速くなってるといいんですが、遅いようなら thin cluster か mongrel cluster にしてみる予定。
Posted in Ruby, Debian | コメントはありません |
VMWare Server2 で作成済みの VM をコピーする方法
インストールや入手方法については省きます。
既に VM が一つできているものとします。
- VM のあるディレクトリをまるごとコピーします(時間がかかります)
- VM の管理ツールで「Add Virtual Machine to Inventory」 を選択する
- 追加した VM の名前を変更します
- 追加した VM のネットワークデバイスを削除します (Mac Address の重複解消)
- 追加した VM を起動してメッセージが表示されたら 「I copied it.」 を選択します (UUID の重複解消)
- 追加した VM のネットワークデバイスを追加します
これで、元のものと同じ構成の VM の出来上がりです。 うまくいかない場合は 4,5 あたりを何度か試してみるとうまくいくことがあります。
Posted in 雑記 | コメントはありません |