pkg・ports アップデート関連 - その他一般 - unbound 1.13.1 → 1.13.2

クラウディア 
1. 概要
2. 調査
3. 中途半端
4. 解決

1. 概要

 この記事を書いているのは、2021年9月13日ですが、実は数週間前から発生しています。  「ports - FreeBSD ports tree」を参照すると、「unbound 1.13.2」は、2021年8月16日にリリースされていますので、そのときには、発生していることになります。

$ pkg version -vl "<"
unbound-1.13.1                     <   needs updating (index has 1.13.2)
 ちゅうことで、アップグレードしようとしますと。

$ portupgrade -Rr unbound
[Reading data from pkg(8) ... - 385 packages found - done]
[Gathering depends for dns/unbound ................................................................. done]
[Exclude up-to-date packages ...................... done]
--->  Upgrading 'unbound-1.13.1' to 'unbound-1.13.2' (dns/unbound)
--->  Building '/usr/ports/dns/unbound'
===>  Cleaning for unbound-1.13.2
===>  License BSD3CLAUSE accepted by the user
===>   unbound-1.13.2 depends on file: /usr/local/sbin/pkg - found
===> Fetching all distfiles required by unbound-1.13.2 for building
===>  Extracting for unbound-1.13.2
=> SHA256 Checksum OK for unbound-1.13.2.tar.gz.
===>  Patching for unbound-1.13.2
===>   unbound-1.13.2 depends on package: pkgconf>=1.3.0_1 - found
===>   unbound-1.13.2 depends on file: /usr/local/lib/libcrypto.so.11 - found
===>   unbound-1.13.2 depends on package: autoconf>=2.69 - found
===>   unbound-1.13.2 depends on package: automake>=1.16.1 - found
===>   unbound-1.13.2 depends on executable: libtoolize - found
===>   unbound-1.13.2 depends on shared library: libexpat.so - found (/usr/local/lib/libexpat.so)
===>   unbound-1.13.2 depends on shared library: libevent.so - found (/usr/local/lib/libevent.so)
===>  Configuring for unbound-1.13.2
libtoolize: putting auxiliary files in '.'.
libtoolize: copying file './ltmain.sh'
libtoolize: Remember to add 'LT_INIT' to configure.ac.

・・・	略	・・・

--- unbound ---
libtool: link: cc -I. -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include -DSRCDIR=. -O2 -pipe -fstack-protector-strong -fno-strict-aliasing -D_THREAD_SAFE -pthread -Wl,-rpath -Wl,/usr/local/lib -fstack-protector-strong -o unbound .libs/acl_list.o .libs/cachedump.o .libs/daemon.o .libs/shm_main.o .libs/remote.o .libs/stats.o .libs/unbound.o .libs/worker.o .libs/dns.o .libs/infra.o .libs/rrset.o .libs/dname.o .libs/msgencode.o .libs/as112.o .libs/msgparse.o .libs/msgreply.o .libs/packed_rrset.o .libs/iterator.o .libs/iter_delegpt.o .libs/iter_donotq.o .libs/iter_fwd.o .libs/iter_hints.o .libs/iter_priv.o .libs/iter_resptype.o .libs/iter_scrub.o .libs/iter_utils.o .libs/localzone.o .libs/mesh.o .libs/modstack.o .libs/view.o .libs/outbound_list.o .libs/alloc.o .libs/config_file.o .libs/configlexer.o .libs/configparser.o .libs/fptr_wlist.o .libs/edns.o .libs/locks.o .libs/log.o .libs/mini_event.o .libs/module.o .libs/net_help.o .libs/random.o .libs/rbtree.o .libs/regional.o .libs/rtt.o .libs/dnstree.o .libs/lookup3.o .libs/lruhash.o .libs/slabhash.o .libs/tcp_conn_limit.o .libs/timehist.o .libs/tube.o .libs/winsock_event.o .libs/autotrust.o .libs/val_anchor.o .libs/rpz.o .libs/validator.o .libs/val_kcache.o .libs/val_kentry.o .libs/val_neg.o .libs/val_nsec3.o .libs/val_nsec.o .libs/val_secalgo.o .libs/val_sigcrypt.o .libs/val_utils.o .libs/dns64.o .libs/authzone.o .libs/respip.o .libs/netevent.o .libs/listen_dnsport.o .libs/outside_network.o .libs/ub_event.o .libs/keyraw.o .libs/sbuffer.o .libs/wire2str.o .libs/parse.o .libs/parseutil.o .libs/rrdef.o .libs/str2wire.o  -L/usr/local/lib -lssl -lutil -lcrypto -pthread  -Wl,-rpath -Wl,/usr/local/lib
--- unbound-control ---
ld: error: undefined symbol: event_get_version
>>> referenced by ub_event.c
>>>               .libs/ub_event.o:(ub_event_get_version)
>>> referenced by ub_event.c
>>>               .libs/ub_event.o:(ub_get_event_sys)

