2013年8月22日木曜日

macでbind使いたい人のメモ

Macでインターネッツ共有をしたときに、自前のDNSを参照させたい時ってあると思います。
そんなときに、MacでBINDを使うメモです。

環境


Max OS X Lion

事前準備



/etc/rndc.keyの作成

sudo rndc-confgen -a


named.confの設定

vim /etc/named.conf


以下サンプル


include "/etc/rndc.key";

controls {
inet 127.0.0.1 port 54 allow {any;}
keys { "rndc-key"; };
};

options {
directory "/var/named";
pid-file "/var/run/named.pid";
allow-query { any; };

// query-source address * port 53;

};

zone "." IN {
type hint;
file "named.ca";
};

zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};

zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };
};

zone "blog.shase.info" IN {
type master;
file "blog.shase.info.zone";
};

logging {
category default {
_default_log;
};

channel _default_log {
file "/Library/Logs/named.log";
severity debug;
print-time yes;
};
};



zoneファイルを作る


vim /var/named/blog.shase.info.zone


以下zoneのサンプル

$TTL 86400
@ IN SOA localhost root.example.jp.(
2002122001 ; serial
3600 ; refresh 1hr
900 ; retry 15min
604800 ; expire 1w
86400 ; min 24hr
)
IN NS localhost.
hoge IN A 0.0.0.0


他のファイルはデフォルトです。

起動と停止



フォアグラウンド起動


$ sudo named -g


デーモン起動

$ sudo launchctl load -F /System/Library/LaunchDaemons/org.isc.named.plist
Password:
$ ps aux |grep named
hoge 41792 0.2 0.0 2434892 548 s007 S+ 9:27PM 0:00.00 grep named
root 41784 0.0 0.1 2439512 6280 ?? Ss 9:27PM 0:00.02 /usr/sbin/named -f


デーモン停止

$ sudo launchctl unload /System/Library/LaunchDaemons/org.isc.named.plist
$ ps aux |grep named
hoge 41800 0.0 0.0 2434892 548 s007 R+ 9:29PM 0:00.00 grep named


あわせてどうぞ


MacOSXのインターネット共有で、MACアドレス制限を行いたい

2013年8月5日月曜日

JBODはややこしい

カイワレ先生のブログを見て、自分のメモがてら、JBODについて書いてみます。
JBODって、なんぞやって、日本人なら誰もが一度は考えると思うからです。(RAID0と何が違うの?って)

現状、JBODという言葉は非常に曖昧な言葉です。
日本語wikipediaにも3つ定義があります。


1.JBOD機能を持つRAIDコントローラカードを取り付けて、JBODにしたいハードディスクをRAIDコントローラカードに接続する。
2.JBOD用として製造されたディスクアレイ製品をSCSIやファイバーチャネル等のインターフェースに接続する。
3.すでに接続されている複数のハードディスクを、ソフトウェア的に統合してJBODとする(Windows NT系列のOSには「スパン」という名称でこの機能が標準装備されている)。


http://ja.wikipedia.org/wiki/JBOD
より。これはこれで微妙なんですが。。。

まず大雑把な理解として、JBODの特徴を2つ挙げます。(どちらともRAIDに対する優位点です)

  • A.複数のディスクにて、容量が異なる場合も(単純な足し算の)単一のボリュームを構成することができる

  • B.I/O性能がよい、とされる



ちなみに、Aが成立するのは、上記wikipedia定義の1,2,3のときです。
Bが成立するのは、1,2です。(とはいうものの、状況によってRAIDのほうが性能がよかったりします。これは使い方によって変わります。)

3のとき、なぜBが成立しないかというと、ソフトウェアで処理している分オーバーヘッドが大きく、I/Oが出ません。

以下は、ざっくり、1と2は、ハードウェアベースのJBOD。3をソフトウェアベースのJBODとします。

ハードウェアベースのJBOD


ハードウェアベースのJBODとHadoopの話に入りますね。ハードウェアベースのJBODも2つの意味があります。1つは、「束ねられたディスク群」という意味のJBOD。

もうひとつは「物理ディスクが別々の論理ボリュームにマッピングされて、並列書き込み可能な状態(仕組み)」です。上記とはぜんぜん違いますね。

