PogoPlug Classic에 rTorrent 설치하기

|

PogoPlug에 토렌트 프로그램으로 Transmission을 설치하여 사용중인데,

트랜스미션 데몬이 자꾸 죽는 문제가 발생...


로그를 뒤져보니 Segment fault 같은, 설정파일의 문제가 아닌

바이너리 자체 문제인것으로 보여 토렌트 프로그램을 교체하기로 하고


검색해보니 Deluge와 rTorrent가 많이 사용되는데,

Deluge는 한글 경로명 인식에 문제가 있어 제외하고, rTorrent로 결정.


하지만 간단하지만은 않은 과정......; 사흘에 거친 삽질 끝에 설치 성공.


rTorrent는 데몬 형태가 아닌 화면을 점유하는 방식(foreground)이라

Web GUI를 위해 ruTorrent를 따로 깔아야하고, 이 둘간 통신은 RPC(Remote Procedure Call 이던가..)으로 수행...


암튼 할게 많다.






물론 optware가 설치된 PogoPlug에서 설치를 진행한다.

그리고 root로 로그인한 상태.



일단 패키지 캐시 업데이트.

ipkg update

ipkg는 데비안의 패키지 관리 프로그램인 dpkg의 lightweight버전이다. (윈도우에서의 setup.exe 랄까)

로컬 패키지 목록의 캐시를 update하는 과정. 무슨말인지 모르면 그냥 실행하자.



ipkg를 통해 설치해야 할 목록은 다음과 같다.

libtorrent : 토렌트 구동 라이브러리

rtorrent : libtorrent라이브러리를 사용하든 BitTorrent클라이언트

screen : foreground인 rTorrent 어플을 가상 화면으로 돌려주는 프로그램

lighttpd : WebGUI를 사용하기 위한 웹서버

svn : libxmlrpc 소스를 받기 위한 SVN툴

make : libxmlrpc 소스를 빌드하기 위한 make툴

gcc : libxmlrpc 컴파일을 위한 컴파일러

libcurl-dev : libxmlrpc 빌드시 필요한 CURL라이브러리






이 패키지들을 아래와 같이 한꺼번에 설치해도 상관은 없으나....

$ ipkg install libtorrent rtorrent screen lighttpd php-fcgi ...........

혹시 모를 에러발생 상황 파악을 위해 하나씩 설치를 하자....


패키지 설치시에 해당 패키지에서 필요한 다른 패키지는 의존성 검사를 통해 자동적으로 설치한다.


프롬프트가 뜨기 전에 Successfully terminated 가 떴는지 꼭 확인. 에러가 발생하면 에러 파악 후 재설치.




[rTorrent 실행용 계정 추가]

adduser명령이 없다면 ipkg를 통해 설치해주면 된다.

계정을 생성하면 기본적으로 홈디렉토리가 /home/rtorrent 가 되는데, 이곳은 외부저장장치(USB나 SATA HDD) 위치가 아니기때문에

재부팅하면 파일이 사라진다. 그래서 관련 파일은 /opt 아래에 위치시킬 예정.

그리고 홈디렉토리도 그곳으로 지정한다

$ adduser rtorrent -h /opt/rtorrent



[libxmlrpc 설치]

ipkg에 xmlrpc-c 패키지가 있지만 이걸로 설치하면 rtorrent 실행시 에러가 발생한다.

(Fault occured while inserting xmlrpc call. , occured가 ocured로 출력되는데 오타인듯...)


그래서 직접 소스를 받아다 컴파일설치를 수행한다.


일단 아래와 같은 명령으로 svn repository에서 checkout을 수행한다. (쉽게 말해 소스를 가져오는 작업)


$ cd ~/
$ svn checkout http://xmlrpc-c.svn.sourceforge.net/svnroot/xmlrpc-c/stable xmlrpc-c
...시간이 좀 걸린다...
$ cd xmlrpc-c
$ ./configure


configure 명령은 빌드를 위해 환경을 검사하고 셋팅하는 작업이다. 고로, 여기서 에러가 나면 빌드 역시 안된다.

에러 없이 정상적으로 종료되었는지 확인 후 make를 진행한다.

내 환경에서는 gcc만 추가로 설치해주면 정상적으로 진행되었다. (위에서 설치)


$ make

실제 라이브러리를 만드는 과정이다. .so파일을 생성하기 위함이고, .so파일은 윈도우로 치자면 dll파일이라고 보면 된다.

시간이 좀 걸린다.



make가 정상적으로 종료되고 나면, 보통의 수순으론 make install 이지만,

make install이 일반적인 환경에 맞춰져 있어 PogoPlug엔 맞지 않아 so파일을 직접 옮겨야 한다.


옮겨야 할 파일은 다음과 같으며, 이 파일들을 /opt/lib 디렉토리로 복사해야한다.


src/libxmlrpc.so.3.25

src/libxmlrpc_server.so.3.25

lib/libutil/libxmlrpc_util.so.3.25

lib/expat/xmlparse/libxmlrpc_xmlparse.so.3.25

lib/expat/xmltok/libxmlrpc_xmltok.so.3.25


