[2024/07/02] Điều chỉnh lại Ivy-Service

Ban đầu CT Ivy-Service không sử dụng Container bên trong mà chạy trực tiếp Jellyfin và Plex trên đó. Cách này có ưu điểm là các Service này có thể sử dụng phần cứng Host pass vào CT một cách dễ dàng. Ưu điểm này không còn là ưu điểm nếu sử dụng Docker hay Podman ở rootful mode, nhưng vì sử dụng Podman ở rootless mode nên việc pass phần cứng từ Host vào LXC rồi lại vào rootless Container không phải lúc nào cũng suôn sẻ. Đặc biệt trong thư viện với quá nhiều Container, sẽ có Container hiệu chỉnh permission đúng và việc Container đó sử dụng phần cứng pass từ LXC mà không phải chỉnh sửa gì rất dễ dàng, còn lại hầu hết là không chạy do khi build nhà phát hành chỉ hỗ trợ trường hợp pass phần cứng từ Host mà thôi.

Đơn cử Jellyfin và Plex, Container Jellyfin rất dễ dàng pass GPU vào và transcode bằng GPU chỉ với việc thêm ‘–group-add keep-groups’ vào ‘podman run’ nhưng Plex thì không. Giải pháp cho Plex hiện tại gần như chỉ có chỉnh Permission ‘/dev/dri’ ở Host từ 660 sang 666.

Nhưng thực tế hơn một chút, tuy Jellyfin và Plex đều stream transcoding “On the Fly” nhưng trong quá trình đó transcoded media sẽ lưu ở temp, với 4K thì mỗi file temp có thể lên tới cả trăm GB với maximum quality. Điều này quá tốn Life Cycle của SSD, còn sử dụng HDD thì chưa chắc HDD đã đáp ứng được tác vụ ghi và đọc cùng lúc như vậy. Tốn tài nguyên hệ thống, tốn Life Cycle thậm chí có thể càng tệ hơn nếu có nhiều người xem cùng lúc. Tắt transcode là điều đúng đắn nhất.

Trình bày dài dòng như trên, Jellyfin và Plex chạy trực tiếp trên LXC là tốt hơn, nhưng cũng không nhất thiết và chỉ có ưu điểm khi muốn sử dụng phần cứng từ Host như GPU để transcode mà thôi. Nhược điểm là trường hợp cài lại Ivy-Service thì cài lại Jellyfin / Plex vất vả hơn hẳn. Vì vậy mình sẽ đổi phương án cho CT Ivy-Service sử dụng Podman và cài Jellyfin với Plex vào Podman thay vì chạy trực tiếp. Tương lai các Service khác cũng sẽ cài vào Container luôn.

Để việc triển khai Podman ở nhiều CT thuận tiện, không tốn dung lượng lưu trữ và tốn công Build nhiều lần, CT Ivy-Build được tạo để chuyên Build Podman from Source và có thể là Build nhiều package khác nữa. Binary sau khi Build sẽ được các CT khác copy về và sử dụng, khỏi phải cài đống Library thừa thãi chỉ dành cho quá trình Build.

Cuối cùng là CT Ivy-Library để làm kho lưu trữ ảnh sử dụng Immich cũng sẽ chuyển sang sử dụng Podman thay cho Docker Engine.

Tiến độ: hoàn thành vào 04/07/2024