このページはリンク切れを生じないために残してありますが、内容は古くなっていますのでご注意下さい。
インストール
まずhttp://www.knot-dns.cz/からソースをgetします。今のところ最新はv1.0.6です。getしたtar-ballを展開します。gitでレポジトリも公開されています。
Ubuntu 12.04 LTSにインストールしてみる
Ubuntu 12.04 LTSではREADMEに書いてある通りの手順ですんなりインストールできました。
apt-getで依存するパッケージをインストールします。
% /usr/bin/sudo apt-get install autoconf libtool flex bison libssl-dev liburcu-dev
続いてautoreconfig、configureを実行します。今回は
% autoreconf -if
% ./configure --prefix=/proj/knot-1.0.6 --sysconfdir=/proj/knot-dns/etc --localstatedir=/proj/knot-dns/var
というパラメータでインストールしました。
configureがエラーを発生せず終了したらmakeします。
% make
makeもエラーを発生せず終了したらmake installを実行してインストールし、さらにインストールされたダイナミックライブラリにアクセスできるようldconfigを実行します。
% /usr/bin/sudo make install
% /usr/bin/sudo ldconfig
これでインストールは終了です。
FreeBSD 8.3-RELEASEにインストールしてみる
portsでdevel/libtool、devel/autoconf、textproc/flex、devel/bisonをインストールします。
liburcuはREADMEにも書いてあるように、現時点ではportsにはありませんので、ソースの配布物からインストールしなければなりません。配布サイトはhttp://lttng.org/downloadです。READMEには0.5.4以上が必要と書いてありますが、現時点での最新である0.7.3を使ってみます。配布ファイルの名前はuserspace-rcu-0.7.3.tar.bz2です。
適切なディレクトリにソースを展開します。
% tar xvzf ~/work/userspace-rcu-0.7.3.tar.bz2
x userspace-rcu-0.7.3/
x userspace-rcu-0.7.3/liburcu-bp.pc.in
x userspace-rcu-0.7.3/LICENSE
:
:
configureを実行します。インストールを試したホストの都合で、--prefix=/pubとしました。
% cd userspace-rcu-0.7.3
% ./configure --prefix=/pub
checking build system type... x86_64-unknown-freebsd8.3
checking host system type... x86_64-unknown-freebsd8.3
:
:
config.status: executing depfiles commands
config.status: executing libtool commands
SMP support enabled.
configureがエラーを起こさず終了したのでmakeします。
% make
make all-recursive
Making all in .
CC wfqueue.lo
:
:
CC test_urcu_hash-compat_futex.o
CCLD test_urcu_hash
makeも成功したのでrootになりmake installします。
% /usr/bin/su
Password:
# make install
Making install in .
test -z "/pub/lib" || config/install-sh -c -d "/pub/lib"
:
:
/usr/bin/install -c -m 644 rcu-api.txt cds-api.txt uatomic-api.txt '/pub/share/doc/userspace-rcu'
Making install in tests
liburcuがインストールできたので、いよいよKnot DNSのビルドに取りかかります。knot-1.0.6にcdして、まずはREADMEにしたがってautoreconfを実行します。
% autoreconf -if
libtoolize: putting auxiliary files in `.'.
libtoolize: copying file `./ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `m4'.
libtoolize: copying file `m4/libtool.m4'
libtoolize: copying file `m4/ltoptions.m4'
libtoolize: copying file `m4/ltsugar.m4'
libtoolize: copying file `m4/ltversion.m4'
libtoolize: copying file `m4/lt~obsolete.m4'
続いてconfigureを実行します。
% ./configure --prefix=/pub/knot-1.0.6
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
:
:
checking for library containing rcu_set_pointer_sym... no
configure: error: liburcu not found
liburcuを非標準のディレクトリにインストールしたので、Knot DNSのconfigureが発見してくれませんでした。環境変数CFLAGSとLIBSを設定して、もう一度やってみます。
% setenv CFLAGS -I/pub/include
% setenv LIBS -L/pub/lib
% ./configure --prefix=/pub/knot-1.0.6
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
:
:
config.status: executing depfiles commands
config.status: executing libtool commands
今度はうまく行きました。それではmakeしてみましょう。
% make
Making all in src
make all-am
/bin/sh ../libtool --tag=CC --mode=compile gcc -std=gnu99 -DHAVE_CONFIG_H -I. -Wall -Ilibknot -DLIBEXECDIR='"/pub/knot-1.0.6/libexec"' -DSYSCONFDIR='"/pub/knot-1.0.6/etc"' -DSBINDIR='"/pub/knot-1.0.6/sbin"' -I/pub/include -I/usr/local/include -mmmx -msse -msse2 -msse3 -MT utils.lo -MD -MP -MF .deps/utils.Tpo -c -o utils.lo `test -f 'libknot/util/utils.c' || echo './'`libknot/util/utils.c
:
:
libtool: compile: gcc -std=gnu99 -DHAVE_CONFIG_H -I. -Wall -Ilibknot -DLIBEXECDIR=\"/pub/knot-1.0.6/libexec\" -DSYSCONFDIR=\"/pub/knot-1.0.6/etc\" -DSBINDIR=\"/pub/knot-1.0.6/sbin\" -I/pub/include -I/usr/local/include -mmmx -msse -msse2 -msse3 -MT dthreads.lo -MD -MP -MF .deps/dthreads.Tpo -c knot/server/dthreads.c -fPIC -DPIC -o .libs/dthreads.o
knot/server/dthreads.c: In function 'dt_setaffinity':
knot/server/dthreads.c:864: error: 'cpu_set_t' undeclared (first use in this function)
knot/server/dthreads.c:864: error: (Each undeclared identifier is reported only once
knot/server/dthreads.c:864: error: for each function it appears in.)
knot/server/dthreads.c:868: warning: implicit declaration of function 'pthread_setaffinity_np'
knot/server/dthreads.c:868: error: expected expression before ')' token
*** Error code 1
Stop in /u1/share/pub/src/knot-dns/knot-1.0.6/src.
*** Error code 1
Stop in /u1/share/pub/src/knot-dns/knot-1.0.6/src.
*** Error code 1
Stop in /u1/share/pub/src/knot-dns/knot-1.0.6.
調べてみたところ、FreeBSDでは定義されていないcpu_set_tが使われていることが原因でした。ちなみにUbuntu 12.04 LTSでは/usr/include/i386-linux-gnu/bits/sched.hの中で定義されていました。なお、この問題はv1.1.0-rc1では修正されています。
原因となったknot-1.0.6/src/knot/server/dthreads.cの864行目付近は
#ifdef HAVE_PTHREAD_SETAFFINITY_NP
if (len != sizeof(cpu_set_t)) {
return KNOTD_EINVAL;
}
pthread_t tid = pthread_self();
int ret = pthread_setaffinity_np(tid, len, (cpu_set_t*)mask);
if (ret < 0) {
return KNOTD_ERROR;
}
#else
return KNOTD_ENOTSUP;
#endif
となっています。小手先ですが、試しにknot-1.0.6/src/config.hを以下のように書き換えてみました。
% cd src
% mv config.h config.h.ORG
% cp config.h.ORG config.h
% ed config.h
10154
/HAVE_PTHREAD_SETAFFINITY_NP
#define HAVE_PTHREAD_SETAFFINITY_NP 1
s/^#define/#undef/
s/ 1$//
p
#undef HAVE_PTHREAD_SETAFFINITY_NP
s/^#define/#undef/
s/ 1$//
p
#undef HAVE_PTHREAD_SETAFFINITY_NP
w
10151
q
% diff -u config.h.ORG config.h
--- config.h.ORG 2012-06-30 14:56:16.000000000 +0900
+++ config.h 2012-06-30 15:08:09.000000000 +0900
@@ -107,7 +107,7 @@
#define HAVE_PSELECT 1
/* Define to 1 if you have the `pthread_setaffinity_np' function. */
-#define HAVE_PTHREAD_SETAFFINITY_NP 1
+#undef HAVE_PTHREAD_SETAFFINITY_NP
/* Define to 1 if you have the `regcomp' function. */
#define HAVE_REGCOMP 1
% cd ..
これでもう1度makeしてみます。
% make
Making all in src
make all-am
/bin/sh ../libtool --tag=CC --mode=compile gcc -std=gnu99 -DHAVE_CONFIG_H -I. -Wall -Ilibknot -DLIBEXECDIR='"/pub/knot-1.0.6/libexec"' -DSYSCONFDIR='"/pub/knot-1.0.6/etc"' -DSBINDIR='"/pub/knot-1.0.6/sbin"' -I/pub/include -I/usr/local/include -mmmx -msse -msse2 -msse3 -MT utils.lo -MD -MP -MF .deps/utils.Tpo -c -o utils.lo `test -f 'libknot/util/utils.c' || echo './'`libknot/util/utils.c
:
:
libtool: link: gcc -std=gnu99 -Wall -Ilibknot -DLIBEXECDIR=\"/pub/knot-1.0.6/libexec\" -DSYSCONFDIR=\"/pub/knot-1.0.6/etc\" -DSBINDIR=\"/pub/knot-1.0.6/sbin\" -I/pub/include -I/usr/local/include -mmmx -msse -msse2 -msse3 -o knotd main.o -L/usr/local/lib ./.libs/libknotd.a -L/pub/lib ./.libs/libknot.a ./.libs/libknots.a -lz -lcrypto /pub/lib/liburcu.so /pub/lib/liburcu-common.so -lpthread -lm -Wl,-rpath -Wl,/pub/lib -Wl,-rpath -Wl,/pub/lib
Making all in samples
rootになってmake installします。
% /usr/bin/su
Password:
# make install
Making install in src
make install-am
:
:
[ -d //pub/knot-1.0.6/etc ] || /usr/bin/install -c -d //pub/knot-1.0.6/etc
[ -f //pub/knot-1.0.6/etc/knot.sample.conf ] || /usr/bin/install -c -m 644 knot.sample.conf example.com.zone //pub/knot-1.0.6/etc
起動してみます。
# /pub/knot-1.0.6/sbin/knotc -i start
2012-06-30T15:16:32.613555+09:00 Using '/pub/knot-1.0.6/etc/knot.conf' as default configuration.
2012-06-30T15:16:32.613819+09:00 Running in interactive mode.
2012-06-30T15:16:32.615703+09:00 Reading configuration '/pub/knot-1.0.6/etc/knot.conf' ...
2012-06-30T15:16:32.615872+09:00 Loading 1 compiled zones...
2012-06-30T15:16:32.616135+09:00 Loaded zone 'example2.jp.'
2012-06-30T15:16:32.616423+09:00 Loaded 1 out of 1 zones.
2012-06-30T15:16:32.616438+09:00 Configured 0 interfaces and 1 zones.
2012-06-30T15:16:32.616443+09:00
2012-06-30T15:16:32.616447+09:00 Starting server...
2012-06-30T15:16:32.616557+09:00 Server started in foreground, PID = 65840
2012-06-30T15:16:32.616564+09:00 PID stored in /pub/knot-1.0.6/var/knot.pid
クエリにも応答しています。実験環境の都合でknot.confのinterfaces{}にはport 8053;と書いています。
% dig -p 8053 @localhost example2.jp SOA
; <<>> DiG 9.6.-ESV-R5-P1 <<>> @localhost -p 8053 example2.jp SOA
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8036
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;example2.jp. IN SOA
;; ANSWER SECTION:
example2.jp. 86400 IN SOA ns.example2.jp. hostmaster.example2.jp. 2012062401 1200 900 2419200 900
;; AUTHORITY SECTION:
example2.jp. 86400 IN NS ns.example2.jp.
;; ADDITIONAL SECTION:
ns.example2.jp. 86400 IN A 203.0.113.1
;; Query time: 0 msec
;; SERVER: 127.0.0.1#8053(127.0.0.1)
;; WHEN: Sat Jun 30 15:24:54 2012
;; MSG SIZE rcvd: 120
Copyright(c) 2012 Koh-ichi Ito, All rights reserved
ページ先頭のアイコン: Copyright(c) 2017 いらすとや, All rights reserved.
Last update: $Date: 2019-08-16 11:45:02 +0900 (Fri, 16 Aug 2019) $
[indexへ|DNS関連情報へ|起動へ]