Fedora Linux 36
/etc/fstab には次のインストール形式があります。
192.168.1.101:/volume1/video /mnt/synology_video nfs rsize=8192,wsize=8192,intr,comment=systemd.automount 0 0
192.168.1.101:/volume1/music /mnt/synology_music nfs rsize=8192,wsize=8192,intr,comment=systemd.automount 0 0
マシンが起動すると、systemctlは以下のようにインストールのステータスを表示します。「待機」状態に注意してください:
mnt-synology_music.automount loaded active waiting mnt-synology_music.automount
mnt-synology_video.automount loaded active waiting mnt-synology_video.automount
Jellyfinサーバーを実行するPodmanコンテナがあり、次のようにユニットファイルに設定されているpodman-startを使用してサーバーを再起動する必要があります。
[Unit]
Description=Podman Start All Containers With Restart Policy Set To Always
Documentation=man:podman-start(1)
StartLimitIntervalSec=0
Wants=network-online.target
After=network-online.target mnt-synology_music.automount mnt-synology_video.automount
[Service]
Type=oneshot
RemainAfterExit=true
Environment=LOGGING="--log-level=info"
ExecStart=/usr/bin/podman $LOGGING start --all --filter restart-policy=always
ExecStop=/bin/sh -c '/usr/bin/podman $LOGGING stop $(/usr/bin/podman container ls --filter restart-policy=always -q)'
[Install]
WantedBy=default.target
Podmanコンテナ自体は、ボリュームマウント(-vオプション)を使用してホストにファイルシステムをマウントします(おそらくこの部分を変更し、直接マウントする必要がありますか?)。
ただし、コンテナを再起動しようとすると失敗します。インストールごとに正確に一度だけ成功すれば成功します。シンボリックリンク関連のエラーです。私はシンボリックリンクを使用しません:
Error: OCI runtime error: crun: error stat'ing file `/mnt/synology_music`: Too many levels of symbolic links
コンテナが各マウントに当たると、または手動でls
インストールする場合、systemdの状態は魔法のようになります。走る。今、カタログの1つがls
マウントに火をつけており、以前は実際に「接続」されておらず、何かがマウントに触れるのを待っていることは明らかです。
mnt-synology_music.automount loaded active running mnt-synology_music.automount
mnt-synology_video.automount loaded active running mnt-synology_video.automount
その後、「nfsマウントを開始する前に実際にディレクトリに到達するのを待つ」追加のレベルがあるように見えます。これにより、コンテナは完全に再起動されません。コンテナが各ファイルシステムを計算すると、魔法のようにシステム化されます。実際にインストールを開始すると機能しますが、これにより自動再始動は機能しません。
この動作に影響を与えるオプションが見つかりません。実際にどこかからls -l
始めるには、ただしろというコメントを見ましたが、本当に言葉にならないことでした。自動的に実行するにはこの機能が必要であり、それを実行するにはコマンドを作成する必要があることに気づいたls -l
ようです。
この問題を正しく解決するには?
答え1
わかりました。コミュニティに感謝します。答えは次のとおりです。Podman ボリュームを作成し、nfs に直接マウントします。コンテナがPodmanボリュームに到達し、Podmanによってマウントされます。
私はansibleを使用しているので、次のようになります。
- name: mount same volumes with podman too
containers.podman.podman_volume:
state: present
name: "{{ item.name }}"
options:
- "type=nfs"
- "o=rw"
- "device=192.168.1.101:{{ item.path }}"
with_items:
- {"name": "synology_music", "path": "/volume1/music"}
- {"name": "synology_video", "path": "/volume1/video"}
# later, run container
- name: run container
containers.podman.podman_container:
image: docker.io/jellyfin/jellyfin:latest
name: jellyfin
recreate: "{{ force_container_rebuild|bool }}"
restart_policy: always
privileged: yes
capabilities:
- NET_ADMIN
published_ports:
- "{{ jellyfin_service_ip }}:8096:8096/tcp"
- "{{ jellyfin_service_ip }}:8920:8920/tcp"
- "{{ jellyfin_service_ip }}:1900:1900/udp"
- "{{ jellyfin_service_ip }}:7359:7359/udp"
volumes:
- "{{ infrastructure_path }}/jellyfin/config:/config:Z"
- "{{ infrastructure_path }}/jellyfin/cache:/cache:Z"
- "synology_video:/video"
- "synology_music:/music"