幾分前に、自宅のCI環境で、CI結果を喋らせるために、Google Home に喋らせる環境を Dockerイメージにして公開していました。
…が、気づいたら起動しなくなってました…(´Д⊂グスン
以下、喋れるように改善したので記録として残してみる。
ちなみに、当問題の修正済みイメージ: https://hub.docker.com/r/knaou/google-home-notifier/
docker build が失敗する…?!
DockerをBuildしようとすると、止まる…?
dpkg: error: error creating new backup file ‘/var/lib/dpkg/status-old’: Invalid cross-device link
…はて? 原因不明…?
よくよく調べてみると…
https://github.com/docker/for-linux/issues/480
Kernel 4.19 で docker build ができない問題が報告されていました。使用している環境が Arch Linux で、最新カーネルを使っているので、思いっきり地雷抜きました…\(^o^)/
これに関しては、今(2018/11/17) は最新版のカーネルではどうしようも無いので、別のDocker環境で対処することにしました…。
avahi-daemon が起動しない!
前回作成した Docker イメージは、
- dubs 起動
- avahi-daemon 起動
- google-home-notifier を使用したすクリプトを実行
- 以下、後処理
という動きをしていたのですが、まずこの avahi-daemon 起動が失敗していました。これはGoogleHomeのホスト名を解決するために使ってるようです。
コンテナのなかで avahi-daemon が動かないという問題は他でも報告されているようでその場合は、名前解決を諦めて ip で指定するという解決策があるようでした。
でも、名前解決できないのは面倒なので、avahi-daemon を使う方向でちょっと調べてみた所…
avahi-daemon の起動オプションに、 –no-chroot なるものを発見…。あれ?もしかして、いつぞやのバージョンから、chrootするようになっている…?
Docker 自体が使ってる cgroup の仕組みを考えると、コンテナ内部で chroot はできない…はず。
試しに、/etc/init.d/avahi-daemon をいじって、–no-chroot ありで起動した所、動きました…! Dockerコンテナの中で avahi-daemon を動かすには、–no-chroot をつけて、chrootを抑止すればよいということがわかりました。
sed -ie ‘s/$DAEMON -D/$DAEMON –no-chroot -D/g’ /etc/init.d/avahi-daemon
Docker イメージには、上記起動オプションを変更する設定ファイル置換処理を入れて…解決…!
「Error: get key failed from google」
avahi-daemon が動いたと思ったら…次はこれ。
どうやら、Text-To-Speech API の仕様変更に、google-home-notifier が対応していないから起きた問題の模様。
参考: https://qiita.com/ktetsuo/items/21f4f85a98145772be3d
今回は、解決済みのパッケージを使うようにしてみました。
npm install https://github.com/kei-s/google-home-notifier/tarball/update-google-tts-api
よし…
解決!
これでやっと解決しました…。
長かった。
コメント
avahi は .local ドメインを見つけると自動的にデーモンの起動を制限するので、これも注意してくださいね。
https://www.picturecode.co.jp/faq/linux-bsd-dot-local-domain/
こちらも参考にしてください。
https://www.picturecode.co.jp/faq/dot-local-domain/
なるほど。mDNSとぶつかるんですね。
そして、日本で利用率が高いというのは初耳でした。
良い情報ありがとうございます!