DSM 6.0 에서도 사용 할 수 있는 방법을 올려 두었습니다.

http://blog.acidpop.kr/240

 

현재 DSM 6 버전에서는 오류가 발생 한다고 합니다.

 

DSM 6 사용자는 해당 알림 기능을 사용하지 않으시는게 좋을것 같습니다.

 

복구가 필요 하신분은 아래 방법으로 복구 하시면 됩니다.

 

Download Station DB 복구 방법

 

psql -U postgres -d download

위 명령을 이용해서 psql 에 접속(?) 합니다.

다음 쿼리로 삭제 하시면 됩니다.

1. Trigger 삭제
DROP TRIGGER btdownload_event ON download_queue;

2. Function 삭제
DROP FUNCTION process_btdownload_event();

3. Table 삭제
DROP TABLE btdownload_event;

 


 

 

2015/08/20 일 15:40분부로 아래 코드가 수정되었습니다.

 

이전에 적용하셨던 분들은 btdownload_event 테이블을 삭제 하신 다음 다시 진행 하시면 됩니다.

 

psql -U postgres -d download -c "drop table btdownload_event;"

 

 


 

 

 

 

XPenology 의 Download Station 을 활용해서 사용중이다.

 

하지만 다운로드가 완료가 되어도 알람 메시지를 받을 수가 없어서 수시로 확인을 해주어햐 하는 불편함이 있다.

 

그래서 Download Station 을 분석하여 텔레그램을 이용해 다운로드 상태 알람 메시지를 받을 수 있게 되었다.

 

 

 

 

아마 XPenology 사용하는 사람들중에 Download Station 보다는 Trasminssion 을 설치해서 활용 하는 사람이 더 많을것이라 생각된다.

 

transmission 은 다운로드 완료시 특정 실행 파일을 실행 할 수 있는 옵션이 있다.

 

Download Station 도 대충 보면 Transmission 을 모토로 개발된것으로 보이지만 환경 설정이 불가능하다.

 

 

필자가 분석한 방법을 토대로 정리해본다.

 

Download Station 은 내부의 postgresql DB를 사용한다.

 

download DB의 download_queue 테이블을 가지고 작동하는것을 확인하였다.

 

해당 테이블을 분석하여 download_queue 테이블에 INSERT, UPDATE, DELETE 에 대해 Trigger 를 걸어 필자가 만든 함수를 실행 하도록 수정하였다.

 

 

적용 방법은 다음과 같다.

 

 

XPenology 의 SSH 에 접속한다.

 

다음 명령어를 수행한다.

 

psql -U postgres -d download

 

위 명령을 수행하면 다음과 같이 나오게 된다.

 

 

psql (9.3.6)
Type "help" for help.

download=# 

 

위 상태에서 다음 Query 문을 이용해 Table, Function 을 생성하고

 

download_queue 테이블에 Trigger 를 걸어주자.

 

순서대로 실행 되어야 한다.

 

1. CREATE TABLE

2. CREATE OR REPLACE FUNCTION

3. CREATE TRIGGER

 

 

CREATE TABLE btdownload_event(
    task_id           integer   NOT NULL,
    username          character varying(128),
    filename          text,
    status            integer,
    total_size        bigint,
    isread            integer,
    create_time       date
);




CREATE OR REPLACE FUNCTION process_btdownload_event() RETURNS TRIGGER AS $btdownload_event$
    DECLARE
        rec_count integer;
    BEGIN
        IF (TG_OP = 'INSERT') THEN
            RETURN NEW;
        ELSIF (TG_OP = 'UPDATE') THEN
            IF (NEW.status = 2 AND NEW.total_size > 0 AND NEW.current_size > 0) THEN
                SELECT COUNT(*) into rec_count FROM btdownload_event WHERE task_id = NEW.task_id AND status = 2;
                IF ( rec_count = 0 ) THEN
                    INSERT INTO btdownload_event VALUES(NEW.task_id, NEW.username, NEW.filename, NEW.status, NEW.total_size, 0, now());
                END IF;
            ELSIF (NEW.status = 5 ) THEN
                SELECT COUNT(*) into rec_count FROM btdownload_event WHERE task_id = NEW.task_id AND status = 5;
                IF ( rec_count = 0 ) THEN
                    INSERT INTO btdownload_event VALUES(NEW.task_id, NEW.username, NEW.filename, NEW.status, NEW.total_size, 0, now());
                END IF;
            ELSIF (NEW.status = 118) THEN
                UPDATE download_queue SET status = 5, extra_info = '' WHERE task_id = NEW.task_id;
                DELETE FROM task_plugin WHERE task_id = NEW.task_id;
                DELETE FROM thumbnail WHERE task_id = NEW.task_id;
            END IF;
            RETURN NEW;
        ELSIF (TG_OP = 'DELETE') THEN
                DELETE FROM btdownload_event WHERE task_id = OLD.task_id;
            RETURN OLD;
        END IF;
        RETURN NULL;
    END;
