QEMU/KVMを動かしているホスト上でMirakurunを動かし、仮想ネットワークを通してゲスト上で動いているChinachuで受信したい。基本的にデフォルト設定ではゲストとホストが直接通信することはできないため、isolatedモードの仮想ネットワークを追加し、それ経由で通信する。

が、この仮想ネットワークの起動タイミングが遅く、Mirakurunのような起動時にIPが取得できているネットワークのみをlistenするように書かれているプログラムでは、仮想ネットワークのlistenがすり抜けてしまうことがある。

これを解決するためには、netplanとnetworkd-wait-online.serviceを組み合わせるか、Mirakurunを起動させているデーモンの順番を調整する必要がある。今回は後者で対策。

仮想ネットワークを起動しているサービスはlibvirtd.service これより後に任意のサービスが起動できるようにすればよい。

Mirakurunを起動させているデーモンはPM2のため、PM2のサービスファイルを編集する。

nano /etc/systemd/system/pm2-root.service

UnitにAfter=libvirtd.serviceを追記する。

[Unit]
Description=PM2 process manager
Documentation=https://pm2.keymetrics.io/
After=network.target
After=libvirtd.service

daemon-reloadで設定を適応する。

sudo systemctl daemon-reload

これで仮想ネットワークの起動以降にPM2が起動されるため、ネットワークを取りことがなくなる。