반응형
반응형

개요

최근 Oracle Cloud의 서울 리전에 드디어 인스턴스 생성을 완료해서, Plex Media Server를 설치하고, 구글 드라이브와 연동을 해서 어디서든 스트리밍할 수 있는 환경을 만들어보기로 했다.

마침 지난 번 우회 결제로 Life Time Pass도 있는 상태라, 그 계정에 서버를 붙이기만 하면 되는 상황이라 Plex Media Server 설치를 먼저했고, 로그인을 했는데 자꾸 새로 설치한 Plex 셋업 페이지로는 가지 않고, 기존 Plex 서버로만 리다이렉션이 되어, 서버를 추가할 수가 없었다.

왜 그런가 구글링을 좀 해보니.. 동일 네트워크에서 Plex를 이용한 이력이 있는 경우 이슈가 되는 거라고 했다. (사실 이해는 좀 안됨..)

해결책을 찾아보니, Plex Port (32400)를 SSH 터널링을 이용해서 다른 포트로 로컬 포트에 띄워서, 접근하면 다른 네트워크로 인식되어, 세팅에 이슈가 없다고 하더군.. 

아래와 같은 절차로 따라해보기로 했다.

 

해결

일단 오라클 클라우드에 SSH 접근을 하려면, private key가 필요하니 로컬에 준비해두도록 하고, 일반적으로 Windows 환경에서 SSH 명령어를 기본 지원하진 않으므로, Git bash도 설치해서 준비해주자.

 

준비가 끝났으면, Git bash를 열고 아래와 같은 키워드로 터널링을 해주자.

아래 명령어는 원격 서버에 SSH로 붙어 있는 동안, 원격 서버에 떠있는 32400 포트를 로컬 환경에서 8888 포트로 붙게 해준다.

$ ssh -i ssh-key.key ubuntu@서버 IP -L 8888:localhost:32400

 

이렇게 해두고, http://localhost:8888로 붙어주면, 동일하게 로그인 절차를 거치지만 Plex Media Server의 Setup 절차로 이동할 수 있게 되고, 기존에 사용하던 Plex계정인 경우 서버가 하나 추가되어, Plex 계정 하나로 여러개의 Plex Media Server를 관리할 수 있게 된다!

반응형
,
반응형

args 부분에 bootindex=99를 추가해주면 됨.

# /etc/pve/qemu-server/100.conf
# Before
args: -device 'piix3-usb-uhci,addr=0x18' -drive 'id=synoboot,file=/var/lib/vz/images/100/synoboot.img,if=none,format=raw' -device 'usb-storage,id=synoboot,drive=synoboot'
# After
args: -device 'piix3-usb-uhci,addr=0x18' -drive 'id=synoboot,file=/var/lib/vz/images/100/synoboot.img,if=none,format=raw' -device 'usb-storage,id=synoboot,drive=synoboot,bootindex=99'


noVNC들어가서 부팅순서 아무리 변경하고 boot, bootOrder 옵션 아무리 바꿔줘봐도 적용이 안되는데, args에다가 index 지정해주니깐 원하는대로 동작한다.

반응형
,
반응형

Native를 사용하다가 Proxmox환경에 올려봤는데, 시리얼 넘버가 이상해서 변경할 일이 생겼다.


virtio driver만 사용할 수 있는 부트로더를 받았기 때문에, 시리얼 넘버가 ds3615xs의 시리얼 넘버 포맷 (xxxxLWN00xxxx)과 맞지 않아서 썸네일 생성이 안됨.


Native나 vmware에 올린 경우는 그냥 USB나 iso 파일 열어서 grub.cfg 파일을 수정하면 되지만, proxmox의 경우 usb drive를 hotplug방식으로 bootup될때 mount하는 방식이라서, ssh 레벨에서 컨트롤 해주어야 한다. 