$btdownload_event$ LANGUAGE plpgsql;



CREATE TRIGGER btdownload_event
AFTER INSERT OR UPDATE OR DELETE ON download_queue
    FOR EACH ROW EXECUTE PROCEDURE process_btdownload_event();

 

 

 

 

Copy가 안되는 분은 첨부 파일을 다운로드 한다.

 

 

 

btdownsql.txt

 

 

 

 

 

위와 같이 하였다면

 

Download Station 에서 다운로드가 시작되었을때와 완료 되었을때 각각 btdownload_event 테이블에 다음 정보를 Insert 하게 된다.

1. Task ID    - Download Station 에서 사용하는 Task ID이다.

2. user name - 다운로드를 요청한 DSM 사용자 ID

3. File Name    - 다운로드 중인 토렌트의 제목

4. Status        - 다운로드 상태 코드

5. Total_Size    - 다운로드 중인 토렌트의 총 크기

6. isread            - btdownload_event 테이블에서 읽었는지 여부를 표시 하기 위한 Flag 값

7. create_time     - btdownload_event 에 insert 된 시간

 

 

 

 

psql 에서 \q 를 입력하여 psql 을 종료한다.

 

다음 경로로 이동한다.

 

cd /volume1/homes/user

 

user 는 자신의 계정이다.

 

/root 에서 작업하면 DSM 마이그레이션시 전부 날아가므로 주의

 

다음 Shell Script 를 저장한다.

 

※ 최근 xpenology 텔레그램 알림 떄문에 아래 쉘 스크립트를 수정해서 사용하시는 분들이 많이 있는것 같습니다.

마음껏 수정해서 쓰셔도 되지만 스크립트 최상단에 작성자 정보를 삭제 하지 말아주세요.

 

dsmonitor.sh

 

 

#! /bin/sh

#-------------------------------------------------------
# Created by Acidpop on 2015.   .   .
# [author] acidpop(http://blog.acidpop.kr)
# [version] v0.1
#-------------------------------------------------------

FILE_NAME="/tmp/dsdown.txt"


date "+%Y/%m/%d %H:%M:%S" > $FILE_NAME
echo "DS DonwloadStation Monitor 서비스가 시작되었습니다" >> $FILE_NAME

curl --form userfile=@$FILE_NAME --form password=5E884898DA28047151D0E56F8DC6292773603D0D6AABBDD62A11EF721D1542D8 http://192.168.0.199/tgcli.php


while :
do

    psql -U postgres -d download -t -A -c "SELECT * FROM btdownload_event WHERE isread=0;" | while  read line
    do
        IDX=`echo $line | cut -d '|' -f1`
        USER_NAME=`echo $line | cut -d '|' -f2`
        TITLE=`echo $line | cut -d '|' -f3`
        STATUS_VALUE=`echo $line | cut -d '|' -f4`
        SIZE=`echo $line | cut -d '|' -f5`
        CREATE_TIME=`echo $line | cut -d '|' -f7`
    
        case $STATUS_VALUE in
            1) STATUS="대기 중" ;;
            2) STATUS="다운로드 중" ;;
            3) STATUS="일시 정지" ;;
            4) STATUS="종료 중" ;;
            5) STATUS="다운로드 완료" ;;
            6) STATUS="해시 체크" ;;
            7) STATUS="시딩 중" ;;
            8) STATUS="파일 호스팅 대기" ;;
            9) STATUS="압축 해제 중" ;;
            *) STATUS="알 수 없는 코드 [$STATUS_VALUE]" ;;
        esac

        echo "상태   : $STATUS" > $FILE_NAME
        echo "파일   : $TITLE" >> $FILE_NAME
    
        CONV_SIZE=`echo $SIZE | awk '{ sum=$1 ; hum[1024**3]="GB";hum[1024**2]="MB";hum[1024]="KB"; for (x=1024**3; x>=1024; x/=1024){ if (sum>=x) { printf "%.2f %s\n",sum/x,hum[x];break } }}'`
    
        echo "크기   : $CONV_SIZE" >> $FILE_NAME
        echo "사용자 : $USER_NAME" >> $FILE_NAME

        psql -U postgres -d download -c "UPDATE btdownload_event SET isread = 1 WHERE task_id = $IDX"
    
        curl --form userfile=@$FILE_NAME --form password=5E884898DA28047151D0E56F8DC6292773603D0D6AABBDD62A11EF721D1542D8 --form username=$USER_NAME http://192.168.0.199/tgcli.php
    done

    sleep 5
