ことの発端は
・とある iso イメージのチェックサムが sha512 のものしか書かれてない
・sha512 に対応しているコマンドがない
(md5deep は hash, md5, sha1, sha256, tiger, whirlpool 、openssl は dgst, md5, md4, md2, sha1, mdc2, ripemd160)
NetBSD の digest が MacPorts にあればそれで済むのだけど、無い。
後で分かったけど、 gpg --print-md sha512 [filename] でできるなこれ・・・
・ruby でちょいと書けばよさそう
ちょちょいとぐぐって
Digest::SHA512 - Rubyリファレンスマニュアル
と
Digest::Base - Rubyリファレンスマニュアル
を参考にした後、ひとまず目的は達成。
ふと 自分でインストールした Ruby と OS付属のとで time をとってみたところ、どうにも自分で入れたのが遅い。以下の通り。
順に OS付属、MacPorts、自分で入れたもの
・バージョン
% /usr/bin/ruby --version
ruby 1.8.7 (2008-08-11 patchlevel 72) [universal-darwin10.0]
% /opt/local/bin/ruby --version
ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-darwin10]
% ~/local/bin/ruby --version
ruby 1.8.7 (2009-12-24 patchlevel 248) [x86_64-darwin10.2.0]
・バイナリ具合を file で確認
% file /usr/bin/ruby
/usr/bin/ruby: Mach-O universal binary with 3 architectures
/usr/bin/ruby (for architecture x86_64): Mach-O 64-bit executable x86_64
/usr/bin/ruby (for architecture i386): Mach-O executable i386
/usr/bin/ruby (for architecture ppc7400): Mach-O executable ppc
% file /opt/local/bin/ruby
/opt/local/bin/ruby: Mach-O 64-bit executable x86_64
% file ~/local/bin/ruby
/Users/katsuji/local/bin/ruby: Mach-O 64-bit executable x86_64
・500M のファイルを用意して、sha512 チェックサムをとってみたときの time 結果
1回目
% time /usr/bin/ruby =sha512.rb ~/testfile >/dev/null
/usr/bin/ruby =sha512.rb ~/testfile > /dev/null 4.85s user 0.45s system 99% cpu 5.297 total
% time /opt/local/bin/ruby =sha512.rb ~/testfile >/dev/null
/opt/local/bin/ruby =sha512.rb ~/testfile > /dev/null 4.75s user 0.43s system 99% cpu 5.185 total
% time ~/local/bin/ruby =sha512.rb ~/testfile >/dev/null
~/local/bin/ruby =sha512.rb ~/testfile > /dev/null 9.78s user 0.52s system 96% cpu 10.717 total
2回目
% time /usr/bin/ruby =sha512.rb ~/testfile >/dev/null
/usr/bin/ruby =sha512.rb ~/testfile > /dev/null 4.84s user 0.44s system 99% cpu 5.287 total
% time /opt/local/bin/ruby =sha512.rb ~/testfile >/dev/null
/opt/local/bin/ruby =sha512.rb ~/testfile > /dev/null 4.75s user 0.44s system 99% cpu 5.205 total
% time ~/local/bin/ruby =sha512.rb ~/testfile >/dev/null
~/local/bin/ruby =sha512.rb ~/testfile > /dev/null 9.79s user 0.52s system 96% cpu 10.637 total
んー、倍くらい遅い。。。1.8.7-p174 も手で入れてみて計ってみようか・・・。
1.8.7-p174 、やっぱり遅い。
% ~/local/ruby18-p174/bin/ruby --version
ruby 1.8.7 (2009-06-12 patchlevel 174) [x86_64-darwin10.2.0]
% time ~/local/ruby18-p174/bin/ruby =sha512.rb ~/testfile > /dev/null
~/local/ruby18-p174/bin/ruby =sha512.rb ~/testfile > /dev/null 9.66s user 0.45s system 99% cpu 10.116 total
% time ~/local/ruby18-p174/bin/ruby =sha512.rb ~/testfile > /dev/null
~/local/ruby18-p174/bin/ruby =sha512.rb ~/testfile > /dev/null 9.67s user 0.46s system 99% cpu 10.211 total
ということは MacPorts のパッチ当てるとよい?
1.8.7-p174 を MacPorts のパッチあてて入れたのでリトライ。相変わらず遅い。
% time ~/local/ruby18-p174-patched/bin/ruby =sha512.rb ~/testfile > /dev/null
~/local/ruby18-p174-patched/bin/ruby =sha512.rb ~/testfile > /dev/null 9.71s user 0.44s system 99% cpu 10.183 total
% time ~/local/ruby18-p174-patched/bin/ruby =sha512.rb ~/testfile > /dev/null
~/local/ruby18-p174-patched/bin/ruby =sha512.rb ~/testfile > /dev/null 9.71s user 0.44s system 99% cpu 10.167 total
configure のオプション等がよろしくないのか?
見直しし判明。最適化だった模様。
前述の 1.8.7-p174 + MacPorts のパッチに加え、 CFLAGS に -O2 を追加したバイナリの場合↓
% time ~/local/ruby18-p174-patched/bin/ruby =sha512.rb ~/testfile > /dev/null
~/local/ruby18-p174-patched/bin/ruby =sha512.rb ~/testfile > /dev/null 4.72s user 0.44s system 99% cpu 5.172 total
% time ~/local/ruby18-p174-patched/bin/ruby =sha512.rb ~/testfile > /dev/null
~/local/ruby18-p174-patched/bin/ruby =sha512.rb ~/testfile > /dev/null 4.73s user 0.44s system 98% cpu 5.223 total
追記4:
というわけで 1.8.7-p248 を入れ直して OS付属の、MacPortsのとともに追試
入れ直しついでに、-O2 でなくてアグレッシブに -O3 にした。
MacPorts でのパッチは p174 のものがそのままでは p248 で使えないだろうと思ったので当ててない。
1回目
% time /usr/bin/ruby =sha512.rb ~/testfile >/dev/null
/usr/bin/ruby =sha512.rb ~/testfile > /dev/null 4.82s user 0.45s system 99% cpu 5.290 total
% time /opt/local/bin/ruby =sha512.rb ~/testfile >/dev/null
/opt/local/bin/ruby =sha512.rb ~/testfile > /dev/null 4.78s user 0.44s system 99% cpu 5.254 total
% time ~/local/bin/ruby =sha512.rb ~/testfile >/dev/null
~/local/bin/ruby =sha512.rb ~/testfile > /dev/null 4.69s user 0.44s system 99% cpu 5.139 total
2回目
% time /usr/bin/ruby =sha512.rb ~/testfile >/dev/null
/usr/bin/ruby =sha512.rb ~/testfile > /dev/null 4.82s user 0.44s system 99% cpu 5.269 total
% time /opt/local/bin/ruby =sha512.rb ~/testfile >/dev/null
/opt/local/bin/ruby =sha512.rb ~/testfile > /dev/null 4.78s user 0.44s system 99% cpu 5.238 total
% time ~/local/bin/ruby =sha512.rb ~/testfile >/dev/null
~/local/bin/ruby =sha512.rb ~/testfile > /dev/null 4.69s user 0.45s system 98% cpu 5.194 total
よい。
ちなみに OS付属のは -Os, MacPorts は -O2 だった
% /usr/bin/ruby -r rbconfig -e "p Config::CONFIG['configure_args']"
" '--prefix=/usr' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--disable-dependency-tracking' '--enable-pthread' '--enable-shared' '--prefix=/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr' '--with-sitedir=/Library/Ruby/Site' 'ac_cv_func_getcontext=no' 'ac_cv_func_setcontext=no' 'CFLAGS=-arch i386 -arch x86_64 -g -Os -pipe -fno-common -DENABLE_DTRACE' 'LDFLAGS=-arch i386 -arch x86_64 '"
% /opt/local/bin/ruby -r rbconfig -e "p Config::CONFIG['configure_args']"
" '--prefix=/opt/local' '--enable-shared' '--mandir=/opt/local/share/man' '--enable-pthread' '--without-tk' '--with-vendordir=/opt/local/lib/ruby/vendor_ruby' 'CC=/usr/bin/gcc-4.2' 'CFLAGS=-O2 -arch x86_64' 'LDFLAGS=-L/opt/local/lib' 'CPPFLAGS=-I/opt/local/include'"
2009年12月31日木曜日
2009年12月30日水曜日
2009年12月28日月曜日
年末
帰省しない。
今年は、
・2008年末からの帰省
・GWに帰省(結婚式)
・秋に帰省(結婚式)
してたということもあり。
2005年(2004年の年末)て帰ってたっけなー。2006年以降は帰ってた。
今年は、
・2008年末からの帰省
・GWに帰省(結婚式)
・秋に帰省(結婚式)
してたということもあり。
2005年(2004年の年末)て帰ってたっけなー。2006年以降は帰ってた。
入門 Objective-C 2.0
最近、入門 Objective-C 2.0
をちょいちょい読んでみてる。
前から興味はあったのだけど、iPhone アプリでもなんか作って遊んでみるかなーと思ったのがおおきい。
書籍自体はちょっと前に買っていて、しばらく寝かせていた。。
iPhone やら Mac OS X のプログラミングはさっぱりなので
・まず Objective-C をつかむ
・Cocoa の流儀をつかむ
・iPhone アプリの作り方をつかむ(Cocoa Touch ?)
という具合?うーむ険しい。
多少読み進めてみたところ、Java や C++ バリバリやってたひとはこの入門本は物足りないかも。
入門終えたらこれかな・・・
詳解 Objective-C 2.0
本業でないので、隙間時間で続けたいところ。
前から興味はあったのだけど、iPhone アプリでもなんか作って遊んでみるかなーと思ったのがおおきい。
書籍自体はちょっと前に買っていて、しばらく寝かせていた。。
iPhone やら Mac OS X のプログラミングはさっぱりなので
・まず Objective-C をつかむ
・Cocoa の流儀をつかむ
・iPhone アプリの作り方をつかむ(Cocoa Touch ?)
という具合?うーむ険しい。
多少読み進めてみたところ、Java や C++ バリバリやってたひとはこの入門本は物足りないかも。
入門終えたらこれかな・・・
詳解 Objective-C 2.0
本業でないので、隙間時間で続けたいところ。
2009年12月27日日曜日
あいふぉーん アプリ
ひさしぶりに無料のを漁ってみた。
結果、以下をげっと。
(iTunes Store が起動するよ)
・基本六法 2010年版
・TOKYO FM
・ボキャキン(英単語"ゲーム"。"学習用"は有料、というパターン)
結果、以下をげっと。
(iTunes Store が起動するよ)
・基本六法 2010年版
・TOKYO FM
・ボキャキン(英単語"ゲーム"。"学習用"は有料、というパターン)
2009年12月19日土曜日
Twitter 障害のアレ
(追記: techcrunch に手口が載ってる -> イランによる(?)Twitter攻撃の手口はこうだった )
Twitterブログ: 昨日のDNS障害についての追加情報
で、「DNS設定がハイジャックされました。」ということらしい。
発生時、Tweetie の更新が止まってたのでなんだろなーと思ってて以下を実行してみた
(けどスクリーンショットなどとってない、、)
・Twitter 専用クライアントでなくて ふつーのブラウザで閲覧
-> 遅かったのか、アラビア語や英語の「クラックしたぜ!」なのはみれなかった。ただタイムアウト。
・A RR ひいてみると NTT America なアドレスではなかった
(追記:そうそう、Firefox だと WorldIP でも入れておくと常に確認できていいよ。ふつーはこんな具合で NTT America なアドレス。)
復旧してほとぼりがさめたところで、個人的興味から以下調査(というほどでもないか)
NS レコードひけばすぐわかるけども、
最初に書いた追加情報にあるとおり、DNS は Dynect というとこのサーバがやってる。
じゃ dynect てなにやさん?と、試しに www.dynect.net を見る。
http://dyn.com/dynect にリダイレクトされる。
CDN や DNS屋さん。GSLB て初めて見た。global server load balance か。
下のほうの Our Clients をみると、(自分の知っている)有名どころでは Twitter の他、bit.ly や 37signals がある。
というわけで bit.ly と 37signals.com の NS レコードを引いてみる
おー。bit.ly は twitter.com とおなじネームサーバ。
やっぱり BIND かなー、バージョン問い合わせに答えてくれるかな?と思って引いてみたら答えてくれた。
外から動的更新できる設定でした、なんてぇことはないだろうしなぁ。
Twitterブログ: 昨日のDNS障害についての追加情報
で、「DNS設定がハイジャックされました。」ということらしい。
発生時、Tweetie の更新が止まってたのでなんだろなーと思ってて以下を実行してみた
(けどスクリーンショットなどとってない、、)
・Twitter 専用クライアントでなくて ふつーのブラウザで閲覧
-> 遅かったのか、アラビア語や英語の「クラックしたぜ!」なのはみれなかった。ただタイムアウト。
・A RR ひいてみると NTT America なアドレスではなかった
(追記:そうそう、Firefox だと WorldIP でも入れておくと常に確認できていいよ。ふつーはこんな具合で NTT America なアドレス。)
復旧してほとぼりがさめたところで、個人的興味から以下調査(というほどでもないか)
NS レコードひけばすぐわかるけども、
最初に書いた追加情報にあるとおり、DNS は Dynect というとこのサーバがやってる。
% dig twitter.com ns +short
ns1.p26.dynect.net.
ns2.p26.dynect.net.
ns4.p26.dynect.net.
ns3.p26.dynect.net.
じゃ dynect てなにやさん?と、試しに www.dynect.net を見る。
http://dyn.com/dynect にリダイレクトされる。
CDN や DNS屋さん。GSLB て初めて見た。global server load balance か。
下のほうの Our Clients をみると、(自分の知っている)有名どころでは Twitter の他、bit.ly や 37signals がある。
というわけで bit.ly と 37signals.com の NS レコードを引いてみる
% dig 37signals.com ns +short
ns4.p25.dynect.net.
ns1.p25.dynect.net.
ns2.p25.dynect.net.
ns3.p25.dynect.net.
% dig bit.ly ns +short
ns1.p26.dynect.net.
ns4.p26.dynect.net.
ns2.p26.dynect.net.
ns3.p26.dynect.net.
おー。bit.ly は twitter.com とおなじネームサーバ。
やっぱり BIND かなー、バージョン問い合わせに答えてくれるかな?と思って引いてみたら答えてくれた。
% for i in $(jot 4 1); do echo "--- ns${i}.p26.dynect.net"; dig @ns${i}.p26.dynect.net version.bind chaos txt +short ; doneどうハイジャックされたのかわからないけど、もしや bit.ly (の A RR)が書き換えられててもおかしくなかったのかな、と想像。BIND の事情よくわからんし、攻撃手法がわからないとなんとも・・?
--- ns1.p26.dynect.net
"9.6.1-P1"
--- ns2.p26.dynect.net
"9.6.1-P1"
--- ns3.p26.dynect.net
"9.6.1-P1"
--- ns4.p26.dynect.net
"9.6.1-P1"
外から動的更新できる設定でした、なんてぇことはないだろうしなぁ。
登録:
投稿 (Atom)

