애석하게도 매끈한 패키지는 없다.

파이썬 패키지 매니저를 이용해서 설치하고, 알아서 주기적으로 자동실행되도록 꾸며서 쓰는 방식.


홈페이지에 있는 설치 방법도 처음엔 좀 이해가 안되었고, 무작정 따라해서 약간 불편하게 쓰기도 했다.

그래서 이번에 갈아엎으면서 조금은 공부를 더 했다.


1. 설치
참고: https://flexget.com/InstallWizard/Linux

패키지 매니저쯤 되나보는 PIP와 PIP네 일꾼쯤 되는 setuptools 를 데려다가 FlexGet을 PyPI(파이썬 패키지 인덱스)에서 가져와서 설치하는데, virtualenv 를 이용해서 독립환경(~/flexget/)을 만든 후 거기다가 설치를 한다.

저 virtualenv로 설치한 패키지를 삭제할 때는 그냥 폴더만 통으로 날리면 되는모양.. virtualenv를 활성화/비활성화 이런 신경을 쓰기는 해야는데, 그냥 독립환경 내의 실행파일(~/flexget/bin/flexget)만을 사용할 것이므로 그냥 프로그램 종료 후 삭제하면 된다... 정도로만 기억하겠음.

이제 홈페이지의 설치 과정을 주욱 따라감: https://flexget.com/InstallWizard/Linux


1.1. 사전 준비

아래 명령으로 파이썬이 설치 되어 있는지 확인하자.

$ python -V
Python 2.7.13


파이썬이 없을 경우 설치..

$ sudo apt-get install python

Debian Stretch의 경우 파이썬 2.7이 깔린다. 3.x 버전을 깐다고 해도 2.7이 별도로 필요한 것이 현실이므로, 고민없이 위 명령으로 2.7을 깔자.


1.2. python 패키지 관리자와 일꾼 설치

$ sudo apt-get install python-pip

42.5 MB 다운받아서 95.1 MB를 설치한다. 용량은 남아돈다만 flexget 하나 쓰자고 이래도 되나 싶지만, 뭐 다 좋은거려니 하자.


$ sudo pip install --upgrade setuptools
Collecting setuptools
  Downloading setuptools-36.2.2-py2.py3-none-any.whl (477kB)
    100% |████████████████████████████████| 481kB 1.8MB/s
Installing collected packages: setuptools
  Found existing installation: setuptools 33.1.1
    Not uninstalling setuptools at /usr/lib/python2.7/dist-packages, outside environment /usr
Successfully installed setuptools-36.2.2

데비안 패키지로 설치된 supertools 33.1.1을 삭제하지는 않았다네.. 언젠가 다시 덮어써지는걸까? 궁금하지만 일단 pass. 나의 갈 길은 멀다.


1.3. 독립환경 만들고 그 안에 FlexGet 설치

chroot 같기도 하지만 다르고, 포터블 프로그램 같기도 하지만 또 다르고.. 여튼 쉘에서 독립환경을 활성화 하지만 않으면 내게는 포터블 프로그램이랑 다를 바가 없다. 창피하지만, 갈 길은 멀고 궁금증은 그냥 내려놓는다.

일단 독립환경 만들어주는 툴 먼저 설치

$ sudo pip install virtualenv


자! 여기서 문제.. 앞으로 어느 계정으로 FlexGet을 사용할 것인가 결정해야 한다. 대체로 지금 로긴한 계정이겠지만 나는 관리 계정과 samba, ftp, 등 파일 공유서비스 접속 시 사용하는 계정이 다르다. 앞으로 FlexGet 설정파일 변경 등을 편히 하려면 아래 명령은 samba, ftp 계정으로 실행해야 한다.

이제 계정을 갈아타고, 홈 디렉토리로 이동 후 pwd로 현재 디렉토리를 확인하여 일반사용자계정으로 잘 갈아탔는지 확인하자.

$ sudo -sHu 일반사용자계정

$ cd ~/

$ pwd


독립환경 만들기

$ virtualenv --system-site-packages ~/flexget/

명령어 앞에 sudo를 붙이지 않는다.

