このページは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に変えたのは、他意はありません。
Last update: $Date: 2018-10-21 16:09:48 +0900 (Sun, 21 Oct 2018) $