(3.25는 버전이고 위에서 checkout받은 소스 버전에 따라 이 숫자는 다를수도 있음)


$ cp src/libxmlrpc.so.3.25 /opt/lib/
$ cp src/libxmlrpc_server.so.3.25 /opt/lib/
$ cp lib/libutil/libxmlrpc_util.so.3.25 /opt/lib/
$ cp lib/expat/xmlparse/libxmlrpc_xmlparse.so.3.25 /opt/lib/
$ cp lib/expat/xmltok/libxmlrpc_xmltok.so.3.25 /opt/lib/


rtorrent실행시 so파일을 참조하는 파일명으로 소프트링크를 걸어준다.


$ cd /opt/lib
$ ln -s libxmlrpc.so.3.25 libxmlrpc.so.3
$ ln -s libxmlrpc_server.so.3.25 libxmlrpc_server.so.3
$ ln -s libxmlrpc_util.so.3.25 libxmlrpc_util.so.3
$ ln -s libxmlrpc_xmlparse.so.3.25 libxmlrpc_xmlparse.so.3
$ ln -s libxmlrpc_xmltok.so.3.25 libxmlrpc_xmltok.so.3



[rTorrent 설정파일 셋팅]

일단 기본적인 형식을 가지고 있는 파일을 내려받자.


$ cd /opt
$ mkdir rtorrent
$ chown rtorrent rtorrent
$ cd rtorrent
$ wget -O .rtorrent.rc http://libtorrent.rakshasa.no/export/1303/trunk/rtorrent/doc/rtorrent.rc

위 주소에서 받아도 되고, 최신버전으로 받고자 한다면 http://libtorrent.rakshasa.no/browser/trunk/rtorrent/doc/rtorrent.rc#latest 으로 이동하여 화면 맨 하단의 Original Format 의 파일의 주소로 다운받으면 된다.


다운을 받으면 vi 등을 통하여 파일을 수정해야 한다.

peer등의 설정은 각자 알아서 맞추면 되고, 일단 설정해야 할 값들은 다음과 같다.

