[XPnology] Synology 역방향 프록시와 tvheadend

Synology 역방향 프록시와 tvheadend

Lenovo TS140을 구입하고 벌써 한달반이 지나가는데, 이제서야 셋팅이 어느정도 마무리된 것 같아 기록 보관용으로 셋팅하면서 발생한 트러블슈팅 가이드를 남겨본다.

Reverse Proxy

DSM 6부터 UI에 녹아들어간 기능으로 nginx를 기반으로 한다. 설명이 길어지니까 역방향 프록시에 대한 개념은 여기를 참고하도록 하자. DSM에서는 제어판-응용 프로그램 포털-역방향 프록시에서 설정할 수 있다. 내부에 역방향 프록시로 연결할 아이피와 포트를 특정 호스트의 HTTP 또는 HTTPS로 바인딩이 가능하다. 내 경우 vmware로 CentOS도 게스트 OS로 올려놓은 상태이고, Windows Server에서는 PLEX Media Server가 올라가 있어서, Synology에서 운영되는 몇몇 서비스들과 모두를 DSM의 역방향 프록시로 묶었다. (편하니까;;)
여기서 HTTP의 경우 HTTPS로 리다이렉트를 해주는 설정은 없으므로 HTTPS 역방향 프록시의 경우 별도로 설정을 해주도록 한다. htaccess를 이용한 방법도 있지만 각 서버의 서비스에 따로 생성해야 하므로 귀찮다. 그냥 아래의 경로에 적당한 이름으로 conf 파일을 하나 생성한고 DSM의 nginx에서 처리하도록 하자.
/usr/local/etc/nginx/sites-enabled
  1. # Redirect HTTP to HTTPS
  2. server {
  3. listen 80;
  4. server_name abc.domain.com;
  5. location / {
  6. rewrite ^(.*)$ https://abc.domain.com/$1 permanent;
  7. }
  8. }
이후 nginx를 재시작 한다. sudo nginx -s reload 또는 sudo sysservicecfg --restart nginx

tvheadend

채널 스캔부터 EPG설정, 녹화설정까지 제일 귀찮은 녀석인데 의외로 관련 리소스들이 많으므로 채널 스캔만 제대로 완료하면 큰 어려움 없이 설정이 가능하다. 처음에는 귀차니즘에 시놀로지 패키지에 있는 tvheadend를 설치하였으나 트랜스코딩의 벽에 막혀 Debian chroot에 tvheadend를 설치했다. 이 부분에 바이블 같은 곳인 나스모에님의 사이트에서 자세한 설치 및 설정 방법을 확인하도록 하고 이 포스트에서는 몇가지 트러블 슈팅에 대한 가이드만 설명한다.
  • EPG설정
Debian chroot를 시놀로지 패키지에서 설치하면 시간동기화를 꼭 해주자. EPG는 제대로 적용이 되었는데 엉뚱한 시간대 프로그램 가이드가 나와서보니 시간 동기화가 제대로 되어 있지 않아서 발생한 문제였다. 우선 UTC-KST로 변경하고 주기적으로 시간을 동기화 하도록 하자.
  1. ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
  2. sudo apt-get install rdate
  3. rdate -s time.bora.net
  • epg2xml
워니파파님의 epg2xml 스크립트 실행시 UnicodeEncodeError: ‘ascii’ code can’t encode characters in position …. 과 같은 오류 발생시 파이썬 환경변수를 PYTHONENCODING = UTF-8로 설정해 주면 해결된다.
  • 녹화경로 설정
Debian chroot에 tvheadend 설치시 기본 녹화경로는 /homt/hts 가 될것이다. 이를 시놀로지에 바인딩 된 볼륨 또는 공유폴더로 변경해야 할 필요가 있다. 내 경우 패키지가 설치되는 볼륨은 20GB 정도로 작게 잡아놨기 때문에, 별도의 드라이브가 마운트된 볼륨으로 변경이 필요했다. 이를테면 /volume4/Record 디렉토리로 변경할 경우 /var/packages/debian-chroot/scripts/start-stop-status 를 편집기로 열고 아래와 같이 마운트/언마운트를 추가해주면 된다.
  1. start_daemon ()
  2. {
  3. # Mount if install is finished
  4. if [ -f ${INSTALL_DIR}/var/installed ]; then
  5. # Make sure we don't mount twice
  6. grep -q "${CHROOTTARGET}/proc " /proc/mounts || mount -t proc proc ${CHROOTTARGET}/proc
  7. grep -q "${CHROOTTARGET}/sys " /proc/mounts || mount -t sysfs sys ${CHROOTTARGET}/sys
  8. grep -q "${CHROOTTARGET}/dev " /proc/mounts || mount -o bind /dev ${CHROOTTARGET}/dev
  9. grep -q "${CHROOTTARGET}/dev/pts " /proc/mounts || mount -o bind /dev/pts ${CHROOTTARGET}/dev/pts
  10. grep -q "${CHROOTTARGET}/home/hts/Record " /proc/mounts || mount -o bind /volume4/Record ${CHROOTTARGET}/home/hts/Record
  11. # Start all services
  12. ${INSTALL_DIR}/app/start.py
  13. fi
  14. }
  15. stop_daemon ()
  16. {
  17. # Stop running services
  18. ${INSTALL_DIR}/app/stop.py
  19. # Unmount
  20. umount ${CHROOTTARGET}/home/hts/Record
  21. umount ${CHROOTTARGET}/dev/pts
  22. umount ${CHROOTTARGET}/dev
  23. umount ${CHROOTTARGET}/sys
  24. umount ${CHROOTTARGET}/proc
  25. }
start_daemon의 마운트 설정에 시놀로지의 /volume4/Record를 Debian chroot의 /home/hts/Record로 마운트 하는 설정을 추가하고 stop_daemon에서 언마운트 해주는 설정을 추가해주도록 하자. 이후 Debian chroot 패키지를 재시작 해준다.

댓글 쓰기

0 댓글