2010年1月31日日曜日

B+木

B+木

とりあえずここに目を通してみる

WakameTech #1 へ行ってきた



WakemeTech #1 へ行ってきた。wakame については多少の予備知識があるのでほとんどちゃんとしたメモをとってなかったり、ブログ検索したら詳しく書いているひとがいたけれど、かいておこう。まとまりは無い。

# スライドは公開されるようなので、WakameTech のつぶやきを待つ。

17:00 ご挨拶/オープニング - 担当:山崎 (@sparklegate)

17:10 IaaS型クラウドのまとめ - 担当:山崎 (@sparklegate)
・EC2 + Wakame => 便利ではある
・現行の欠点
・レスポンス、レイテンシ
・複雑(止めるとデータ無くなる、とか)
・決済方法

代表的なもの
・Amazon EC2 -> 超有名
・Softlayer -> シンプルらしい(Dropbox でつかわれてたりする)

人間が関与しないようにする
・利用者からプログラマブルである -> API をたたけばおk、という具合に
・iDC が自動化、極力人間が関与しない

不思議ワード
・Public/Private cloud

private の夢想
・eucalyptus

オープンソース実装
・eucalyptus
・OpenNebula

ユーカリの功罪(?)
・元々学術向け
・プレ試験環境として使うのが合ってる?

OpenNebula
・グリッドコンピューティング系

ほか
・Enomay -> 住商がやってる(た)?
・Nimbus -> 謎

日本では
・Nifty Cloud
・・VMWare
・・法人向け
・・本格的IaaS
(このあとしばしメモなし)

Wakame
・Master - Agent 型非同期式実行エンジン(だったかな、なんか長かった)
・イベンドドリブン
・マルチスレッド

・Action というワークフローを作成
・シーケンシャルに記述
・複数の Action をパラレルに実行できる

・アプリケーションがスケールすんじゃなくて、インフラがスケール(アウト)するのだよ

・事例
・広告集配信システム
・大手家電のファームウェア配信

17:50 IaaS型クラウドの肝を作る - 担当:登尾 (@tnoborio)
API
・ActiveResource (Rails で使われてる例のやつ)経由
・Sinatra を利用

クライアント <-> DCM <-> HVC
DCM ... DataCenterManager
HVC ... HyperVisorController
だったかな・・・用語のまとめページあればいいな。。
あとなんかあった。

インスタンスの割り当て
・集中型/分散型
・集中型 ... 順に使う
・分散型 ... 位置情報(ネット、電源、場所)からポイント付けで低いものから

今後
・IPアドレスの管理
・権限
・課金

18:20 CloneZillaで増えるハイパーバイザ運用 - 担当:岩野 (@i_tune)
Clonezilla ... NCHCてとこが作ってる
・バックアップ、リストアツール
・ドライブ、パーテーション単位でバックアップ NTFS、ext2,3、LVM他対応
-> あとで軽くしらべたところ、 *BSD 系のファイルシステム対応は全くないっぽい
・イメージファイルで保存できる
・イメージを複数マシンに展開できる

・Kickstart v. Clonezilla
・ともにPXEBootである
・kickstart はブート後インストールだから時間かかるよ
・clonezilla はイメージを展開するだけだから速いよ

セットアップの仕方がよくわからなかった。。少なくとも、CentOS だと標準のパッケージでは足りないくらい。
NCHC のサイトみろってことだな。

18:30 IaaS型クラウド簡易デモンストレーション - 担当:三上 (@saicologic)
デモのときは文字サイズが重要。
ぬるぬると起動してた

18:50 クラウド活用事例:clomoの紹介とデモンストレーション - 担当:i3-systems 秋間様(@akm2000) 宮島様(@miyazima)
・アイキューブドシステム(9Arrows 等)
・clomo と Wakame の組み合わせで利用
・ファームウェア配信のサーバ群で使われてるらしい

19:05 ディスカッション 〜 クロージング
とくにメモとらず


んー、なんだか聞いても聞いてもボンヤリしてるのはなんでなんだろうな・・・。とうとう専門用語についていけなくなったのかなーと思ったけどそんなこたーないな。
ただ単に高度すぎて、自分の理解がついていけないだけなのだろう。

ネタによっては、技術的話のあとにデモ、事例をを聞くよりも、デモ、事例のあとに「こんなんなってるんだよーん」というのを聞いたほうが自分は理解しやすいのかもなぁ・・・。
インフラエンジニアの仕事がうんぬん、という話は長年やってるベテランの意見をきいてみたいよなぁ。(インフラエンジニアの括りがそもそも、、、という話はあるけれど・・・)餅は餅屋だよね。

あと、Wakame を誰かが Python で書き直せば(Wakeme は Ruby で書かれてる)、 Waka.py -> ワカパイ だなー、などとアホなことを考えていたのだった。。

Michael Neumann というひとの HAMMER プレゼン資料

New HAMMER presentation

こんなかんじ、か?
---
特長として、(outstanding てこの場合「優れた」の意か)
・細粒度の自動スナップショット
・マスタ - マルチスレーブのレプリケーション

細粒度の自動スナップショット
・ディスクへフラッシュするたび(30秒毎)に新しいバージョンのファイルシステムを作成
・明示的に伝えない限り、データがなくなるこたーない
・アンドゥで古いバージョンのファイルを復元できる
・ファイルは @@トランザクションID 付きのファイル名でアクセスできる

