how to use nadoka with ssh port forwarding

Posted by okkez Fri, 03 Jul 2009 05:42:00 GMT

nadoka さんを設定してみたのでメモ。

インストールは 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 , , | コメントはありません |

Rabbit のテーマを作る方法

Posted by okkez Thu, 25 Jun 2009 08:08:00 GMT

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 , | 2 comments |

emacs で起動時のエラー処理がわからない

Posted by okkez Sat, 06 Jun 2009 12:11:00 GMT

auto-install を使っているのだけど、最初の方に読み込んでいるせいか emacs 起動時にネットワークに つながっていないとその後の処理がうまくいかなくて非常に使いづらい状態で起動してしまう。

なんとかならないものだろうか。

auto-install を最後に読み込むだけでいいのかなぁ。。。

Posted in | 1 comment |

PayPal のアカウントを作ってみた

Posted by okkez Thu, 28 May 2009 00:10:00 GMT

RubyKaigi2009 のチケットを買うのに必要なので PayPal のアカウントを作ってみた。

誰かのブログでクレジットカードの認証に一ヶ月かかるって書いてあったけど 思いっきりガセでした。2,3 日後に web 明細を見たらいいよって書いてあった。 今日、手続きしたらギリギリで6/1に間に合う可能性はあるはず。

そもそも、あの手続きはクレジットカードで送金できる限度額を引き上げるものなので チケットを購入するくらいなら必要ないのかもしれない。

rubykaigi.org に詳しく PayPal の使い方 (へのリンク) とか書いてあると親切なんだけどなぁ。

追記

その後の情報でチケット購入には PayPal アカウントは必要ないということがわかりました。 ちなみに自分が買うチケットは他の人の分です。

Posted in , | コメントはありません |

Iceweasel (Firefox) の sqlite3 なファイルを vacuum して reindex するワンライナー

Posted by okkez Tue, 12 May 2009 02:05:00 GMT
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;
done

Posted in | 2 comments |

vlad 使ってみた

Posted by okkez Sun, 03 May 2009 04:04:00 GMT

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 | コメントはありません |

friendfeed を使ってみている

Posted by okkez Fri, 01 May 2009 01:55:00 GMT

かなり前に登録した friendfeed を試しに使ってみている。

http://friendfeed.com/okkez

どんなもんなんだろう。

Posted in | コメントはありません |

Let's note + Linux Kernel 2.6.29

Posted by okkez Mon, 30 Mar 2009 15:28:00 GMT

Kernel を上げてから、ハイバネートとかできなくて不便だなぁと思って最新のドライバを入れようと思って上記サイトをチェックしたら、2.6.28 から Kernel のソースコードに入ったと書いてあった。

まあ、試してみたらいけたのでこれでいいのだと思う。

$ sudo modprobe panasonic-laptop

できるようになったのは以下。

  • 音量調整
  • ミュートの切り替え
  • サスペンド
  • ハイバネート

できないのは以下。

  • 明るさ調整

いい時代になったもんです。

Posted in , | コメントはありません |

update backend of doc.okkez.net (webrick -> mongrel)

Posted by okkez Sun, 15 Mar 2009 07:32:00 GMT

doc.okkez.net のバックエンドを更新しました。 今回の更新内容は以下のとおり。

  • 以前、znz さんが Rack 対応にしてくれたのでそれを使用して Rack 対応にしてみました。
  • AP サーバは Mongrel 一個
  • 静的なファイルは nginx から返すようにしたつもり。(といっても CSS くらいしか無いですが。。。)

速くなってるといいんですが、遅いようなら thin cluster か mongrel cluster にしてみる予定。

Posted in , | コメントはありません |

VMWare Server2 で作成済みの VM をコピーする方法

Posted by okkez Fri, 13 Mar 2009 09:26:00 GMT

インストールや入手方法については省きます。

既に VM が一つできているものとします。

  1. VM のあるディレクトリをまるごとコピーします(時間がかかります)
  2. VM の管理ツールで「Add Virtual Machine to Inventory」 を選択する
  3. 追加した VM の名前を変更します
  4. 追加した VM のネットワークデバイスを削除します (Mac Address の重複解消)
  5. 追加した VM を起動してメッセージが表示されたら 「I copied it.」 を選択します (UUID の重複解消)
  6. 追加した VM のネットワークデバイスを追加します

これで、元のものと同じ構成の VM の出来上がりです。 うまくいかない場合は 4,5 あたりを何度か試してみるとうまくいくことがあります。

Posted in | コメントはありません |