つまり、OSから見えるマウントポイントと物理的なディスクが紐付いている状態ということです。(そして、きちんと別々に書き込むように対応したコントローラがいわゆるJBOD対応のコントローラってやつです)。

Hadoopはアーキテクチャ上、並列に書き込みをしてくれるようです。これは、マウントポイントと実際のディスクが一対一で結びついている時に、その並列性が意味を成すということです。逆にRAIDを組んでしまうとストライプ書き込みをしてしまうので、そのラウンドロビン並列書き込みの意味がなくなってしまうということですね。

ハードウェアのJBODは外付けのエンクロージャで使用されることが多く、サーバ筐体の内蔵ディスクで対応しているものがどのくらい世にあるのかは知りません。

ちょっとだけ調べたら、さすがにDELLのCシリーズとかはJBOD対応のチップ(HBAとしての役割しか果たさないモード)を搭載したLSIのチップとか積んでるみたいですね。

ソフトウェアベースのJBOD


ソフトウェアベースのJBODの話は余談です。こっちは束ねる方だけ触れておきます。

お仕事用途ではあまり使われないので。カイワレ先生がWindows Home Serverの例を出してましたが、あれは、「Drive Bender」の実装の話だと思います。(別に、HOME鯖が最初のJBOD実装ってわけではないです)。

なぜ、Home Server(家庭用鯖)にJBODが必要とされてMSが実装したかというと(最新のHOME鯖では外されているようです)、発売当時、まだ、HDDの値段はそれなりに高く、ユーザのニーズとして、「ジャンク屋で買ってきたHDDいくつか、組み合わせて、でかいOneボリューム構成したいんだけどなー」というのがあったからです。

そのニーズに合致していたのが、ソフトウェアJBODだったんですね。

Linuxの場合は、LVMでソフトウェアのJBOD(のようなもの)を構成することができます。

まとめ


JBODという言葉は、いろんな人が勝手にオレオレ定義で使っている言葉です。さりとて、代替になる適当な言葉もないので、JBODいいよーって言いたいエライ人は、適当に新しい言葉をでっち上げていただけると、世のエンジニアが助かります。

ちなみに、Hadoopのクラスタ組もうと思って、JBOD使えないRAIDカードしか積んでないサーバ渡されたら、しょうがないから、1ディスクでRAID 0ってのを一つの筐体で何個か組む感じの構成になるかと思います。お金くれるんだったら、LSIとかのちゃんと対応したチップ詰んだ鯖にしたいですが。

世の事例を見ると、RAID 0を並べたようなものをJBODなんて言ってる例もあるので、みんな適当に使ってる単語といえばそんな感じ。

おまけ


JBODではWriteキャッシュを切りましょうが一般的なお約束なのですが、もしかしたらHadoopだと気にしなくてもいいのかもしれません。ぐぐればどっかにそんなこと言ってる人いるかも。

2013年7月13日土曜日

struts2参考になるリンク集

本家




日本語記事



マイナビ




codezine


MacOSXのインターネット共有で、MACアドレス制限を行いたい

MAC,MACややこしいですが、T/Oです。
MACのインターネット共有は便利なので、ついつい使いたくなってしまうのですが、はやりセキュリティを考慮しないのは危険ということで、インターネット共有を行う際に、指定したMACアドレス以外は、接続できないようにしたいと思います。

環境



  • Mac OS X Lion



どのレイヤーでやるか


最初、ipfwでやろうとしたのですが、どうにもうまく行かず。

インターネット共有では、dhcpでIPアドレスをばらまいてるわけですが、ココで指定したMACアドレス以外にはdhcpでアドレスを付与しない方向に切り替えました。

想定外の端末が直接アドレス指定してアクセスしてくるリスクには、払い出すアドレス数の管理+ipfw等で対応することとします。もちろん、無線LANのキーを設定するのは言うまでもありません。

