on-the-fly zone management

このページはKnot DNS 2.6.5で動作を確認しています。

動作中のknotdに対し、knotcで以下のように操作します。


$ knotc zone-begin example2.jp
OK


2018-09-05T21:02:31 info: [example2.jp.] control, received command 'zone-begin'


$ knotc zone-set example2.jp www 1d AAAA 2001:db8::80
OK


2018-09-05T21:04:15 info: [example2.jp.] control, received command 'zone-set'


$ knotc zone-diff example2.jp
[example2.jp.] +www.example2.jp. 86400 AAAA 2001:db8::80


2018-09-05T21:05:44 info: [example2.jp.] control, received command 'zone-diff'

www.example2.jpのAAAAレコードがtransaction中で保留されていることが確認できます。


$ knotc zone-commit example2.jp
OK


2018-09-05T21:07:12 info: [example2.jp.] control, received command 'zone-commit'
2018-09-05T21:07:12 info: [example2.jp.] zone file updated, serial 1 -> 2

transactionがcommitされました。/etc/knot/primary/example2.jp.zoneは


$ cat /etc/knot/primary/example2.jp.zone
;; Zone dump (Knot DNS 2.6.5)
example2.jp.        	21600	SOA	ns.example2.jp. hostmaster.example2.jp. 2 3600 1800 2592000 3600
example2.jp.        	21600	NS	ns.example2.jp.
ns.example2.jp.     	21600	AAAA	2001:db8::2
www.example2.jp.    	86400	AAAA	2001:db8::80
;; Written 4 records
;; Time 2018-09-05 21:07:12 JST

という内容になっています。

クエリしてみます。


$ kdig +norec @localhost www.example2.jp ANY
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 32255
;; Flags: qr aa; QUERY: 1; ANSWER: 1; AUTHORITY: 0; ADDITIONAL: 0

;; QUESTION SECTION:
;; www.example2.jp.    		IN	ANY

;; ANSWER SECTION:
www.example2.jp.    	86400	IN	AAAA	2001:db8::80

;; Received 61 B
;; Time 2018-09-05 21:13:14 JST
;; From ::1@53(UDP) in 0.2 ms

ちゃんと追加したwww.example2.jpの応答が返ってきます。

実は最初、knotc.confでuserを仮想ユーザknotに設定しているのに/etc/knot/primaryのownerがrootになっていて、knotc zone-begin、knotc zone-setは正常にできたのにknotc zone-commitすると2.4.0では


2018-08-23T19:37:50 info: [example1.jp.] control, received command 'zone-commit'
2018-08-23T19:37:50 error: [example1.jp.] failed to open journal '/var/lib/knot/journal'
2018-08-23T19:37:50 error: [example1.jp.] control, error (not enough memory)

というエラーが出てしまいました。failed to openと指摘されている/var/lib/knot/journalは


$ ls -al /var/lib/knot/journal
合計 20
drwxrwx--- 2 knot root  4096  8月 23 19:29 .
drwxr-xr-x 4 knot knot  4096  8月 23 19:29 ..
-rw-rw---- 1 knot root  8192  8月 23 19:29 data.mdb

というownerとpermissionで問題なさそうだし、本当に物理メモリやswapが足りていないとも思えず途方に暮れていました。

その後、2.6.5のバイナリパッケージを発見したので更新してから同じ操作をしてみたところ、エラーメッセージが


2018-09-05T21:18:12 warning: [example2.jp.] failed to update zone file (operation not permitted)
2018-09-05T21:18:12 error: [example2.jp.] zone event 'journal flush' failed (operation not permitted)

という文面に変わり、journalじゃなくってテキストバージョンのゾーンデータ、/etc/knot/primary/example2.jp.zoneに問題があることがわかりました。操作対象をexample1.jpからexample2.jpに変えたのは、他意はありません。


Copyright(c) 2018 Koh-ichi Ito, All rights reserved

Last update: $Date: 2018-10-21 16:09:48 +0900 (Sun, 21 Oct 2018) $

[templateへ|indexへ|dynamic configurationへ]