Chapter 17
C news


D.M.Z CONTENT PRE NEXT

17.1 Delivering News
17.2 Installation
17.3 The sys file
17.4 The active file
17.5 Article Batching
17.6 Expiring News
17.7 Miscellaneous Files
17.8 Control Messages
17.9 C News in an NFS Environment
17.10 Maintenance Tools and Tasks

Netnews에서 가장 대중적인 소프트웨어 패키지 중 하나는 C News이다. 그것은 UUCP 링크를 통해 뉴스를 운반하는 사이트들을 위해 디자인되었다. 이 장은 C Nes의 핵심 개념과, 기본적인 인스톨과 관리 임무에관해 논의한다.

C News는 그 설정파일을 /usr/lib/news에, 그리고 대부분의 바이너리를 /usr/lib/news/bin에 저장한다. article들은 /var/spool/news아래에 보존된다. 이들 디렉토리 내의 모든 파일이 유저 news, 그룹 news의 소유인지 확인해야하는데, 그 이유는 대부분의 문제가 C News가 파일에 억세스 할 수 없는 데서 발생하기 때문이다. 그 곳에서 뭔가를 건드리기 전에 su로 유저 news가 되는 습관을 들여야 한다. 단 한가지 예외가 있는데, 그것은 setnewsid로, 몇가지 뉴스 프로그램의 실제 유저 id를 지정하는데 사용되는 것이다. 이는 반드시 root의 소유여야하며, setuid 비트가 걸려 있어야 한다.

이후로, 우리는 C News 설정에 대해 자세히 설명하고, 당신의 사이트가 계속 돌아가도록 유지하기위해 무엇을 해야하는가를 보여 줄 것이다.


17.1 Delivering News

article은 여러가지 방법을 통해 C News로 feed된다. 로컬 유저가 article을 포스팅할 때, newsreader는 보통 그것을 inews 커맨드로 넘겨주어 불완전한 헤더 정보 부분을 완성하게 한다. 리모트 사이트로부터의 뉴스들(single article또는 batch일 것이다)은 rnews 커맨드에게 넘겨주고, rnews는 이를 /var/spool/newsin.coming 디렉토리에 저장하여, 이후에 newsrun이 이것들을 pick up한다. 그러나 이들 두가지 방법중 어느 것을 쓰더라도 결국엔 relaynews가 article을 넘겨받는다.

relaynews 커맨드는 각 article에대해서 history 파일내의 메시지 id를 검색함으로써 그 article이 이미 로컬 사이트에서 받은 적이 있는 메시지인가를 체크하여, 중복된 것이라면 drop시킨다. 그런 후에, relaynewsNewsgroups: 헤더라인을 읽어, 로컬 사이트가 거기에 지정된 그룹들에 대한 article을 받고 있는지를 판별한다. 만약 그렇다면, 그 뉴스 그룹은 active 파일에 추가되고, relaynews는 news spool area내의 해당 뉴스그룹 디렉토리에 그 article을 저장하려하는데, 만약 이 때 디렉토리가 존재하지 않는다면 새로이 생성된다. 그리고 나서 그 article의 메시지 id는 history 파일에 로그된다. 그러나 만약 이들 그룹 중 어떤 것에대해서도 뉴스를 요청하지 않고 있다면, relaynews는 그 article을 drop시킨다.

만약 incoming article이 포스팅 된 뉴스 그룹이, 당신의 active파일에 리스트되어 있지 않은 이유로 인해 relaynews가 그것을 저장할 수 없는 경우, 그 article은 junk 그룹으로 옮겨진다. relaynews는 그 외에도, 기한이 만료 되거나 날짜가 잘못 표기된 article이 있는지 체크하여 만약 그럴 경우 그것들을 거부한다. 그 외 다른 여러가지 이유로 저장하지 못한 batch들은 /var/spool/news/in.coming/bad로 옮겨지고, 로그에 에러 메시지가 남는다.

이런 후에, 그 article은 특정 사이트 각각에 지정된 전송수단에 의해, 이들 그룹을 요청한 다른 사이트로 릴레이된다. 각 사이트는, 그것이 어떤 사이트에 이미 보냈던 것이 아니란 것을 확인하기위해, article이 거쳐간 사이트 리스트가 들어있는 bang path 스타일의 Path: 필드와 비교되고, 목적지 사이트의 이름이 리스트에 없는 경우에만 그 사이트에 article을 보낸다.

C News는 NNTP 환경에서도 사용가능하나, 보통은 UUCP 사이트간에 뉴스를 릴레이하는데 사용된다. 리모트 UUCP 사이트로 뉴스를 배달하기위해 - 그것이 single article이건 batch이건 - 리모트 사이트의 rnews 커맨드를 실행하는데 uux를 사용하고, 표준입력으로 article 또는 batch를 넘겨준다.

주어진 사이트에 batching이 가능하다면, C News는 incoming article을 즉시 보내지않고, 단지 그것의 경로명을 파일에 (보통, out.going/site/togo) 덧붙인다. 일정시간을 간격으로 crontab 엔트리에서 batcher와 프로그램이 실행되어 article들을 하나, 또는 그 이상의 파일에 뭉쳐 넣고, 압축을 하여(하지 않기도 한다), 그것을 리모트 사이트의 rnews로 보낸다.

그림 17.1은 relaynews를 통한 news의 흐름을 나타낸 것이다. article은 로컬 사이트 (ME로 지칭되어 있다), ponderosa라는 이름의 어떤 사이트, 그리고 batching이 가능한 moria라는 사이트로 릴레이 될 것이다.

그림 17.1 : relaynews를 통한 뉴스의 흐름


17.2 Installation

C News를 인스톨하기 위해선, 파일들을 적절한 장소에 untar하고(아직 그렇게 하지 않았다면), 아래에 나열된 설정파일들을 편집하라. 그것들은 모두 /usr/lib/news에 있으며, 각각의 포맷에 대해서는 다음 절에서 적는다.

sys 다음 예에서 ME 라인을 당신시스템에 맞도록 수정해 주어야 할 것이다. (비록 all/all을 쓰는게 어떤 경우라도 좋은 선택이긴 하겠지만) 그리고, 당신이 뉴스를 feed하는 각 사이트들에 대한 라인도 추가해 주어야 한다.

만약 당신이 leaf 사이트라면, 단지 로컬에서 생성되는 article을 로컬 사이트 자신에게로 feed해 주는 라인만이 필요할 것이다. 당신의 feed가 moria라고 가정한다면, 당신의 sys 파일은 아래와 같은 모습을 가질 것이다.

     ME:all/all::
     moria/moria.orcnet.org:all/all,!local:f:
organization 당신의 단체명. 예를 들자면 "Virtual Brewery, Inc.". 집에서 사용하는 머신라면 "private site" 또는 당신이 넣고 싶은 것을 넣으면 된다. 이 파일을 제대로 설성해 놓지 않는다면, 대부분의 사람들은 당신의 사이트가 적절하게 설정되어 있지 않다고 볼 것이다.
newsgroups (원 문서에 내용이 없음. LDP 문서에는 아예 이 항목이 빠져 있음 - 역자주)
mailname 당신 사이트의 메일 네임, 예를 들자면 vbrew.com
whoami 뉴스의 목적으로 쓰는 당신 사이트의 네임. vbrew같은 UUCP 네임이 자주 사용된다.
explist 특정 뉴스 그룹에 대해 당신이 택한 expiry(만기) 시간이 반영되게끔 이 파일을 편집해 주어야 한다. 디스크 용량이 이를 결정하는데 주된 기준이 된다.