・・・	略	・・・

ld: error: undefined symbol: event_del
>>> referenced by ub_event.c
>>>               .libs/ub_event.o:(ub_event_del)
>>> referenced by ub_event.c
>>>               .libs/ub_event.o:(ub_timer_del)
>>> referenced by ub_event.c
>>>               .libs/ub_event.o:(ub_signal_del)
cc: error: linker command failed with exit code 1 (use -v to see invocation)
*** [unbound] Error code 1

make[2]: stopped in /usr/ports/dns/unbound/work/unbound-1.13.2
4 errors

make[2]: stopped in /usr/ports/dns/unbound/work/unbound-1.13.2
===> Compilation failed unexpectedly.
Try to set MAKE_JOBS_UNSAFE=yes and rebuild before reporting the failure to
the maintainer.
*** Error code 1

Stop.
make[1]: stopped in /usr/ports/dns/unbound
*** Error code 1

Stop.
make: stopped in /usr/ports/dns/unbound
** Command failed [exit code 1]: /usr/bin/script -qa /tmp/portupgrade20210913-41960-b1lhvg env UPGRADE_TOOL=portupgrade UPGRADE_PORT=unbound-1.13.1 UPGRADE_PORT_VER=1.13.1 make
** Fix the problem and try again.
** Listing the failed packages (-:ignored / *:skipped / !:failed)
        ! dns/unbound (unbound-1.13.1)  (linker error)
 てなことになります。

2. 調査

 実は、リリースされてから、これだけ日数が経過しているのは・・・。  これは、リリースされているものが「broken」であるとみなして、次期リリースを待とうと思っておったのです。  ところが、別のマシンになんの気なしに、同じ「portupgrade」を行うと、すんなり通ってしまったのです。  なんの違いかとつらつら見てみますと、どうも、オプションが変わっているようです。  うまくアップグレードできた方のオプションを見てみると
「/usr/ports/dns/unbound」-「make config ①」

「/usr/ports/dns/unbound」-「make config ②」

 ちゅなことになっておる。
 うまくアップグレードできなかった方と見比べると、うまくできなかった方は、「DOH」と「GOST」のオプションのチェックが入っていない。

 ということで、オプションを変更して、アップグレードしてみようとしたのですが・・・。
 同じ現象が出て、解決しない。

 で、もう一度、よくログを見る。
 どうもね。「xx_event」というのがエラーになっています。
 これは、「libevent」というライブラリに含まれておるようなのです。
 「libevent」は、インストールされているんだけどな。

 で、オプションを見ると


[x] LIBEVENT      Build against libevent
 というオプションがあります。  このオプションを恐る恐る、はずして「make」してみると・・・通るのです。

3. 中途半端

 これで、解決と言えるのかどうか、不安ではあります。  前項の「LIBEVENT」のチェックをはずした状態で、「portupgrade」したら、そのまま通っちゃいました。

service unbound restart
 もすんなり通って、見る限りは、「ubound」が動いているように見えます。  このまま、様子をみてみますか。  コンテンツサーバではないので、そこまで、重く考えなくてもいいのかしら?

4. 解決

 結局、次ページの「memcached」の解決でこれも応用が利きました。  すなわち

cd /usr/ports/devel/libevent
make
make reinstall
 の後

cd /usr/ports/dns/unbound/
make config
 で、「LIBEVENT」のチェックをいれなおして

cd /usr/ports/dns/unbound/
make
make reinstall
service unbound restart
 で、うまくいきました。
ハイスピードプラン