マスタ - スレーブ レプリケーション
・マスタのファイルシステムは段階的にローカル、リモート(ssh経由で)のレプリケーションを 1つ以上の read-only なスレーブに対して可能
masterhost> hammer pfs-master /www # create master filesystem
masterhost> hammer -b 100k mirror-stream /www slavehost:/www &
slavehost> hammer -b 1m mirror-stream masterhost:/www /www &
・mirror-stream はバックグラウンドで動いて、なんか起きたらすぐに変更部分が転送される

(デモのスライド)
You --[upload]--> Server --[replication in real-time]--> notebookMachine

B+木が図示されてる. 9枚. ひとまず割愛。(すぐにはよくわからん・・)

DragonFly の究極の目標
・Single-System-Image Clustering
・クラスタのマシン群が「ひとつのシステム」に
・一つのプロセス空間
・一つのファイルシステムとして見える

(これはプロジェクト開始時からの目標のはず。過去の Matthew Dillon のインタビュー記事にもあった。個人的には、これができたらクラウド(?) 環境にもいいんじゃね、な気がしてる。できたときにはクラウドが死語になってるかな・・)

一つのファイルシステム(従来の
・Central Networked File System
・SPOF
・スケールしないぜ
                  +---- [Machine]
|
[Central NFS] ----+---- [Machine]
|
+---- [Machine]

一つのファイルシステム(HAMMER の場合
・マスタ - スレーブ でレプリケートされたファイルシステム
・(今の)HAMMER はこれ
・ホントの Single System Image な操作はできない
    +------------+------------+
| | |
Master(r/w) Slave(r/o) Slave(r/o)

一つのファイルシステム(未来のHAMMER の場合
・マルチマスタでレプリケートされたファイルシステム
・スケーラブルかつ耐障害性
・キャッシュの一貫性を管理するシステム (Cache Coherency Management System: CCMS) の実装は容易
・HAMMER は将来これをサポートするために設計された!
                CCMS
+------------+------------+
| | |
Master(r/w) Master(r/w) Master(r/w)

文献
http://kerneltrap.org/HAMMER
http://www.dragonflybsd.org/hammer/
---

Backup Slides は略

B+木について簡単に解説してあるサイト探して見てみたい。

2010年1月30日土曜日

clip したものを python でケシケシ - その後

前回のつづき。

寝ておきて見てみると、clip 数が 330 になってから、減らない・・・。スクリプトを再度実行するも、やはり処理は終わってると思われ、

200 OK
<result code="something went wrong" />

と。 code="done" にならない。ログアウトしてしばし放置したあとログインしてみても、減らない。
残り 330 を刺身タンポポ的にちくちくとブラウザから消してみると消えた。うーん・・・?
(それでも Safari だからか一括削除がきかなかった・・・ )

全削除後 0 というのものなんなので FreeBSD Handbook を clip しておいて、完了。

どうでもいいけど、「エキソンパイ」って python を連想してしまうな・・

clip したものを python でケシケシ

使うフィードリーダーを Google Reader へ変更したので、ついでにソーシャルブックマークも変えようかー、ということで delicious にした。Yahoo! だいすき!

最近利用時間がやや減ってるのもあり、livedoor clip から エクスポートしたのを食わせるのはあとまわし。(そのままではダメなことは確認)
API を叩いて一個ずつ食わせるかもしれないけどあとで調べる。

で、これまで livedoor clip で clip してたのを消してしまいたい。

「マイクリップを編集」からの削除だと、どうも20件ごとぷちぷちとクリックしないといけない・・?
試してみたものの、どうも一括削除がうまく動いてくれない・・・ orz... 一件ごとなら削除できることを確認した。

ムダにあれこれ数千の clip をしていたのもあり、手で一件ずつするのは明らかに刺身たんぽぽ・・・。

なのでてきとーにスクリプトを書いて対応した。(このエントリを書いている時点も実行中

pydoc やら Google 先生に聞きつつ、clip 全消しスクリプトをこしらえた。兎に角消えればよいので、こんな具合。
#!/usr/bin/env python

import httplib, time

auth_string = 'Basic なんとか'

for i in file('target_url.txt'):
i = i.rstrip()
print "===>", i
req_path = '/v1/posts/delete?url=' + i

conn = httplib.HTTPConnection('api.clip.livedoor.com')
conn.putrequest('GET', req_path)
conn.putheader('Authorization', auth_string)
conn.endheaders()

result = conn.getresponse()
print result.status, result.reason

body = result.read()
print body

conn.close()
time.sleep(1.2)

実行中はAPI の解説のとおり次のような出力がでる

===> http://www.example.com/
200 OK
<result code="done" />

===> http://www.example.net/
200 OK
<result code="done" />

消したそばからブラウザでみてみると、キャッシュが効いているからかきえっぷりが確認し辛い。
ログインしなおすとごそっと減っていることがわかる。

・得意としている LL は今のところ特にないので、今回は python にした
・livedoor clip まとめサイトで API を調べる -> これ
・リクエストヘッダの用件を確認、生成しておく
・・追記
import base64 して base64.b64encode(livedoor_id + ':' + apikey) で生成。今回上記作成物では事前に生成したものを直接書いておいた。
・テスト用のスクリプトを書いて、 posts/update あたりで動作を確認
・・httplib というライブラリがあり、こいつが今回使えそうだ -> pydoc httplib
・・API へのアクセスはリクエスト毎に1秒あけないとだめらしい -> sleep したい -> python は sleep() じゃなくて time.sleep() らしい -> 1.2秒くらい寝るか
・てきとうに数件削除してみる
・・URL 書いたファイルを食わせて回す
・・文字列を perl でいう chomp したい -> rstrip がそれらしい
・pydoc コマンドで調べるのと、 documentation のところをみるとよい

2010年1月28日木曜日

DragonFly - hammer version-upgrade

VMware Fusion 上で、DragonFly を / 領域を hammer にして利用。(/boot は ufs)
hammer コマンドをぺちぺち叩いていたらバージョンが確認でき、バージョンアップもできるようなのでいざ実行。
(バージョン 2 -> バージョン 3 へ。あまりよくわかってない)

% hammer version /
min=1 wip=5 max=4 current=2 description="New directory entry layout (DragonFly 2.3+)"
available versions:
1 NORM First HAMMER release (DragonFly 2.0+)
2 NORM New directory entry layout (DragonFly 2.3+)
3 NORM New snapshot management (DragonFly 2.5+)
4 NORM New undo/flush, faster flush/sync (DragonFly 2.5+)
% hammer version-upgrade / 3
hammer version-upgrade ioctl: Operation not permitted
% sudo hammer version-upgrade / 3
Password:
hammer version-upgrade: succeeded
NOTE! Please run 'hammer cleanup' to convert the
/snapshots directories to the new meta-data
format. Once converted configuration data will
no longer resides in /snapshots and you can
even rm -rf it entirely if you want.

言われたとおりに cleanup を実行

% sudo hammer cleanup
cleanup / -(migrating) (6 snapshots)index 6
HAMMER UPGRADE: Moving snapshots
Moving snapshots from /snapshots to /var/hammer/root
handle PFS #0 using /var/hammer/root
snapshots - run
prune - run
rebalance - run..
reblock - run....
recopy - skip
cleanup /var -(migrating) (6 snapshots)index 6
HAMMER UPGRADE: Moving snapshots
Moving snapshots from /var/snapshots to /var/hammer/var
handle PFS #1 using /var/hammer/var
snapshots - run
prune - run
rebalance - run..
reblock - run....
recopy - skip
cleanup /tmp -(migrating) HAMMER UPGRADE: Moving snapshots
Moving snapshots from /tmp/snapshots to /var/hammer/tmp
handle PFS #2 using /var/hammer/tmp
snapshots - disabled
prune - run
rebalance - run..
reblock - run....
recopy - skip
cleanup /usr -(migrating) (6 snapshots)index 6
HAMMER UPGRADE: Moving snapshots
Moving snapshots from /usr/snapshots to /var/hammer/usr
handle PFS #3 using /var/hammer/usr
snapshots - run
prune - run

(snip)

% hammer version /
min=1 wip=5 max=4 current=3 description="New snapshot management (DragonFly 2.5+)"
available versions:
1 NORM First HAMMER release (DragonFly 2.0+)
2 NORM New directory entry layout (DragonFly 2.3+)
3 NORM New snapshot management (DragonFly 2.5+)
4 NORM New undo/flush, faster flush/sync (DragonFly 2.5+)

無事に完了した。

負荷がそれなりにかかっている、実サービスしているような環境下で実行した場合にも問題なくできるのかな。

2010年1月24日日曜日

rvm と rvm

複数の Ruby を切り替えられるようにする、rvm というものがあるみたい。

複数のRubyを切り替えて使いこなす「rvm」
rvm: Ruby Version Manager

MacPorts にあるのかなー、と思ってみてみたら、全く別物だった。。。
% port search --regex ^rvm
rvm @0.90.1-beta (sysutils, net)
archive manager to manage backups of multiple clients

% port info rvm
rvm @0.90.1-beta (sysutils, net)
Variants: universal

Description: The Rsync Vault Manager is an archive manager that uses rsync
to manage backups of multiple clients across multiple logical
partitions (vaults).
Homepage: http://rvm.sourceforge.net/

Library Dependencies: rsync
Platforms: darwin
License: unknown
Maintainers: nomaintainer@macports.org

DragonFly についてかかれたエントリ

をみつけたので張っておく。数年前のもの。
出た当初、FreeBSD 4.8 を入れて アップグレードしたなー。

DragonFly BSD 1st impression
DragonFly BSD 2nd Step - Project Overview
当時の事情なので、パッケージシステムの話題は dfports になってる。今は pkgsrc.

日本人と思われる開発者は YONETANI Tomokazu さんだけなのかな。
・・・いや、team をみると
Noritoshi Demizu さん
Max Okumoto さん (日系?)
allbsd の Hiroki Sato さん
と、何人か確認できる。

2010年1月23日土曜日

DragonFly での git

バージョンあげない場合、インストール後は /usr 以下で make src-update してればおk。
src-update ターゲットで /usr/src に cd 後、git pull してくれる。

「ちょいと先端のソースでビルドして、つかってみましょうかねぇ」となると、1つ操作が必要。
2.4.1 いれた後の /usr/src は DragonFly_RELEASE_2_4 になっていたので master に。
% git branch
* DragonFly_RELEASE_2_4
master
/usr/src/sys/conf/newvers.sh をみてみる。
% grep ^BRANCH /sys/conf/newvers.sh|head -1
BRANCH="RELEASE_2_4"
checkout する。
% sudo git checkout master
Switched to branch 'master'
% git branch
DragonFly_RELEASE_2_4
* master
切り替わったのでおなじく /usr/src/sys/conf/newvers.sh をみてみる。
% grep ^BRANCH /sys/conf/newvers.sh|head -1
BRANCH="DEVELOPMENT_2_5"
あとは make buildworld なり buildkernel なりして、再起動すると・・
% uname -mrs
DragonFly 2.5.1-DEVELOPMENT x86_64
% sysctl kern.osrelease
kern.osrelease: 2.5.1-DEVELOPMENT
はいできた。あくまでいちユーザなので、 DEVELOPMENT というのに後ろめたい気持ちがあるのは気のせいだ。
ソース修正したいなーという場合は master はいじらずにてきとうに branch 作ってそっちで作業、 merge しませう、といったことがここに書かれている。

2010年1月22日金曜日

日本人名の英語表記

名を、田中 一郎(タナカ イチロウ)さんとする。

Ichiro Tanaka か
Tanaka Ichiro か
Ichiro TANAKA か
TANAKA Ichiro か
TANAKA, Ichiro か
Tanaka, Ichiro か
TANAKA; Ichiro か
Tanaka; Ichiro か

どれよ?とたまに思う。
検索してみると、まぁ上記にあげたような例でいろいろ。

最近みたもので、 Google の中の人がとった、 MapReduce の特許のとこをみると、
"姓; 名"
になっている。この場合はInventor の区切りで ',' を使っているから ';' なのか、それともふつう ; で区切るのか。

そこに書いてあった人の名前は、ここをみるとよく見る "名 姓" の表記。
http://research.google.com/people/jeff/index.html
http://research.google.com/people/sanjay/index.html

特許みたいなカタいものに関しては海外でも 姓-名 の順で表記するのかしらん。

wikipedia のイチローのところをみると Ichiro Suzuki にしれっとredirect される。うーむ。

中国や韓国のひとは「英語名」を持ってたりして、
ブルース・リーは「英語名」だから迷うことはないよな。

文科省のサイト
三.国際化に伴うその他の日本語の問題
したがって,日本人の姓名については,ローマ字表記においても「姓-名」の順(例えば Yamada Haruo)とすることが望ましい。なお,従来の慣習に基づく誤解を防ぐために,姓をすべて大文字とする(YAMADA Haruo),姓と名の間にコンマを打つ(Yamada,Haruo)などの方法で,「姓-名」の構造を示すことも考えられよう。 今後,官公庁や報道機関等において,日本人の姓名をローマ字で表記する場合,並びに学校教育における英語等の指導においても,以上の趣旨が生かされることを希望する。

2010年1月21日木曜日

今年の目標

ここここ、あとここの >>332 の向かって右、のようにとまではいかないまでも、少しでもムキッとなりたいと思います。ムキッ。

Google Wave と Tech Wave

の、アイコン?の部分が似ている気がしたけどそうでもなかった。

青・赤・黄色・緑の配色。
赤・黄色・緑の並びが同じだけでした。


全体のスクリーンショットと左上部分。





































ファイルを完全に削除するコマンドなど

書きかけで放置してた・・・。未だに書きかけだけどいったんうp

・GNU fileutils の shred
Manpage of SHRED

・rm -P
削除前に 0xff, 0x00, 0xff の順で三回書き込み
*BSD, Mac OS X で使うことが可能。

・Mac OS X の Finder
その1: ファイル削除時
Finder のメニューで「確実にゴミ箱を空にする...」を実行する。
ゴミ箱で右クリックした場合は、右クリック後に command キーを押しっぱなしで「確実に...する」に変わる。

その2: ファイル削除後の空き領域を綺麗に(?)したいとき
ディスクユーティリティ -> 空き領域を消去...
削除したファイルをゼロ消去 -> 0 を 1回だけ書き込み
削除したファイルを7回消去 -> ゼロ消去の 7倍の時間
削除したファイルを35回消去 -> ゼロ消去の 35倍の時間
確認していないけども、フォーマット時もいずれか選べるはず。

いずれも時間がそれなりにかかるので、気軽に実行するものではない。

[FreeBSD] [DragonFly] development(7)

DragonFly はいつからか git に移行したので、development(7) をみて使ってみるとなんとなく git の使い方がわかってくる。
この development(7)、FreeBSD にもあったのを最近知る。 HISTORY に書いてあるし、、。
オリジナル書いたのが Matthew Dillon (以下 Matt)で、その Matt は DragonFly の founder。

DragonFly の development(7)
FreeBSD の development(7)

設計思想の違いから(?)、2003年に FreeBSD 4.8 から fork 、と。

mailing list のアーカイブ漁ればはっきりするけど、
gitweb のほうをみるに、2.0のリリースあたりで git へ移行したのかな。

[Mac OS X] systemsetup コマンド

通常32bit カーネル、'6' と '4' を起動時に押しておくと 64bit カーネルで起動するのだけど(機種によって違う)、押さずに64bit カーネルで起動する設定はどうするのだろう、と思って以前調べてた。

systemsetup コマンドだった。
Mac OS X Manual Page For systemsetup

設定確認
% systemsetup -getkernelbootarchitecturesetting
kernel architecture is set to default
% 2010-01-21 02:25:36.443 writeconfig[1620:903] *** -[NSMachPort handlePortMessage:]: dropping incoming DO message because the connection or ports are invalid

起動後、一度目の実行時は常にこのログがでるような・・・

setほげほげを引数なしで実行
% systemsetup -setkernelbootarchitecture
Invalid argument. Valid arguments are i386, x86_64, or default.

x86_64 に設定
% sudo systemsetup -setkernelbootarchitecture x86_64
Password:
setting kernel architecture to: x86_64
changes to kernel architecture have been saved.

default に戻し
% sudo systemsetup -setkernelbootarchitecture default
setting kernel architecture to default
changes to kernel architecture have been saved.

確認
% systemsetup -getkernelbootarchitecturesetting
kernel architecture is set to default

2010年1月17日日曜日

VMware Fusion で 結構古めな OS をインストール

古い OS を手軽に使えるかな?と思ったので VMware Fusion 上で 4年前(2006/4/1)にネタリリースされた FreeBSD 2.2.9-RELEASE を入れた。これも仮想化の利点のひとつだね。

当時のリリースアナウンスメント
http://marc.info/?l=freebsd-announce&m=114392352525468&w=2

"2.2.8-RELEASE" は 1998/11/29 なので、実質11年ちょっとまえか。
http://en.wikipedia.org/wiki/FreeBSD#FreeBSD_2

さわりはじめたのが 4.0-RELEASE からだったのと、2.2系のころはずっと小さい(はず)なのでどんなものだったのかなぁと思ったのもある。たまーーに古いソースをチラ見してみたくもあり。
いわゆる「懐古厨」というわけでは・・ない。

そういや前居た職場では自由に使えるサーバが1人1台割り当てられて、自分の場合は 4.0 -> 4.2 -> 4.5 -> 4.6.2 -> 4.7 ..... 4.11 まで順次更新、以降 5.2.1 -> 5.3 -> 5.4 -> 6.0 -> 6.1 まで アップグレードしつづけたな。
それはさておき。

・OS インストール

- iso イメージの取得
ftp://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/i386/ISO-IMAGES/2.2.9/
チェックサムがわからないのはやむをえないか。


- 仮想マシン作成

メモリ512M、HDD 8G

ふつうに仮想マシンを作ると、NIC が e1000 なので要変更。
GUI からはできないため、下記コマンドで編集。
ここの設定でしばしはまったのはいうまでもない。。。

(今回「FreeBSD 2.2.9」で作成)
% vi ~/Documents/Virtual\ Machines.localized/FreeBSD\ 2.2.9.vmwarevm/FreeBSD\ 2.2.9.vmx
「ethernet0.virtualDev = 」行を 「ethernet0.virtualDev = "vlance"」にする。

これで lnc としてインストール時に NIC の設定ができる。lnc0 でなく、lnc1 で認識した。
fxp を使うことはできるのか不明。

- パーティション

適当に以下のとおり。
/ ... 256M
/var ... 256M
swap ... 256M
/usr ... 残り


- 諸設定
Developer で入れて、ソースもぶちこむ。
DHCP は無いため、IPアドレスは手で設定。
キーボードは手元のキーボードに合わせる。
ftp, NFS などの設定は無し。


・OS インストール後の設定など

- リモートログイン
「telnet」で入る。ssh は手で入れないとダメなのでそれまでは telnet 。
インストール直後の起動は inetd がいろいろ開けてくれてる時代ということがわかる。


- カーネル再構築
/sys/i386/conf 以下、GENERIC をコピーして編集。

1. I686_CPU 以外の cpu 行をコメントアウト
2. ident を適当に設定
3. maxusers 512
4. options "MAXMEM=(512*1024-1024)"

-1024 はおまじないみたいなもん。2.2.8 当時の事情はわからず。

/usr/src 以下での make buildkernel は無いので、config コマンドからの再構築。

# config [カーネルコンフィグファイル名]
# cd ../../compile/[カーネルコンフィグファイル名]
# make depend
# make
# make install

この一連の流れでできてやや感動。2.2 系からあったのか・・・。

サイズは以下の通り。cpu 行を削った分だけ減った?
$ ls -l /kernel{.GENERIC,}
-r-xr-xr-x 1 root wheel 1643840 Jan 17 19:44 /kernel
-rwxr-xr-x 1 root wheel 1648890 Mar 31 2006 /kernel.GENERIC


- アプリケーションインストール
いろいろ不便なのでゴリゴリコンパイルする。なるべく新しいものを入れる。
GNU のプロダクトは素直に入ってくれるような印象。

参考までに、OSインストール時に入ってる GCC は 2.7系。

$ gcc -v
gcc version 2.7.2.1

perl は 4.0。4系を目にするのはいつ以来だ・・・
$ perl -v

This is perl, version 4.0

$RCSfile: perl.c,v $$Revision: 1.7.2.2 $$Date: 1998/03/12 19:27:47 $
Patch level: 36

Copyright (c) 1989, 1990, 1991, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 4.0 source kit.

以下インストール記録

-- GNU make
source: ftp://ftp.ring.gr.jp/pub/GNU/make/make-3.81.tar.gz
configure option: --program-prefix=gnu
インストール後:
$ gnumake --version
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for i386-unknown-freebsd2.2.9

-- GNU screen
source: http://ftp.gnu.org/gnu/screen/screen-4.0.3.tar.gz
configure option: --prefix=/opt/screen-4.0.3 ( /opt -> /usr/opt の symlink にしておく)
インストール後:
$ /opt/screen-4.0.3/bin/screen --version
Screen version 4.00.03 (FAU) 23-Oct-06

当初、tmux を入れようと思ったけど断念。
理由はこのへん。FreeBSD C99 and POSIX® Conformance Project
そういや tmux だと EUC-JP 通らない気がする(詳細未確認)ので、結果的に OK

-- bash
source: ftp://ftp.ring.gr.jp/pub/GNU/bash/bash-4.1.tar.gz
configure option: --disable-nls
インストール後:
$ bash --version
GNU bash, version 4.1.0(1)-release (i386-unknown-freebsd2.2.9)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

-- zsh
source: http://downloads.sourceforge.net/project/zsh/zsh-dev/4.3.10/zsh-4.3.10.tar.bz2?use_mirror=jaist
configure option: --disable-dynamic
インストール後:
$ zsh --version
zsh 4.3.10 (i386-unknown-freebsd2.2.9)

-- Perl
OpenSSH インストールのための OpenSSL インストールのためにインストール。OpenSSH が yak shaving になるとは思わなかった。。
source: http://www.cpan.org/src/perl-5.10.1.tar.gz
configure option: -des (./Configure -des)

Perl 、さくっと入ったのに感動。make test は途中おかしかったけどよくわからん。

$ /usr/local/bin/perl -v

This is perl, v5.10.1 (*) built for i386-freebsd

Copyright 1987-2009, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.


-- OpenSSL
source: ftp://ftp.ring.gr.jp/pub/net/openssl/source/openssl-0.9.7m.tar.gz
(0.9.8l は断念)
configure option: --prefix=/opt/openssl-0.9.7m no-asm no-threads no-fips
make install 時は -k をつける。。
インストール後:
$ /opt/openssl-0.9.7m/bin/openssl version -a
OpenSSL 0.9.7m 23 Feb 2007
built on: Sun Jan 17 19:27:23 JST 2010
platform: FreeBSD
options: bn(64,32) md2(int) rc4(idx,int) des(ptr,risc1,16,long) idea(int) blowfish(idx)
compiler: gcc -DOPENSSL_NO_KRB5 -DOPENSSL_NO_ASM -DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall
OPENSSLDIR: "/opt/openssl-0.9.7m/ssl"

-- OpenSSH
事前に特権分離用ユーザ(この場合 sshd)を作っておく
# mkdir /var/empty
# chown root:sys /var/empty
# chmod 755 /var/empty
# pw groupadd sshd -g 22
# pw useradd sshd -g sshd -c 'sshd privsep' -d /var/empty -s /bin/true

source: ftp://ftp.ring.gr.jp/pub/OpenBSD/OpenSSH/openssh-5.3.tar.gz
configure option: --prefix=/opt/openssh-5.3p1 --with-privsep-user=sshd --with-privsep-path=/var/empty --with-md5-passwords --without-zlib-version-check --with-ssl-dir=/opt/openssl-0.9.7m
zlib はふるーいので、without-zlib-version-check...
インストール後:
$ /opt/openssh-5.3p1/bin/ssh -V
OpenSSH_5.3p1, OpenSSL 0.9.7m 23 Feb 2007

sftp 用に libedit 入れてからでもよかったかな。

/etc/rc.local に起動処理を追記。

-- Wget
FreeBSD 2.2.9 についてくる fetch コマンド、挙動不審な気がするのでインストール。

source: ftp://ftp.ring.gr.jp/pub/GNU/wget/wget-1.11.4.tar.gz
configure option: なし (PATH は /usr/local にいれた Perl が先にくるようにしておく)
インストール後:
$ wget --version
GNU Wget 1.11.4

Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Originally written by Hrvoje Niksic .
Currently maintained by Micah Cowan .

-- GCC 2.95.3
source: ftp://ftp.ring.gr.jp/pub/GNU/gcc/gcc-2.95.3.tar.gz
configure option: --prefix=/opt/gcc-2.95.3
インストール後:
$ /opt/gcc-2.95.3/bin/gcc -v
Reading specs from /opt/gcc-2.95.3/lib/gcc-lib/i386-unknown-freebsd2.2.9/2.95.3/specs
gcc version 2.95.3 20010315 (release)

-- Sudo
source: ftp://ftp.ring.gr.jp/pub/misc/sudo/sudo-1.7.2p2.tar.gz
configure option: CC="/opt/gcc-2.95.3/bin/gcc" ./configure --with-insults --with-all-insults --without-pam
デフォルトの gcc だと次のようになってこける。
$ make
.....
gcc -c -I. -I. -O2 -D_PATH_SUDOERS=\"/etc/sudoers\" -DSUDOERS_UID=0 -DSUDOERS_GID=0 -DSUDOERS_MODE=0440 ./gram.c
gram.y:57: parse error before `static'
*** Error code 1

インストール後:
$ sudo -V
Sudo version 1.7.2p2

-- lv
less はない。more はある。lv いれよう。
source: http://www.mt.cs.keio.ac.jp/person/narita/freeware/lv421.tar.gz
configure option: なし。tar展開、移動後そのまま make install
インストール後:
$ lv -v
# lv v.4.21 (Mar.26th,1997)
# All rights reserved. Copyright (C) 1994,1997 by NARITA Tomio

-- bzip2
source: http://www.bzip.org/1.0.5/bzip2-1.0.5.tar.gz
configire option: なし。tar展開、移動後そのまま make install
$ bzip2 -V
bzip2, a block-sorting file compressor. Version 1.0.5, 10-Dec-2007.

Copyright (C) 1996-2007 by Julian Seward.

This program is free software; you can redistribute it and/or modify
it under the terms set out in the LICENSE file, which is included
in the bzip2-1.0.5 source distribution.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
LICENSE file for more details.

bzip2: I won't write compressed data to a terminal.
bzip2: For help, type: `bzip2 --help'.


/opt/なんとか 以下に入れたものは適宜 /usr/local/{bin,sbin} 以下に symlink.

今回はここまで。
・telnet で入ろう
・(OpenSSH インストール前)/etc/inetd.conf で telnet 以外をコメントアウトして kill -HUP するとスッキリするのが久しぶり
・5.0-RELEASE で取り込まれた rcNG より古い rc 、よりもさらに古い rc なので /etc/rc.conf.local に設定を書く
・起動しておきたい daemon は /etc/rc.local に追記する (local_startup で /usr/local/etc/rc.d があるのでそっちがいいか)
・OpenSSH インストールで少し yak shaving した
・GNU のものは素直に入ってくれる感。gettext 見に行きそうなやつは --disable-nls で切る
・sysctl の MIB がさすがに少ない。例えば kern.ipc.nmbclusters がない。カーネル再構築コース。kern.ipc.somaxconn は kern.somaxconn だった。net.inet.tcp は 12 、 net.inet.udp は 4つ。

emacs は新しいのビルドできるかな?
あと GNU global やら Apache やらいれるか。 Apache は 1.3 系でないと無理そうな予感。
Perl 以外の スクリプト言語で新しいのは入るか?

2010年1月12日火曜日

「NaCl」 いろいろまとめ

djb 先生が噛んでる、Network and Cryptography library
NaCl: Networking and Cryptography library
冒頭に NaCl (pronounced "salt")って書いてある

Google のネイティブクライアント
nativeclient

Ruby とかの会社
株式会社ネットワーク応用通信研究所(NaCl)

なさ

なさの中でも Ruby モリモリ使われてるっぽいねー

NASA.rb

The Debian System の第二版がでる模様

米アマゾン
The Debian System: Concepts and Techniques (Paperback)

日アマゾン
The Debian System: Concepts and Techniques (ペーパーバック)

第一版日本語版もってるけど、最近さっぱりみてないな・・・。処分しちゃおっかな。
またよみたくなったら原書か、第二版日本語版まちでもかまわないな。

BSD magazine が無料になったみたい

BSD magazine
「Download FREE issues and articles from BSDmagazine!」

ってことで、「a free monthly online publication」となってる。

ここぞとばかりに早速登録(メールアドレスのみ)して、ダウンロード。あとでよもう。

FreeBSD で ZFS

・8.0-RELEASE からプロダクション品質
・8.0-STABLE にZFS version 14 が取り込まれた

ってことで、ZFS を少しおさわり。初。もし Solaris で育ってたら、早々にさわってたことだろうな。
実マシンは無いので、VMware Fusion 上の FreeBSD 8.0-STABLE で /usr/{src,obj,ports} を zfs にした。ディスクは、、、2Gのファイルを SCSI で 4つ作成、それらを raidz にした特に面白く(?)ない構成。

以下、設定したことなどなど。

dmesg には次のように出力される
ZFS NOTICE: Prefetch is disabled by default if less than 4GB of RAM is present;
to enable, add "vfs.zfs.prefetch_disable=0" to /boot/loader.conf.
ZFS filesystem version 14
ZFS storage pool version 14

メモリは 2G で設定しているため ZFSプリフェッチというのが無効になっている。これはなんだろうな。。

また、/boot/loader.conf で vm.kmem_size を 512MB に設定する前は次の出力もあった。
ZFS WARNING: Recommended minimum kmem_size is 512MB; expect unstable behavior.
Consider tuning vm.kmem_size and vm.kmem_size_max
in /boot/loader.conf.

そのため、/boot/loader.conf には
vm.kmem_size="536870912"
を書いて、再起動。

ZFS 領域に移す/usr/src と /usr/ports の容量は以下の通り。
% du -shc /usr/src
512M /usr/src
512M total
% du -shc /usr/ports
746M /usr/ports
746M total

man zfs や man zpool して、軽く使い方を確認。まず zpool で create。前述のとおり SCSI 4つを raidz 。
% sudo zpool create tank raidz da0 da1 da2 da3

% zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
tank 7.94G 132K 7.94G 0% ONLINE

% zpool status tank
pool: tank state: ONLINE scrub: none requested
config:

NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1 ONLINE 0 0 0
da0 ONLINE 0 0 0
da1 ONLINE 0 0 0
da2 ONLINE 0 0 0
da3 ONLINE 0 0 0

errors: No known data errors

作成した時点で mount されるらしい(この時点では zfs mount コマンドでもみられる、ということには気づかなかった)
% df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ad0s1a 11G 5.4G 4.4G 55% /
devfs 1.0K 1.0K 0B 100% /dev
tank 5.8G 0B 5.8G 0% /tank

% mount
/dev/ad0s1a on / (ufs, local, soft-updates)
devfs on /dev (devfs, local, multilabel)
tank on /tank (zfs, local)

src, ports 領域を ストレージプール tank 以下に作成
% sudo zfs create tank/src
% sudo zfs create tank/ports
% df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1a 11166944 5625798 4647792 55% /
devfs 1 1 0 100% /dev
tank 6128512 0 6128512 0% /tank
tank/src 6128512 0 6128512 0% /tank/src
tank/ports 6128512 0 6128512 0% /tank/ports
これも、zfs create した時点で mount された。

移す先が作成できたので、ごそっと rsync
% sudo rsync -Hau /usr/src/ /tank/src/ ; sudo rsync -Hau /usr/ports/ /tank/ports/

rsync 中、ZFS の場合の書き込みはある程度のチャンク毎(?)に行われるのかなと思った。df でみるみるうちに使用領域が経るものかとおもったら、そうでもなかったような・・・。
(軽く調べてみたところ、そのような振る舞いのようだ。)

rsync 後の確認
% df -h -t zfs
Filesystem Size Used Avail Capacity Mounted on
tank 4.7G 0B 4.7G 0% /tank
tank/src 5.2G 522M 4.7G 10% /tank/src
tank/ports 5.3G 688M 4.7G 13% /tank/ports

その後、同様にして/usr/obj の後釜 tank/obj も作成。同期は必要ないので create だけ。
% mount -t zfs
tank on /tank (zfs, local)
tank/src on /tank/src (zfs, local)
tank/ports on /tank/ports (zfs, local)
tank/obj on /tank/obj (zfs, local)

で、mount 先が /tank/{src,ports,obj} のままだと symlink 貼ったりしてなんかなー、と思ったので一度 umount し(後で気づいたけど、アンマウントしなくてもできる。)mountpoint を設定後、再度 mount。
% zfs set mountpoint=/usr/src tank/src
% zfs set mountpoint=/usr/ports tank/ports
% zfs set mountpoint=/usr/obj tank/obj

再 mount (zfs mount -a)後
% df -h -t zfs
Filesystem Size Used Avail Capacity Mounted on
tank 3.0G 0B 3.0G 0% /tank
tank/obj 4.7G 1.7G 3.0G 36% /usr/obj
tank/ports 3.7G 688M 3.0G 18% /usr/ports
tank/src 3.5G 523M 3.0G 15% /usr/src
% zfs mount
tank /tank
tank/obj /usr/obj
tank/ports /usr/ports
tank/src /usr/src

あと、/etc/rc.conf に zfs_enable="YES" を書いておしまい。

make buildkernel buildworld しガリガリ書かせてみて、パニックしないことを確認。

実用する場合はデカーイストレージをくっつけて、sharenfs なぞするのが普通なのかなぁ。 例えば VMware, Xen のイメージ置き場に使えるレベルなのかしらん・・・。ううむ。

2010年1月11日月曜日

Phusion の中の人のプレゼン

Twitter のつぶやきで

http://twitter.com/onlyopensource/status/7622894689 をみて、「へー、Ruby 実装してるひといろいろいるんだなー」とおもってリンク先をみてみたものの、目的の記事がなぜかみあたらず(後でリロードしたらでてきた)。

みあたらなかったので他の記事でもみてみようと思い、下へ下へとつらつらみてると How Phusion Built A More Efficient Ruby 1.8 Interpreter という記事が。Phusion の中の人(CTO & CEO かつ co-founder らしい)の Google Tech Talk でのプレゼン。ふだん使ってないものの、REE とか Passnger 作ってるとこだし、個人的興味だけで動画を鑑賞。


2人でプレゼンしてて、

・GC の改善
・よりよい malloc の選択 (tcmalloc を使っているのは知ってたけど、理由がわかった)
・スレッドの改善

てなメニュー。スライドが大変見やすい。

途中、REE 使ってよかった!という事例の紹介があったり。

終わりごろに以下の説明が

Ruby 1.8 のスレッド改善について
・スレッドのパッチは9月からREEにオプションとして、試験的なものとして含んでるよ
・x86 と x86_64 サポートしてるよ

結び
・REE はフォークじゃないよ、ブランチだよ
・定期的に upstream にマージするよ
・もっと寛容なパッチを許容できるポリシー(?いみがよくわからん
・パッチが upstream に戻るのをねがってるよ

Phusion のサイトに書いてあるとおり、 The Computer Science Company なんだなぁ、と納得納得。素晴らしい。

http://www.phusion.nl/about.html

その筋のひとにとってはかなり前から、「Rails 動かすなら REE 使うのが標準だよねー」なのかな?(使ってないからわからん)

2010年1月10日日曜日

Mac OS X 用アンチウィルスソフト一覧 2010/01/10 調べ

気休めかもしれないけど iAntiVirus を入れて万が一(?)に備えていたりするのだけど、さて Mac 用のアンチウィルスソフトというのはどれだけあるのだろう?と思ってたので調べた。

むかーしむかしは、Disinfectant あったなぁ。About かなにかで、足がニョーンとでてくるやつ。
Windows のように検出率、性能の比較をしているひとはいるのだろうか・・・。はてさて。


・ Intego VirusBarrier X5
- http://www.intego.com/jp/virusbarrier/

・ ノートン™ アンチウイルス Mac®版
- http://www.symantec.com/ja/jp/norton/macintosh/antivirus
シマンテックストア


・ ウイルスバスター 2010
- http://virusbuster.jp/
サイトをみたかんじ、Windows 版と Mac 版の区別がなさげ。
ウイルスバスターは1本の購入でWindowsとMacの組み合わせでもパソコン3台まで*インストールできます。
との記述あり。
トレンドマイクロ・オンラインショップ

・ Kaspersky Anti-Virus for Mac
- http://www.justsystems.com/jp/products/kasperskymac/

・ avast! アンチウイルス
- http://www.avast.com/jpn/avast-antivirus-mac-edition.html

・ ClamXav
- http://www.clamxav.com/

・ ESET NOD32 Antivirus 4 for Mac OS X
- http://beta.eset.com/macosx
注)URL でわかるとおり、ベータ版。

・ McAfee VirusScan for Mac
- http://www.mcafee.com/japan/products/virusscan_for_mac.asp

・ iAntiVirus
- http://www.iantivirus.com/

こんなとこかな。なにかしら変化があったら新エントリ書くとともにそっちへのリンクを張る予定。
試用版つかってみたりした上での評価はしない。(専門家でもないし、主観の入ることが避けられない気がするため)

2010年1月4日月曜日

37signals が System Administrator を募集している

ここ

DHH がつぶやいてたのをみて、どんな人がほしいんだろねーと見てみた。

自分は全くもってないスキルセットだなぁ、こりゃ。

合致するのは various web servers, MySQL くらいだ。
Xen は多少触ってたけど KVM は全くない。
HAproxy はここで見て知ったかもしれないな。。
Chef は puppet ぽいなにかという程度しか知らない、passenger も Rails いじりしてないのでお触りしてない。Unicorn てなんだろなーとちょっと調べてみたら、 mongrel から派生したものなんだねぇ。知らなかった・・・。

というわけで、Ruby + Rails でごそごそしてる人で sysadmin したい人にはうってつけの募集なんだろなー、と思った次第。