뉴스 그룹의 초기 계층을 만들기 위해선, 당신에게 뉴스를 feed 해 주는 사이트에서 active 파일과 newsgroup 파일을 얻고, 그것들을 /usr/lib/news에 인스톨한 후, 그것이 news의 소유이며 644 모드인지를 확인하자. active 파일에서 모든 to.* 그룹을 제거하고, to.mysiteto.feedsite, 그리고 junkcontrol을 추가하라. to.* 그룹들은 보통 ihave/sendme 메시지 교환에 쓰이나, ihave/sendme를 사용할 지 않을 지에 상관 없이 그것들을 만들어 주어야 할 것이다. 다음으로, 아래의 커맨드를 이용하여 active의 두번째와 세번째의 모든 article 번호를 대체해 주어야 한다.

     # cp active active.old
     # sed '/ [0-9]* [0-9]* / 0000000000 00001 /' active.old > active
     # rm active.old

두번째 커맨드는, 내가 선호하는 UN*X 커맨드 중의 하나인 sed(1)를 실행한다. 이것은 두 10진수 문자열을 각각 0으로 채우고, 00001로 대체시킨다.

마지막으로, 새 news spool 디렉토리를 만들고, incoming과 outgoing news들에 사용되는 서브 디렉토리를 만들자.

     # cd /var/spool
     # mkdir news news/in.coming news/out.going
     # chown -R news.news news
     # chmod -R 755 news

만약, C News의 보다 최근 릴리즈를 사용한다면, news spool 디렉토리내에 out.master를 만들어 주어야 하기도 한다.

당신이 돌리고 있는 C News과는 다른 배포판에 있는 newsreader를 사용한다면, 어떤 것은 /var/spool/news가 아니라 /usr/spool/news에 news spool이 있다고 간주한다는 것을 발견할 것이다. 당신의 newsreader가 어떠한 article도 찾을 수 없는것 같다면, /usr/spool/news에서 /var/spool/news로의 심볼릭 링크를 만들어 두자.

이제, 당신은 뉴스를 수신할 준비가 되었다. 위에 적힌 것 외에 다른 어떤 디렉토리를 만들 필요는 없다. 왜냐하면, spool 디렉토리가 없는 그룹에서 article을 수신할 때마다, C News가 새로이 그것을 만들기 때문이다.

특히, article이 crosspost된 모든 그룹에대해 이러한 일이 일어나는데, 이 때문에 이후에 alt.lang.teco와 같이, 절대 subscribe한 적없는 뉴스그룹의 디렉토리로 news spool이 어질럽혀져 있음을 발견하게 될 것이다. 이를 막기위해선, active에서 원하지 않는 모든 뉴스그룹을 삭제하거나 /var/spool/news하의 빈 디렉토리를 지워주는 쉘 스크립트를 정기적으로 돌리면 된다. (물론, out.goingin.coming 디렉토리를 제외하고 말이다.)

C News는 에러메시지와 상태보고를 보낼 유저를 필요로 하며, 디폴트로 usenet이다. 디폴트 그대로를 사용한다면 메일을 책임자에게로 포워드해주는 앨리어스를 셋업해 주어야 한다. (chapter 14, 15에서 이러한 일을 smailsendmail에 어떻게 해주는 지를 설명하고 있다.) 이것은 환경변수 NEWSMASTER를 적절한 네임으로 세팅함으로써 override할 수도 있다. 앨리어스를 만들지 않는다면, 관리용 툴을 매번 손수 실행시키거나, news의 crontab파일에서 환경변수를 세팅하는 일을 해주어야 한다. 물론 그보단 앨리어스를 세팅하는 편이 훨씬 쉬울 것이다.

당신이 /etc/passwd를 해킹할 때, 모든 유저가 자신의 실제이름을 패스워드 파일의 pw_gecos 필드에 넣어두었는지를 확인해야 한다. 보낸이의 실제 이름이 From: 필드에 들어가는 것은 Usenet의 네티켓에 관련된 사항이다. 물론 메일을 사용할 때도 그렇다.


17.3 The sys file

/usr/lib/news에 위치한 sys파일은 당신이 수신하여 다른 사이트로 포워드하는 Usenet 계층을 컨트롤한다. addfeeddelfeed라는 관리 툴이 있긴 하지만, 손수 이 파일을 관리하는 편이 낫다고 생각한다.

sys 파일은 당신이 뉴스를 포워드하는 각 사이트들에 대한 엔트리와, 당신이 승인하는 그룹에 대한 사항을 담고있다. 하나의 엔트리는 다음과 같은 형태를 지닌다.

site[/exclusions]:grouplist[/distlist][:flags[:cmds]]

