Google Home が喋らなくなったので…治してみた

Google Home に喋らせる環境をDockerイメージにした話

幾分前に、自宅の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

よし…

解決!

これでやっと解決しました…。
長かった。

Spread the love
  •  
  •  
  •  
  •  

“Google Home が喋らなくなったので…治してみた” への2件の返信

    • なるほど。mDNSとぶつかるんですね。
      そして、日本で利用率が高いというのは初耳でした。

      良い情報ありがとうございます!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*