강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

뉴스서버 만들기(INN 2.3) - 서버측 설정

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

뉴스서버 만들기(INN 2.3) - 서버측 설정

t.gif
t.gif
뉴스서버 만들기(INN 2.3) - 서버측 설정

작성일  : 2002-07-26
작성자  : 강명규
OS      : LINUX kernel 2.4.18(x86)

2.3으로 업그레이드되면서 몇몇 부분이 변경되었다. 이것이 이 글을 쓰게 된 이유다.

지원되는 시스템

      AIX 4.3
      FreeBSD 2.2.x and up
      HP-UX 10.20 and up
      Linux 2.x (tested with libc 5.4 or glibc 2.0 and up)
      OpenBSD 2.8 and up
      SCO 5.0.4 (tested with gcc 2.8.1 and cc)
      Solaris 2.5.x and up
      UnixWare 7.1
      UX/4800 R11 and up


시작하기 전에
설치하기 전에 필요한 것들은 다음과 같다. PERL정도만 확인해 주면 되겠다.

C컴파일러(gcc)
PERL 5.003이상
PGP(옵션)
TCL(옵션)
Python(옵션)


설치하기

[root@ns inn-2.3.3]# groupadd news
[root@ns inn-2.3.3]# useradd -g news -d /usr/local/news news

[root@ns inn-2.3.3]# ./configure --with-perl --enable-tagged-hash
[root@ns inn-2.3.3]# make
[root@ns inn-2.3.3]# make install

[root@ns inn-2.3.3]# cat >> /etc/profile.d/myset.sh
export MANPATH=/usr/local/news/man:$MANPATH


inn이 설치되는 디렉토리와 news사용자의 홈디렉토리는 일치해야 한다.
자신의 메모리가 256MB이하라면 --enable-tagged-hash를 사용하라.
그렇지 않으면 history index를 모두 메모리로 로드하므로 메모리사용률이 높아진다.
버클리DB(--with-berkeleydb)나 SSL(--with-openssl)옵션이 있으므로 필요할 경우 사용하도록 하라.
단, SSL은 make install후 추가적으로 make cert를 해줘야 한다.

위와 같이 하면 다음과 같이 /usr/local/news에 설치되고 주요 하위디렉토리는 다음과 같다.

db (--with-db-dir)
history,active파일이 저장되는 디렉토리
부하가 많을 경우 history파일은 매우 커질수 있으므로
configure시 --with-db-dir옵션으로 다른 파일시스템을 지정해 주는 것이 좋다.

spool (--with-spool-dir)
news & overview 스풀디렉토리.
configure시 --with-spool-dir옵션으로 다른 파일시스템을 지정해 주는 것이 좋다.

tmp (--with-tmp-dir)
임시 파일이 사용될 디렉토리.
보안상 symlink공격등에 취약하므로 시스템 임시디렉토리(/tmp)와는 동일하게 하지 마라.
INN만이 사용하는 world-writeable 한 디렉토리를 지정해준다.

etc
설정파일

run
News pid/runtime files


###################################################
INN 설정
###################################################

INN의 설정은 가급적 news사용자로 로그인하여 하도록 한다.

/usr/local/news/etc/inn.conf
자세한 설정내용은 man -M ~news/man inn.conf

organization:           DBAKOREA News Server
pathhost:               news.dbakorea.pe.kr
domain:                 dbakorea.pe.kr
hiscachesize:           256
rlimitnofile:           100
usecontrolchan:         true

실제 Production환경이 아니므로 rlimitnofile은 100개로 제한했다.
usecontrolchan를 true로 했으므로 다음과 과정을 수행해줘야 한다.

[root@ns /root]# cd /usr/include
[root@ns include]# h2ph * sys/*


/usr/local/news/etc/readers.conf
nnrpd에 대한 설정과 접근제어
inn.conf의 noreader값이 false로 되었을 때만 작동한다. 디폴트로 false로 되어 있다.
'접속된 연결이 news를 읽을 수 있는가, read/write 가능한 뉴스그룹이 무엇인가'를
판단하기 위해 nnrpd가 이 파일을 사용한다. 형식은 다음과 같다.

example.com 도메인에서의 연결만 허락하고, 이 도메인의 모든 사용자는 모든 뉴스그룹에
reading과 posting이 가능하게 설정한다면 다음과 같이 할 수 있다.

        auth "example.com" {
            hosts: "example.com, *.example.com"
            default: ""
            default-domain: "example.com"
        }

        access "all" {
            users: "*@example.com"
            newsgroups: "*"
            access: "Read Post"
        }

실제 설정은 다음과 같이 했다.

auth "localhost" {
    hosts: "localhost, 127.0.0.1, stdin, *"
    default: ""
}

access "localhost" {
    users: ""
    newsgroups: "*"
    access: RPA
}

/usr/local/news/etc/storage.conf
article이 저장옵션을 설정한다.
다음과 같이 했다.

method timehash {
        newsgroups: *
        class: 0
}