done


 

저장 하였다면 다음 명령을 이용하여 실행 권한을 주자.

 

chmod 755 dsmonitor.sh

 

위 Shell Script 는 5초에 한번씩 btdownload_event 테이블을 체크하여 isread 가 0인 항목을 가져와 /tmp/dsdown.txt 파일에 저장을 한다.

 

btdownload_event 테이블을 체크하는 Query 는 다음과 같다.

 

 

 psql -U postgres -d download -t -A -c "SELECT * FROM btdownload_event WHERE isread=0;"

 

 

그 후 해당 파일을 curl 을 이용하여 라즈베리파이의 php 로 전송한다.

 

라즈베리파이와 Telegram CLI, PHP 는 다음 강좌를 참고한다.

 

 

2015/08/13 - [강좌/RaspberryPI 활용] - 라즈베리파이 Telegram - PHP를 이용하여 메시지 보내기

 

 

만약 PushBullet 을 사용중이라면 curl --form 라인의 코드를 다음과 같이 수정하면 된다.

 

 

BODY=`cat /tmp/dsdown.txt`

 

curl -u $token: https://api.pushbullet.com/v2/pushes -d type=note -d title="Download Station" -d body="$BODY" --insecure

 

BODY=`cat 이 부분의 ` 이 코드는 작은 따옴표가 아닌 키보드의 ~ 모양(숫자1 키 왼쪽) 키에 있는 기호이다.

 

/tmp/dsdown.txt 파일에 내용이 기록되므로 다양한 방법으로 알림을 사용 할 수 있을 것이다.

 

 

이제 위 Shell Script 를 데몬으로 실행 해야 하는데

 

dsmonitor.sh &

 

위와 같이 실행 하면 SSH 접속이 종료 될때 dsmonitor.sh 도 종료된다.

 

다음과 방법으로 실행 하면 된다.

 

/opt/bin/bash -c "/volume1/homes/user/dsmonitor.sh &"

 

Bash 를 이용해서 데몬으로 실행 하는 방법인데 만약 /opt/bin/bash 가 없다면

 

ipkg 를 이용해서 설치하자.

 

/opt/bin/ipkg install bash

 

XPenology 가 리부팅 되어도 위 스크립트를 데몬으로 항상 실행하게 하고 싶다면

 

다음 파일에 내용을 추가하자.

 

/etc/rc.local

 

 

위 파일을 vi 또는 nano 등 에디터로 열어

 

가장 마지막 줄에 exit 0 위쪽에 다음과 같이 추가해준다.

 

/opt/bin/bash -c "/volume1/homes/user/dsmonitor.sh &"

 

 

 

혹여 bash 설치를 못하시는 분들을 위해 shell Script 와 bash 파일을 압축하여 첨부한다.

 

 

dsmon.tgz

 

 

 

 

 

 

 

 

※ 위 방법을 통해 XPenology 가 이상 작동을 하여도 필자는 책임 지지 않습니다.

 

중요한 정보가 저장되어 있다면 꼭 백업 하시고 작업하세요.

 

특히 download_queue 테이블은 건드리시면 안됩니다.

 

 


 

 

XPenology 의 알림 메시지 모두를 Telegram 으로 전송 받고 싶지만

 

도무지 Notify 메시지가 어디에 저장이 되는지 찾을 수가 없네요..

 

혹시 아시는 분은 댓글에 부탁드려요~!

 

 

 


 

XPEnology  바탕화면의 알림 메시지는 다음 경로에 json format 으로 저장된다

 

