EL-USB-RTで温度監視しようと思ったらDNSにはまる

# みんな大好きTEMPer
入手性も良く、安価なUSB温度計[Gold TEMPer](http://www.pcsensor.com/usb-thermometers/gold-temper.html)だが、自分が入手したV1.4では、こんなエラーが出まくる。

```
$ dmesg
Oct 06 19:35:08 arch kernel: input: RDing TEMPerV1.4 as /devices/pci0000:00/0000:00:15.0/usb1/1-7/1-7:1.0/0003:0C45:7401.002C/input/input35
Oct 06 19:35:08 arch kernel: hid-generic 0003:0C45:7401.002C: input,hidraw1: USB HID v1.10 Keyboard [RDing TEMPerV1.4] on usb-0000:00:15.0-7/input0
Oct 06 19:35:08 arch kernel: hid-generic 0003:0C45:7401.002D: hiddev1,hidraw2: USB HID v1.10 Device [RDing TEMPerV1.4] on usb-0000:00:15.0-7/input1
Oct 06 19:35:08 arch systemd-logind[397]: Watching system buttons on /dev/input/event2 (RDing TEMPerV1.4)
```

ググった感じではどうしようもなさそうだったのと、ログも汚れるので、湿度も取れる[EasyLog EL-USB-RT](https://www.lascarelectronics.com/easylog-data-logger-el-usb-rt/)でやってみよう。
…え、[Linux用ソフトのソースが無い?](https://www.lascarelectronics.com/software/easylog-rt/)

# Linux用ソースと環境
[こちらのソース](https://github.com/rca/lascar-usb-thermometer)をありがたく使わせていただく。
[libhid](https://tracker.debian.org/pkg/libhid)が必要とのこと。

# libhid
だいぶ古く、[Ubuntuからも消えている](https://launchpad.net/ubuntu/+source/libhid/+publishinghistory)模様。
…が、[ArchLinuxにはAURで入れられる](https://aur.archlinux.org/packages/libhid/)模様。

## AURによるlibhidのインストール
```
$ git clone https://aur.archlinux.org/libhid.git
$ cd libhid
$ makepkg -si
```

…で入るはずが、失敗。
どうも、`PKGBUILD`にある`source`の取得に失敗している模様。
原因は[後ほど](#makepkgが失敗した原因)。

## 回避策
### PKGBUILDのsourceを書き換える

```
source=("https://alioth-archive.debian.org/releases/libhid/libhid/$pkgver/$pkgname-$pkgver.tar.gz")
```

としたら、うまく行った。
置き場所が変わったり、debian.orgのDNSレコードが変わったら、ダメになるかもしれない。

## /etc/systemd/resolved.confを書き換える
`DNSSEC=false`にする。
他のDNSクエリーのDNSSEC署名検証も、Offになってしまう。

### /etc/nsswitch.confを書き換える
`hosts:`にある`resolve`を`dns`にする。
/etc/resolv.confが正しく設定されていることが前提になると思われる。

### systemd-resolvedを止める

```
# systemctl stop systemd-resolved
```

で止める。
/etc/nsswitch.confの`hosts:`に`dns`があり、/etc/resolv.confが正しく設定されていることが前提になると思われる。

# Linux用ソースのビルド
libhidが入ったら、後は簡単。

```
$ git clone https://github.com/rca/lascar-usb-thermometer.git
$ cd lascar-usb-thermometer
$ make
$ sudo ./usb_termometer
temp: 25.6, hum: 58.5
```

# makepkgが失敗した原因
`PKGBUILD`の`source`にある`distcache.FreeBSD.org`の名前解決に失敗している。
このホスト名のドメイン`FreeBSD.org`は署名されているが、ホスト名はCNAMEとなっており、CNAME先のホスト名のドメイン`geo.FreeBSD.org`は署名されていない模様。
これをsystemd-resolvedは署名検証失敗としているようだ。

```
$ drill @127.0.0.53 distcache.FreeBSD.org
;; ->>HEADER<<- opcode: QUERY, rcode: SERVFAIL, id: 30015
:
# journalctl -u systemd-resolved -e
Oct 08 01:28:30 arch systemd-resolved[9360]: DNSSEC validation failed for question distcache.FreeBSD.org IN A: invalid
```

なお、[Google Public DNSは署名検証している](https://developers.google.com/speed/public-dns/faq)とのことだが、systemd-resolvedとは動きが異なり、エラーにならない。

```
$ drill @8.8.8.8 distcache.FreeBSD.org
;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 9977
:
```

# 宿題
- 他のHIDライブラリへの載せ替え
- 温度計とは無関係の、CNAMEが別ドメイン時の署名検証のRFC調査

# ツッコミ
- RPi + そのへんのセンサーのほうが安い?
- 新しいTEMPerは?

# 参考文献
- [Solaris de USB温度計](https://shakemid.hatenablog.com/entry/2017/09/01/191753)…最近のTEMPer事情が分かる
- [127.0.0.53:53 って 誰が 使ってるの？](https://qiita.com/shooskay/items/a4f7b61bfe4c3a0d578e)…自分が使っていることに気づきませんでした
- [systemd-resolved.service](https://www.freedesktop.org/software/systemd/man/systemd-resolved.service.html)
    - [nss-resolve](https://www.freedesktop.org/software/systemd/man/nss-resolve.html#)