Norton DNS
今日はDNSopsのMLに流れてきたログを自分で再実行してみます。
所で、DNSのキャッシュサーバと言うのは、最近流行りなのでしょうか?よく分かりません。
去年辺りGoogle Public DNSと言うのも話題になっていましたね。
ちょっとコマンドを覚えがてら、叩いてみます。
UnboundのJavaによるプロトタイプ実装をビルドする。
UnboundはJavaでプロトタイピングした後に、Cで書き直す等という凄いプロセスを経て実装されたリゾルバです。
きっととんでもなくハイパフォーマンスなのでしょう。僕としては少々悲しいですが。
プロトタイプを作る為の環境としてのJavaってそんなに使い易いとも思えないのですけども…。
いきなりCのコードをガツガツ読んだりすると、魂が燃え尽きたりする危険があるので、
使い慣れたJavaのコードをまずは読みます。
どうやらdnsjavaと言うプロダクトをどうこうして作った様です。
Unboundのプロトタイプが参照しているdnsjavaのバージョンは、2.0ですが、
本家では、2.0.8がリリースされています。
Unboundをビルドする。
NSDはコンテンツサーバですが、Unboundはリゾルバです。
つまり、NSD+UnboundでBINDと機能的には凡そ同じになります。
なので、Unboundもビルドします。
NSDとUnboundはリリースしている組織が同じなのできっと旨くやり取りしてくれる筈です。
余談ですがBINDに対してUnboundとは随分酷いネーミングセンスだなぁ…と思います。
Hibernateに対してSpringとかあるJava界隈も似たようなものかな…と思ったりしますが。
例によってSVNリポジトリが公開されているのでチェックアウトします。
svn co http://unbound.nlnetlabs.nl/svn/trunk/ unbound
こっちは、configureが、リポジトリにコミットされているので、とりあえず実行してみます。
cd unbound ./configure make
特に問題なく終了しましたので、そのままmakeしました。
ビルドも正常終了した様です。
ls -l | grep rwx drwxr-xr-x. 10 taichi taichi 4096 2010-08-04 17:39 build drwxrwxr-x. 3 taichi taichi 4096 2010-08-04 17:34 compat -rwxrwxr-x. 1 taichi taichi 44941 2010-08-04 17:35 config.guess -rwxrwxr-x. 1 taichi taichi 57629 2010-08-04 17:36 config.status -rwxrwxr-x. 1 taichi taichi 34423 2010-08-04 17:35 config.sub -rwxrwxr-x. 1 taichi taichi 541371 2010-08-04 17:35 configure drwxrwxr-x. 4 taichi taichi 4096 2010-08-04 17:34 contrib drwxrwxr-x. 3 taichi taichi 4096 2010-08-04 17:34 daemon drwxrwxr-x. 3 taichi taichi 4096 2010-08-04 17:36 doc -rwxrwxr-x. 1 taichi taichi 13663 2010-08-04 17:35 install-sh drwxrwxr-x. 3 taichi taichi 4096 2010-08-04 17:34 iterator drwxrwxr-x. 11 taichi taichi 4096 2010-08-04 17:39 ldns-src -rwxrwxr-x. 1 taichi taichi 257778 2010-08-04 17:36 libtool drwxrwxr-x. 4 taichi taichi 4096 2010-08-04 17:34 libunbound -rwxrwxr-x. 1 taichi taichi 14315 2010-08-04 17:35 makedist.sh drwxrwxr-x. 5 taichi taichi 4096 2010-08-04 17:34 pythonmod drwxrwxr-x. 4 taichi taichi 4096 2010-08-04 17:34 services drwxrwxr-x. 3 taichi taichi 4096 2010-08-04 17:34 smallapp drwxrwxr-x. 3 taichi taichi 4096 2010-08-04 17:35 testcode drwxrwxr-x. 3 taichi taichi 20480 2010-08-04 17:35 testdata -rwxrwxr-x. 1 taichi taichi 3223553 2010-08-04 17:39 unbound -rwxrwxr-x. 1 taichi taichi 2864975 2010-08-04 17:39 unbound-checkconf -rwxrwxr-x. 1 taichi taichi 2890681 2010-08-04 17:40 unbound-control -rwxrwxr-x. 1 taichi taichi 5261 2010-08-04 17:40 unbound-control-setup -rwxrwxr-x. 1 taichi taichi 6404 2010-08-04 17:39 unbound-host drwxrwxr-x. 5 taichi taichi 4096 2010-08-04 17:35 util drwxrwxr-x. 3 taichi taichi 4096 2010-08-04 17:34 validator drwxrwxr-x. 3 taichi taichi 4096 2010-08-04 17:34 winrc
Unboundの方は比較的ドキュメントがしっかりしています。
この差が一体何なのかはよく分かりません。
有志の方々がマニュアルの翻訳などをなさっている様ですね。
NSDをビルドする。
BINDがビルド出来たので次はNSDをビルドします。
BINDは機能的にコンテンツサーバとリゾルバが両方搭載されているので、
コードを読むと結構辛くて苦しい的な電波をどこからか受信したので、
それが本当かどうかを確かめる為に、
比較対象となりえる同じドメインの別なプロダクトも一緒にって訳です。
NSDはSVNリポジトリが公開されているので、迷わずにtrunkをゲトしてきます。
svn co http://www.nlnetlabs.nl/svn/nsd/trunk/ nsd
NSDには、configure.acと言うファイルが含まれているので、
どうやらAutoconfでビルドしている様です。
cd nsd autoconf ./configure
なんかメッセージが沢山出力されるけれども一番最後で、エラーが出力されて何かガッカリです。
configure: creating ./config.status config.status: creating Makefile config.status: error: cannot find input file: `config.h.in'
config.h.inが無い的な話の様です。それでは、
autoheader ./configure
こんどはオッケーです。Makefileが生成されています。
configure: creating ./config.status config.status: creating Makefile config.status: creating config.h
では、普通にmakeしてみます。
make
特にエラーも無くビルド出来た様です。
ls -l | grep rwx drwxr-xr-x. 2 taichi taichi 4096 2010-08-04 17:18 autom4te.cache drwxrwxr-x. 3 taichi taichi 4096 2010-08-04 17:10 compat -rwxrwxr-x. 1 taichi taichi 30596 2010-08-04 17:21 config.status -rwxrwxr-x. 1 taichi taichi 235625 2010-08-04 17:18 configure drwxrwxr-x. 4 taichi taichi 4096 2010-08-04 17:10 contrib drwxrwxr-x. 3 taichi taichi 4096 2010-08-04 17:05 doc -rwxrwxr-x. 1 taichi taichi 5598 2010-08-04 17:11 install-sh -rwxrwxr-x. 1 taichi taichi 5318 2010-08-04 17:11 makedist.sh -rwxrwxr-x. 1 taichi taichi 719 2010-08-04 17:11 mkinstalldirs -rwxrwxr-x. 1 taichi taichi 909329 2010-08-04 17:23 nsd -rwxrwxr-x. 1 taichi taichi 569049 2010-08-04 17:23 nsd-checkconf -rwxrwxr-x. 1 taichi taichi 578130 2010-08-04 17:23 nsd-notify -rwxrwxr-x. 1 taichi taichi 653396 2010-08-04 17:23 nsd-patch -rwxrwxr-x. 1 taichi taichi 595930 2010-08-04 17:23 nsd-xfer -rwxrwxr-x. 1 taichi taichi 10492 2010-08-04 17:23 nsdc.sh drwxrwxr-x. 7 taichi taichi 4096 2010-08-04 17:10 tpkg -rwxrwxr-x. 1 taichi taichi 760598 2010-08-04 17:23 zonec
尚、DNSサーバはこの辺のサイトを見ると何かイッパイあってアレな気持ちになれます。
しかしもって、NSDはドキュメントらしいドキュメントがありませんが、大丈夫なんでしょうか?
BINDとの比較表だけ渡されても困るんですけども。
BINDを事細かに理解しているオルタナティブな人だけがNSDに触れるって事なんかな。
少し古い印象が無きにしもあらずですが、日本語で記述された記事もありました。
コードがあれば何とかなるさと言う気がしないでもない。
BIND9をビルドする。
最近にわかにDNSサーバブームであります。
正直、完全に素人な状態から根の深いテクノロジを勉強するのは久しぶりなので、基礎的な事柄から勉強していきます。
使っている環境は、大体こんな感じ。
BINDは、多分きっと間違いなくDNSサーバにおいて最大勢力を誇り、
DNSとかいう結構インターネットの根幹に関わるテクノロジであるにも関わらず、
毎週リリースされていたりします。
実業務としてDNSサーバの運用をやってる人はBINDなんぞ使ってないから問題ないんでしょうか?
まずは、最新のソースコードによるリリースをダウンロードしてきます。
僕がダウンロードしたのは、BIND 9.7.1-P2と言うバージョンです。
tar xvzf bind-9.7.1-P2.tar.gz cd bind-9.7.1-P2 ./configure make
特に問題なくビルド出来ました。
今日もビルドしてみた。
噂のLucandraをビルドしたよ。
slf4j使ってる風味なivy.xmlだけど実際に使ってるのは、
log4jなので、それっぽいdependencyを追加しないとコケる。
ナニソレ?って感じだけどもさ。
<ivy-module version="2.0"> <info organisation="lucandra" module="lucandra"/> <dependencies> <dependency org="log4j" name="log4j" rev="1.2.15" conf="* -> *,!sources,!javadoc"> <exclude name="jms" /> <exclude name="jmxtools" /> <exclude name="jmxri" /> </dependency> <dependency org="junit" name="junit" rev="4.6" conf="* -> *,!sources,!javadoc" /> <dependency org="org.slf4j" name="slf4j-api" rev="1.5.8" conf="* -> *,!sources,!javadoc"/> <dependency org="org.slf4j" name="slf4j-simple" rev="1.5.8" conf="* -> *,!sources,!javadoc"/> <dependency org="commons-lang" name="commons-lang" rev="2.4" conf="* -> *,!sources,!javadoc"/> <dependency org="org.apache.solr" name="solr-core" rev="1.4.0" conf="* -> *,!sources,!javadoc"/> </dependencies> </ivy-module>
ついでに、ant testってしようとするとクラス名がアレでナニなので、
テストにこけるっていうか、JUnitのテストコードじゃないものにも、
〜Testって付いてるんだよね。
というわけで、build.xmlも修正する。部分的に切りだすと、大体こんな感じ。
<target name="test" depends="compile.tests"> <echo message="running tests"/> <mkdir dir="${build}/output"/> <junit fork="on" failureproperty="testfailed"> <classpath refid="lucandra.classpath"/> <formatter type="xml" usefile="true"/> <formatter type="brief" usefile="false"/> <batchtest todir="${build}/output"> <fileset dir="${build.test.classes}" includes="**/LucandraTests*" /> </batchtest> <jvmarg value="-Dcassandra.host=${cassandra.host}"/> <jvmarg value="-Dcassandra.port=${cassandra.port}"/> <jvmarg value="-Dcassandra.framed=${cassandra.framed}"/> </junit> <fail if="testfailed" message="Some test(s) failed."/> </target>