/usr/syno/etc/preference/userid/dsmnotify

 

userid 는 자신이 사용하는 계정 ID 이다.

 

 


 

DSM 5.2-5644 에서는 /etc/rc.local 파일이 없는 경우가 있다.

 

다음 경로로 이동

 

/usr/syno/etc/rc.d

 

#!/bin/sh

/volume1/homes/userid/bash /volume1/homes/userid/dsdown_monitor.sh &

 

userid 를 자신의 계정 ID로 변경 하고 다음 파일명으로 저장한다.

S99dsdownmonitor.sh

 

chmod 755 ./S99dsdownmonitor.sh

 

이렇게 sh 파일만 생성하면 부팅시 자동으로 실행 된다.

저작자 표시 비영리 변경 금지
신고

  • BlogIcon Shekinah 2015.09.01 15:17 신고

    안녕하세요~ 어제 처음 xpenology를 설치하고 이것저것 해보던 중에 좋은 글이라서 해보고 있습니다~
    그런데 cd /volume1/homes/user 여기 부분에서 막히네요~ 폴더가 없다고 나오는데...
    volume1까지는 이동이 되고, 거기에서 ls -a를 쳐보면, 제가 생성한 폴더들이 나옵니다. 그런데 homes 혹은 home이라는 폴더는 없고, 제 계정으로 user를 변경해봐도 이동이 되질 않네요... 답변 부탁드립니다~

    1. BlogIcon Acidpop acidpop 2015.09.01 13:12 신고

      DSM 관리 웹페이지로 가셔서 제어판 -> 사용자 -> 사용자 홈 -> 사용자 홈 서비스 활성화에 체크 하시면 됩니다.
      그리고 댓글은 공개로 부탁 드리겠습니다 ^^

    2. BlogIcon Shekinah 2015.09.01 15:24 신고

      답변 감사드립니다~
      제가 .sh파일을 생성할줄 몰라서, 일단 첨부해주신 파일로 넣었는데~

      /opt/bin/bash -c "/volume1/homes/user/dsmonitor.sh &" , 이것과 bash 파일을 어떻게 할지 몰라서 막히네요~

      xpenology를 넷북에 설치하고서 해보는 중인데, 추가로 설치해야할 플러그인 같은게 있는건가요?

      텔레그램 설치를 하려고 링크로 들어가서 나오는
      sudo apt-get update를 했는데, not found라는 메세지만 나오네요~

      혹 설명이 가능하시다면 부탁드리고~ 안된다면, 제가 더 리눅스 공부를 하고 와야겠네요..ㅠ

    3. BlogIcon Acidpop acidpop 2015.09.01 16:14 신고

      XPEnology 에서 텔레그램 설치는
      http://blog.acidpop.kr/194
      이 링크를 이용하시면 됩니다.

      그리고 /opt/bin/ 아래에 bash 파일을 업로드 하셨다면
      chmod 755 /opt/bin/bash
      이렇개 해서 실행권한을 주고 난 다음
      위 명령어를 수행하면 됩니다.

    4. BlogIcon Shekinah 2015.09.01 18:06 신고

      답변 감사합니다~

      알려주신 링크를 통해 debian을 설치하고, /#쉘을 띄운다음 home으로 가서 apt-get update를 했는데
      bash : apt-get : command not found라는 오류가 나오네요~

      뭘 더 설치해야하는건가요? 계속 질문드려 죄송합니다..

    5. BlogIcon Acidpop acidpop 2015.09.02 09:17 신고

      음..
      apt-get 이 없다고 나오나요? 데비안이면 기본적으로 있어야 되는게 정상인데..

      /usr/bin/apt-get

      위 경로에 저 파일이 있는지 확인 부탁드려요.

  • hue 2015.09.25 12:16 신고

    안녕하세요~ 올려주신 정보 감사합니다. 제가 사용하는 환경은 xpenology에 데비안 깔고 그 안에 telegram 설치 후 이용하는 것 입니다.

    그 후 해당 파일을 curl 을 이용하여 라즈베리파이의 php 로 전송한다.

    라즈베리파이와 Telegram CLI, PHP 는 다음 강좌를 참고한다.

    이 부분에서 저는 해놀 안에 위치한 데비안으로 php를 전송해야 하는데 이경우에는 어떻게 진행해야하나요?

    1. BlogIcon Acidpop acidpop 2015.10.02 17:54 신고

      댓글이 여기저기 있어서 이제서야 답변 드립니다 ^^;

      해놀에 php가 설치되어 있다면 127.0.0.1/tg.php

      이런식으로 접근 하시면 되지 않을까요?

  • Dor1 2016.05.24 22:57 신고

    안녕하세요~ 올려주신 정보로 감사하게도 DSM 6버전 이전까지는 잘 사용해왔지만 6버전 이후에는 다운로드 스테이션이 마비가 됩니다.
    1. CREATE TABLE
    2. CREATE OR REPLACE FUNCTION
    3. CREATE TRIGGER

    이 부분을 드랍 시켜서 다시 원상태로 복원할 방법은 없는지요...

    1. BlogIcon Acidpop acidpop 2016.05.25 09:01 신고

      안녕하세요
      제가 6버전은 아직 안써봐서 다운로드 스테이션이 마비가 된다 라는게 어떤 의미인지 잘 모르겠습니다.
      원복 하는 방법은
      1. Trigger 삭제
      2. Function 삭제
      3. Table 삭제 순으로 진행 하시면 됩니다.

      DSM6 버전에서 root 계정으로 변경 하신 다음

      psql -U postgres -d download

      위 명령을 이용해서 psql 에 접속(?) 합니다.

      다음 쿼리로 삭제 하시면 됩니다.

      1. Trigger 삭제
      DROP TRIGGER btdownload_event ON download_queue;

      2. Function 삭제
      DROP FUNCTION process_btdownload_event();

      3. Table 삭제
      DROP TABLE btdownload_event;

  • BlogIcon dor1 2016.05.25 22:13 신고

    도움을 주셔서 감사합니다~
    다운로드 스테이션의 마비라는 것은
    토렌트 파일을 통해 다운로드 -> 다운로드 시작 전 에러
    URL을 통한 다운로드 -> 다운로드 시작 전 에러
    BT검색을 통한 다운로드 -> 다운로드 시작 전 에러

    용량이 약 800메가 이상 되는 것은 다운로드가 완료와 동시에 에러가 발생합니다.

    PS. 답글을 달려다가 어제 게스트로 쓰는 바람에 코멘트로 다시 씁니다..

    1. BlogIcon Acidpop acidpop 2016.05.26 09:03 신고

      에러 라는게
      다운로드 스테이션에서 각각의 작업 목록에 "에러" 라고 뜨는건가요?
      DSM 6에서는 아직 테스트 해보지 않아서 어떤 오류인지 잘 모르겠네요 ㅠㅠ

      trigger, function, table 삭제 후에는 정상 작동 하나요?

    2. BlogIcon dor1 2016.05.26 09:19 신고

      작업 목록에 "에러"라고 뜨는게 맞습니다

      Trigger, Function, Table 삭제 후 정상 작동 됩니다.

    3. BlogIcon dor1 2016.05.26 09:22 신고

      http://www.clien.net/cs2/bbs/board.php?bo_table=cm_nas&wr_id=23512&page=

      제 글은 아니지만 관련 링크 하나 올려봅니다.

    4. BlogIcon Acidpop acidpop 2016.05.26 09:27 신고

      그렇군요.

      아무래도 6.0 에서 DB 구조가 뭔가 변경이 되었나 봅니다.

      추후에 XPEnology 6.0 이 올라와야 제가 분석이 가능할것 같네요

  • 정원호 2017.02.16 00:07 신고

    안녕하세요 위에 설명해주신데로, 해보니 정말 텔레그램으로 메세지가 오네요
    감사합니다

    텔레그렘 메세지에 파일이 다운도드 되는 경로(디렉토리) 정보를 포함하려면 어떻게 해야하는지요
    힌트 부탁드립니다

    1. BlogIcon Acidpop acidpop 2017.02.16 15:48 신고

      할수는 있습니다만 좀 복잡합니다.

      IDX 값을 가지고
      select destination from download_queue where task_id = $IDX;

      쿼리를 하면 Destination 이 나옵니다.

      전체 경로는 아니고 /volume1/ 경로가 빠진 경로로 알고 있습니다.

      해당 결과를 telegram 에 보내는 텍스트에 합쳐서 보내면 됩니다.

다른 카테고리의 글 목록

강좌/XPEnology 활용 카테고리의 포스트 목록