MLDonkey


설정 항목

Options 페이지에서 All을 선택하면 전체 옵션을 볼 수 있다. 거기서 적당한 검색을 통해 원하는 옵션에 바로 접근할 수 있다. 자세한 사항은 옵션 설명 페이지를 참조한다.

hdd_coredir_stop_core, hdd_temp_store_core가 true이면 mlnet 실행파일이 위치한 파티션이나 temp 파일이 있는 파티션이 꽉 차서 minfree 값 밑으로 떨어지면 종료한다. false면 종료하는 대신 모든 작업을 일시정지한다.




[페도라] 최신용으로 나온 게 있길래 받아서 깔아보니 잘 돌고 한글도 잘 받는다. 됐네.


chroot를 써서 도는 거고, init.d 스크립트가 딸려온다. 서비스를 켜고 ~mldonkey로 가면 거기에 각종 파일들이 있다. 검색은 4080 포트로 접근해서 웹 인터페이스를 쓰면 잘 된다.


----
한글 파일을 검색하면 나중에 ___로 한글이 바뀌는 현상이 있다. 버그질라에 올라온 게 있는데 http://savannah.nongnu.org/bugs/?func=detailitem&item_id=12910 커밋할 때 바뀐다고 정확히 언급이 되어 있고, 내가 그 현상을 겪었었다. 뜰 때 언어가 EN으로 인식되고 따라서 인코딩도 안시 어쩌구로 되는 거였다.


버그가 아니라고 했다. 언어 인식이 잘못되는 건 로케일 설정이 잘못됐기 때문이라는 말이었다. 버그가 아니라 기능이라는 거다. 사이트에 가서 최신판을 받으려고 (많은 경우 프로그램 문제는 최신판을 받아보면 해결됐을 수 있다) 페이지를 열었는데, 찬찬히 뜯어보니 의미심장한 문구가 있었다. '이건 아무 패치도 적용 안한 겁니다', 그리고 그 옆에는 뭔가 버전이 조금 낮은 파일이 따로 있었다.


그래서 그 파일을 받아서 띄워보니 언어를 KO로, 인코딩을 UTF-8로 인식한다. 오! :D


근데, 가볍게 텍스트 파일을 검색해서 받아보니 이번엔 파일 이름이 ???로 바뀐다. -_-; 또 구글에게 물어봐야겠다. mldonkey-2.5.30.17.static.i686-Linux.tar.bz2 를 깔았더랬다. 다시 해보니 이번엔 잘 된다.


[소리바다 놀이]를 이어갈 수 있게 됐다.
----
좀 다른 문제로, 받고 있는 파일의 파일명에 여러 후보가 있을 때 (웹 인터페이스에서) select 태그로 선택하는 부분의 후보 파일명이 깨져 나온다. 예전부터 불편했는데 이번에 생각 나서 소스를 살펴보니, option 태그 목록 만드는 부분이 두 개로 나뉘어 있다. 하나는 현재 파일명을 그대로 써주는 부분이고 다른 하나는 후보 목록을 만드는 부분인데, 후보 목록은 src/networks/donkey/donkeyInteractive.ml의 optionlist에 저장된다. 이때 그냥 name이라는 변수만 전달해서 인코딩 문제가 생기는 것 같다. 혹시나 해서 (ocaml 문법을 살펴보니 함수인 것 같고 현재 파일명 부분에 등장하는) file_best_name을 써서 (file_best_name name) 식으로 반환값을 넘기도록 해봤다. 하지만 이건 형식이 안 맞다면서 실패. 함수에서 File 클래스 같은 걸 따로 요구하는 모양이다. 그냥 문자열만 인코딩 변환하는 건 인코딩 유추 등이 필요하니까 아닐 거고, 뭔가 정식으로 방법이 있을 텐데 ocaml을 모르니 파고들기가 뭐하다.


버그 보고를 하려면 뭐라고 적어야 될까? 게다가 CJK 문화권이 아니면 무슨 문제인지 알기도 힘들 텐데.


name은 fitle.file_file.impl_file_filenames를 List.iter로 순회하는 과정에서 생기는 내부 변수인 것 같다. impl_file_filenames는 string list 형인 것 같고 networks/donkey 쪽 코드에는 별 게 없다. add_file_filenames라는 함수를 통해 추가되는 것 같은데, 이 함수를 호출하는 다른 코드를 살펴봐도 잘 모르겠다.


----
접속 상태가 매우 안 좋다. 받으라고 걸어놓은 파일은 많은데 전송 속도는 보통 3kb를 못 넘는다. 올라가는 것도 딱히 없다. 영화랑 음악 디렉토리도 공유 걸었는데 아무 소용이 없다. 괜히 메모리만 많이 먹겠다 싶어서 그냥 풀어버렸다. 서버를 잘못 택했나 싶긴 한데, 구글에서 찾아본 국내 서버 주소들은 죄다 반응이 없다. 뭐가 잘못된 걸까?


아니면 이런 현상이 '너무 오래 켜둬서' 생기는 문제일 수도 있겠다 싶다. 토런트를 많이 걸어놓고 있는데 이건 특성상 어지간한 소스는 쭉쭉 잘 받아와야 한다. 그런데도 시간이 어느 정도 지나면 전송량이 급감해서 결국 트래픽 없이 조용한 상태가 유지된다. 이때 서비스를 멈췄다가 다시 돌리면 전송량이 생겨 있다. 소프트웨어 문제인지 네트워크 포트가 지나치게 열린 문제인지 공유기 단에서 뭔가 처리를 못 해주는 건지, 짐작할만한 원인이 너무 많아서 어떻게 해보기가 뭐하다.


