2015년 8월 3일 월요일

[KODI] 라이브러리 관리용 headless KODI 사용하기


mysql계열의 DBMS를 이용하면 KODI의 라이브러리를 통합 관리할 수 있습니다.
통합 관리의 장점은 한번만 세팅해 주면 KODI를 이용하는 디바이스마다 미디어를 별도로 관리 하지 않아도 된다는 점입니다. 디바이스가 늘어나게 되면, 늘어나는 만큼 손이 많이 가기 때문에 본인의 상황을 고려하여 DBMS를 이용한 통합관리 여부를 결정할 필요가 있습니다.

mysql등으로 라이브러리를 통합하더라도 신경써야 하는 작업이 있습니다.
tv를 녹화 한다던지, 토렌트로 필요한 영상을 자동 다운로드 시켜 둘 경우 KODI를 항상 켜 두어야 새로운 영상들이 자동으로 라이브러리에 등록 됩니다. 이 과정이 없을 경우 KODI의 사용성이 떨어집니다. 새로운 영상 확보 후 최초로 실행 되는 디바이스가 라이브러리 업데이트를 진행해야만 라이브러리에 등록이 되는데 이 시간이 최소 30초에서 3분까지 걸리는 만큼 사용성이 매우 떨어지게 되지요.

최근 KODI 개발자 중 한 명이 'headless KODI'라는 버전을 만들었는데 서버용 KODI라고 할 수 있는 버전입니다. 클라이언트의 동작 없이 백그라운드에서 프로세스만 동작하는 버전이기 때문에 openGL을 지원하지 않는 시놀로지 NAS등의 장비에서도 KODI를 라이브러리 업데이트 용도로 이용할 수 있게 됩니다. KODI 15.0에 이 버전의 기능이 포함 될 것이라는 이야기도 있었는데.. 막상 정식버전이 나왔지만 이 기능은 아직 탑재되지 않았네요. 다음 버전에 기대를 해 봅니다.

아래는 시놀로지 NAS에 'headless KODI'를 설치하고 라이브러리 업데이트 하는 방법입니다.
NAS의 운영체제로 우분투나 데비안을 사용중이라면 docker설치 없이 headless KODI를 직접 설치해서 사용할 수 있습니다. 기타 다른 환경에서도 아래 내용을 응용하신다면 충분히 사용할 수 있을 것입니다.

1. 본인의 장비가 docker를 이용할 수 있는지 확인합니다.
  • DSM 5.2 이상이어야 합니다

2. docker를 설치 합니다. 패키지센터에서 찾아 설치 할 수 있습니다.



3. docker에 'headless KODI'를 설치합니다.
  • docker - 레지스트리 - KODI 검색 
  • 본인 사용 중인 KODI 버전으로 설치 (14.2 : HELIX, 15.0: ISENGARD 16.1:JARVIS 등)




4. 'Headless KODI' 컨테이너를 설정합니다.


  • docker - 이미지 - 마법사실행
  • 컨테이너 이름 입력 (eg:kodiserver)
  • 포트 입력 : 로컬포트 7070, 컨테이너포트 8080
  • 바탕화면에 바로가기 생성 : 상태페이지
  • 고급설정 
    • 환경 - 환경변수 추가
    • MYSQLuser : kodi
    • MYSQLpass: kodi
    • MYSQLport: 3306
    • MYSQLip:localhost 






로컬포트는 본인이 원하는 포트로 변경할 수 있으며, 환경변수는 본인의 라이브러리를 저장하고 있는 mysql또는  mariaDB의 정보를 입력합니다.

5. docker를 실행합니다.

  • docker - 비디오 형식 - 실행



6. KODI 서버에 웹으로 접속합니다.

  • http://NAS주소:7070 (포트는 본인이 설정한 포트로 합니다)
  • ID와 비번은 xbmc/xbmc입니다. (docker의 kodi컨테이너에 입력한 id와 pw가 아닙니다.)
  • 본인의 라이브러리가 정상적으로 나오는지 확인합니다.
  • 안나온다면 설정이 잘 못 된 것입니다. 어디가 잘못 됐는지 확인해 수정합니다.



7. 라이브러리 관리 및 다음 스크래퍼 사용 환경을 설정합니다.
  • 라이브러리 관리중인 디바이스의 유저데이터 폴더를 압축해서 본인 웹서버에 올려 둡니다.
    • 본인의 userdata 폴더를 확인 합니다. http://kodi.wiki/view/Userdata 
    • userdata 폴더에서 guisettings.xml 파일만 빼고 압축해서 본인 웹서버에 userdata.zip 이름으로 올려 둡니다.
  • 다음스크래퍼를 압축해서 본인 웹서버에 올려 둡니다.
    • 본인의 유저데이터 폴더를 확인 합니다. http://kodi.wiki/view/Userdata
    • addons폴더에서 다음 2개의 폴더를 metadata.zip 이름으로 압축해서 웹서버에 올려 둡니다.
    • metadata.tv.daum.net 과 metadata.movie.daum.net 입니다.

  • NAS에 SSH로 접속합니다.
  • Shell에서 아래 명령을 실행합니다. (KODIserver 는 본인이 지정한 컨테이너 이름. 4번 참조)
    • docker exec -it KODIserver bash
  • wget을 설치하기 위해 아래 명령을 실행합니다.
    • sudo apt-get update
    • sudo apt-get install wget
  • 웹서버에 올려 둔 파일을 wget으로 다운로드 받고 압축을 풀어 둡니다.
    • wget http://NAS주소/metadata.zip -p /opt/kodi-server/share/kodi/portable_data/addons/
    • wget http://NAS주소/userdata.zip -p /opt/kodi-server/share/kodi/portable_data/userdata/
    • unzip /opt/kodi-server/share/kodi/portable_data/addons/metadata.zip
    • unzip /opt/kodi-server/share/kodi/portable_data/userdata/userdata.zip
