Proxmox 에서 AMD H/W 트랜스코딩 Plex LXC설치하기.
안녕하세요 달소입니다.
앞서 Proxmox 의 Plex 트랜스코딩과 관련하여 히쓰 님께서 좋은 정보를 주셔서 글로 기록할겸 남겨봅니다.
Proxmox의 LXC에서 AMD APU의 내장그래픽을 이용한 트랜스코딩을 진행하는방법입니다.
약간의 삽질이 있었지만.. 결국 해냈습니다!.
불편하던 docker 실행방법도 나름대로 수정해서 docker-compose.yml 파일로 변경했습니다.
사전 준비사항 및 환경
CPU : AMD Ryzen 5700G
OS : Proxmox 7.2
LXC : Ubuntu 22.04 LTS
Proxmox에서 hw 트랜스코딩 드라이버가있는지 확인.(ls -al /dev/dri)
plex.tv/claim 에서 키 받기(키를 통해 서버의 소유 및 계정인증)
claim-xxxxxxxxxxxxxx
LXC 설치하기
https://svrforum.com/os/146425
local에서 CT 템플릿 - 원하는 템플릿 다운로드(OS)
우측상단 CT 생성
여기서 중요한건 권한 없는 컨테이너의 체크를 해제해주셔야합니다.
보안상 좋지는 않지만 host의 파일의 드라이버를 매핑하기때문에 어쩔수없습니다 ㅠ
대충 원하는 스펙으로 생성( 생성 후 시작 선택 X)
생성후에 옵션 -> 특징 편집 -> 중첩을 체크해주세요.
이제 쉘에서 Proxmox에서의 드라이버를 LXC에 매핑시켜주겠습니다.
쉘로 가서 생성한 LXC의 config 파일로 진입합니다.
vi /etc/pve/lxc/<CONTAINER ID>.conf
맨아래로 내려가서 아래내용을 복붙해주세요.
lxc.cgroup2.devices.allow: c 226:0 rwm lxc.cgroup2.devices.allow: c 226:128 rwm lxc.cgroup2.devices.allow: c 29:0 rwm lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir lxc.mount.entry: /dev/dri/renderD128 dev/renderD128 none bind,optional,create=file
그리고 :wq로 저장.
이제 컨테이너를 실행해줍니다.
실행 후 ls -al /dev/dri를 했을때 매핑이 제대로 되있으면 아래처럼 나오게됩니다.
이제 도커를 설치해주고 다음단계로 넘어가겠습니다.
apt update && apt upgrade -y 실행 후 apt install docker docker.io docker-compose로 도커를 설치해줍니다.
저는 편의를 위해 vim도 설치해줬습니다.(apt install vim)
설치가 완료되면 아래 명령어로 docker 서비스를 활성화 시켜주세요.
systemctl enable docker
그리고 컨테이너를 생성하기전에 docker를 설치하면서 같이 설치된 apparmor를 제거해주셔야 실행에 문제가 없습니다.
apt remove apparmor
PLEX 컨테이너 생성하기
컨테이너 생성전에 볼륨매핑할 디렉터리 먼저 만들어주겠습니다.
실사용시에는 NFS를 통해서 시놀/헤놀에 있는 데이터를 사용할 것이지만.. 여기서는 테스트를 위함이므로 대충만들어주겠습니다.
transcode쪽음 트랜스코더 임시 디렉토리로 램디스크를 사용하면 좋습니다.
mkdir -p /data/plex/config
mkdir -p /data/plex/transcode
mkdir -p /data/plex/media
저는 편의성을 위해 docker-compose로 커맨드를 변경해서 만들었습니다.
cd /data/plex && ll
vi docker-compose.yml
내용은 아래와 같습니다.
수정할 부분은 hostname과 claim key 정도입니다.
version: '3'
services:
plex:
image: mauimauer/spritsail-plex
container_name: plex
hostname: DS-Plex
restart: always
environment:
- PLEX_CLAIM=claim-xxxxx
- TZ=Asia/Seoul
ports:
- "32400:32400"
volumes:
- /data/plex/config:/config
- /data/plex/transcode:/transcode
- /data/plex/media:/media
devices:
- /dev/dri:/dev/dri
그리고 docker-compose up -d 명령어로 컨테이너를 생성해주세요.
생성이 완료되었으면 ip:32400으로 접속하신뒤에 claim key를 발급받은 계정으로 로그인해주세요.
이제 서버설정을 하시고 이용하시면됩니다.
트랜스코딩도 잘되네요 ㅎㅎ
아직 NFS마운트를 안해서 간단한 FHD 영상만 트랜스코딩해보았는데
hw 트랜스코딩 전에는 20%정도 사용되던 CPU가 3~6% 사용으로 줄었습니다
추후에 다른기기들도 마운트후에 테스트해보겠습니다~
사용한 이미지 :
https://hub.docker.com/r/mauimauer/spritsail-plex
벌써 테스트 하시는군요ㅎ
잠깐보니 도커 plex에도 /dev/dri 디바이스 매핑이 빠져있고
mauimauer 이분께서 spritsail/plex-media-server를 포크한 mauimauer/spritsail-plex로 사용해야합니다
드라이버 매핑은 제가 추가로했는데 이미지가 달랐었군요.,..ㅎ 어쩐지안된다했습니다 ㅠ
오우 됐습니다 ㅎㅎ docker-compose.yml 파일로 만들어봐야겠네요 device 매핑이 익숙치않ㅅ습니다..
곧 완성된 정보글을 볼 수 있겠군요~
으아니 amd 트랜스코딩을 리눅스에서 어케 한다는거지 하고 한참을 봤네요.
이미지가 다른거군요..오호라
네 ㅎㅎ 잘되네요!! 아주좋습니다~
제가 구상했던 방법은 헤놀에 모든 데이터를 밀어넣고 거기서 파일을 관리하듯 관리하고 싶어서
volumes:
- /data/plex/config:/config
- /data/plex/transcode:/transcode
- /data/plex/media:/media
해당 부분을 모두 NFS 폴더로 설정했으나, docker-compose 이후 무한 재시작 되는 현상을 겪었습니다.
(restart=always 니까 당연하지....)
로그를 까보니 permission denied...
애초 헤놀에서 NFS 설정 시, admin에 root 권한으로 설정..... 했다는 것도 모르고 폴더 권한만 만지작 거리고 있었어요.
즉, 헤놀 nfs 폴더에 container 파일을 구축하고자 하시면
environment:
- SUID=0
- SGID=0
이렇게 추가해주시면 됩니다.
cmt alert