일단 dsm에서 ssh 접근 후, /dev/ 경로 아래에 synoboot(숫자)를 일일히 mount하여 grub.cfg 파일을 찾아내야 한다. (일반적으로 synoboot1인듯)

아래 예제는 synoboot1이 grub.cfg를 가지고 있는 파티션이라 가정한다.

$ cd /dev/
$ mkdir /mnt/synoboot1
$ mount /dev/synoboot1 /mnt/synoboot1


grub폴더의 grub.cfg파일을 열어서, set sn1 부분을 변경 후 재부팅하면 된다.

(참고 링크 : http://xpenology.me/how-to-generate-synology-mac-and-serial-valid-pair/)

정품 시리얼을 구해서 넣어야 함.. 정품 시리얼을 입력하지 않으면 동영상 파일들의 썸네일 생성과 Transcoding이 제한된다.


주의할 점은, mac 주소는 그대로 유지해두어야 한다. 괜히 real mac으로 변경했다가 부팅이 안됬던 참사가 발생함; (참사가 발생한 경우는 아래 빨간글씨 이하를 참고하자.)


혹시나 real mac으로 변경해서 부팅이 안되는 경우는, proxmox에서 vm을 잠시 내린 후에 아래와 같이 하면 된다.


1. kpartx를 설치 (kpartx는 img 파일을 리눅스 파일시스템으로 mount할 수 있게 해주는 프로그램이다.)

$ apt-get install kpartx


2. kpartx를 이용하여 bootloader를 풀어 준다. (/dev/mapper/ 경로에 하나씩 매핑된다.)

$ kpartx -a -v 부트로더가 위치한 경로/synoboot.img
add map loop0p1 (253:7): 0 30720 linear 7:0 2048
add map loop0p2 (253:8): 0 61440 linear 7:0 32768
add map loop0p3 (253:9): 0 8159 linear 7:0 94208


3. 생성된 파티션을 mount한다. (보통 첫번째 파티션이 grub.cfg 파일이 존재하는 파티션이지만, 아닐 경우 나머지도 시도해본다.)

$ mkdir /mnt/loop0p1
$ mount /dev/mapper/loop0p1 /mnt/loop0p1


4. 이제 /mnt/loop0p1 폴더로 이동해서 grub파일을 수정한다.


5. grub.cfg 파일을 수정했으면, umount 해준다. (umount 전에 디렉토리를 지워버리면, bootloader 자체가 망가져버리는 참사가 발생하니 주의하자.)

$ umount /mnt/loop0p1
$ rm -rf /mnt/loop0p1
$ kpartx -d -v 부트로더가 위치한 경로/synoboot.img


6. vm 부팅



반응형
,
반응형

일단 DSM 버전은 6.1.4를 사용하고 있고, Linux에 대해서 기본적인 건 안다는 가정하에 설명하고, 본인의 포스팅을 따라하다가 발생하는 문제는 본인이 책임지지 않음.. (댓글 문의는 받아요)


아래는 실패 과정이라 쪼끄맣게..

Download Station에서 완료 후 계속 shell 실행을 못하길래.. (apparmor 이슈..) apparmor 설정을 바꿔서 리붓도 해보고 별짓을 다해보고, Transmission도 설치해봤지만, docker로 올려서 그런건지 Transmission 자체가 문제인건지, DSM에서 인덱싱을 못하는 문제가 발생하여 결국 Download Station을 다시 설치 후 시도했더니 성공하여 히스토리를 남길 겸 포스팅을 하게 됨.


조금 복잡하기 때문에, Telegram Bot을 만드는 과정 및, Bot Token, Chat ID를 알아내는 방법은 생략한다. (구글링해보면 많이 나올것임)


전체적인 매커니즘은 아래와 같다.


1. Download Station을 이용하여 다운로드를 함.


2. 다운로드가 완료되는 순간 내부적으로 동작하는 transmissiond의 기능인 script-torrent-done-enabled를 통하여, 쉘 스크립트 실행


3. 쉘 스크립트는 텔레그램 메신저로 메시지 발송하고, 완료된 목록을 postgresql에 쿼리를 날려서 지움.


내가 다룰 내용은 2~3번에 해당하는 내용임.

서두가 길었고, 이제부터 해야할 작업을 설명해보겠음.


1. Download Station을 패키지센터에서 종료한다.


2. ssh를 이용하여 쉘로 진입하여, Root권한을 획득한다.

$ sudo su -


3. Download Station 재부팅 간 설정파일을 초기화하지 않도록 변경하기 위해, 아래 명령어로 스크립트 파일을 연다.

$ vi /var/packages/DownloadStation/scripts/start-stop-status


4. rm ${PACKAGE_DIR}/etc/download/settings.json 이라고 적혀있는 부분을 찾아서, 앞에 #을 붙여 주석처리해주고 저장한다.

# rm ${PACKAGE_DIR}/etc/download/settings.json


5. 설정 변경을 위해 아래 명령어로 설정 파일을 열어준다.

$ vi /usr/syno/etc/packages/DownloadStation/download/settings.json


6. script-torrent-done-enabled, script-torrent-done-filename을 찾아서 아래와 같이 변경해준다. (volume경로는 본인이 사용중인 경로에 맞게..)

"script-torrent-done-enabled": true,
"script-torrent-done-filename": "/volume1/@appstore/DownloadStation/bin/tr_complete.sh",


7. postgresql의 계정정책 관련 설정을 변경해준다.

$ vi /etc/postgresql/pg_hba.conf


8. 파일을 열어보면 아래와 같이 되어 있을텐데, 변경해준다.

Before)

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             postgres                                peer map=pg_root
local   all             all                                     peer