여러 이유로 다음스크래퍼를 수정해서 쓰는 경우가 있는 만큼 본인이 사용중인 애드온을 docker에 넣는 것이 차후 관리에 용이합니다.

8. docker 시간 설정

시간 설정을 해 두지 않으면 UTC 기준의 시간으로 입력 됩니다. 꼬일 수 있으니 한국 시간으로 바꿔 줍니다.
  • sudo apt-get install rdate
  • sudo rdate -s time.bora.net

9. 라이브러리 업데이트 테스트를 합니다.
  • docker에 접속한 상태에서 테스트 : 
    • curl --data-binary '{ "jsonrpc": "2.0", "method": "VideoLibrary.Scan", "id": "mybash"}' -H 'content-type: application/json;' http://xbmc:xbmc@localhost:8080/jsonrpc
  • NAS에 접속한 상태에서 테스트 (docker에서 나온 상태)
    • curl --data-binary '{ "jsonrpc": "2.0", "method": "VideoLibrary.Scan", "id": "mybash"}' -H 'content-type: application/json;' http://xbmc:xbmc@localhost:7070/jsonrpc
두 개의 차이는 포트의 차이입니다. docker에 접속한 상태에서는 내부 포트인 8080을 쓰게 되고, 나온 상황에서는 포워딩 포트인 7070을 쓰는 것입니다.

라이브러리 업데이트를 하고 정상적으로 새로운 영상이 등록되는지 확인 합니다.

정상적으로 동작한다면, 스캐줄러에 업데이트 코드를 등록해서 주기적으로 업데이트를 진행 시킵니다.
1분 간격으로 해도 되고 10분, 1시간, 3시간 원하시는데로 설정해서 사용합니다.

  • curl --data-binary '{ "jsonrpc": "2.0", "method": "VideoLibrary.Scan", "id": "mybash"}' -H 'content-type: application/json;' http://xbmc:xbmc@localhost:7070/jsonrpc


headless kodi를 docker로 사용 시 CPU와 메모리 사용량이 매우 적기 때문에 업데이트 주기를 분 단위로 하셔도 무리가 없을 것 같습니다.



openGL을 사용할 수 있는 NAS나 마이크로서버등에서도 굳이 클라이언트가 실행 되는 것보다는 headless KODI를 이용해 라이브러리 업데이트용으로만 사용하는 것이 효율적일 수도 있습니다.

headless KODI를 사용하더라도 라이브러리 경로 추가/변경 할 경우를 위해서 라이브러리 관리용 디바이스는 계속 유지하는게 좋습니다. 라이브러리 관리용 디바이스에서 추가/변경 후 userdata폴더 내용을 headelss kodi폴더로 옮겨 주는 방식으로 추가/변경 됩니다. 

headless KODI에 대한 더 자세한 정보는 다음 링크에서 확인 할 수 있습니다.
http://forum.kodi.tv/showthread.php?tid=212061


댓글 5개:

  1. 좋은 정보 감사드립니다. 차근차근 따라하고 있는데.안되는게 있어서 여쭤봅니다.

    6번 항목의 그림에서 master user를 클릭하면 좌측상단에 kodi가 Connection to server lost 으로 바뀝니다. 이게 정상인가요?

    7번항목에서

    MulMatJoa> docker exec -it kodisever bash
    FATA[0000] Post http:///var/run/docker.sock/v1.18/containers/kodisever/exec: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?

    이런 에러가 발생하네요..어떻게 처리해야될까요?

    답글삭제
    답글
    1. 네, master user 누르면 에러 나오는게 정상입니다. 해당 페이지는 Kodi가 잘 실행 되는지 테스트 할 수 있어서 접속하는 것이니 크게 의미를 두지 않으셔도 됩니다. 다른 에러는 권한 문제 같은데요 sudo docker exec -it kodiserver bash 로 한번 해 보세요.

      삭제
  2. 감사합니다. 올려주신 정보로 어떻게 해서 라이브러리가 갱신되는 것 까지 잘 성공했습니다.

    제 경우에는 파일서버에 새로운 동영상파일을 넣어두면 추가는 잘 되는데, 파일서버에서 동영상을 지웠을 경우에는 삭제된 동영상의 라이브러지 정보가 계속 남아 있더군요. 그래서 검색하다보니 VideoLibrary.Clean이라는 것이 있길래

    url --data-binary '{ "jsonrpc": "2.0", "method": "VideoLibrary.Scan", "id": "mybash"}' -H 'content-type: application/json;' http://xbmc:xbmc@localhost:7070/jsonrpc ...에서 VideoLibrary.Scan 을 VideoLibrary.Clean 으로 바꿔서 자동화해봤습니다.

    그랬더니, 라이브러리가 모두 다 지워지네요.. ^^;; 파일이 지워진건 아니라서 xbmc를 쓰고 있는 pc 등등에서 다시 라이브러리 업데이트를 해주면 다시 살아나긴 합니다만... VideoLibrary.Clean 은 라이브러리 상에는 있지만 실제 파일이 없는것만 골라서 지워주는걸로 설명을 봤는데, 제 생각대로 처리가 되지 않습니다.

    이런 경우에는 어떻게 처리를 해주면 좋을까요?

    답글삭제
  3. 이미지가 엑박이네요 ㅠㅜ

    답글삭제