뉴라인 캐릭터 앞에 백슬래쉬를 사용하면 한 엔트리를 여러줄에 걸쳐 쓸 수도 있다. 해쉬 부호(#)는 코멘트임을 나타낸다.

site 이는 그 엔트리가 적용되는 사이트의 네임인데, 보통은 이것에 해당 사이트의 UUCP 네임을 지정한다. sys 파일에는 당신 사이트 자신에 대한 엔트리도 역시 필요하며, 그렇지 않을 경우엔 당신 자신의 아티클을 전혀 수신할 수 없게 된다.

특별한 의미의 사이트 네임인 ME는 당신 사이트를 지칭한다. ME 엔트리는 당신이 로컬 상에 저장하고자 하는 모든 그룹을 정의한다. ME 라인에 매치되지 않는 article들은 junk 그룹으로 갈 것이다.

C News가 Path: 헤더 필드내의 사이트 네임들에 대해 site를 체크하기 때문에, 그것들이 정말로 일치하는지를 확인해야 한다. 어떤 사이트에서는 이 필드에 자신의 FQDN을 쓰거나, news.site.domain와 같은 앨리어스를 사용한다. 이들 사이트로의 아티클이 리턴되어 오지 않게 하기 위해선 exclusion(제외) 리스트에 그것들을 추가해 주어야 한다.

예를 들어, 사이트 moria에 적용되는 엔트리에 대한 site 필드는 moria/moria.orcnet.org를 가질 것이다.

grouplist 이는 특정 사이트에대한 group과 hierarchy를 콤마로 구분하여 나열한 subscription list이다. hierarchy의 prefix를 줌으로써(comp.os와 같은 것은 이 prefix로 시작하는 이름의 모든 그룹을 가리킨다), 또는 키워드 all(예를 들어, comp.os.all)을 뒤에 붙여 줌으로써 지정될 수 있다.

어떤 계층이나 그룹을 포워딩하지 않으려면, 앞에 느낌표를 붙여주면 된다. 어떤 그룹이 그 리스트에대해 체크될 때, 가장 길게 일치하는 것이 적용된다. 예를 들어 grouplist가 다음을 가지고 있다면,

     !comp, comp.os.linux, comp.folklore.computer

comp.folklore.computer와 comp.os.linux 아래의 모든 그룹을 제외한 comp 계층에서의 어떠한 그룹도 그 사이트로 feed되지 않을 것이다.

만일 그 사이트가 당신이 수신하는 모든 뉴스를 포워드하길 요청한다면, grouplistall을 넣자.

distlist 이것은 grouplist에서 슬래쉬에 의해 파생되는 것으로, 포워드될 distribution들의 리스트를 포함한다. 이 역시, 앞에 느낌표를 붙임으로써 특정 distribution들을 제외할 수 있다. all은 모든 distribution을 지칭한다. dislist를 생략하는 것은 all의 리스트를 암시한다.

예를 들어, 당신은 all,!local의 distribution 리스트를 사용함으로써 로컬 사용만을 위한 뉴스들이 리모트 사이트로 보내지는걸 방지할 수 있다.

적어도 2개의 distribution이 존재한다. 종종 유저가 none을 지정할 때 사용되는 디폴트 distribution인 world, 그리고 local이다. 특정 지역, 주, 나라 등에 적용되는 다른 distribution들이 존재한다. 마지막으로, C News에 의해서만 사용되는 2개의 distribution이 있는데, 그것은 sendmeihave로, sendme/ihave 프로토콜에 사용된다.

distribution의 사용은 논외의 주제이다. 하나로, 이떤 newsreader들은 단순히 top level 계층을 사용함으로써, 예를 들어 comp.os.linux에 포스팅할 때의 comp, 허위(bogus) distribution을 생성한다. 지역(region)에 적용되는 distribution 또한 의심스러운 것으로, 그 이유는 뉴스가 인터넷으로 보내질 때, 그것은 이미 당신의 지역(region)외에서 돌아다니기 때문이다. 그러나 organization(조직)에 적용되는 distribution은 아주 의미 있는 것으로, 예를 들자면 비밀 정보가 기업 네트웍을 떠나지 못하게 하는 것이다. 그러나 이것보단 차라리 별도의 뉴스 그룹이나 계층을 만드는 편이 훨씬 낫다.

flags 이것은 feed에 대한 특정 파라미터를 기술한다. 이것은 비어 있거나 다음의 조합으로 구성된다.

F 이 플래그는 batching을 사용가능하게 한다.
f 이는 F 플래그와 동일하나, C News가 outgoing batch의 사이즈를 좀 더 세밀하게 연산하도록 한다.
I 이 플래그는 C News가 ihave/sendme를 사용하기에 적합한 article 목록을 만들게 한다. ihave/sendme를 사용하려면 sysbatchparms 파일을 추가 수정해야 한다.
n 이것은 nntpxmit (18장을 보라)와 같은 active NNTP 전송 클라이언트를 위한 batch 파일을 생성한다. 그 batch 파일은 article message id에 따른, article의 파일네임을 포함한다.
L 이것은 C News가 당신 사이트에 포스팅된 아티클만을 건네게 한다. 이 플래그 뒤엔 10진수 n이 붙을 수 있는데, 이것은 당신 사이트에서 n hop 네에서 포스팅 된 아티클만을 전송하게 만든다. C News는 hop의 수를 Path: 필드에서 얻어 낸다.
u moderate 되지 않는 그룹의 아티클만을 C News가 batch하게 한다.
m C News가 moderate 되는 그룹에서의 아티클만을 batch하게 한다.

보통 F, f, I, n 중의 하나를 쓰면 된다.

cmds 이 필드는 batching이 사용가능하게 되어 있지 않을 경우, 각 아티클에 대해 실행하는 커맨드를 담고 있다. 아티클은 표준 입력으로 커맨드에 넘겨진다. 이것은 매우 적은 feed에서나 사용하는 것으로, 그렇지 않다면 양 시스템간의 로드가 매우 높을 것이다.

디폴트로 설정된 커맨드는,

     uux - -r -z system!rnews

이는 리모트 시스템의 rnews를 호출하여, 표준 입력으로 아티클을 feed 해준다.

이 필드내에 주어진 커맨드에 대한 디폴트 search path는 /bin:/usr/bin:/usr/lib/news/bin/batch이다. 후자의 디렉토리엔 via로 시작하는 이름의 쉘 스크립트가 다수 들어있다; 그것들에관해선 이 장 후반부에서 간략하게 적을 것이다.

Ff, I또는 n 플래그 중 어떤 것을 사용함으로써 batching을 하도록 해 두었다면, C News는 파일네임을 커맨드 대신, 이 필드내에서 찾을 수 있다고 생각한다. 만약 파일 네임이 슬래쉬(/)로 시작하지 않는다면, 그것은 /var/spool/new/out.going에대한 상대경로로 간주된다. 만약 필드가 비어있다면, 디폴트는 system/togo이다.

C News를 구동할 때, 대부분의 경우 당신은 당신 고유의 sys파일을 적어줘야 할 것이다. 그것을 돕기 위해 아래에 vbrew.com의 샘플 파일을 실어 놓았으니, 필요한 부분을 카피해서 쓰기 바란다.

     # We take whatever they give us.
     ME:all/all::

     # We send everything we recives to moria, except for local and
     # brewery-related articles. We use batching.
     moria/moria.orcnet.org:all,!to,to.moria/all,!local,!brewery:f:

     # We mail comp.risks to jack@ponderosa.uucp
     ponderosa:comp.risks/all::rmail jack@ponderosa.uucp

     # swim gets a minor feed
     swim/swim.twobirds.com:comp.os.linux,rec.humor.oracle/all,!local:f:

     # Log mail map articles for later processing
     usenet-maps:comp.mail.maps/all:F:/var/spool/uumaps/work/batch


17.4 The active file

active파일은 /usr/lib/news에 있고, 당신 사이트에서 알고 있는 모든 그룹과 현재 온라인 상태인 article을 리스트한다. 그것을 건드릴 필요는 거의 없으나, 완벽을 위해 설명하고자 한다.

     newsgroup high low perm

newsgroup은 당연히 뉴스 그룹의 이름이다. lowhigh는 현재 유효한 글의 최저와 최소 번호이다. 만약 어떤 것도 유효하지 않다면, lowhigh+1과 동일하다.

적어도, 그것이 low 필드가 의미하는 바이나, 효율성을 위하여 C News는 이 필드를 업데이트 하지 않는다. 그것에 의존하는 newsreader가 없을 경우라면, 이는 그다지 큰 손실이 되지 않는다. 예를 들어, trn은 자신의 thread 데이터베이스에서 어떤 아티클을 제거할 지를 이 필드를 체크함으로써 결정한다. low 필드를 업데이트하기 위해선, 정기적으로 updatemin 커맨드를 돌려 주어야 한다 (또는, C News 오래된 버전에선 upact 스크립트를 돌린다).

perm은 유저들을 그룹에서 받아들이는 억세스에 관한 것을 세부적으로 설명하는 파라미터이다. 그것은 다음 중의 하나를 그 값으로 받는다.

y 이 그룹에 유저들이 포스팅할 수 있다.
n 유저들은 이 그룹에 포스팅을 할 수 없으나, 읽을 수는 있다.
x 이 그룹은 로컬에서는 사용이 불가능하다. 이는 news 관리자 (또는 그들의 최고 책임자)가 특정 그룹에 포스팅 된 글에 반격할 때 쓰인다.

이 그룹에 포스팅된 article은 로컬상에 저장되진 않으나, 그것을 요청한 사이트로 포워드는 된다.

m 이는 그룹이 moderate(중재)되고 있음을 나타낸다. 유저가 이 그룹에 포스팅할 때, 똑똑한 newsreader는 이를 그에게 주지시키고, article을 뉴스그룹에 바로 보내는 대신 moderator(중재자)에게 보낸다. moderator의 주소는 /usr/lib/news 내의 moderators 파일에서 얻는다.
=real-group
이것은 newsgroup을 다른 그룹, 즉 real-group에 대한 로컬 앨리어스로 표시한다. newsgroup에 포스팅되는 모든 article은 그 쪽으로 리다이렉트 될 것이다.

C News에선, 일반적으로 이들 파일에 직접 억세스할 필요는 없다. addgroupdelgroup을 사용하여 (아래의 Maintenance Tools and Tasks 섹션을 보라) 로컬의 그룹을 추가하거나 삭제할 수 있다. 그룹을 Usenet 전체에대해 추가 또는 삭제할 때엔 보통 newgroup 또는 rmgroup 컨트롤 메시지를 보내는 방법을 쓴다. 그러한 메시지를 당신자신에게 절대로 보내지 말기 바란다 뉴스 그룹을 새로 생성하는 방법에 대한 절차를 원한다면, news.announce.newusers에 매달 포스팅되는 글을 읽기 바란다.

active에 밀접한 관계를 가진 파일은 active.times이다. 어떤 그룹이 생성될 때마다 C News는 이 파일에, 생성된 그룹 명과 생성된 일자, 그리고 그것이 newgroup 컨트롤 메시지에의해 생성된 것인지 또는 로컬에서 생성된 것인지, 그리고 누가 생성했는지를 포함하는 메시지를 로그로 남긴다. 이는 newsreader가 최근에 생성된 그룹을 유저에게 알릴 수 있게 하기 위함이다. 그것은 NNTP의 NEWGROUPS 커맨드에의해 사용되기도 한다.


17.5 Article Batching

newsreader는 Bnews와 C News, INN에 대해 동일한 특정 포맷을 따른다. 각 article 앞엔 이와 같은 라인이 붙는다.

     #!  rnews count

count엔 아티클의 바이트 수가 들어간다. batch compression을 사용할 때, 결과 파일은 전체적으로 압축되어, unpacking에 사용되는 메시지에 다음과 같은 라인이 또 앞에 붙는다. 표준 압축 툴은 compress로, 다음과 같이 표시된다.

     #!  conbatch

때때로, 모든 데이터에서 8번째 비트를 없애는 메일 소프트웨어를 통해 메시지를 보내야 할 경우, c7-encoding이라는 것을 사용하여 압축된 batch를 보호하는데, 이 경우엔 c7unbatch라고 표시된다.

batch가 리모트 사이트의 rnews로 feed될 때, 리모트 사이트는 이들 marker를 체크함으로써 적절하게 batch를 처리한다. 어떤 사이트는 gzip과 같은 다른 압축 툴을 사용하며, 이 때엔 대신 zunbatch를 앞에 붙인다. C News는 이와 같은 비표준의 헤더를 인식하지 못하므로, 그것들을 지원하도록 소스를 수정해 주어야 한다.

C News에서 article batching은 /usr/lib/news/bin/batch/sendbatches가 수행하는데, 이는 site/togo 파일에서 아티클의 목록을 얻어 몇개의 newsbatch들에 집어 넣는 것이다. 이러한 작업은 traffic의 양에 따라 매 시간 또는 그보다 잦게 실행된다.

article batching은 /usr/lib/news내의 batchparam 파일에서 컨트롤 된다. 이 파일엔 각 사이트마다 허용된 최대 batch와, 사용되는 batching과 압축 프로그램, 그리고 리모트 사이트에 배달하는 전송 수단이 적혀 있다. 사이트 각각에 별도의 batching 파라미터를 지정할 수 있으며, 디폴트 파라미터을 쓰고자 하는 사이트에 대해선 따로 언급을 해줄 필요가 없다.

특정 사이트에대해 batching을 수행하려면, 다음을 실행하라.

     # su news -c "/usr/lib/news/bin/batch/sendbatches site

인자 없이 실행될 때 sendbatches는 모든 batch queue에대해 적용된다. "all"의 해석은 batchparam내의 디폴트 엔트리의 존재 여부에 달려 있다. 만약 하나라도 있다면, /var/spool/news/out.going내의 모든 디렉토리가 체크되고, 그렇지 않을 경우 batchparam내의 모든 엔트리에만 적용된다. out.going 디렉토리를 스캐닝할 때, sendbatches는 점 또는 at 부호(@)가 사이트 네임에 들어있지 않는 디렉토리들만을 받아 처리한다.

C News를 인스톨할 때, 배포판 내에있는 적당한 디폴트 엔트리를 가지고 있는 batchparam 파일을 찾을 수 있을 것이다. 따라서, 당신이 그 파일을 건드릴 필요는 없겠지만, 포맷에 관해서는 적고자 한다. 각 라인은 6개의 필드로 이루어지며, 각 필드는 공백이나 탭으로 구분된다:

     site size max batcher muncher transport

이들 필드가 의미하는 바는 다음과 같다.

site는 해당 엔트리가 적용될 사이트의 이름이다. 이 사이트에 대한 togo 파일은 반드시 news spool 아래의 out.going/togo내에 있어야 한다. 여기에 /default/라는 사이트 네임이 들어가면, 이는 디폴트 엔트리를 가리키는 것이다.

size는 생성되는 article batch들의(압축전) 최대 사이즈이다. 이 보다 큰 사이즈의 단일 아티클에 대해서 C News는, 예외적으로 그것 자체를 하나의 batch로 만든다.

max는, 이 특정 사이트에 대해 batching을 저지하기 전에, 전송에 대해 생성하고 스케쥴할 batch의 최대 수이다. 이는 리모트 사이트가 오랜 기간동안 다운될 경우에 유용한데, 왜냐하면 C News가 무수한 newsbatch들로 UUCP spool 디렉토리를 어지럽혀 놓는 일을 막아주기 때문이다.

C News는 queue되는 batch의 수를 /usr/lib/news/bin 내의 queuelen 스크립트를 사용하여 결정한다. Vince Skahan의 newspak 릴리즈는 BNU 호환 UUCP들에 대한 스크립트를 포함하고 있을 것이다. 만약 다른 취향의 spool 디렉토리를 사용한다면, 예를 들어 Taylor UUCP 같은 경우, 당신은 당신 고유의 스크립트를 만들어야 한다.

batcher 필드는 togo 파일내의 아티클 리스트에서 batch를 생성해 내는데 사용되는 커맨드가 들어간다. 정기적인 feed의 경우, 이는 보통 batcher이다. 다른 목적에 대해선 다른 batcher를 넣어 줄 수 있다. 예를 들어, ihave/sendme 프로토콜은 아티클 리스트가, 뉴스그룹 to.site로 포스팅되는 ihave 또는 sendme 컨트롤 메시지로 변환되길 요하는데, 이는 batchihbatchsm에 의해 수행된다.

muncher 필드는 압축에 사용되는 커맨드를 가리킨다. 보통 이는 compcun으로, 압축된 batch를 만들어내는 스크립트이다. 그 대신에, gzip을 사용하는 muncher, 이를테면 gzipcun(당신 스스로 만들어 주어야 한다)을 넣을 수도 있다. 이 경우, 당신은 리모트 사이트의 uncompressgzip으로 압축된 파일을 인식할 수 있도록 패치되었는지 확인해야 한다.

만약 리모트 사이트가 uncompress 커맨드를 갖고 있지 않다면, 당신은 압축을 하지않도록 nocomp를 지정해 주면 된다.

마지막 필드인 transport엔 사용되는 전송 수단을 적는다. via로 시작하는 이름을 가진, 다른 전송 수단에 대한 몇개의 표준 커맨드를 사용할 수 있다. sendbatches는 그것들을 커맨드라인의 목적지 사이트 네임으로 넘겨 준다. 만약 batchparam 엔트리가 /default/가 아니라면, 그것은 site 필드의 첫번째 도트나 슬래쉬를 포함하여, 그 뒷부분을 없애버림으로써 사이트 네임을 얻어낸다. 만약 엔트리가 /default/라면, out.going 내의 디렉토리 네임들이 사용된다.

리모트 시스템의 rnews를 실행하는데 uux를 사용하는 두개의 커맨드가 존재하는데, 바로 viauuxviauuxz이다. 후자는 (옛버전의) uux-z를 지정하여, 배달하는 각 아티클마다 sucess메시지를 계속 리턴하게 한다. 또 다른 커맨드인 viamail은 아티클 batch를 메일로 리모트 시스템의 유저인 rnews에게 보낸다. 물론, 이는 리모트 시스템이 어떻게든 rnews로 오는 메일을 로컬 뉴스 시스템에 feed한다는 것을 전제로 한다. 이들 전송 수단에 어떤 것이 있는지 완전한 목록을 보길 원한다면 newsbatch(8) 매뉴얼 페이지를 참고하라.

뒤쪽의 세개의 필드에 쓰이는 모든 커맨드들은 반드시 out.going/site 또는 /usr/lib/news/bin/batch 내에 위치하고 있어야 한다. 그것들 중의 대부분이 스크립트이므로, 당신의 개인적 용도에 따라 쉽게 새로운 툴을 짤 수 있다. 그것을은 pipe로써 실행된다. 아티클 목록은 표준 입력을 통해 batcher로 feed되고, batcher는 표준 출력으로 batch를 만들어 보낸다. 이것은 muncher등에 pipe된다.

아래는 샘플 파일이다.

     # batchparams file for the brewery
     # site         | size   |max    |batcher  |muncher    |transport
     #--------------+--------+-------+---------+-----------+-----------
     /default/        100000  22      batcher   compcun     viauux
     sqim              10000  10      batcher   nocomp      viauux


17.6 Expiring News

Bnews에선, expire라 불리는 프로그램을 사용하여 expiring을 수행하는데, 이 프로그램은 newsgroup의 리스트와, 아티클이 expire될 시간 지정을 인자로 받는다. 서로 다른 뉴스 그룹 계층이 다른 시간에 파기 되도록 하기 위해선, 그들 각각에 대해 개별적으로 expire를 호출하는 스크립트를 짜주어야 한다. C News는 이것에 대한 보다 간편한 솔루션을 제공한다: explist라는 파일 내에 뉴스 그룹과 expire 시간 간격을 지정해 줄 수 있다. doexpire라는 커맨드가 보통 하루에 한번씩 cron에서 실행되어, 이 리스트에 따라 모든 그룹을 처리한다.

이따금씩, 특정 그룹에서의 아티클들을 expire되는 기간 후에도 유지하고 싶을 때가 있다. 예를 들어, comp.source.unix에 포스팅된 프로그램을 보존하려 할 수도 있는 것으로, 이를 일컬어 archiving이라 부른다. explist에서 archiving할 그룹들을 표시할 수 있다.

explist의 엔트리는 다음의 형태를 지닌다.

     grouplist perm times archive

grouplist는 엔트리가 적용될 뉴스 그룹을 콤마를 구분자로 하여 나열한 목록이다. 그룹 네임 prefix를 주고, all을 붙여 (혹은 붙히지 않고) 계층 전체를 지정할 수도 있다. 예를 들어, comp.os 아래의 모든 그룹에 적용되는 엔트리를 원한다면, comp.os 또는 comp.os.all 중 하나를 grouplist에 넣으면 된다.

어떤 그룹에서 뉴스를 expiring할 때, 주어진 순서에 따라 explist내의 모든 엔트리들에 대해 그 그룹의 네임이 체크된다. 이 때, 첫번째로 매치되는 엔트리가 적용된다. 예를 들어, 한 주 동안 보존하고자 하는 comp.os.linux.announce를 제외한 comp의 대부분을 4일 후에 폐기하기 위해선, 단순히 후자에 대한 엔트리에 7일의 expiring 기간을 지정해 주고, 그 뒤에 4일이 지정된 comp를 적어주면 된다.

perm 필드는 그 엔트리가 moderated, unmoderated 또는 어떠한 그룹에도 적용되는지를 표시한다. 그것은 m, u, 또는 x의 값을 받는데, 그것들은 각각 moderated, unmoderated, 또는 any type을 지칭한다.

세번째 필드인 times는 보통 단일한 숫자를 그 값으로 가진다. 이것은 아티클 헤더의 Expires: 필드내에 인위적인 파기일이 지정되어 있지 않는 경우, times 필드의 값에 해당되는 수만큼의 날 뒤에 아티클을 파기하게 한다. 주의할 것은, 이것이 당신 사이트에 도착한 때 부터 카운트 되는 것이지, 포스팅 된 때 부터가 아니라는 것이다.

그러나 times 필드는 그 보다 좀 더 복잡할 수도 있다. 그것은 세개의 숫자를 대쉬로 구분하여 조합될 수도 있는데, 이 중 첫번째 것은 아티클이 expire될 후보로써 간주되기까지 얼마만큼의 기간이 지나야 하는지를 가리키고, 이에 0 이외의 다른 값을 쓰는 일은 극히 드문일이다. 두번째 필드는 위에 언급한바 있는, 디폴트로 지정된 아티클 파기까지의 경과일 수 이다. 세번째는, 그것이 Expires: 필드를 갖고 있든지 아니든지 간에 상관없이, 무조건 아티클을 파기할 날 수 이다. 만약 오직 가운데 수만이 주어진다면, 그 외의 두가지는 디폴트 값을 취하게 된다. 이들을 특수한 엔트리인 /bounds/를 사용하여 지정할 수도 있는데, 이에 관해선 아래에서 적는다.

네번째 필드인 archive는 뉴스 그룹이 archive되는지, 된다면 어디에 되는지를 가리킨다. 만약 archiving을 할 생각이 없다면 대쉬를 적어 주어야 한다. 반면에 이를 사용하려 한다면, full path 명을 (디렉토리를 가리키는) 적어주거나 at 부호(@)를 쓰면된다. at 부호는 커맨드 라인에서 -a를 사용하여 doexpire에 주는 디폴트 archive 디렉토리를 가리킨다. archive 디렉토리는 news의 소유여야 한다. 가령, doexpirecomp.source.unix에서의 아티클을 archive할 때, 그것은 archive 디렉토리 아래의 comp/source/unix내에 그것을 저장하고, 만약 그 리덱토리가 존재하지 않을 경우 그것을 새로 생성한다. 그러나 archive 디렉토리 자체는 생성되지 않는다.

당신의 explist 파일 내엔 doexpire가 의존하는 두개의 특수 엔트리가 존재한다. 그것들은 뉴스 그룹의 리스트 대신, /bounds//expired/ 키워드를 지닌다. /bounds/ 엔트리는 위에 적은바 있는 times에 주어진 세개의 값에대한 디폴트 값을 담고 있다.

/expired/ 필드는 C News가 history 파일의 길이를 얼마로 할 것인가를 결정한다. 이는 C News가 history 파일에서 한 라인에 해당되는 아티클이 파기될 때 그 라인을 제거하지 않고, 이 날짜 이후에 중복된 것이 도착할 가능성때문에 그것을 유지하고 있기 때문이다. 만약 당신이 하나의 사이트에서 feed 받는다면, 이 값을 작게 잡아주는 것이 좋다. 그렇지 않을 경우엔, UUCP 네트웍에선 2주 정도가 적당하나, 이들 사이트에서의 아티클이 얼마정도 지연되는가에 대한 당신의 경험에 따라 조절하면 된다.

아래는 다소 빡빡한 expiry 기간을 두도록 설정된 샘플 explist이다.

     # keep history lines for two weeks. Nobody gets more than three months
     /expired/                       x       14      -
     /bounds/                        x       0-1-90  -

     # groups we want to keep longer than the rest
     comp.os.linux.announce          m       10      -
     comp.os.linux                   x       5       -
     alt.folklore.computers          u       10      -
     rec.humor.oracle                m       10      -
     soc.feminism                    m       10      -

     # Archive *.sources groups
     comp.sources, alt.sources       x       5       @

     # defaluts for tech groups
     comp,sci                        x       7       -
	
	 # enough for a long weekend
     misc,talk                       x       4       -

     # throw away junk quickly
     junk                            x       1       -

     # control messages are of scant interest, too
     control                         x       1       -

     # catch-all entry for the rest of it
     all                             x       2       -

C News에서의 expiring엔 몇가지 잠재적인 문제가 있다. 하나는 당신의 newsreader가, 온라인 아티클의 최저수를 가지고 있는 active 파일의 세번째 필드에 의존할 수 있다는 점이다. 아티클을 파기할 때, C News는 이 필드를 업데이트하지 않는다. 만일 이 필드가 실제 상황을 보여주도록 할 필요가 있거나, 그러길 원한다면, 매번 doexpire을 실행한 후마다 updatemiin이라는 프로그램을 돌려줄 필요가 있다.

둘째로, C News는 뉴스 그룹의 디렉토리를 스캐닝하는 방법으로 expire하는 것이 아니라, 단순히 그 아티클이 파기되어야 하는지에대한 결정을 history 파일을 체크한 결과에 의존한다. 만약 history 파일이 어떤 이유로 인해 서로 sync되지 않는다면, 해당 아티클은 디스크에 영원히 남게되는데, 그 이유는 C News가 그것의 존재를 실제로 잊어버리기 때문이다. 당신은 /usr/lib/news/bin/maint내의 addmissing 스크립트를 사용하여 누락된 아티클들을 history 파일에 추가해 주거나, mkhistory를 사용하여 전체파일을 새로 작성해 주어야 한다. 이러한 일을 하기전에 반드시 유저 news가 되어야 한다는 사실을 잊지말기 바란다. 그렇지 않을 경우 C News가 history 파일을 읽지 못하게 될 것이다.


17.7 Miscellaneous Files

C News의 동작을 컨트롤하는 몇가지 파일이 존재하나, 그것들은 기능상에 근본적인 영향을 미치진 않는다. 그것들은 모두 /usr/lib/news에 존재하며, 여기선 그에관해 간략하게 설명한다.

newsgroups 이것은 active 파일과 함께 한 쌍을 이루는 파일로, 뉴스 그룹 네임 목록과 그것의 주요 토픽에 대한 한 줄의 설명을 담고 있다. 이 파일은 C News가 checknews 컨트롤 메시지를 수신할 때 (17.8절을 보라) 자동으로 업데이트된다.
localgroups 만약 당신이 checknews 메시지를 수신할 때마다 C News가 불평하지 않았으면 하는 로컬 그룹을 몇개 갖고 있다면, 그들의 네임과 설명을 이 파일에, newsgroups와 같은 형식으로 넣어주면 된다.
mailpaths 이 파일은 moderate되는 그룹 각각에 대한 moderator의 주소를 담고 있다. 각 라인은 그룹 네임, 그 그룹의 moderator의 email 주소를 가지며, 이 둘은 탭으로 구분된다.

두 개의 특수 엔트리가 디폴트로 제공되는데, 이들은 backboneinternet으로, 둘은 근처의 backbone 사이트와, RFC 822 스타일의 주소(user@host)를 이해하는 사이트로의 path를 - bang-path notation 방식으로 - 제공한다. 디폴트 엔트리는 다음과 같다.

     internet	backbone

당신이 smail이나 sendmail을 설치했다면, 그것들이 RFC 822-addressing을 이해할 수 있으므로 internet 엔트리를 변경할 필요가 없다.

backbone 엔트리는 moderator가 따로 지정되지 않았으나 moderate되는 그룹에, 유저가 포스팅할 때 사용된다. 만약 뉴스 그룹 네임이 alt.sewer이고 backbone 엔트리가 path!%s를 지닌다면, C News는 backbone 머신이 그 아티클을 포워드해주기를 바라며, 메일로 path:alt-sewer에게 그것을 보낸다. 어떤 path를 사용할 것인지를 알아내고자 한다면, 당신에게 feed해주는 사이트의 news admin에게 물어보라. 마지막 수단으로써는 uunet.uu.net!%s 역시 사용할 수 있다.

distributions 이 파일은 실제로 C News 파일이 아니지만, 몇몇 newsreader와 nntpd가 사용한다. 그것은 당신 사이트가 인식하는 distribution들의 목록과, 그것들의 (의도된) 영향권에 대한 설명을 포함한다. 예를 들어, Virtual Brewery는 다음의 파일을 갖고 있다.
     world        everywhere in the world
     local        Only local to this site
     nl           Netherlands only
     mugnet       MUGNET only
     fr           France only
     de           Germany only
     brewery      Virtual Brewery only

log 이 파일은 모든 C News의 활동에 관한 로그를 담고 있다. newsdaily를 실행하면 정기적으로 그것을 잘라 주며, 오래된 복사본은 log.o, log.oo 등의 파일에 보존된다.
errlog 이것은 C News에서 발생하는 모든 에러메시지의 로그이다. 이들은 잘못된 그룹이름을 지정한 이유 등으로 버려진 아티클은 포함하지 않는다. 이 파일이 비어있지 않다면 newsdaily는 자동으로 newsmaster (디폴트로 usenet)에게 그 내용을 메일로 보낸다.

errlognewsdaily에 의해 청소된다. 오래된 복사본들은 errlog.o 등에 보존된다.

batchlog 이것은 sendbatches의 모든 실행결과를 로그로 남긴 것지만, 이는 보통 크게 흥미거리가 되지 못하는 것이다. 이것 역시 newsdaily를 통해 정리된다.
watchtime 이것은 매번 newswatch가 실행될 때마다 생성되는 빈 파일이다.


17.8 Control Messages

Usenet 뉴스 프로토콜은 특정한 답장이나 동작을 유발하는 특수한 케이트고리의 아티클을 인식한다. 이들을 일컬어 control 메시지라고 하며, 수행할 컨트롤 오퍼레이션을 정의하는 Control: 필드가 아티클의 헤더에 있는가를 통해 인식된다. 그것엔 여러가지 타입이 존재하는데, /var/lib/news/ctl내에 위치한 쉘 스크립트들이 그들 모두를 핸들한다.

이들 대부분이 news master에 알리지 않고, C News가 그것을 처리하는 시점에 자동으로 수행된다. 디폴트로, 오직 checkgroup 메시지만이 newsmaster에의해 핸들될 것이나, 스크립트를 편집함으로써 이를 변경할 수도 있다.

17.8.1 The cancel Message

가장 널리 알려진 메시지는 cancel로, 이것으로 유저는 이전에 그가 보냈던 아티클의 등록을 취소할 수 있다. 이것은 스풀 디렉토리에 아티클이 존재한다면, 효과적으로 그것을 제거해준다. cancel 메시지는, 이미 해당 아티클(cancel 메시지)을 수신한 적이 있는지 없는지를 상관하지않고, 영향을 받는 모든 그룹에서 뉴스를 수신한 모든 사이트로 보내진다. 이는 원 아티클이 cancel 메시지보다 지연될 수 있는 가능성을 고려한 것이다. 어떤 뉴스 시스템은 유저가 다른 사람의 메시지를 취소하는 일도 허용한다; 물론 이는 해선 안될 짓이다.

17.8.2 newgroup and rmgroup

뉴스그룹의 생성과 제거에 관해 다루는 두개의 메시지는 newgrouprmgroup 메시지이다. "보통의" 계층 아래의 뉴스 그룹들은 Usenet reader들 간의 논의와 투표를 거친 후에만 생성될 것이나, alt 계층에 적용되는 룰은 거의 무정부 상태에 가깝다. 더 많은 정보를 위해선, news.announce.newusersnews.announce.newgroups에 정기적으로 포스팅 되는 글을 참조하라. 당신이 허용되어 있다는것을 확신하고 있지 않다면, 절대 당신 자신에게 newgroup이나 rmgroup메시지를 보내지 말기 바란다.

17.8.3 The checkgroups Message

checkgroups 메시지는, news 관리자가 한 네트웍 내 모든 사이트의 active파일과 실제 Usenet을 동기화 시키기 위해서 보내는 것이다. 예를 들자면, 상업적인 인터넷 서비스 제공자(ISP)가 이러한 메시지를 고객의 사이트에 보낼 것이다. 한달에 한번, 메이저 계층에 대한 "공식적인" checkgroups 메시지는 그 그룹의 moderator에 의해 comp.announce.newgroups에 포스팅된다. 그러나 그것은 일반 메시지로서 포스팅 되는 것이지, 컨트롤 메시지로서가 아니다. checkgroups 오퍼레이션을 수행하기 위해선, 이 아티클을 파일, 이를테면 /tmp/check로 저장하고, 컨트롤 메시지 자체의 시작부분이 있는 곳 까지를 제거한 뒤, 다음의 커맨드를 써서 그것을 checkgroups 스크립트에 feed해 주면 된다.

     # su news -c "/usr/lib/news/bin/ctl/checkgroups" < /tmp/check

이것은 당신의 newsgroups 파일을, localgroups 내에 리스트된 그룹을 추가하여 업데이트 할 것이다. 이전 newsgroups 파일은 newstroups.bac으로 옮겨질 것이다. 주의할 것은, 그 메시지를 로컬상에 포스팅 하는 것은 거의 동작하지 않는다는 점인데, 왜냐하면 inews가 그렇게 큰 아티클을 받아들이지 않기 때문이다.

만약 C News가 checkgroups 리스트와 active 파일간에 일치되지 않는 점을 찾아낸다면, 그것은 당신의 사이트를 최신정보로 업데이트시켜 주는 커맨드 목록을 만들어서 news 관리자의 메일로 보낸다. 그 결과물은 보편적으로 이와 같다.

     From news Sun Jan 30 16:18:11 1994
     Date: Sun, 30 Jan 94 16:18 MET
     From: news (News Subsystem)
     To: usenet
     Subject: Problems with you active file

     The following newsgroups are not valid and should be removed.
             alt.ascii-art
             bionet.molbio.gene-org
             comp.windows.x.intrisics
             de.answers

     You can do this by executing the commands:
             /usr/lib/news/bin/maint/delgroup alt.ascii-art
             /usr/lib/news/bin/maint/delgroup bionet.molbio.gene-org
             /usr/lib/news/bin/maint/delgroup comp.windows.x.intrisics
             /usr/lib/news/bin/maint/delgroup de.answers

     The following newsgroups were missing.
             comp.binaries.cbm
             comp.databases.rdb
             comp.os.geos
             comp.os.qnx
             comp.unix.user-friendly
             misc.legal.moderated
             nes.newsiites
             soc.culture.sicentists
             talk.politics.crypto
             talk.politics.tibet

당신의 뉴스 시스템에서 이러한 메시지를 수신했다하더라도, 맹목적으로 그것을 믿지는 말기 바란다. 누가 checkgroups 메시지를 보냈는가에 따라 몇개의 그룹, 또는 심지어는 계층마저도 누락되어 있을 수 있다. 그러므로, 어떠한 그룹을 지우는데는 조심해야한다. 당신의 사이트로 뉴스를 가져오고자 하는 그룹이 missing 리스트쪽에 나열되어 있다면, addgroup 스크립트로 그것들을 추가해 주어야 한다. missing 그룹 리스트를 파일로 저장하여 다음의 작은 스크립트에 넘겨주자.

     #!/bin/sh
     cd /usr/lib/news
     
     while read group; do
         if grep -si "^$group[[:space:]].*moderated" newsgroup; then
             mod=m
         else
             mod=y
         fi
         /usr/lib/news/bin/maint/addgroup $group $mod
     done

17.8.4 sendsys, version, and senduuname

마지막으로, 네트웍의 토폴로지를 알아낼 수 있는 세개의 스크립트가 존재한다. 이들은 sendsys, version 그리고 senduuname이다. 그것들은 C News로부터 sender에게 각각, sys파일과 소프트웨어 문자열, 그리고 uuname(1)의 출력결과를 리턴하게 만든다. C News는 version 메시지에 대해 아주 무뚝뚝한 편으로, 단순하고 멋없는 "C"만을 리턴한다.

다시 말하지만, 위와 같은 메시지가 당신의 (국지적인) 네트웍을 떠나지 않는다고 확신할 수 없다면, 절대로 배포하지 말기 바란다. sendsys 메시지의 reply들은, 금새 UUCP 네트웍을 다운시켜 버릴수 있다.


17.9 C News in an NFS Environment

로컬 네트웍에서 뉴스를 배포하는 가장 단순한 방법은 중앙 호스트에 모든 뉴스를 보존하고, NFS로 그 디렉토리를 export하여, newsreader가 직접 아티클을 스캔하게 하는 것이다. 이것이 NNTP보다 유리한 점은, 아티클을 가져오고 thread하는데 드는 오버헤드가 확연이 낮나는 것이다. 반면에 NNTP는, 호스트 장비간에 큰 차이가 있거나, 유저가 서버머신에 계정을 가지고 있지 않은 이질적인 네트웍에서 유리하다.

NFS를 사용할 때, 로컬 호스트에 포스팅되는 아티클은 중앙 머신에 포워드 되어야 하는데, 왜냐하면 그렇지 않을 경우, 관리용 파일에의 억세스가 파일을 일관성 없게 만듦으로써 시스템을 경쟁상태(race condition)에 빠뜨릴 수 있기 때문이다. 또한, 중앙 머신으로 포워딩할 필요가 있는 뉴스 스풀 구역은 read-only로 export함으로써 보호하는 것이 좋다.

C News는 이것을 투명성있게 다룬다. 당신이 아티클을 포스팅할 때, newsreader는 아티클을 뉴스 시스템에 끼워넣기 위해 inews를 소환한다. 이 커맨드는 아티클에대한 몇가지 검사를 하고, 헤더를 완성시키고, /usr/lib/news 내의 server 파일을 체크한다. 이 파일이 존재하고, 로컬 호스트 네임외의 다른 호스트 네임을 지니고 있다면, rsh를 통해 서버 호스트의 inews가 소환된다. 이 때, inews 스크립트가 몇가지 바이너리 커맨드와 C News에서 지원하는 파일을 사용하기 때문에, C News를 로컬 상에 인스톨 하든지, 서버에서 뉴스 소프트웨어를 마운트하든지 해야한다.

rsh 실행이 제대로 동작하게 하기 위해, 각 유저는 반드시 서버 시스템상에 등가의 계정을 가져야만 한다. 즉, 그가 패스워드 프롬프트 없이 로그인 할 수 있는 것을 말한다.

server에 주어진 호스트네임이 실제로 서버머신에서 hostname(1)을 실행한 결과와 같은지 확인하라. 그렇지 않을 경우, C News는 아티클을 배달하려 할 때 무한 루프를 돌 것이다.


17.10 Maintenance Tools and Tasks

C News의 복잡성에도 불구하고, 뉴스 관리자의 일상은 어느정도 쉬워질 수 있다. 왜냐하면, C News가 다양한 관리용 툴을 제공하기 때문이다. 이들 중 몇몇은 cron에서 정기적으로 실행되어야 하는 것으로, newsdaily 같은 것이 그것이다. 이들 스크립트를 사용함으로써 설치와 관리에 필요한 일을 크게 줄여준다.

따로 지정하지 않는다면, 이들 커맨드는 /usr/lib/news/bin/maint에 들어있다. 주의할 것은, 이들 커맨드를 실행하기 전에 news 유저가 되어야 한다는 것이다. 슈퍼유저로 그 커맨드들을 실행한다면, 이후 C News가 이들 파일에 억세스를 할 수 없게 되어버린다.

newsdaily 그 이름이 모든 것을 말해 준다. 하루에 한번씩 실행하라. 그것은 로그 파일을 작게, 즉 마지막 세번째 실행에서의 각 복사본만을 살린채 유지하도록 도와준다. 그것은 가령 incoming과 outgoing 디렉토리내의 낡은 batch들, unknown 또는 moderated group으로의 포스팅과 같은 이상있는 점들을 바로잡으려 시도한다. 결과로 나오는 에러 메시지는 newsmaster에게 메일로 보내질 것이다.
newswatch 이것은 뉴스 시스템의 이상을 찾기위해 한시간에 한번정도 정기적으로 실행되어야 하는 스크립트이다. 그것은 뉴스 시스템의 작동에 즉각적인 효력을 미치는 문제점을 감지하여 newsmaster에게 문제 보고를 메일로 보낸다. 제거되지 않는 낡은 lock 파일과 방치된 input batch들, 그리고 디스크 저장공간을 체크한다.
addgroup 당신 사이트에 로컬상에서 하나의 그룹을 추가한다. 적절한 사용법은
     addgroup groupname y|n|m|=realgroup

두번째 인자는 active 파일의 플래그와 같은 의미를 가진다. y는 어떠한 이도 포스팅할 수 있음을, n은 누구도 포스팅할 수 없음을, m은 그것이 moderate됨을, =realgroup은 그것이 다른 그룹의 앨리어스 임을 각각 의미한다.

또한 만들고자하는, 새로 생성된 그룹의 newgroup 컨트롤 메시지보다 그 그룹의 첫번째 아티클이 먼저 도착할 때 addgroup을 사용할 수도 있다.

delgroup 하나의 그룹을 로컬상에서 지울 수 있게 한다. 사용법을 다음과 같다.
     delgroup groupname

그러나 뉴스 그룹의 스풀 디렉토리에 남아 있는 아티클들은 직접 지워주어야 한다. 혹은 자연스럽게 그들을 없애는 이벤트(즉 expire)를 거치도록 그대로 방치해도 무방하다.
addmissing history 파일에 missing 아티클을 추가한다. 영구적으로 존재하는 것처럼 보이는 아티클이 있을 때 이 스크립트를 사용하라.
newsboot 이 스크립트는 시스템 부팅시에 실행되어야 한다. 그것은 셧 다운시에 뉴스 프로세스가 kill됨으로 인해 남하 있는 lock 파일들을 제거하고, 시스템이 셧다운될때 종료된 NNTP 커넥션에서 남아있는 batch를 닫고 실행시킨다.
newsrunning 이것은 /usr/lib/news/bin/input에 있으며, incoming 뉴스의 unbatching을, 예를 들어 작업할 동안, disable시키는데 사용된다. 다음과 같이하여 unbatching을 끌 수 있다.
     /usr/lib/news/bin/input/newsrunning off
반대로, off 대신 on을 사용하여 그것을 켤 수도 있다.

Other Chapters

1. Introduction to Networking
2. Issues of TCP/IP Networking
3. Configuring the Networking Hardware
4. Setting up the Serial Hardware
5. Configuring TCP/IP Networking
6. Name Service and Resolver Configuration
7. Serial Line IP
8. The Point-to-Point Protocol
9. Various Network Applications
10. The Network Information System
11. The Network File System
12. Managing Taylor UUCP
13. Electronic Mail
14. Getting smail Up and Running
15. Sendmail+IDA
16. Netnews
17. C News
18. A Description of NNTP
19. Newsreader Configuration

Appendix

A. A Null Printer Cable for PLIP
B. Sample smail Configuration Files
C. The GNU General Public License