After)

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             postgres                                trust
local   all             all                                     peer

이걸 안하면, OS계정과 postgresql 계정이 다른 상황에서 원격 쿼리를 날리는 경우 아래와 같은 에러가 발생하기 때문이다. 

psql: FATAL:  Peer authentication failed for user "postgres"


9. 설정을 변경했으니, postgresql을 재시작 해주자.

$ /usr/syno/etc.defaults/rc.sysv/pgsql.sh restart


10. 이제 6번 과정에서 script-torrent-done-filename 부분에 입력했던 경로로 이동하여, 쉘 스크립트를 만들어주자.

$ vi /volume1/\@appstore/DownloadStation/bin/tr_complete.sh

스크립트내용)

#!/bin/sh

TOKEN='당신이 만든 BOT의 BOT Token 입력'
URL='https://api.telegram.org/bot'$TOKEN
MSG_URL=$URL'/sendMessage?disable_notification=true&chat_id='
CHAT_ID='당신이 만든 BOT의 CHAT ID 입력'

function send_message {
  res=$(/usr/bin/curl --data-urlencode "text=[DS Get] $TR_TORRENT_NAME download complete." "$MSG_URL"$CHAT_ID"&")
}

send_message
/bin/psql -U postgres -d download -c "DELETE FROM Download_queue WHERE status IN ('5','7','8')"


11. 패키지센터에서 DownloadStation을 시작해준다.


12. DownloadStation에서 다운로드 완료 후, 당신이 개설한 텔레그램 방에 [DS GET] 토렌트명 download complete 라고 메시지가 오고, 완료된 목록은 자연스럽게 사라지면 성공!


공식적으로 DownloadStation에서 제공해줘야 할 기능을 제공을 안해줘서, 이렇게 삽질을 하다니... 뭐 그래도 무료니까 봐줌.

반응형
,
반응형

KT에서 그나마 DLNA로 제공해주는 KT 스마트홈 서버라는 게 있는데, 서버를 종료했다가 실행했을 때만 자동으로 폴더 동기화가 되는 바람에, 바로바로 갱신이 안되는 문제가 생겨서, 종료했다가 다시 띄우는 걸 작업스케줄러로 동작하게끔 스크립트를 작성함.

@echo off

