brag

http://brag.sourceforge.net/jindex.html


뉴스그룹에 접속해 파일을 긁어오는 프로그램. ISP에 따라 다르지만 아직 활동하는 뉴스그룹이 있다.


man 설명에 .brag에 쌓이는 오래된 파일은 주기적으로 없애주라고 되어 있기도 하고, 실제로 의미 없는 낡은 파일이 쌓이기도 해서 tmpreaper를 깔고 이쪽 경로를 포함하도록 설정했다가 처리를 어떻게 하는 건지 타임아웃에 자꾸 걸려서 그냥 cron에서

find $HOME/.brag/$NNTPSERVER -mindepth 3 -maxdepth 3 -type d -ctime 7 -exec rm -rf {} \; > /dev/null 2>&1
으로 잡아내도록 했다.


옵션

설정 파일이 따로 있는 게 아니라서 일일이 옵션을 줘야 하긴 한데 어차피 cron에 적어놓으면 되는 거라 크게 불편한 문제는 아니다.


-t로 동시에 몇 개나 접속할지 정할 수 있는 게 가장 좋다. 사실 속도만 빠르다면 불필요한 파일을 받는다 해도 그렇게까지 시간이 아까운 건 아니니까.


-a나 -r로 받거나 받지 않을 패턴을 정할 수도 있고 ~/.brag/SERVERNAME/GROUPNAME/accept나 .../reject 파일이 있으면 거기 있는 패턴을 쓴다. man 페이지 내용으로 봐서, 패턴은 한 줄에 하나씩이고 비었거나 #로 시작하면 무시되며, 파일명 기준이 아니라 제목 기준이라고 한다. (그리고 국내 뉴스그룹은 EUC-KR 기반이므로 패턴도 EUC-KR이어야 한다. 단순히 패턴 파일의 내용을 EUC-KR 형식으로 작성할 경우는 의도하지 않은 경우에도 걸리는 증상이 있어서 작성은 UTF-8로 하고 내부적으로 변환을 거쳐 처리하도록 해서 쓴다. 첨부파일 참조)


-X 옵션을 주어 (요즘 들어 자주 보이는) 안 쪼개고 올리는 통짜 파일도 처리하도록 했다.


-k 옵션을 주어 디코딩한 파일명이 한글일 경우를 처리 한다.


문제점

-k 옵션이 없으면 unfinished 상태에서 finished로 넘어갈 때 tcl에서 rename으로 처리가 되는데 여기서 실패 예외가 발생한다. 기본적으로는 제목에 기반해 파일명을 생성하도록 되어 있는데, 모든 문자열은 전송 소켓의 인코딩 설정 때문에 binary로 처리되어서, 아마 이미 깨진 문자열을 기준으로 다시 만들어낸 파일명이 올바르지 않아 생기는 문제가 아닌가 싶다.


내부적으로 호출되는 uudeview의 처리 결과 중에 파일명이 제대로 검출되지 않아 UNKNOWN.nnn 식의 파일이 잔뜩 생기는 경우도 가끔 있다. nnn이 마냥 늘어가는 것만은 아니고 UNKNOWN1.nnn 식으로 뒤에 숫자가 붙는 경우도 있다. 원본 포스팅의 문제인지 uudeview의 문제인지는 모르겠다.


비슷한 프로그램

리눅스에서 뉴스그룹의 파일을 일괄적으로 받아오는 프로그램은 많지 않다.


nget은 여러 서버에 동시 접속할 뿐 한 서버에 여러 연결을 하지는 않는다.

aub라는 게 있는데 묵묵히 작업을 해낸다. 설정도 아주 간소하다.

ubh도 좋다. 다만 하나만 붙잡고 전송과 압축해제를 순차적으로 하다 보니 영 느렸다. 여러 개를 실행하면 그만큼 동시접속하는 효과가 나도록 설계되어 있다고 포럼의 어느 글에서 보았다. 하지만 단순히 여러 개를 실행하는 것만으로는 부족한 것 같다. 여러 개를 실행하면 아무래도 메모리나 CPU를 많이 먹고, 부작용으로 중복 파일을 여러 번 받는 현상이 있는데 -n 을 켜써 .newsrc를 바로바로 갱신해야 하는 것 같다. 하지만 옵션을 켜도 파일을 여러 번 받는 경우가 있는데 -O 옵션으로 중복을 만들지 안 만들지 결정할 수는 있다. 하지만 처음 받은 파일이 깨진 파일이고 나중에 중복된 파일이 멀쩡한 파일일 경우도 적지 않아서 중복을 아예 안 만들게 하는 것도 안정적이지 못하다.


모두 내가 원하는 거랑은 좀 다른 게,

데몬으로 떠 있으면서 등록된 그룹을 정기적으로 검사하고 새로 완성된 파일이 있으면 (뉴스그룹은 큰 파일을 여러 개로 쪼개서 올리기 때문에 올리는 도중이거나 일부가 깨졌을 경우에는 불완전한 파일이 된다) 새로 받는 식이면 좋겠다. 하지만 다들 쭈욱 받고는 끝나버리는 식이라서. 이건 cron에 맞기면 되는 거긴 하다.

그리고 받거나 안 받는 파일을 동적으로 정할 수 있으면 좋겠다. 안 볼 게 뻔한 드라마나 영화를 꾸준히 잔뜩 받는 게 반갑지 않다. 그때그때 패턴을 변경하면 포스트를 읽어오는 그 시점에 매번 패턴과 비교해서 받고 안 받고를 결정하면 불필요한 작업을 하지 않을 수 있을 것이다. - 이것 때문에, GUI와 cli가 같이 있는 프로그램이 적합한데, 현재 그런 프로그램은 존재하지 않는다.

그나마 brag이 이 조건을 거의 비슷하게 만족한다.

ċ
brag.diff
(1k)
Jeong-Hee Kang,
2012. 10. 28. 오후 1:29
Comments