forked from gotgit/doc-inn_howto
-
Notifications
You must be signed in to change notification settings - Fork 0
/
newsservice.xml
2744 lines (2557 loc) · 85.6 KB
/
newsservice.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="UTF-8"?>
<sect1 id="why-inn"><title>为什么要使用新闻组?</title>
<sect2><title>企业内部使用NEWS服务的优势</title>
<itemizedlist>
<listitem>
<para>
News vs. Email
</para>
<para>
Email 保存在客户端,只有收件人能够查看和保存,而 NEWS 存储在服务器端,
可以随时查阅。
</para>
<para>
设想如果团队的知识分散保存在各个人的邮箱里,当团队中加入了新成员,
如何能够让知识传递到新员工哪里?难道要把 Email 重新传递一份?
</para>
</listitem>
<listitem>
<para>
News vs. Document
</para>
<para>
News 可以进行知识传递,文档也可以,中华五千年的文明就是通过文字、书籍来
传播的。News的优越性在于时效性和便于沟通,文档的优越性在于条理性和归档保存。
</para>
<para>
News 的精华需要及时提炼出相应的精华文档。而文档的格式呢?推荐用 DocBook,参见:<ulink url="http://www.worldhello.net">Johnson's DocBook Homepage</ulink>。
</para>
</listitem>
<listitem>
<para>
News vs. mail-list
</para>
<para>
群发的 mail-list 将很浪费网路资源和其它各方面的资源,而 USENET news 的特点是
将文章集中在一个host,允许订阅者定自己想读的提供 index,cross-referencing(cross post),
和砍掉过期的文章的功能,这样可以减轻网路的负担,因为当你想看
news 时才要连到 server 去看,而且也可以挑自己想看的东西,不必像 mailing list
一样要把所有的 messages 照单全收。
</para>
<para>
News 具有线索和图形化的客户端支持,而通过 mail-list 订阅的邮件组则没有了线索,
只是在邮箱中按照发布时间顺序排列。
</para>
<para>
但是 mail-list 也具有 News没有的优势。News的使用方式是:“拉”,mail-list是“推”。
如果news server位于内部网络,而且拒绝外部访问,则 mail-list 是外部访问 新闻组的唯一方式。
</para>
<para>
因此,可以把邮件列表拿来和新闻组服务器协同工作,互为补充。
</para>
</listitem>
<listitem>
<para>
News vs. bbs
</para>
<para>
News 的实时性没有 bbs 好,但是客户端不必登录到服务器,安全性相对要好;
</para>
<para>
News 服务可以借助 mail-list,实现“推”的技术;
</para>
<para>
News 可以提供分布式服务,知道大名鼎鼎的 USEnet 么?
</para>
</listitem>
</itemizedlist>
</sect2>
<sect2><title>企业内部新闻服务的用途</title>
<para>
四个字:知识管理。
</para>
<itemizedlist>
<listitem>
<para>
技术讨论
</para>
<para>
大家都想坐在高手的旁边,就是希望开发中遇到的困难能够尽快解决。与其排座位而让我绞尽脑汁,不如进一步完善内部沟通机制。
</para>
</listitem>
<listitem>
<para>
技术跟踪
</para>
<para>
我们每个人都对我们的产品的发展都会有些想法,NewsGroup将是一个不作的归纳总结的地方。
</para>
</listitem>
<listitem>
<para>
软件发布
</para>
<para>
研发和测试的接口,是我们的自动编译系统+Bug Tracking系统。
但是我们的 Release Note 的规范一直没有很好的完善起来。不是由于开发
人员不遵守开发规范,而是制度制定的不合理。
也许 ReleaseNote 新闻组,加上 docbook 格式的文档,会是我们的这个工作
能够走上正轨。
</para>
<para>
在新闻组中建立一个发布专版,每一个功能变更,界面变化,bugfix,都以 news 的方式
提交到这个版中;编译工程师,在完成一次版本提升,也在此版发布一条信息;
文档工程师,根据两次版本提升之间的 news,组织 ReleaseNotes 的内容。
</para>
</listitem>
<listitem>
<para>
攻击和测试技术论坛
</para>
<para>
研发的测试技术正处于持续的改善过程中,开发和收集的新工具,越来越多,除了
内部讲座和内部培训外,也需要一个论坛,来统一组织。
</para>
</listitem>
<listitem>
<para>
FAQ
</para>
<para>
除了公司范围的入职培训外,研发内部还为新员工准备了相应的技术培训。
但也存在着培训教师的讲课水平不一致,讲义不完备,如何持久培训的问题。
</para>
<para>
针对开发必须掌握的专题,分别开辟相应的 FAQ NewsGroup,可以减轻培训教师的负担。
</para>
</listitem>
</itemizedlist>
</sect2>
<sect2 id="history"><title>发展历史</title>
<para>
USENET在1979年末,UNIX V7公布、引进UUCP後不久诞生。由Duke University
两位研究生Tom Truscott 及Jim Ellis提出构想、用来在UNIX间交换讯息。由南加
大的Steve Bellovin设计。Steve Daniel用C程式语言重新改写,经Tom Truscott
修改後为第一个正式版本(RELEASE A)。
</para>
<para>
1981年Berkeley的研究生Mark Horton及高中生Matt Glickman重新改写,以增
加功能,并且处理日益增加的News流量。此版本为B ── B News。
</para>
<para>
在Center for Seismic Studies的Rick Adams接替维护B News的工作。在1986
年年末,B News 2.11 公布,奠定了目前USENET的规模。现在B News已经退休了,
为C News或INN所取代。
</para>
<para>
1986年三月,公布了一个新的套装程式,使用一种新的传输News的协定
Network News Transfer Protocol (NNTP) 。此协定使用TCP/IP的方法交换资料,
而非传统使用UUCP的方法。
</para>
<para>
1987年秋,C News公布。
</para>
<para>
1992年八月二十InterNetNews公布 (INN)。
</para>
<para>
目前最常用的 NEWS Server 有 CNEWS和INN。
</para>
<para>
至于新闻组中的中文发展的沉浮,可以参考这篇文档<ulink url="http://www.epubcn.com/readings/wangyouwenji/150/intropage/w150131.htm">《新闻组是什么?》</ulink>。
</para>
</sect2>
</sect1>
<sect1 id="tools"><title>相关工具及资料</title>
<itemizedlist>
<listitem>
<para>
INN 2.3.3
</para>
<para>
<ulink url="http://www.isc.org/products/INN/">Download ...</ulink>
</para>
</listitem>
<listitem>
<para>
Sendmail 8.12.8
</para>
<para>
<ulink url="http://www.sendmail.org">Download ...</ulink>
</para>
</listitem>
<listitem>
<para>
Majordomo 1.94.5
</para>
<para>
<ulink url="http://www.greatcircle.com/majordomo/">Download ...</ulink>
</para>
</listitem>
<listitem>
<para>
MHonArc
</para>
<para>
<ulink url="http://www.mhonarc.org">Download ...</ulink>
</para>
</listitem>
<listitem>
<para>
htdig
</para>
<para>
<ulink url="http://www.htdig.org/">Download ...</ulink>
</para>
</listitem>
<listitem>
<para>
MAILMAN
</para>
<para>
<ulink url="http://www.list.org">Download ...</ulink>
</para>
</listitem>
<listitem>
<para>
MAIL-ARCHIVE
</para>
<para>
<ulink url="http://www.mail-archive.com/about.html">Download ...</ulink>
</para>
</listitem>
<listitem>
<para>
Apache
</para>
<para>
<ulink url="http://www.apache.org">Download ...</ulink>
</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 id="install-inn"><title>INN 安装配置初步</title>
<para>
这里介绍用 INN 构建具备基本功能的新闻服务器。
</para>
<orderedlist>
<listitem>
<para>
<ulink url="ftp://ftp.isc.org/isc/inn/inn-2.3.3.tar.gz">Download inn 2.3.3...</ulink>
</para>
</listitem>
<listitem>
<para>
设置 news 用户帐号
</para>
<para>
确认系统中包含 news 用户和 news 组,如果没有,需要添加:
</para>
<screen>
$ <command>groupadd news</command>
$ <command>useradd -g news -d /usr/local/news</command>
</screen>
</listitem>
<listitem>
<para>
安装
</para>
<note>
<para>
建议perl support,这样会安装一些维护工具,如 scanspool等。
</para>
</note>
<screen>
$ <command>tar zxvf inn-2.3.3.tar.gz</command>
$ <command>cd inn-2.3.3/</command>
$ <command>./configure --with-perl</command>
$ <command>make && make install</command>
Do not forget to update your cron entries, and also run
makedbz if you need to. If this is a first-time installation
a minimal active file has been installed. You will need to
touch history and run "makedbz -i" to initialize the history
database. See INSTALL for more information.
</screen>
<para>
缺省安装在 /usr/local/news 目录下,并已经设置好相应权限。
</para>
</listitem>
<listitem>
<para>
设定新闻组
</para>
<itemizedlist>
<listitem>
<para>
db/active
</para>
<para>
the list of newsgroups you carry.
</para>
<screen>
$ <command> cat /usr/local/news/db/active </command>
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
</screen>
<warning>
<para>
active 文件中至少要有 control 和 junk 两行。
</para>
</warning>
</listitem>
<listitem>
<para>
db/active.times
</para>
<para>
初始为空文件。该文件被有些 news 客户端用来检查是否有新邮件组。该文件由 innd/ctlinnd 自动维护。
</para>
</listitem>
<listitem>
<para>
db/newsgroups
</para>
<para>
该文件记录各个新闻组的描述。格式如下:
</para>
<screen>
<![CDATA[
control Various control messages (no posting).
control.cancel Cancel messages (no posting).
control.checkgroups Hierarchy check control messages (no posting).
control.newgroup Newsgroup creation control messages (no posting).
control.rmgroup Newsgroup removal control messages (no posting).
junk Unfiled articles (no posting).
测试灌水 For newbie test.
local.announce Announcement for all.
]]>
</screen>
</listitem>
<listitem>
<para>
完整性检查
</para>
<para>
可以用命令<command>scanspool -v</command>,检验 active 文件和 spool中文件的正确配置。
</para>
<para>
在news服务启用状态维护 active 文件,需要:
</para>
<screen>
$ <command>ctlinnd pause 'edit active'</command>
$ <command>vi active</command>
$ <command>inncheck</command>
$ <command>scanspool</command>
$ <command>ctlinnd reload active 'new active'</command>
$ <command>ctlinnd go 'edit active'</command>
</screen>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>
inn 基本资料配置文件:inn.conf
</para>
<para>
修改文件<filename>etc/inn.conf</filename>,注意其中的如下内容:
</para>
<screen>
fromhost: foo0.com.tw
pathhost: foo0.com.tw
organization: 公司大名 (Foo's Co.,)
server: foo0.com.tw
domain: com.tw
hiscachesize: 256
artcutoff: 60
maxartsize: 100000
localmaxartsize: 100000
enableoverview: true
ovmethod: tradindexed
spoolfirst: false
</screen>
<note>
<para>
执行<command>inncheck</command>,检查 inn.conf 配置
</para>
</note>
</listitem>
<listitem>
<para>
文章过期策略设置
</para>
<para>
修改配置文件 <filename>expire.ctl</filename> 如下:
</para>
<screen>
/remember/:10
## This entry uses the syntax appropriate when groupbaseexpiry is true in inn.conf.
*:A:10:never:never
## This is an entry based on storage class, used when groupbaseexpiry is false.
#0:10:never:never
</screen>
<para>
详细说明参见:<link linkend="inn-expire">INN 过期设置</link>。
</para>
</listitem>
<listitem>
<para>
初始化 history 文件
</para>
<screen>
$ <command>cd /usr/local/news/db</command>
$ <command>touch history</command>
$ <command>../bin/makedbz -i</command>
$ <command>for i in history.n*; do i=${i#history.n.}; mv history.n.$i history.$i ;done</command>
$ <command>chown news:news history*</command>
$ <command>chmod 644 history*</command>
</screen>
<para>
如果已存在的数据,可以用如下命令重建 history 和 overview 数据库。
</para>
<screen>
$ <command>ctlinnd throttle "throttle due to maintaining"</command>
$ <command>scanspool</command> <co id="co.rebuild.scanspool"/>
$ <command>makehistory -F -b -I</command> <co id="co.rebuild.history"/>
$ <command>cat /usr/local/news/db/history | wc -l </command>
$ <command>find /usr/local/news/spool/articles/ -type f | wc -l</command>
$ <command>cd /usr/local/news/db</command>
$ <command>../bin/makedbz -i</command>
$ <command>for i in history.n*; do i=${i#history.n.}; mv history.n.$i history.$i ;done</command>
$ <command>rm -rf /usr/local/news/spool/overview/*</command> <co id="co.rebuild.delovdb"/>
$ <command>makehistory -O -F -b -x</command> <co id="co.rebuild.overview"/>
$ <command>find /usr/local/news/spool/articles/ -type f | wc -l</command>
$ <command>find /usr/local/news/spool/overview/ -type f -name "*.DAT" -exec cat {} \; | wc -l</command>
$ <command>ctlinnd go "maintaining success"</command>
</screen>
<calloutlist>
<callout arearefs="co.rebuild.scanspool">
<para>
确认 active 中的 himark 和 lowmark 是否正确设置。参见:<link linkend="news-conf-active">active 文件格式</link>。
</para>
</callout>
<callout arearefs="co.rebuild.history">
<para>
重建 history 文件。参见:<link linkend="help-cmd-makehistory">makehistory 命令参考</link>。
</para>
</callout>
<callout arearefs="co.rebuild.delovdb">
<para>
重建overview 数据库前,先要将已有 overview 数据库删除。
</para>
</callout>
<callout arearefs="co.rebuild.overview">
<para>
重建 overview 数据库。参见:<link linkend="help-cmd-makehistory">makehistory 命令参考</link>。
</para>
</callout>
</calloutlist>
</listitem>
<listitem>
<para>
设置喂信方式
</para>
<para>
如果没有另外的外部喂信者,照此配置 <filename>incoming.conf</filename>。
</para>
<screen>
<![CDATA[
peer ME {
hostname: "localhost, 127.0.0.1"
}
]]>
</screen>
<para>
即使不向外部喂信,仍然需要配置 <filename>newsfeeds</filename>。
</para>
<screen>
ME:*,!junk::
</screen>
<para>
含义为:外发除了 junk 外所有新闻组,并且允许接收所有的 distributions (该配置中distributions部分省略)。虽然我们可能不向外部喂信,但是仍然配置外发所有新闻组,因为除了用于向外喂信之外,还用于和配置其它程序通讯,如 news2mail。
</para>
</listitem>
<listitem>
<para>
配置 syslog,记录日志
</para>
<screen>
$ <command>touch /usr/local/news/log/news.crit</command>
$ <command>touch /usr/local/news/log/news.err</command>
$ <command>touch /usr/local/news/log/news.notice</command>
$ <command>chown news /usr/local/news/log/news.*</command>
$ <command>chgrp news /usr/local/news/log/news.*</command>
$ <command>cat >> /etc/syslog.conf << END </command>
news.crit /usr/local/news/log/news.crit
news.err /usr/local/news/log/news.err
news.notice /usr/local/news/log/news.notice
END
$ <command>kill -1 `cat /var/run/syslog.pid`</command>
</screen>
</listitem>
<listitem>
<para>
启动 news 服务 <command>su news -c /usr/local/news/bin/rc.news</command>
</para>
<para>
停止 news 服务 <command>su news -c /usr/local/news/bin/rc.news stop</command>
</para>
<para>
以SRV4方式启动。
</para>
<screen>
<![CDATA[
#!/bin/sh
# Script to control news server
#
#
PATH=${SAMBADIR}/bin:${SAMBADIR}/sbin:/bin:/usr/sbin:/usr/bin
export PATH
case "$1" in
'start')
echo "starting news server ... "
su news -c /usr/local/news/bin/rc.news
echo done
;;
'stop')
echo "stopping news server ... "
su news -c "/usr/local/news/bin/rc.news stop"
echo done
;;
*)
echo "usage: news.sh {start | stop}"
;;
esac
]]>
</screen>
</listitem>
<listitem id="nntp-test">
<para>
测试新闻服务器
</para>
<para>
在服务器端将新闻组的日志文件输出到控制台,用以对服务器进行实时诊断:
</para>
<screen>
# <command>tail -f /usr/local/news/log/news/news.notice &</command>
# <command>tail -f /usr/local/news/log/news/news.err &</command>
# <command>tail -f /usr/local/news/log/news/news.crit &</command>
</screen>
<para>
在客户端使用 telnet 连接服务器,测试新闻组:
</para>
<screen>
$ <command>su news -c /usr/local/news/bin/rc.news</command> <co id="co.nntp.test.start"/>
Starting innd.
Scheduled start of /usr/local/news/bin/innwatch.
$ <command>telnet 127.0.0.1 nntp</command> <co id="co.nntp.test.telnet"/>
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
200 news.worldhello.net InterNetNews server INN 2.3.3 ready
<command>list newsgroups</command> <co id="co.nntp.test.list"/>
215
control Various control messages (no posting).
control.cancel Cancel messages (no posting).
control.checkgroups Hierarchy check control messages (no posting).
control.newgroup Newsgroup creation control messages (no posting).
control.rmgroup Newsgroup removal control messages (no posting).
cn.comp.book Sucked from cn99
junk Unfiled articles (no posting).
.
<command>listgroup control</command> <co id="co.nntp.test.lcontrol.na"/>
411 No such group control
<command>listgroup cn.comp.book</command> <co id="co.nntp.test.lcn.na"/>
211 Article list follows
1
...
21
.
<command>authinfo user johnson</command> <co id="co.nntp.test.login.name"/>
381 PASS required
<command>authinfo pass mypassword</command> <co id="co.nntp.test.login.passwd"/>
281 Ok
<command>listgroup control</command>
211 Article list follows <co id="co.nntp.test.lcontrol.avail"/>
.
<command>quit</command> <co id="co.nntp.test.quit"/>
205 .
Connection closed by foreign host.
</screen>
<calloutlist>
<callout arearefs="co.nntp.test.start">
<para>
启动 INND
</para>
</callout>
<callout arearefs="co.nntp.test.telnet">
<para>
使用 telnet 连接服务器 nntp(119) 端口
</para>
</callout>
<callout arearefs="co.nntp.test.list">
<para>
显示 newsgroups 文件(新闻组开板表述文件)
</para>
</callout>
<callout arearefs="co.nntp.test.lcontrol.na">
<para>
在没有通过口令验证的情况下,control 板块不可见
</para>
</callout>
<callout arearefs="co.nntp.test.lcn.na">
<para>
在没有通过口令验证的情况下,cn.comp.book 板块可见
</para>
</callout>
<callout arearefs="co.nntp.test.login.name">
<para>
登录新闻组服务器,输入用户名
</para>
</callout>
<callout arearefs="co.nntp.test.login.passwd">
<para>
登录新闻组服务器,输入口令
</para>
</callout>
<callout arearefs="co.nntp.test.lcontrol.avail">
<para>
当用户 johnson 在通过口令验证的情况下,control 板块可见
</para>
</callout>
<callout arearefs="co.nntp.test.quit">
<para>
退出
</para>
</callout>
</calloutlist>
</listitem>
<listitem>
<para>
设置 crontab,完成诸如过期文章删除、日志回滚等工作。
</para>
<para>
修改 crontab 如下:
</para>
<screen>
0 3 * * * su -c "/usr/local/news/bin/news.daily delayrm" news
0 7 * * 7 su -c '/usr/local/news/bin/expireover -s' news
#0,10,20,30,40,50 * * * * /usr/local/news/bin/nntpsend
</screen>
<para>
参见:<link linkend="help-cmd-news-daily">news.daily 命令参考</link>。
</para>
</listitem>
</orderedlist>
</sect1>
<sect1 id="inside-inn"><title>深入 INN</title>
<sect2><title>新闻组体系结构</title>
<para>
INN帮助文档中经常提到 feeder(喂食者) 和 reader(读者),也有人将其翻译为上游和下游。但是根据新闻组的架构,往往难以分清这两个角色。
</para>
<para>
对于集中控制(单一服务器)的新闻组,结构非常简单,只需要一台机器控制外部来的喂信(incoming feed)、向外部喂信(outgoing feed),建立和用户的连接,提供文章发布(posting)和阅读(reading)。缺点是存在单点故障。
</para>
<para>
分布式结构有使用共享池,文章复制等结构。参见:<ulink url="http://web.inter.nl.net/users/Elena.Samsonova/unix/INN/v2.3/architectures.html">《INN Architecture Guide》</ulink>。
</para>
<para>
当INN被设定为批处理方式进行 newsfeed的情况下, News的工作流程为:
</para>
<para>
News 使用者是透过News Reader软体来读取(Read)
或发送 (Post) , 这类软体可以称之为News界面软体或者News读取软体。
当使用者发送出一封讨论信时, News Server 立刻接手处理。首先Server
会把该封讨论信放在自己的News Spool (/var/spool/news) 之下, 同时
在外送预备区 (通常是/var/spool/news/out.going/site 或 /var/spool
/news/out.going/site/togo) 留下一份记录。 这里, News Server对
News Reader的服务是即时的, 也就是说, 以上这些流程是一瞬间完成,
而且是连贯的。
</para>
<para>
接下来就由News Transport软体接手, 不过, News Server到News
Transport之间就不一定是即时进行, 正常的话, 负责执行传输的软体
是由 cron 定时启动, 之後依照/var/spool/news/out.going/site这份
记录, 把News外送到下游的News Server。 照内定状态, INN 与 C-News
的传输工作都必须透过 cron 来带动, 这是典型的批次处理模式。
</para>
<para>
整个Usenet的架构, 就是这样一个News Server 把讨论信传给另一
部News Server, 如此由点而面, 构成一个资讯传输网。 再次提醒读者,
Usenet 中的 诸多News Server彼此之间的差异可能非常大, 诸多常见的
传送方法包括卫星传送、 NNTP over TCP/IP传送、 UUCP dialup、
UUCP over TCP/IP、 E-mail (用任何可能的Mail Transport Agent)等
等, 一部Server Server只要使用何其上下游News Server 相同的传输
方法即可, 而无须顾虑外面世界究竟如何。
</para>
<para>
另外还有一点与News Transport相关的观念, 对NNTP传输方式来说,
News 的喂送, 通常是上游的News Server「主动」将News喂送到下游的
News Server。 举个例子来说, 我们所需要的Newsgroups, 是我们的上
游News依照我们所要求的 (也就是我们指定订阅的) 讨论区newsgroups,
不多不少的传送过来, 我们只需要「被动」的接受即可, 换个角度, 对
於我们这一端产生的东西, 也是我们主动传给我们的上游News Server。
这个说明适用於大部分的情况, 至於其例外, 我会在後面专门来介绍News
传输的篇幅中, 更详细的介绍。
</para>
</sect2>
<sect2><title>新闻组文章结构</title>
<para>
一个典型的新闻文章结构:头部信息、一个空行、正文部分。头部信息的每一行又是由关键字、冒号、空格和内容构成。
</para>
<para>
头信息中必须包含的有:"From", "Date", "Newsgroups", "Subject", "Message-ID", 和 "Path"。可选的关键字有:"Followup-To", "Expires", "Reply-To", "Sender", "References", "Control", "Distribution", "Keywords", "Summary", "Approved", "Lines", "Xref", 和 "Organization"。
</para>
<screen>
From: [email protected] (Jerry Schwarz) <co id="co.ah.from"/>
Path: cbosgd!mhuxj!mhuxt!eagle!jerry <co id="co.ah.path"/>
Newsgroups: news.announce <co id="co.ah.newsgroup"/>
Distribution: nj,ny <co id="co.ah.dist"/>
Subject: Usenet Etiquette -- Please Read
Message-ID: <[email protected]> <co id="co.ah.mid"/>
Date: Fri, 19 Nov 82 16:14:55 GMT
Followup-To: news.misc
Expires: Sat, 1 Jan 83 00:00:00 -0500
Organization: AT&T Bell Laboratories, Murray Hill
<co id="co.ah.blank"/>
The body of the message comes here, after a blank line.
</screen>
<calloutlist>
<callout arearefs="co.ah.from">
<para>
发件人的邮件地址
</para>
</callout>
<callout arearefs="co.ah.path">
<para>
文章每经过一个新闻网关,就会在最左边加上主机名,主机名之间用感叹号分隔。PATH 除了可以看出文章的转发路由外,还有一个重要功能——减少冗余。即根据PATH中的主机名,判断是否需要接收以及向下游喂信。
</para>
</callout>
<callout arearefs="co.ah.newsgroup">
<para>
新闻组名称。可以为用逗号分隔的多个新闻组名。
</para>
</callout>
<callout arearefs="co.ah.dist">
<para>
传播区域,该部分为可选信息。配合头信息的新闻组(Newsgroups)设置,更有效设置新闻的转播范围。并不常用。
</para>
</callout>
<callout arearefs="co.ah.mid">
<para>
格式为尖括号扩起来的字符串。字符串不能包含空格、尖括号。为符合RFC-822,字符串格式为:<unique@full_domain_name>。
</para>
<para>
Message-ID 的一个重要作用就是防止文章的重复粘贴:新来的文章和 history 对比,如果已有,则丢弃。当然还可以利用文章中 PATH 中的信息有效防止新闻转递的冗余。
</para>
</callout>
<callout arearefs="co.ah.blank">
<para>
空行
</para>
</callout>
</calloutlist>
</sect2>
<sect2 id="news-conf-active"><title>active 文件格式</title>
<para>
INN (innd) 决定收哪些 newsgroups 主要由 active 来决定.
</para>
<para>
active档案格式为 name himark lomark flags, 我们用下例来说明。
</para>
<screen>
<![CDATA[
tw.bbs.comp.network 0000000000 0000000001 y
tw.bbs.netnews 0000000000 0000000001 y
tw.bbs.announce 0000000000 0000000001 m
]]>
</screen>
<para>
active 配置文件有四个域, 各域间以一个空格为间隔, 注意, 最后的域(也就是flags)之后没有空格。 最后的flags域, 最常见者为y 与 m,如下:
</para>
<itemizedlist>
<listitem>
<para>
y
</para>
<para>
允许本地投递
</para>
</listitem>
<listitem>
<para>
m
</para>
<para>
受控新闻组。受控新闻组设有专门管制人来看管, 读者若post到这的讨论区, 该post通常会自动被转到该讨论区管制人(Moderator)的E-mail信箱中,该管制人若认可您post的内容, 他(或她) 会帮你post到该newsgroup。
</para>
</listitem>
<listitem>
<para>
n
</para>
<para>
不允许本地投递,但允许远程投递。
</para>
</listitem>
<listitem>
<para>
x
</para>
<para>
关闭的新闻组。
</para>
</listitem>
<listitem>
<para>
j
</para>
<para>
文章不投递到组中,如果没有交替投递到其它组,直接投递到 junk 组。注意在定义 newsfeeds 时,如果不排除 junk 组,投递到 j 标记的新闻组也会进行喂信。
</para>
</listitem>
<listitem>
<para>
=foo.bar
</para>
<para>
重定义新闻组
</para>
</listitem>
</itemizedlist>
<para>
检验 active 文件正确性的方法:
</para>
<screen>
$ inncheck
$ scanspool
</screen>
</sect2>
<sect2 id="news-conf-history"><title>history 文件维护</title>
<itemizedlist>
<listitem>
<para>
history 的功用:
</para>
<orderedlist>
<listitem>
<para>
do expire
</para>
</listitem>
<listitem>
<para>
check duplicate message ID (收 article 时)
</para>
</listitem>
<listitem>
<para>
find article to be cancelled
</para>
</listitem>
</orderedlist>
</listitem>
<listitem>
<para>
因此 history 不小心误杀, entry 有缺, 或毁损, 通常非必要不用重新 rebuild. 因为其影响顶多涉及:
</para>
<orderedlist>
<listitem>
<para>
article 无法 expire 掉 (有不用停 server 的方法, 已 post 在前)
</para>
</listitem>
<listitem>
<para>
重复收到相同 article (不会太多)
</para>
</listitem>
<listitem>
<para>
无法 cancel (影响不大)
</para>
</listitem>
</orderedlist>
</listitem>
<listitem id="help-cmd-makehistory">
<para>
命令 <command>makehistory</command> 用来维护 history 和overview 数据库。
</para>
<itemizedlist>
<listitem>
<para>
-O
</para>
<para>
生成新的 overview 数据库。如果使用了buffindexed方式的数据库,在调用 makehistory -O 重新生成 overview 前,先清除现有的 overview 数据。注意只有需要提供客户端服务的新闻组服务器才有必要建立 overview 数据库,对于只提供新闻中转的,无需建立和维护 overview 数据库。
</para>
</listitem>
<listitem>
<para>
-F
</para>
<para>
启用另外的进程写 overview 数据库。优点是效率高,但是资源要求高。只有同时使用参数 -O 才有意义。对于buffindexed方式,调用overchan处理overview数据库。
</para>
</listitem>
<listitem>
<para>
-I
</para>
<para>
对于文章ID低于 active 文件中的最低ID值的,不建立 overview 数据库。这适合于磁盘中存在旧的文章,但并不想让用户看到的情况。
</para>
</listitem>
<listitem>
<para>
-x
</para>
<para>
不改动 history 文件。适合于只想重建 overview 数据库(使用 -O 参数),但是不影响现有 history 文件。
</para>
</listitem>
<listitem>
<para>
-b
</para>
<para>
删除没有 Message-ID 的文章。
</para>
</listitem>
<listitem>
<para>
-f <filename>
</para>
<para>
将 history 文件写入指定文件
</para>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist>
</sect2>
<sect2 id="news-conf-overview"><title>overview 维护</title>
<sect3><title>overview的概念</title>
<para>
"News Overview" 顾名思义, overview 就是先大略看看 article 的相关资讯。
</para>
<para>
举例而言, 假设一个 user 用 Netscape 的 News reader, 连上某个 News server 後,
( 当然用其它的 news reader, 情况也是类似的 )
</para>
<orderedlist>
<listitem>
<para>
会出现一些 newsgroups ( subscribed ), 试窗里除了 newsgroups 名称之外, 还有一些数字, 表示有多少篇 articles 他还没有读过, ..
</para>
</listitem>
<listitem>