xpebot 프로젝트가 중단 되었습니다.
synobot 프로젝트로 다시 시작 합니다.
synobot 프로젝트
기존 xpebot 이 Synology DSM 이 업데이트 되면서 인증서 관련 오류가 발생.. ㅠㅠ 언젠가는 Download Station API 를 이용하도록 바꿔야지 하면서 미루다가 이제서야 작업 진행. DSM 의 환경이 워낙 자주 바뀌기..
blog.acidpop.kr
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 |
XPEnology DSM 6.0 이상에서 다운로드 스테이션 텔레그램 알림 받기 (65) | 2016.08.29 |
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 |
안녕하세요 우선 자세한 설명덕분에 텔레그램으로 알림을 받는데 까지는 성공을 하였습니다.
신기하여 이것저것 눌러보다가 명령어 중에 토렌트서치가 있어 검색한뒤에 다운을 받고 다시 다른명령을 준뒤로 알림이 먹통이 되었습니다.
https://github.com/acidpop/xpebot 에서 보면 캔슬하지 않고 실행하는 오류를 수정했다는데 적용이 안된건지. 아니면 다른 원인이 있는건지 알고싶습니다.
안녕하세요? 덕분에 신기한 경험을 했습니다.
다만, 한 가지 아쉬운 점이 명령 한번 하면 Stopped가 되는데,
원래 명령 한번 수행하면 바로 Running 에서 Stopped가 되나요?
어딜 손봐주면 수행한 뒤 Stopped 되자마자 다시 start할 수 있도록 할 수 있나요?
오옷 빠른 답변 감사합니다!
torkim 명령을 사용하도록 하겠습니다!
지금까지 http://blog.acidpop.kr/241 의 xpebot monitor 를 활용해보려 했는데
제가 bash shell을 잘 몰라서 그런지... 설치된 경로를 제대로 변경했는데도 작동을 안하더라고요...
혹시 xpebotmonitor.sh와 작업 스케쥴러를 이용하여 ./bot.sh start를 해주게 할 순 없을까요?
안녕하세요. xpebot 으로 시놀로지에서 다운로드스테이션과 연결해서 잘 사용중인데요,
어느순간부터 텔레그램 알림이 여러개가 뜨네요.. 예를들어 다운로드 완료 알림이 같은게 7개씩 뜬다던가 하는데
혹시 원인이 뭘가요?
시놀로지 알림에 "아이디"의 주소 [아이피]가 SSH에 의해 차단되었습니다. 라는 메세지가 너무 많이 나오는데 이것도 해결할 수 있을까요?
만들어놓은 봇 하나로 2개의 텔레그램 아이디가 사용중입니다. 다운로드 스테이션은 여러명이 쓰고 있긴 한데, 텔레그렘은 2명만 사용해요.
텔레그램 봇은 테스트용하나 만들었다가 사용안하고 사용중인 봇은 1개입니다.
위 명령어 실행하니 아래와 같이 나옵니다.
11742 pts/13 S+ 0:00 grep --color=auto python
비밀댓글입니다
저도 luna1474 님과 동일한 증상이 발생했네요 chk 해보면 stopped 라고 뜨는데 메신저에서 말을걸면 대답을 하네요..
2017-03-18 00:21:15 [ERROR] download_db_timer Exception : Traceback (most recent call last):
File "/volume1/homes/yhchoi/xpebot/dsdownload.py", line 399, in download_db_timer
self.curs.execute(query)
OperationalError: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
2017-03-18 00:21:15 [ERROR] error ---- server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
, -1
2017-03-18 00:21:19 [INFO] recv signal : SIGTERM[15]
2017-03-18 00:21:19 [INFO] SIGTERM signal ignore
2017-03-18 00:21:19 [INFO] recv signal : SIGTERM[15]
2017-03-18 00:21:19 [INFO] SIGTERM signal ignore
2017-03-18 00:21:19 [INFO] recv signal : SIGTERM[15]
2017-03-18 00:21:19 [INFO] SIGTERM signal ignore
2017-03-18 00:21:19 [INFO] recv signal : SIGTERM[15]
2017-03-18 00:21:19 [INFO] SIGTERM signal ignore
2017-03-18 00:21:19 [INFO] recv signal : SIGTERM[15]
2017-03-18 00:21:19 [INFO] SIGTERM signal ignore
2017-03-18 00:21:20 [INFO] recv signal : SIGTERM[15]
2017-03-18 00:21:20 [INFO] SIGTERM signal ignore
2017-03-18 00:21:20 [INFO] recv signal : SIGTERM[15]
2017-03-18 00:21:20 [INFO] SIGTERM signal ignore
2017-03-18 00:21:20 [INFO] recv signal : SIGTERM[15]
2017-03-18 00:21:20 [INFO] SIGTERM signal ignore
2017-03-18 00:21:20 [INFO] recv signal : SIGTERM[15]
2017-03-18 00:21:20 [INFO] SIGTERM signal ignore
2017-03-18 00:21:20 [INFO] recv signal : SIGTERM[15]
2017-03-18 00:21:20 [INFO] SIGTERM signal ignore
2017-03-18 00:21:21 [ERROR] dsdownload db_connect error
2017-03-18 00:21:21 [ERROR] could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/run/postgresql/.s.PGSQL.5432"?
log보면 이런 메세지들이 있네요
-------------------------------------------
DSM 6.1 사용 중인데
원인은 작업스케줄러에 시작시 bot start를 넣었더니 그런것 같습니다.
재시작해보니까 bot은 다시 시작되서 대답을 하는게 확인되었는데.. chk해보면 stop으로 나오네요..
작업스케줄러에서 실행한게 chk가 안되는 문제인것 같습니다.
그리고 help 명령어 치면 tfreeca 는 없네요..
그리고 똑같이 따라했는데 다운로드완료시점에 에러라고 뜨네요..
링크에 게시글에 중간에 bot.sh.ori라고 되어있네요^^;;이것만 수정해주시면 그대로 따라해도 아무런 문제가 없겠네요
감사합니다!!
---------------------------------------------
지금 bot6.sh.ori로 변경해서 진행결과
작업스케줄러에 bot start 를 넣은거는 문제없이 running으로 표시되고 있습니다.
그런데 여전히 다운로드 완료 후 에러는 뜨네요 큰 문제는 아니니 그냥 써도 될것 같네요 감사합니다~!!!
-----------------------------------------------
마지막으로 다운로드 완료 후에 에러라고 뜨는건 다운로드 폴더를 mount 폴더로 지정해놨더니 그러네요
이거는 download station 문제로 생각되네요^^
덕분에 정말 편하게 사용할 수 있어서 감사합니다!!수고하세요~
덕분에 편하게 텔레그렘으로 알림이오네요.
혹시 다운로드 스테이션에서 다운로드가 완료 되었을 경우에만 텔레그렘으로 알림이 전송되는 방법 혹시 아시나요?
답변 감사합니다.
한가지 피드백을 하자면
현제 토렌트킴으로 토렌트를 받을시 봇이 꺼지는 현상이있는데(위에 꺼지는 현상의 이유도 읽어 보았습니다.)
만약 꺼지는 서비스(토렌트서치, 토렌트킴, 겟토렌트킴 등...)를 실행 시 토렌트 받는 명령 전에 Restart 라는 py 혹은 쉘 스크립트를 만들어
일정시간(약 10초)뒤에 다시 bot.sh start를 자동으로 해주는거죠.
요약) 꺼지는 서비스 실행시 실제 토렌트서비스 실행 전 Restart.sh 등 스크립트 파일을 실행
스크립트 파일 안에는 약 10초 뒤쯤 ./bot.sh start 를 해주는 명령어가 존재
DSM 6.1.3 이후 파이썬등등 패키지 업데이트 이후 봇.sh이 실행되지 않습니다.
토렌트 검색을 한다음 다운로드를 하려고 누르면 "Torrent File 다운로드 시도"에서 더이상 진행이 안되는데 왜그럴까요...?
말씀하신대로 log를 확인하니 원인이 나오는듯 하네요. 감사합니다!!
[ERROR] File Move Exception, '[Errno 2] No such file or directory: 'Download Station Watch Directory Path (ex : /volmue1/download/watch/ )''
덕분에 잘 해결했습니다 감사합니다!
바쁘실텐데 죄송합니다.
위에 적어주신 대로 했는데도 여전히 완료 시점에 에러가 뜨는데, Download Station으로 들어가서 정지를 시키면 완료는 되는군요.
너무 막연한 질문인 것 같아 죄송합니다.
/var/log/xpebot.log 파일은 어떻게 보여 드려야 할까요?
답변 감사합니다. 하지만 테이블과 트리거를 삭제하였다가 다시 위에 나온대로 만들어 보아도 역시 완료 시점에 에러가 발생하네요
비밀댓글입니다
좋은정보 감사합니다. 덕분에 알람 설정 잘하고 편하게 쓰고 있습니다 중간에 문제가 생겨서 댓글로 다량의 글을 남겼다가 해결하게 되어 지웠습니다...ㅎㅎ 아 한간지 궁금한게 있는데요 다운로드 스테이션 다른 사람도 추가 하려고 다른 사람의 텔레그램 chat id 을 알아내고 xpebot.cfg 파일에 chat_id 와 valid user? 여기에다가도 chat _id를 입력하였는데 다른사람이 알람이 오질 않네요.. 혹시 제가 빼먹은게 있을까요? 그냥 간단하게 chat_id 만 입력하면 끝인지도 궁금합니다.
마지막으로 완료되었을시 알람만 울리게 하는 댓글이 위에 써있는데 db 트리거는 어느 파일에서 수정 하는 것인가요?