일단 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에서 제공해줘야 할 기능을 제공을 안해줘서, 이렇게 삽질을 하다니... 뭐 그래도 무료니까 봐줌.