🌐
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