(줄의 맨 앞에 #가 있는것은 주석처리이므로 필요한 설정인 경우 #를 빼주면 된다)


directory : 다운로드 디렉토리

session : 세션 디렉토리


이 값들은 나는 이렇게 설정했다.


directory = /root/Downloads

session = /opt/rtorrent/session


물론 /opt/rtorrent/session 디렉토리는 mkdir로 생성해두고 rtorrent 유저에게 쓰기권한을 줘야 한다. (소유자를 바꾸거나 권한을 바꾸거나 뭐..)



그리고 파일 맨 아래에 scgi_port 를 추가한다.


scgi_port = 127.0.0.1:5000




rtorrent 실행시 기본설정으로 설정파일은 홈디렉토리/.rtorrent.rc 파일로 찾게 되는데,

현재 작업중인 유저 : root, 실제 rtorrent를 실행할 유저 : rtorrent 이고,

root로 로그인한 상태에서 설정파일을 테스트하기 위해 /root/.rtorrent.rc로 소프트링크를 생성한다. (테스트가 필요없다면 안해도 됨)


$ ln -s /opt/rtorrent/.rtorrent.rc /root/.rtorrent.rc


여기까지 rTorrent가 제대로 설정되었는지 테스트를 해보자.


쉘에서 rtorrent 를 입력하면 rtorrent가 실행되고,

아래쪽에 

(시간) XMLRPC initialized with ??? functions.


가 뜨면 xmlrpc까지 설정이 완료된 것이다.


실행이 안되거나 XMLRPC메세지가 안뜬다면 설정에 뭔가 문제가 있는 상태이다.


이 화면에서 Ctrl+Q를 눌러 다시 쉘로 빠져나온다.





rtorrent.rc 파일의 자세한 설정방법은 여기(http://ystory.kr/299)에 올라와 있다.




[rTorrent Init Script 다운]

rtorrent를 실행하고 Ctrl+Q를 눌러 빠져나오면 토렌트 클라이언트는 그냥 종료된 상태가 된다.

백그라운드로 계속 돌리기 위해 screen 명령을 사용하여 돌리는데,

이것 역시 누군가 이미 스크립트를 짜 놓았다.


$ wget -O /etc/init.d/rtorrentInit.sh http://libtorrent.rakshasa.no/raw-attachment/wiki/RTorrentCommonTasks/rtorrentInit.sh


다운 후 환경에 맞게 설정을 수정한다.


34라인 user="user"을,

rtorrent를 실행할 유저명, 즉 위에서  adduser한 rtorrent로 변경

user="rtorrent"


52라인 logfile="..." 을 로그파일을 저장할 경로로 재지정 (안해도 상관 없다)


56라인 PATH설정에 /opt/bin 추가.

줄 맨 뒤에 :/opt/bin 을 추가한다.


(라인 번호는 다를수도 있음)


수정하고 저장 후 rTorrent를 screen으로 실행


$ /etc/init.d/rtorrentInit.sh start


별다른 오류 메세지 없이 쉘이 다시 뜬다면 실행된 상태이다. 확인하고 싶은 경우에는 ps를 실행하여


SCREEN -dm -S rtorrent


라는 프로세스가 떠있는지 확인해보면 된다.



[ruTorrent 설치/설정]

rTorrent설정은 완료되었다. 이제 WebGUI사용을 위한 ruTorrent 설치 및 설정을 한다.


일단 ruTorrent 파일과 플러그인을 다운받아 압축을 풀고 적당한 위치로 이동한다.


$ cd ~/
$ wget http://rutorrent.googlecode.com/files/rutorrent-3.4.tar.gz
$ tar xvf rutorrent-3.4.tar.gz
$ wget http://rutorrent.googlecode.com/files/plugins-3.4.tar.gz
$ tar xvf plugins-3.4.tar.gz
$ mv rutorrent /opt/rtorrent
$ rm -rf /opt/rtorrent/rutorrent/plugins
$ mv plugins /opt/rtorrent/rutorrent/


ruTorrent 압축을 풀면 빈 plugins 디렉토리가 있어 원래 있던 디렉토리를 지우고 다운받은 plugins디렉토리로 대체한다.



[lighttpd 설정]

lighttpd는 웹서버이다.

설치는 위에서 ipkg를 사용해서 설치하였고, 이제 설정파일을 만질 차례.

설정파일의 기본 위치는 /opt/etc/lighttpd/lighttpd.conf 이다.


이 파일을 열어 설정을 수정한다.


40라인의 server.document-root를 아까 rutorrent 파일을 위치시킨 /opt/rtorrent/rutorrent로 설정한다.

(lighttpd를 다른 용도로 같이 사용하겠다면 뭐 맘대로..)

기본 포트를 바꾸려면 139라인의 server.port 설정 변경


149라인의 pid파일 경로를 /var/lighttpd.pid 로 변경

(기존에 설정되어있는 /var/run/lighttpd.pid 그대로 써도 상관은 없으나, 매 부팅때마다 /var/run 디렉토리를 생성해줘야 하기때문에...)


일단 이렇게 설정하고, ruTorrent에서 필요로 하는 추가 모듈을 설치한다.

(위에서 같이 설치하지 않는 이유는 lighttpd를 설치하고 난 후에 설치해야 설정파일을 자동으로 생성해주기 때문. 근데 scgi는 생성을 안해준다...)


필요한 모듈은 FastCGI와 scgi 이다.


$ ipkg install php-fcgi py25-scgi


FastCGI와 scgi설정은 lighttpd.conf에서 설정해도 상관없으나 현재 버전에선 설정파일을 분리해두고 있으며, 이 방식을 따르자.


추가 설정파일은 /opt/etc/lighttpd/conf.d 디렉토리에 위치하고 있다.

이곳에 가보면 10-php-fcgi.conf 파일이 생성되어 있다. (숫자는 다를수도 있다.)

fastcgi 설정파일은 궂이 수정할 필요는 없어 보인다.




scgi 설정파일은 자동으로 생성해 주지 않기 때문에 conf.d 디렉토리에 scgi.conf 파일을 하나 생성하여 다음과 같이 설정한다.

(파일명은 상관없고, 단지 .conf 확장자만 가지면 된다.)


server.modules += ( "mod_scgi" )

scgi.server = (
    "/RPC2" =>
        ( "127.0.0.1" =>
            (
                "host" => "127.0.0.1",
                "port" => 5000,
                "check-local" => "disable"
            )
        )
)


설정이 완료되었으니 이제 띄워볼 차례.


lighttpd는 다음과 같이 구동이 가능하다.


$ lighttpd -f /opt/etc/lighttpd/lighttpd.conf


아무 메세지 없이 프롬프트가 다시 표시되면 구동 성공. 확인은 역시 ps 명령으로 lighttpd 프로세스가 떠있는지 확인.



그리고 웹브라우저로 주소:포트 입력하여 뜨는지 확인!




[부팅시 시작하기]

부팅할때 rTorrent와 lighttpd만 구동시켜 주면 된다.


/etc/init.d/211.sh 안에 구동만 해주면 된다.

rTorrent : /etc/init.d/rtorrentInit.sh start

lighttpd : lighttpd -f /opt/etc/lighttpd/lighttpd.conf






RPC통신을 HTTP port가 아닌 파일로 하려는 경우,

.rtorrent.rc 파일을~

scgi_port 줄을 주석처리(삭제)하고

scgi_local = /opt/rtorrent/rpc.socket

schedule = chmod,0,0,"execute=chmod,777,/opt/rtorrent/rpc.socket"

줄 추가


scgi.conf 파일을

server.modules += ( "mod_scgi" )

scgi.server = (
    "/RPC2" =>
        ( "127.0.0.1" =>
            (
                "socket" => "/opt/etc/rpc.socket",
                "check-local" => "disable",
                "disable-time" => 0
            )
        )
)



그리고 rutorrent 디렉토리 내의 config.php 파일 ( /opt/rtorrent/rutorrent/conf/config.php )

$scgi_port = 0

$scgi_host = "unix:///opt/rtorrent/rpc.socket"

으로 수정.






And