아예 [Transmission] 데몬을 깔고 시드를 물려봤는데 확실히 전송량이 잘 나오긴 한다. 기존에 받고 있던 걸 어떻게 살릴 수 없을까 싶긴 한데.


아예 당나귀 쪽도 [amule]로 바꿔볼까 했는데 쓰기가 영 불편해서 접었다. 수확은 있는데, 저쪽은 kad 네트워크가 기본으로 잡히길래, 뭔가 싶어서 원래는 꺼져 있던 kademila 네트워크를 켜놨다. 의외로 전송률도 좀 나오고 하는 게, 당나귀 쪽은 ed2k 네트워크보다 kad 네트워크가 더 나은 건가 싶다. (정확히 뭐가 어떻게 돌아가는 건지는 모르겠지만)


----
[FTTH]를 깐 이후로는 하드 공간이 허락하는 한 자료에 제한이 없어졌다. 업로드도 무제한으로 풀었다. 그래봐야 1메가 넘게 땡겨가질 못하는 걸.


원격에서 관리를 쉽게 하기 위해 0.0.0.0/0을 IP 대역에 넣고 대신 관리자 암호를 걸었다. 이걸로 보안 문제가 생기려나?


----
최근 mlnet이 갑자기 죽는 문제가 생겼다. 이따금 incoming에 tmp_BLAH_mld.tmp라는 빈 파일이 생기기도 한다. mlnet.log의 마지막을 살펴보면
{{{
$ tail mlnet.log 
2008/01/01 13:06:18 [cWeb] already loaded local version of web_infos/contact.dat (08:16 Wed 22 Nov 2006), HTML header (Wed, 22 Nov 2006 08:16:19 GMT)
2008/01/01 13:06:24 [EDK] server.met loaded from http://www.gruk.org/server.met.gz
2008/01/01 13:06:24 [EDK] Exception Gzip.Error("bad magic number, not a gzip file") while extracting from http://www.gruk.org/server.met.gz
2008/01/01 13:06:24 [HTTPcl] Exception Not_found in loading downloaded file web_infos/server.met.gz
2008/01/01 13:06:35 [dcInt] DirectConnect module is disabled, ignoring...
2008/01/01 13:06:35 [HTTPcl] Exception Not_found in loading downloaded file web_infos/hublist.config.bz2
2008/01/01 13:06:45 [cWeb] already loaded local version of web_infos/level1.gz (00:35 Tue 01 Jan 2008), HTML header (Tue, 01 Jan 2008 00:35:47 GMT)
2008/01/01 13:20:57 [cCO] Options correctly saved
2008/01/01 13:35:56 [cCO] Options correctly saved
2008/01/01 13:50:57 [cCO] Options correctly saved
}}}
식으로 공통되는데 뭐가 문제인지는 봐도 모르겠다. -_-;


어쩌면 이건 하드 문제였을지도 모르겠다.


이거 말고 죽는 문제가 종종 있었는데, syslog를 보면 segfault가 적혀 있었다. OOM(out-of-memory)으로 죽은 적도 있었던가?
segfault는 왜 그런지 물론 이유를 알 수가 없다. 토런트를 많이 걸어놓고 쓰는데 그것 때문에 뭔가 걸리는 게 아닌가 싶기도 하다.


----
HackOS 설치한 하드가 80G 밖에 안 되어서, temp_directories 옵션을 바꾸고 Shares를 새로 정해서 다른 하드에서 입출력이 일어나도록 했다. 부하 분산 효과도 기대하고 있다.


그러다가


mldonkey를 매번 새로 설치하고 이전 파일들을 인식시키고 하는 게 귀찮았는데, 그동안은 incoming과 temp만 (메인 디스크의 io 부하를 나누기 위해) 따로 뺐다가, 생각해보니 /etc/default/mldonkey-server에서 MLDONKEY_DIR 변수를 바꿔주면 새로 설치해도 환경을 그대로 유지할 수 있겠구나 싶어서 이참에 다 옮겼다.


문제가 되는 건 download.ini에 기록된 uid 번호인데 이게 실제 시스템의 uid와 안 맞으면 setuid failed라고 mlnet.log에 남는다.


그리고 mldonkey 계정 외에 실사용자 계정이 파일을 바로 다룰 수 있게 하려면 일단 /etc/group의 mldonkey 줄에 그 사용자를 추가해주고 download.ini에 755 정도로 찾으면 나오는 권한 값을 775로 맞춰주면 된다. /etc/default/mldonkey-server에 있는 UMASK 값과는 무관한 내용이라서 헷갈렸는데 따로 설정이 있었다. 아 물론 incoming/*, torrents/* 디렉토리 자체의 권한에도 g+w를 적용해서 파일시스템 차원에서 거부되지 않도록 해야 한다.


torrent 파일을 직접 받았으면 torrents/incoming 안에 넣어주면 곧 mlnet이 인식하고 처리를 시작한다. 굳이 dlllink로 로컬 파일을 받아줄 필요는 없었다.








Comments