taskkill /F /IM LightKTVHS.exe

ping 127.0.0.1 -n 5 > nul

start /D"C:\Program Files\KT 스마트홈 서버\" LightKTVHS.exe



반응형
,
반응형
#!/bin/sh

SRC=/volume1/\@appstore/tvheadend-testing/var
DST=/volume1/backup/tvheadend/`date +%Y%m%d`

mkdir -p $DST

cp -rf $SRC/channel $DST/
cp -rf $SRC/epggrab $DST/
cp -rf $SRC/input $DST/
cp -rf $SRC/dvr $DST/


반응형
,
반응형

Hyperbackup으로 데이터나 특정 어플리케이션 들의 설정 백업은 가능한데,

OS 자체 구성 백업은 수동으로 하고, 복원하는 식으로 밖에 지원을 안하는 것 같아서,

https://forum.synology.com/enu/viewtopic.php?f=7&t=45327 이 링크를 참고하여 스크립트를 만들어보았다.


아래와 같이 만들고, 작업 스케쥴러를 등록해서 하루에 한 번씩만 돌리게 해도 좋을듯.

#!/bin/sh

/usr/syno/bin/synoconfbkp export --filepath=/volume1/backup/dsm/yournas_`date +%Y%m%d`.dss


반응형
,
반응형

DSM 6.1.3 기준에서 작성된 글이며, 네트워크는 아래와 같이 구성되어 있음.


TV 채널 IP추출 및 매핑 (PC - Windows)

  1. omvp를 설치한다.
    • http://ohhara.sarang.net/omvp/bin/
  2. 압축을 풀 때 주의할 점은, 가급적 한글 경로를 포함하지 않는 경로로 해주어야 오동작을 안한다.
  3. setup.bat 을 실행해준다. (관리자 권한 필요)
  4. WinPcap_4_1_3.exe 를 실행해준다. 
  5. 명령프롬프트(cmd)를 관리자 권한으로 실행해준다.
  6. omvp가 설치된 폴더로 이동하여, omvs -l 키워드를 입력하여 본인 PC의 네트워크 디바이스 번호를 찾는다. 
    • dev_idx 괄호 뒤에 있는 숫자이며, 일반적인 PC의 경우 대부분 0임
  7. 이제 사전 준비는 끝났고, 사용중인 iptv의 IP대역을 입력하여, omvp에 포함된 omvs라는 프로그램으로 각 채널에 해당하는 ip목록을 수집해주어야 한다. 
    • IP대역은 여기를 참고하거나, 구글링을 통해 알아내도록 하자. 
  8. IP대역을 알았으면, 명령프롬프트에 아래와 같이 입력해주자.
    • omvs -i 0 -j 5 IP대역/24
    • omvs_out 이라는 폴더에 여러개의 m3u파일(ip정보)과 여러개의 png파일(ip수집 당시 찍힌 스크린샷)이 저장되게 된다.
    • 만약 계속 기다려도, start scanning만 나온다면 PC에서 IPTV로 접속을 하지 못하는 경우이니, 네트워크 구성을 점검해본다.
  9. 이제 omvs_out폴더에 여러개의 m3u파일의 내용을 합쳐서, 한개의 m3u파일로 만들어주어야 한다.
    • m3u파일의 내용을 합쳐서 하나로 만들어준 후, omvp가 설치된 폴더에 omvp.m3u라는 이름으로 변경하여 넣어준 후, omvp.exe 파일을 관리자 권한으로 실행해주면, 실시간으로 채널 확인이 가능하다.
  10. 합쳐진 m3u파일을 쌀집아저씨라는 능력자분께서 만드신 채널 매핑 프로그램(TvHelper)을 이용하여, 채널을 매핑해준다.
    • https://blog.riceworld.info/archives/148 를 참고하여 진행
  11. 매핑된 m3u파일을 Xpenology의 Webstation 등 http를 이용하여 접근 할 수 있는 위치에 둔다.