もし、下記を実行して、セキュリティインシデント起こしても当方は知りません( ー`дー´)キリッ

概要:インターネット共有の手順


[システム環境設定] -> [共有] -> [共有する接続経路(Ethernet)] + [相手のコンピュータが使用するポート(Wi-Fi)]を選択し、インターネット共有チェックボックスをONにします。

そうすると、bootpが動き出し、/etc/bootpd.plist が生成されます。このファイルを編集するのですが、難があり、デーモン起動時に新規にファイル生成し、デーモン停止時にファイルを削除しやがります。この点、多少ケアが必要です。

/etc/bootpd.plist 実際のファイルサンプル


[xml]




Subnets


_creator
com.apple.InternetSharing
allocate

dhcp_domain_name_server

10.0.2.1

dhcp_router
10.0.2.1
lease_max
86400
lease_min
86400
name
10.0.2/24
net_address
10.0.2.0
net_mask
255.255.255.0
net_range

10.0.2.2
10.0.2.254



allow

xx:xx:xx:xx:xx:xx

bootp_enabled

detect_other_dhcp_server

dhcp_enabled

en1

use_server_config_for_dhcp_options



[/xml]

allowの部分に注目して欲しいのですが、
[xml]
allow

xx:xx:xx:xx:xx:xx

[/xml]
allowで指定したMACアドレスだけに、IPアドレスを割り振るようになります。(その他はデフォルト値です)

実際のオペレーション


[bash]
#設定ファイルを編集して
sudo vim /etc/bootpd.plist

#chflagsを立てます
sudo chflags uchg /etc/bootpd.plist

# インターネット共有開始
[/bash]

ファイルが消されてしまう対策として、BSD系OSで使用出来るchflagsを利用します(chmodでreadOnlyにしても消されるので)。
もっとエレガントな方法ありそうな気はしますが。。。

再度ファイルを編集したくなったら
[bash]
sudo chflags nouchg /etc/bootpd.plist
[/bash]
上記を叩けばOKです。

ではでは。

参考にしました


https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man8/bootpd.8.html

2013年7月11日木曜日

2013年前半振り返り

さらっと振り返ってみる

1月

  • インフルで死んでた記憶しかない


2月

  • 新チーム体制になったけど、裏側の保守っぽいことメインに仕事してた気がする。



3月

  • 2月とやってること変わらず保守っぽいのがメインだったけど、エイプリルフールの実装とかは、初めてまともに機能的なものを仕込んだかも。



4月

  • チームでフロント周りのリソースが薄かったので、かなりの部分、マークアップっぽいことしてた気がする。FTL/CSSに少しだけ詳しくなる。



5月

  • r***とか、e***とかのある程度のカタマリ機能を実装。



6月

  • 保守っぽいのから、***の機能とかを実装。手広く浅く。



振り返り

  • この半期開始時点よりは、ずいぶんマシになった気がする(元が酷すぎるんだけど)

  • 6月ぐらいから自分に不足してる知識とかがかなりクリアになってきて、Inputの元気も戻ってきたので、最近は本とかも読めている



後半戦へ向けて

  • もーちょいマシなエンジニアになりたい。

  • QCDをあげていきたい。

  • 設計〜実装〜テスト:やっぱりこのあたりを強化していきたい。分析とかは当分いいいや。

2013年6月11日火曜日

FreeMarkerのハッシュの要素にアクセスする(2)

前回「FTLのハッシュの要素にアクセスする」というのを書いたのですが、このときやりたかったことって、配列の「最後」にアクセスしたかったからなんですね。

でも、値直接指定じゃなくて、配列の最後を判定する構文がちゃんと用意されていたのでした。。。

マニュアルはちゃんと読みましょうというはなし。


[java]
<#assign foobar = ["hoge", "fuga", "piyo"]>

<#list foobar as str>
${str}
<#if str_has_next>さいごじゃ


[/java]


参考


http://freemarker.org/docs/ref_directive_list.html

2013年5月23日木曜日

FreeMarkerのハッシュの要素にアクセスする

T/Oなんですが。FTLのお話。

こんなハッシュがあったとして
[java]
<#assign hoge = [

{
"title":"fuga",
"id":"piyo"
}
] />
[/java]

ずらーっとね。で、特定要素にアクセスするときは、こんな感じで書けるっぽい。
[java]
<#list foo.hoge as bar>
    <#if bar.id == "piyo">
    ぴよぴよ
    

[/java]
みたいな。