나는 deluge와 함께 사용할꺼라서 --system-site-packages 옵션 추가. 그게 아니라면 옵션 필요 없다.


독립환경 안에 설치

$ cd ~/flexget/
$ bin/pip install flexget

역시나 sudo 없이, 사용자 계정으로 명령어 실행. 그리고 bin 앞에 /가 없다. 즉, /bin/pip가 아닌 ~/flexget/bin/pip를 실행하는 것! 물론 /bin에는 pip가 없다. ^^


앞으로 아래 명령으로 FlexGet을 실행하면 된다.

~/flexget/bin/flexget [options]



2. FlexGet 설정파일 만들기

http://notme.tistory.com/71

http://blog.naver.com/hoon2486/60213606020



3. 자동실행 설정
참고: https://flexget.com/InstallWizard/Linux/AutoStart

FlexGet의 꽃은 자동실행.. 알아서 정해진 주기마다 rss를 분석해서 원하는 파일을 받아줘야지.


3.1. Scheduler 선택: System 시계 vs FlexGet 시계

여기서 중요한 첫번째 선택을 해야한다. 누가 rss 분석 주기를 결정하느냐는 것이고, 아래 두가지 방법이 있다.
- FlexGet 스스로 시간을 세고, 정해진 주기 마다 작업을 시작하는 방법
- 시스템이 시간을 세고, 정해진 주기마다 FlexGet을 실행하는 방식

웹 상에는 대체로 관리자 입장에서 익숙한 cron을 사용해서 시간을 세는 두번째 방법이 많이 소개되는데, 나는 어차피 cron을 잘 모르기 때문에 FlexGet 스스로 시간을 세도록 했다. cron으로도 FlexGet의 scheduler plug-in의 기능을 구현할 수 없는 것은 아니지만, 좀 공부를 많이 해야한다. 그냥 자동 다운로드 관련 설정은 FlexGet으로 싹 모는 것이 내 취향.

정리하면... 나는 FlexGet을 daemon mode로 돌릴꺼다.


3.2. 서비스 만들기 (systemd unit)

소소한 선택: cron vs systemd
cron의 부팅 시 실행 명령으로 등록하는 방법과 systemd unit을 만들어서 서비스로 관리하는 방법이 있는데, 나는 systemd 방식으로 선택. 대단한 이유는 없고, 그냥 최근에 systemd unit을 처음 만들어봤기에 복습하는 차원에서..

정석은 systemd user unit을 만드는 것인데, 나는 그냥 system unit으로 만든다. 내 환경에서는 설정파일 수정은 samba에서 할꺼고, 조작은 터미널로 할껀데 user는 ssh 접속 권한이 없으니까.
(web ui 쓰면 되는데... ssh 접속 후 계정 전환 해주면 되는데... 실은 user service 공부하기가 싫다.)

/lib/systemd/system/ 디렉토리에 flexget.service 파일을 만들고 아래 내용을 적어준다.

[Unit]
Description=Flexget Daemon
After=network.target

[Service]
Type=simple
User=일반사용자계정
Group=일반 사용자 계정의 기본 그룹
UMask=000
WorkingDirectory=/home/일반사용자계정/flexget
ExecStart=/home/일반사용자계정/flexget/bin/flexget daemon start
ExecStop=/home/일반사용자계정/flexget/bin/flexget daemon stop
ExecReload=/home/일반사용자계정/flexget/bin/flexget daemon reload-config

[Install]
WantedBy=multi-user.target

빨간 부분은 1.3. 과정에서 결정한 flexget을 실행할 사용자와 독립환경/FlexGet 설치 위치에 따라 결정되어야 한다.


서비스 조작은 아래 명령으로 할 수 있다.

부팅 시 자동실행 등록: $ sudo systemctl enable flexget
부팅 시 자동실행 해제: $sudo systemctl disable flexget
서비스 실행: $ systemctl start flexget
서비스 종료: $ systemctl stop flexget
서비스 상태확인: $ systemctl status flexget
로그 확인: $ journalctl -u flexget


enable 명령으로 unit을 등록한 후 start 명령으로 실행, status 명령으로 에러 없이 잘 떴는지 확인하면 된다.