Tvheadend 설치 (NAS)

  1. [패키지센터] - [설정] 메뉴로 이동한다.
  2. [일반] 탭에서 [신뢰 수준]을 모든 게시자로 변경해준다.
  3. [패키지 소스] 탭에 아래와 같은 소스를 추가해준다.
    • http://syno.dierkse.nl
  4. 패키지센터에서 [Tvheadend-Testing]을 찾아서 설치한다.
  5. 설치하고나면, 9981포트(관리용 WEB포트)와, 9982포트(데이터 전송용)가 올라오게 되는데, 두 포트를 상황에 맞게 열어주어야 한다.


Tvheadend 설정 (NAS)

  1. 기본 설정
    • http://IP:9981 로 접속하여, 인증 후 기본적인 설정을 하여 넘긴다.
    • [설정] - [일반] - [기본] 탭으로 이동하여 아래 설정 진행
      1. [사용자 인터페이스 레벨] - [전문가] 로 변경
    • [설정] - [일반] - [사용자] 탭으로 이동하여 아래 설정 진행
      1. 사용자선택 후 [편집] 버튼 클릭
      2. [스트리밍] 항목에 있는 모든 항목 체크
      3. [비디오녹화기] 항목에 있는 모든 항목 체크
    • [설정] - [채널 / EPG] - [EPG 그래버 모듈]
      1. XMLTV만 활성화하고 모두 비활성화 해준다.
      2. XMLTV의 경로를 기억해둔다. (ex: /volume1/@appstore/tvheadend-testing/var/epggrab/xmltv.sock)

Tvheadend EPG 등록 (NAS)

  1. 사전에 git, python2.x, python module, pip가 설치되어 있어야 한다.
    • Xpenology기준으로 Git Server, Python Module을 설치한다.
    • 터미널에서 easy_install pip를 입력하여 pip를 설치한다.
  2. 이제 EPG모듈을 받아와야 하므로, 터미널에서 아래 키워드를 입력한다.
    • pip install BeautifulSoup4
    • cd epg 등록 모듈을 받을 위치
    • /bin/git clone https://github.com/wonipapa/epg2xml
    • /bin/git pull 
    • /usr/bin/python epg모듈을 받은 위치/epg2xml/epg2xml.py -i 통신사 -s XMLTV경로 
      1. ex: /usr/bin/python /volume1/Video/epg2xml/epg2xml.py -i KT -s /volume1/\@appstore/tvheadend-testing/var/epggrab/xmltv.sock
    • epg모듈은 현재 날짜 기준으로 이틀치만 받아오므로, 위 명령어를 스크립트로 만들어서, 하루 한 번 스케쥴러로 돌리면 된다.

Tvheadend 추가 설정 (NAS)

  1. 아래 설정을 진행한다.
    • [설정] - [DVB입력] - [네트워크]
      1. [추가] 버튼을 누르면, 팝업이 발생한다.
      2. 네트워크 이름을 아무거나 입력
      3. URL에 매핑과정에서 만들어진 m3u파일의 경로를 넣는다. (전에는 내부 볼륨에 넣어도 참조가 됬었는데, 어느순간부터 http프로토콜을 이용행 참조가 가능해짐;)
    • [설정] - [DVB입력] - [먹스]
      1. m3u을 제대로 참조했다면, 내용들이 추가되어 있을거고, m3u파일에 있는 IP들을 스캔하기 시작한다.
      2. 스캔은 됬으나, 서비스가 0으로 나오는 항목들은, [편집]을 눌러서 [TSID에 값으로 0 허용]을 체크하고, [스캔 상태]를 [활성]으로 바꿔주면 서비스가 1로 변하는 경우가 있으니 참고한다.
    • [설정] - [DVB입력] - [서비스]
      1. [서비스매핑] - [모든 서비스 매핑] 선택하면, 먹스에 있던 항목들이 채널로 등록되게 된다.


반응형
,
반응형