🌐

PodmanでFing Agentを動かす

に公開

注意
本記事の内容はFing公式の方法ではなく、あくまで私の環境で動作した非公式手順です。
動作保証は致しかねますので、利用は自己責任でお願いします。

はじめに

我が家では、ネットワークに接続している機器を自動検出するためにDockerイメージのFing Agentを利用しています。
※ Fing Agentの利用にはFingの有料プランの契約が必要です

今まではRHEL9 + Dockerという変態構成で運用していましたが、RHEL10への移行を検討したところ、現時点ではRHEL10向けのDocker Engineが未提供でした。
そのため、RHEL公式のコンテナエンジンであるPodmanに移行することにしました。

Podman移行時の問題

公式のFing Agentのcompose.yamlをそのままPodmanで起動しようとすると、ログに以下のエラーが出力され続けて正常に動作しませんでした。

Unable to generate network signature: cannot find gateway MAC

いくつか切り分けを実施してみたところ、このエラーは以下のいずれかの条件で発生しました。

  • 一般ユーザ(root以外)で起動した場合
  • cap_addにNET_RAWを追加せずに起動した場合

Podmanでも動作するcompose.yml

公式のcompose.yamlに対して、以下のようにcap_addにNET_RAWを追加します。
rootユーザにてpodman compose up -dを実行することで、動作するようになりました。

services:
  fing-agent:
    image: fing/fing-agent:latest
    container_name: FingAgent
    network_mode: host
    cap_add:
      - NET_ADMIN
      - NET_RAW
    ports:
      - "44444:44444"
    restart: always
    deploy:
      restart_policy:
        condition: always
    volumes:
      - fing-data-volume:/app/fingdata

volumes:
  fing-data-volume:
    name: fing-data-volume

Quadletで自動起動

compose.yamlでrestart: alwaysを指定していても、Podmanではホストの再起動時にコンテナが自動起動してきません。
Quadletを使用することでコンテナがsystemdの管理下となり、常時起動させることが可能です。

/etc/containers/systemd/fing-data-volume.volume
[Volume]
VolumeName=fing-data-volume
/etc/containers/systemd/fing-agent.container
[Unit]
Description=FingAgent (Podman Quadlet)

[Container]
ContainerName=FingAgent
Image=fing/fing-agent:latest
Network=host
AddCapability=NET_ADMIN
AddCapability=NET_RAW
Volume=fing-data-volume:/app/fingdata

[Service]
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target
# systemctl daemon-reload

### 起動状態の確認
# systemctl status fing-agent.service

### 停止していたら起動させる
# systemctl start fing-agent.service

Discussion