估計大家都看了很多中英文的News Howto,結果一般是看得稀里糊涂(我自己就是這樣的感受:-),一是那些文檔年代"久遠",二是針對從源代碼編譯開始的情況,三它們不是針對Linux來講的.裝了RH5.0后我發現配置INN(我認為C-News軟件已經"死"了)已經是很簡單的事情了,下面把我的一些粗淺的經驗介紹給大家.歡迎指正并完善.
一,基本概念
關于UUNet,有很多文章和書籍介紹,這里沒必要重復了.值得一提的是,你的新聞服務器并不一定要連入UUnet,完全可以配置為一個Stand Alone的News Server.在新聞服務器上讀,寫(post)文章的用戶稱為Reader,Reader與Server之間是按照C/S方式來做的.當然可以把你的新聞服務器與其他服務器相連,相互轉發文章.一個新聞服務器向另一個服務器轉發文章,則第一個服務器被稱為feeder.所以要記住news feed的行為發生在兩個新聞組服務器之間.
我們假定你的新聞服務器的名字為news.foo.com.cn(當然域名就應該是foo.com.cn),在安裝RedHat 5.0時選擇了INN包并允許開機啟動innd,這時RedHat已經自動完成了大部分配置,你根本不需要去編譯源碼,也就找不到config.dist,Install.ms等文件.安裝完成后相關文件在以下目錄:
/usr/sbin/innd
/usr/sbin/inndstart
/etc/rc.d/rc.news
/etc/news/*
/etc/crontab
/etc/syslog.conf.inn
/usr/bin/inews
/usr/bin/rnews
/usr/lib/news/*
/usr/lib/news/bin/*
/var/lib/news/
/var/lib/news/send-nntp
/var/lib/news/send-uucp
/var/spool/news/
/var/log/news/
/usr/doc/inn-1.7/
/usr/doc/inn-1.7/Install.*
/usr/doc/inn-1.7/FAQ/
在配置innd之前,應確保網絡已被正確配置,一般來說在你的網絡里還需要有DNS服務器,某些情況下還需要配置sendmail.用hostname命令檢查主機名應該是全稱名(如news.foo.com.cn而不是簡單的news),用dnsdomainname查看域名.順便提一下,重新啟動innd不必重新啟動整個系統,只需到/etc/rc.d/init.d下運行innd這個腳本,共有四個參數: start,stop,restart和status.建議先運行./innd status看看innd是否已經啟動,因為如果網絡沒有配置好的話,innd是沒有啟動的,雖然innwatch可能已經啟動了.這個方法對其他一些配置同樣有效,比如修改了網絡參數,可以簡單地再運行一遍network這個腳本,望新手們舉一反三.
二, 先把news.foo.com.cn配置為單獨的新聞服務器
首先要提醒一點,凡是owner是news.news的文件,你要切換成news身份去操作(RH5.0已經給你建立了news組和用戶,你可以去看一下/etc/group和/etc/passwd文件)---發出sunews命令即可.其實對于/etc/news/下的文件可以用root身份直接編輯(我用jstar編輯沒有問題).
1 配置/etc/news/inn.conf
如果你安裝時正確地配置了網絡,這一步可以省去,缺省如下:
## inn.conf -- inn configuration ....
## ......
domain: foo.com.cn
organization: foo company news site
server: localhost
這樣一般就可以了,若要了解細節,用"man inn.conf"看一下,照貓畫虎是個好方法.注意domain這一項應與dnsdomainname返回的結果一致.
2 配置/etc/news/nnrp.aclearcase/" target="_blank" >ccess
事實上INN包是一組程序來完成News的工作,而不是innd一個人做所有的事,但innd總攬全局,除了send-nntp/send-uucp由cron帶動以外,其他的工作都由innd完成或發起,nnrpd就是一例. 當客戶登陸進來的時候,innd啟動nnrpd進程,nnrpd完成news readers的服務.它的配置文件是/etc/news/nnrp.access,控制哪些站點可以訪問,是否帶密碼訪問這個新聞服務器.缺省值如下:
# Default to no access
*:: -no- : -no- :!*
#allow access from localhost
localhost:Read Post:::*
這時你添加幾行,允許更多的人訪問你的站點,如加入:
stdin:Read Post:::*
*.foo.com.cn:Read Post:::*
也可以簡單的把整個文件改為
*:Read Post:::*
注意每一行最后應沒有空格.用"man nnrp.access"了解更詳細的情況.配置完以后用"/usr/lib/news/bin/inncheck nnrp.access"檢查你的配置是否正確:出錯則有提示,正確反而什么都沒有.修改這個文件無須重新啟動innd,因為如前所述,nnrpd是動態調用的.
3 添加新聞組
站點上有哪些新聞組由/var/lib/news/active文件確定.你可以手工編輯這個文件來添加新聞組(不要忘了切換到news身份喲),active文件的格式用"man active"去看吧.推薦的方法是用"ctlinnd newgroup chinese.comp.XXX(or whatever)"ctlinnd這個命令很有用,后面可能還會介紹.比如你手工該了active文件,你就需要用ctlinnd reload active "modify active"通知innd更新新聞組條目.注意有些組是系統默認的,不能刪除,如control,junk等.
4 監管某個新聞組
在active配置文件里,最后一項可以是y,n,m,j,x,=XXX.XXX,當它是m時,就表示此新聞組受到監管.監管的意思就是news reader發表到這個組的文章先發到監管人的Email信箱,監管人審查后再把它貼到新聞組上去.它的配置文件是/etc/news/moderators,這個功能用得比較少,用man看一下就行了(一路man下去,配置就完成了:-).
5 配置其它參數
有些不太重要的配置文件如overview.fmt,innwatch.ctl等無須修改,使用缺省配置就可以了。不過expire.ctl這個文件要仔細看看,它控制文件或文章在站點上保存多久。
6 啟動innd
負責啟動innd的是/etc/rc.d/rc.news,但RH5.0已經把innd啟動,所以這時你無須做任何事,你的news站點基本正常運行了,用/usr/lib/news/bin/inncheck -v看一下,應該沒有錯誤.現在要做的就是配置客戶端(reader)軟件來測試一下.配置netscape沒什么好講的,如果用tin來讀文章,需要注意幾點:
a,如果以本地方式讀,需要增加一個連接
ln -s /var/lib/news/active /usr/lib/news/active
b,如果以nntp方式讀(tin -r),需要設定一個環境變量,如
export NNTPSERVER=news.foo.com.cn
或生成文件/etc/nntpserver,加入news服務器的名字就行了.
c,tin的資源文件有$HOME/.newsrc,$HOME/.tin/tinrc等,用ls -a看.
d,在nnrp.access里應打開stdin的權限.
也可以用telnet news.foo.com.cn 119來測試,輸入help命令看看能做什么.如果成功地貼(post)上了文章,可以到/var/spool/news/下找到.
如果你只是做一個獨立的news server,到此打住,無須再配置news feed了,否則配了又不通,會在/var/log/news/errors里出現starinndfeeds的錯誤!
三 與其他的news站點相互"灌水"
例如與news.freesoft.cei.gov.cn.為了簡化說明,我們假定只能由freesoft向news.foo.com.cn站點feed文章,即freesoft是你的上級(當你的News服務器可以向freesoft發文章時,你們的關系是對等的,無所謂上級下級).進行這樣的配置首先要上級同意你的請求(否則他不修改他的配置:-).
1 獲取上級的active和newsgroups
su news #切換為news身份
1) telnet news.freesoft.cei.gov.cn nntp > /tmp/newsgroups
list newsgroups
quit
2) telnet news.freesoft.cei.gov.cn nntp > /tmp/active
list active
quit
3) 編輯這兩個文件,把你所想要的加入到你的/var/lib/news/active或newsgroups文件中. 然后用ctlinnd reload active "modify"更新.(用inncheck active先檢查一下是好習慣).
2 允許上級站點feed文章到你的站點
修改配置文件/etc/news/hosts.nntp,加入一行
news.freesoft.cei.gov.cn:
即可,用man hosts.nntp了解細節.相關文件hosts.nntp.nolimit,passwd.nntp等視情況作出修改(如需要密碼等).
發命令ctlinnd reload hosts.nntp "modify hosts.nntp"通知innd更新.
相應地,在news.freesoft.cei.gov.cn上也要加入news.foo.com.cn
更新innd:ctlinnd reload hosts.nntp "modify hosts.nntp"
3 配置/etc/news/newsfeeds
這個配置文件是最復雜的了,參數很多,好多我也沒搞清楚(沒耐性仔細看完man newsfeeds:-).它主要管news server之間feed的方式及distribution.feed的方式一般有三種: 實時的nntplink,send-nntp以及send-uucp.nntplink又有logfile/channel/stdin幾種方式,不過我在我的機器上居然沒有找到nntplink這個程序!我對uucp不了解,估計現在用得也不太多. nntp的傳送方式又有幾種:
1) 常規方式:pipe
2) xbatch,
類似于uucp的傳送方式,batch->compress->transmission->uncompress->unbatch
3) streaming NNTP(streaming vs pipeline)
看來配置newsfeeds真是煩死了,不過我們還是用簡單的方式來做,復雜的情況留到以后再說.比如說在freesoft上的newsfeeds文件里加入一行:foo:chinese.comp.*:Tf,Wnm:news.foo.com.cn^^^注意在nntpsend.ctl里的設置要與之相同(當然也可以取別的名字).然后用ctlinnd reload newsfeeds "modify newsfeeds"更新innd緩沖區.
4 配置/etc/news/nntpsend.ctl
這個文件主要是為在newsfeeds中要求nntpsend的條目配置batch和innxmit參數.所以要用man innxmit要查看各種參數的細節.在我們這種情況,需要在freesoft的nntpsend.ctl上加入一行:
foo:news.foo.com.cn::-S -t300
^^^注意這個"foo"就是newsfeeds文件里的sitename,必須要對應起來.配置完成后把這個文件拷貝到/var/lib/news/下(要把它的owner改為news.news).
5 配置/etc/crontab
先用/usr/lib/news/bin/inncheck -v檢查沒有錯誤.然后用手工發命令/var/lib/news/send-nntp foo news.foo.com.cn一切正常的話可以修改crontab了.
我注意到在/etc/cron.hourly/inn-cron-nntpsend里已經調用了send-nntp,你只需要加入參數 foo news.foo.com.cn就行了.注意,3,4,5的步驟只發生在feeder端,在接收端只須進行1,2步驟就行了.
運行一段時間沒有問題的話,可以掉過頭來你做freesoft的feeder,在你這一端進行相應的配置,你們就可以相互轉信了. 如果你與UseNet的一臺news server連上的話,你應該也是UseNet的一員了.不知道是否有人用兩個新聞組服務器來做備份或負載平衡?最近有朋友問我如何在沒有授權的情況下做feed/feeded,碰巧我看到一個軟件SUCK,介紹給大家。它用普通身份把一個News站點的Article抓回來放在本地News上。也許你可以自己寫個程序做反向的事情!注意這樣做效率較底,只能用于小型場合。
這些只是我數天來的粗淺經驗,并未嚴格檢驗,很多參數,格式沒有講.我只是把我的思路提出來,希望對你有所幫助,或拋磚引玉.
注: 網絡的配置不當會引起一些希奇古怪的問題,如我用tin -r不能post文章,但用netscape卻可以,發現hostname返回的是news而不是news.foo.com.cn,修改/etc/sysconfig/network就好了.難道netscape自己會send-ihave?另外,如果在你的局域網里沒有dns,恐怕需要在hosts文件里加上客戶機的名字.
??現在又開了個新站點make_news_site,自己去看看吧。 ?