기사(Article)의 저장포맷

기사가 저장되는 방식은 4가지 종류중에서 선택할 수 있다.

tradspool(traditional spool)
2.0 이전 버전에 사용되던 저장방식
기사들은 각각 기사의 번호와 동일한 텍스트파일에 저장되어진다.
즉, news.software.nntp의 12345번째 기사(article)는 news/software/nntp/12345라는 파일로 저장된다.
호환성에 있어 좋지만, 한 디렉토리에 너무 많은 파일이 생길 수 있으므로 bottleneck을 유발할 수 있다.
이 방식은 매일 만료기사 삭제작업이 부수적으로 필요할 것이다.

* 명규의 추가설명
실제 하나의 디렉토리에 수만~수십만개의 파일이 있다면 ls가 불가능해진다.
즉, 쉘상에서 디렉토리내 파일들의 목록을 파악하기 힘들다.
이는 ls가 파일목록을 화면에 표시하기 전에 정렬과정을 거치기 때문인 것으로 파악된다.
이 경우, 코딩을 해서 삭제하면 되겠다.(ls에 정렬제거 옵션이 있는지 모르겠다.)

timehash
tradspool처럼 개개의 파일에 저장되지만, 하나의 디렉토리에 모든 파일이 저장되지 않도록 한다.
기사의 도착시간을 기준으로 하여 디렉토리별로 분할되어 저장되므로 병목현상을 피할 수 있다.
하지만, 파일시스템 오버헤드(각각의 파일의 생성/삭제)로 인해 여전히 속도의 저하는 피할 수 없다.

timecaf
timehash와 유사하게 기사의 도착시간을 기준으로 저장되지만,
각각의 기사들를 대해 파일이 생성되는 것이 아니라, 많은 기사들을 하나의 파일에 생성한다.
기사의 저장속도에 있어 timehash보다는 4배정도 빠르지만, 각각의 기사들에 대한 수동처리가
미약하고, 이에 대한 테스트가 충분치 않으므로 다소 안정성에 문제가 될 수 있다.

cnfs
기사를 미리 구성된 버퍼파일(pre-configured buffer files)에 저장한다.
버퍼의 끝에 도달하면, 새로운 기사는 버퍼의 선두로부터 저장되어진다.(기존의 기사를 overwirte된다.)
파일의 생성/삭제가 필요없으므로 무쟈게 빠르다. 다른 저장방식과는 달리, 수동적인 기사의 만료처리는 필요치 않다.
즉, 사용자가 할당한 디스크 공간내에서만 기사들이 저장되므로 disk full되는 경우를 고려하지 않아도 된다.
하지만, 오래된 기사는 자동적으로 overwrite되기 때문에 기사보유기간을 제어하기가 힘들어진다.
이는 기사의 flooding이나 많은 양의 spam공격에 취약점을 갖는다는 의미이다.
이놈은 han.binaries.photo와 같은 바이너리 그룹에 사용하면 좋겠군요.


단순한 transit 뉴스서버가 아닌, readers를 지원하는 뉴스서버라면
inn.conf에 ovmethod를 설정함으로써 overview저장기법을 선택할 필요가 있는데 3가지 종류가 있다.

tradindexed
읽는 것은 매우 빠지만, 갱신이 느리다.

buffindexed
모든 overview정보를 커다란 버퍼에 저장하므로 large feed를 수용할 수 있다. 약간 느리다.
이것은 사용할 버퍼를 생성할 필요가 있고, buffindexed.conf에 가용한 버퍼를 나열해야 한다.

ovdb
버클리DB에 overview데이터를 저장한다. 빠르고 안전하지만, 좀 더 많은 디스크공간을 차지한다.
아직 테스트가 부족하므로 실험적인 분이라면 사용하도록 하세요.


[참조] 아래 2개는 참조만..
------------------------------------------------------------------------
/usr/local/news/etc/newsfeeds (자신이 타사이트에 feeding 제공)
뉴스feeding(다른 사이트에 뉴스를 전송해주는 것)에 대한 설정
사용하지 않을 것이므로 설명 생략

innfeed : 실시간 article전송(feed)
nntpsend, innxmit : batch 전송


/usr/local/news/etc/incoming.conf (자신이 타사이트로부터 feeding 수신)
자신에게 접속을 허가하는 외부호스트 지정
이전 버전의 hosts.nntp를 대체
------------------------------------------------------------------------


데이터베이스 파일 생성

/usr/local/news/db/active        뉴스그룹의 목록
/usr/local/news/db/active.times  서버가 초기화된 이후, 생성된 뉴스그룹의 생성자와 생성시간
/usr/local/news/db/newsgroups    모든 뉴스그룹에 대한 설명

