xpebot 프로젝트가 중단 되었습니다.
synobot 프로젝트로 다시 시작 합니다.
DSM 의 Database 를 변경 하는것이기 때문에 꼭 중요한 자료를 백업 하고 진행하세요.
데이터 손실에 대해 책임지지 않습니다.
DSM 6.0 이상 버전에서 xpebot (https://github.com/acidpop/xpebot) 을 적용하게 되면
다운로드 완료 시점에서 상태 정보가 "에러" 로 표시 되는걸 확인 할 수 있었다.
DSM 6.0 시스템이 없어서 무슨 문제인지 알수가 없었으나
최근 Hyper-V 에서 XPEnology 의 DSM 6.0 버전을 설치 할 수 있게 되어 디버깅을 시작.
몇번의 삽질 결과 DSM 6 버전부터는 각 Application 별로 계정이 따로 존재하고 postgresql DB 에서도 계정별로 권한이 주어져 있는것을 알게 되었다.
이 문제로 인해서 기존 Trigger 와 sql function 이 내부적으로 permission denied 오류가 발생하게 되었던걸로 확인 된다.
DSM 6.0 에서는 xpebot 만 git으로 받고 실행 한다고 해서 알림을 받을수는 없다.
아래의 조금 복잡(?)한 과정이 필요하지만 이 글을 천천히 따라한다면 가능할 것이라 생각된다.
1. Download Staion 설치 및 설정하기
먼저 DSM 에 Download Station 이 설치되어 있어야 한다. 당연한 이야기이지만 설치를 안하고 텔레그램 알림 받기 글을 따라 하다가는 막히는 부분이 많다.
DownloadStation 을 설치 하고 다운로드 받을 대상 폴더와 감시 폴더를 각각 설정한다.
주의 : 다른 시스템의 디스크를 Mount 한 디렉토리는 감시 폴더 작동이 제대로 안된다.
2. GitServer 설치 하기
패키지 센터를 열고 GitServer 를 설치 한다.
3. Python 설치 하기
패키지 센터를 열고 개발자 도구 메뉴를 클릭한 다음 Python3 와 Python Module 을 설치 한다.
4. 사용자 설정
제어판 -> 사용자 메뉴를 클릭한 다음
고급 탭으로 이동한다.
그후 스크롤을 가장 아래로 내려보면 사용자 홈 서비스 활성화 버튼이 있는데 해당 부분을 체크 하고 확인 버튼을 누른다.
5. SSH 서비스 활성화
제어판 -> 터미널 및 SNMP 메뉴를 클릭한 다음
SSH 서비스 활성화 버튼을 체크하고 "적용" 버튼을 클릭한다.
6. SSH 접속하기.
SSH 에 접속 할 수 있는 툴을 실행한다.
(없다면 http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html 이곳에서 putty.exe 를 다운로드 받는다.)
필자는 XShell 을 사용한다. 혹여 SSH 접속할 일이 많다면 XShell 을 설치 하자 (http://www.netsarang.co.kr/download/down_xsh5.html) 개인 사용자 무료
putty 또는 ssh 접속 툴을 이용하여 NAS 의 ip 를 적고 port 는 22 번으로 접속한다. (5번에서 port 를 변경 하였다면 변경한 port 로 접속)
ID : DSM 로그인 ID (Admin Group 에 속해 있어야 함)
PW : DSM 로그인 ID 의 Password
7. Download Station 계정 변경하기
ssh 접속된 상태에서 다음 명령으로 root 계정으로 전환 할 수 있다.
위 명령을 실행 하면 Password 를 물어 보는데
DSM 로그인 ID 의 Password 를 입력 하면 된다.
whoami 명령을 이용해서 root 라고 표시 된다면 root 로 로그인 된것이다.
다음 명령으로 계정 정보를 변경 해야 한다.
vim /etc/passwd
위 명령을 수행하면 아래와 같은 화면을 볼수 있다.
avahi:x:84:84::/:/bin/false
dbus:x:81:81::/:/usr/bin/nologin
dovecot:x:143:143::/dev/null:/usr/bin/nologin
DownloadStation:x:125560:125560::/var/packages/DownloadStation/target:/usr/bin/nologin
ftp:x:21:21::/nonexist:/usr/bin/nologin
guest:x:1025:100:Guest:/nonexist:/usr/bin/nologin
http:x:1023:1023::/var/services/web:/bin/false
ldap:x:439:439::/var/lib/openldap:/usr/bin/nologin
수 많은 계정들 중 DownloadStation 이라는 계정을 보면 가장 끝에 /usr/bin/nologin 뭐 이런식으로 되어 있는걸 볼 수 있다.
이 부분을 다음과 같은 변경 한다.
커서를 수정 하려는 곳으로 이동 후에 i 키를 누르고 /bin/sh 를 입력한다.
필요 없는 부분은 delete 키를 이용해서 지운다.
avahi:x:84:84::/:/bin/false
dbus:x:81:81::/:/usr/bin/nologin
dovecot:x:143:143::/dev/null:/usr/bin/nologin
DownloadStation:x:125560:125560::/var/packages/DownloadStation/target:/bin/sh
ftp:x:21:21::/nonexist:/usr/bin/nologin
guest:x:1025:100:Guest:/nonexist:/usr/bin/nologin
http:x:1023:1023::/var/services/web:/bin/false
ldap:x:439:439::/var/lib/openldap:/usr/bin/nologin
/usr/bin/nologin 에서 /bin/sh 로 변경 하였다.
수정 완료 후 ESC 키를 한번 누르고
:wq (콜론 wq) 명령을 입력하고 엔터를 치면 수정 된다.
8. DownloadStation 계정으로 로그인하기
/etc/passwd 수정이 끝났다면 다음 명령으로 DownloadStation 계정으로 로그인 할 수 있다.
위 명령을 수행 하고 whoami 명령을 이용해서 DownloadStation 계정으로 로그인 되었는지 확인 한다.
9. 알림을 받을 Table 및 트리거 생성하기.
DownloadStation 계정으로 로그인 되었다면 아래 명령을 이용해서 postgresql 에 접속 한다.
명령을 수행 하면 다음과 같은 화면을 볼 수 있다.
psql (9.3.6) Type "help" for help. download=# |
위 상태에서 다음 Query 문을 이용하여 Table, Function, Trigger 를 생성한다.
다음 순서 대로 Query 문을 복사/붙여넣기 한다.
1. Create Table.
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
);
2. Create OR Replace function
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.current_size > 0 AND NEW.total_size > 0 AND NEW.current_rate > 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;
ELSIF (NEW.status = 123) THEN
SELECT COUNT(*) into rec_count FROM btdownload_event WHERE task_id = NEW.task_id AND status = 123;
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;
END IF;
RETURN NEW;
ELSIF (TG_OP = 'DELETE') THEN
IF (OLD.status = 2) THEN
INSERT INTO btdownload_event VALUES(OLD.task_id, OLD.username, OLD.filename, 999, OLD.total_size, 0, now());
ELSE
DELETE FROM btdownload_event WHERE task_id = OLD.task_id;
END IF;
RETURN OLD;
END IF;
RETURN NULL;
END;
$btdownload_event$ LANGUAGE plpgsql;
3. Create Trigger
CREATE TRIGGER btdownload_event
AFTER INSERT OR UPDATE OR DELETE ON download_queue
FOR EACH ROW EXECUTE PROCEDURE process_btdownload_event();
Query 가 성공적으로 끝났다면 \q 를 입력하면 psql 이 종료 된다.
10. root 계정으로 전환 후 xpebot 설치 하기
exit 명령을 이용해서 root 계정으로 다시 돌아온다.
혹시 root 계정으로 돌아오지 않는다면 ssh 접속을 종료하고 다시 접속하여
sudo -i 명령을 이용해 root 계정으로 로그인한다.
다음 명령을 이용해서 사용자 홈 경로로 이동한다.
volume 은 사용자 환경에 맞게 volume1, volume2 등으로 구성 되므로 자신의 홈 디렉토리가 어디에 설치 되어 있는지는 알아야 한다.
cd /volume1/homes/admin
위 명령에서 admin 은 자신의 dsm 로그인 ID 이다. 각자 ID에 맞게 수정해서 수행한다.
xpebot 설치는 다음 명령을 차례대로 수행한다.
기존 5.2 버전과는 다르게 bot6.sh.ori 파일을 복사해서 사용하여야 한다.
git clone "https://github.com/acidpop/xpebot"
wget "https://bootstrap.pypa.io/get-pip.py"
python ./get-pip.py
pip install telepot
pip install BeautifulSoup
pip install psycopg2
pip install Pillow
pip install psutil
cd xpebot
cp bot6.sh.ori bot.sh
cp xpebot.cfg.ori xpebot.cfg
bot.sh 파일을 열어 3번째 줄의 admin 부분을 자신의 계정으로 변경한다.
xpebot.cfg 파일을 열어 각각의 정보를 변경한다.
1) NOTY_CHAT_ID 는 Downlaod Staion 에서 다운로드 진행 현황 알림을 받을 사용자의 Chat ID 값을 입력한다.
2) DSM_ID 는 자신의 DSM ID 를 입력한다.
3) BOT_TOKEN 은 Telegram 의 Bot Father 에서 /newbot 을 요청하여 BOT 생성 후 자신의 BOT TOKEN 값을 입력한다.
4) VALID_USER 는 인증된 사용자의 chat_id 값을 입력한다. 여러명일 경우 ,(콤마)를 이용해 구분한다.
5) NAVER_API 섹션에 발급 받은 CLIENT_ID_KEY 값과 CLIENT_SECRET_KEY 값을 입력한다.
6) RSS_NEWS 섹션에 보고 싶은 뉴스의 RSS 주소를 입력한다.
7) DATA 섹션에 data.go.kr 에서 발급 받은 서비스 키를 입력한다
수정이 완료 되었다면 다음 명령어로 bot 을 실행 하거나 중지 시킬 수 있다.
./bot.sh start
./bot.sh stop
./bot.sh restart
./bot.sh chk
Download Station 계정으로 로그인 하고 Table, Function , Trigger 까지만 생성이 되었다면 https://github.com/acidpop/xpebot
github 에 있는 내용대로 하면 된다.
'강좌 > XPEnology 활용' 카테고리의 다른 글
Synology Audio Station 알송 가사 플러그인 (33) | 2017.06.05 |
---|---|
클리앙 고기상자님 RSS 파일을 1개의 파일로 재개발 (30) | 2017.06.05 |
SurveillanceStation 에 Raspberry Pi 카메라 추가하기 (3) | 2017.01.18 |
xpebot 감시 스크립트 만들기 (13) | 2016.09.08 |
Git https 오류 해결 (0) | 2016.05.20 |
XPEnology SMS 알림을 텔레그램 봇으로 보내기 (3) | 2016.02.12 |
XPEnology 전용 Telegram BOT (65) | 2016.02.03 |
XPEnology SMS 알림을 텔레그램으로 보내기 (11) | 2016.01.04 |