[root@ns /root]# su - news
[news@ns news]$ cat >> .bashrc
export PATH=$HOME/bin:$PATH
[news@ns news]$ logout
[root@ns /root]# su - news
[news@ns news]$ echo $PATH
/usr/local/news/bin:/usr/sbin:/sbin:/usr/bin:/bin:/usr/X11R6/bin:/usr/kde/bin
[news@ns news]$ cd db
[news@ns db]$ pwd
/usr/local/news/db
[news@ns db]$ l
total 2
-rw-r--r--    1 news     news          329 Jul 26 03:20 active
-rw-r--r--    1 news     news            0 Jul 12 23:04 active.times
-rw-r--r--    1 news     news          333 Jul 12 23:01 newsgroups
[news@ns db]$ cat active
control 0000000000 0000000001 n
control.cancel 0000000000 0000000001 n
control.checkgroups 0000000000 0000000001 n
control.newgroup 0000000000 0000000001 n
control.rmgroup 0000000000 0000000001 n
junk 0000000000 0000000001 n
kang.test 0000000000 0000000001 y
kang.unix 0000000000 0000000001 y
kang.php 0000000000 0000000001 y
[news@ns db]$ touch history
[news@ns db]$ ../bin/makedbz -i
[news@ns db]$ mv history.n.dir history.dir
[news@ns db]$ mv history.n.pag history.pag
[news@ns db]$ l
total 3
-rw-r--r--    1 news     news          329 Jul 26 03:20 active
-rw-r--r--    1 news     news            0 Jul 12 23:04 active.times
-rw-rw-r--    1 news     news            0 Jul 26 04:19 history
-rw-rw-r--    1 news     news           76 Jul 26 04:19 history.dir
-rw-rw-r--    1 news     news            0 Jul 26 04:19 history.pag
-rw-r--r--    1 news     news          333 Jul 12 23:01 newsgroups
[news@ns db]$ chmod 644 *

syslog에 등록. 탭문자로 띄어 씀을 유의할 것.
[root@ns /etc]# cat >> /etc/syslog.conf
# INN log
news.crit           /usr/local/news/log/news.crit
news.err            /usr/local/news/log/news.err
news.notice         /usr/local/news/log/news.notice
[root@ns /etc]# l /usr/local/news/log
total 1
drwxr-xr-x    2 news     news         1024 Jul 12 23:03 OLD/
-rw-rw-r--    1 news     news            0 Jul 26 03:35 errlog
-rw-rw-r--    1 news     news            0 Jul 26 03:35 news
[root@ns /etc]# touch /usr/local/news/log/news.crit
[root@ns /etc]# touch /usr/local/news/log/news.err
[root@ns /etc]# touch /usr/local/news/log/news.notice
[root@ns /etc]# chown news:news /usr/local/news/log/news.*
[root@ns /etc]# l /usr/local/news/log/
total 1
drwxr-xr-x    2 news     news         1024 Jul 12 23:03 OLD/
-rw-rw-r--    1 news     news            0 Jul 26 03:35 errlog
-rw-rw-r--    1 news     news            0 Jul 26 03:35 news
-rw-r--r--    1 news     news            0 Jul 26 03:45 news.crit
-rw-r--r--    1 news     news            0 Jul 26 03:45 news.err
-rw-r--r--    1 news     news            0 Jul 26 03:45 news.notice


CRONTAB 작업
다음과 같은 작업을 cron table에 등록한다.
crontab등록은 crontab -e로 하면 되겠다.

[news@ns db]$ crontab -l
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.31976 installed on Fri Jul 26 03:30:18 2002)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
0 3 * * * /usr/local/news/bin/news.daily expireover lowmark
[news@ns db]$


news서버의 시작/종료
[root@ns log]# su - news -c /usr/local/news/bin/rc.news
Starting innd.
Scheduled start of /usr/local/news/bin/innwatch.
[root@ns log]# ps ax|grep news
1013 ?        S      0:00 /usr/local/news/bin/innd -p4
1015 pts/2    S      0:00 /bin/sh /usr/local/news/bin/rc.news
1034 pts/2    S      0:00 grep news
[root@ns /root]# su - news -c '/usr/local/news/bin/rc.news stop'
Stopping innd: .
[root@ns /root]#


이상하게도 나의 경우 뉴스서버를 내리는 것이 깨끗하지 않았다.
프로세스가 완전히 죽지를 않더군. 설치과정이 다소 까다로와서 원인 파악하기도 귀찮아졌다.
그냥 다음의 무적막강 명령어를 사용하고 끝냈다.

[root@ns /root]# skill -KILL news

http://web.inter.nl.net/users/Elena.Samsonova/unix/INN/v2.3/cookbook.html
http://web.inter.nl.net/users/Elena.Samsonova/unix/INN/v2.3/architectures.html
http://web.inter.nl.net/users/Elena.Samsonova/unix/INN/v2.3/implementation.html

클라이언트 설정은 2.2버전과 동일하므로 생략하겠다.

Copyleft(C) 명규의 LINUX All rights free          

This article comes from dbakorea.pe.kr (Leave this line as is)

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,033 명
  • 현재 강좌수 :  35,780 개
  • 현재 접속자 :  142 명