荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Lg (超越自我), 信区: InstallBBS
标  题: BBS <==> News 转信程式 innbbsd 介绍
发信站: BBS 荔园晨风站 (Tue Jun 30 18:26:02 1998), 转信

======================================================================
BBS <==> News 转信程式 innbbsd 介绍
======================================================================
<1>. 功能简介
<2>. 收信 Server Gateway (innbbsd) 安装和使用
   a. 设定 bbsname.bbs
   b. 设定 nodelist.bbs
   c. 设定 newsfeeds.bbs
   d. 设定 innbbs.conf
   e. 执行 innbbsd (options 介绍)
<3>. 收信 Client Gateway (bbsnnrp) 安装和使用
   a. 设定 activefile
   b. 定时跑 bbsnnrp
<4>. 送信程式 bntplink 安装设定
   a. bbaname.bbs 与 bntplink
   b. nodelist.bbs  与 bntplink
   c. newsfeeds.bbs 与 bntplink
   d. 执行 bntplink
<5>. Server gateway innbbsd 控制程式 (ctlinnbbsd) 介绍
<6>. activefile and history database
<7>. BBS implementation dependent part: receive_article.c
<8>. 转信架构
<9>. 错误诊断 and FAQ
======================================================================
<1>. 功能简介
----------------------------------------------------------------------
A). 主动式 (client gateway) 和被动式 (server gateway) 转信的比较
----------------------------------------------------------------------
目前与 tw.bbs 转信的 BBS 站所用之程式依照传信的方式
可区分为两类:
1. 主动取信的, 或称为 client gateway.
   一般经由 modem 电话拨接的 BBS站多用此方式主动以
   news client 的身份向 news server 定时读取.
   NSYSU Formosa BBS 所用之转信程式是一种 client gateway.
2. 被动等信的, 或称为 server gateway.
   BBS 站跑一个 server, 只能被动地等待上游站喂送,
   是一般 news server 用来传送 news article 的方法.
   Phoenix BBS 所附之 in.bntpd 就是一种 server gateway.

  这两种 gateway 各有优缺点. 分析如下:
1. client gateway 必须 maintain 读取的记录, 与一般
   news reader 的 newsrc 类似.  client 自主性高, 可以
   主动决定何时去取信, 要那些讨论区.
2. server gateway 无须 maintain 读取记录, 只要被动地等待上游站
   把新信送过来. server gateway 比较难自主, 送信时机和喂送之讨论区.
   由上游站设定.

BBS 站必须衡量需求和维护之困难度, 以决定采用那一种 gateway.
1. 收取之讨论区多寡.
   若不多, client gateway 比较合适. 如果很多, 应考虑采用 server gateway.
   读取记录不好维护, 尤其是 news server 定期会有 renumber active 的
   动作, client 可能误判.
2. 是否想连线同步转信, 某站一有新信送出, 其他站马上可看到.
   这个只能由 server gateway 达成.
3. 是否要跨站砍信. 若由 client gateway 来做比较难.
   如果要做到能接受别站送来的砍信讯息,
   a. 还要收取一个 称为 "control" 或 "control.cancel" 的 news 讨论区.
      通常这个区的量相当大, 可能远大于 BBS 站想转的正常区.
   b. 记录 artno 与 BBS article path 的对应关系, 再 stat news server.
   c. extract header (xhdr Control)
   server gateway 不用再收额外的讨论区即可跨站砍信.
4. 个人使用或使用者不多的 BBS 站建议采用 client gateway.
   用户多的, 转信不正常影响比较大,
   建议采用 server gateway.
5. 想要自主性高的用 client gateway.
   想要有紧密相连, 有整体连成一线感觉者用 server gateway.

----------------------------------------------------------------------
B). innbbsd 介绍
----------------------------------------------------------------------
相对于 mfchen 的 bbsinnd (用 perl) server gateway,
和中山 BBS 的 news-bbs client gateway, 我用 C 将此
二者整合, 支援 Sun-OS 4.x, Sun Solaris, HP-UX, IRIX,
AIX 和 Linux.

innbbsd 整合 server gateway 和 client gateway.
希望没有人正在做相同的事. 特性如下:
  1. 以 C implement.
  2. 支援多种 OS.
  3. server gateway 和 client gateway 并存.
     可接受多个 news server feed 和 多个 client gateway
     process 同时运作.
     client gateway process 可在其它非 BBS server 机器执行.
     相同讨论区可同时由多个 news server 喂送, 或从不同
     news server 拿取.
  4. 对 host load 影响正在测试评估中.
  5. server gateway 和 client gateway 都处理跨站砍信.
  6. 不会收到重复的文章.
  7. server gateway 可不经 news server 使二 BBS 站互转信件.
  8. standalone single process concurrent server(优点 ?.)
  9  server gateway 和 bbsinnd 相容.

缺点:
  1. 必须 maintain 一个 1MB 左右的 dbz 资料档.
  2. client gateway 要配合 server gateway 使用. 即使不
     接受 news server feed, 也要跑 server gateway.
     目前 client gateway process 就是当作一个
     user 主控的 feed 来源. 此 client gateway process 可在
     BBS server 经 unix-domain socket feed 给 server gateway
     或在不同 host 经 inet/tcp 喂给 BBS server.
     可用 mfchen 的 bbsinnd 配合此 client gateway.
  3. standalone process (缺点 ?.)
  4. BBS -> News 仍用 mfchen 的 bntplink. 但改为支援
     client gateway.
----------------------------------------------------------------------
======================================================================
<2>. 收信 Server Gateway (innbbsd) 安装和使用
   a. 设定 bbsname.bbs

b. 设定 nodelist.bbs
   innbbsd 由 nodelist.bbs 控制连线机器.
   如
#sitename hostname                 PROT(port) comments
bbsroute  bbsroute.xxx.nctu.edu.tw POST(119) xxxx news server

   则 bbssroute.xxx.nctu.edu.tw 才能 connect.

c. 设定 newsfeeds.bbs
d. 设定 innbbs.conf
e. 执行 innbbsd (options 介绍)
----------------------------------------------------------------------
!!! 警告 !!!
测试前请备份贵 BBS 站资料.
!!!!!!!!!!!!

You can get from

ftp://ftp.csie.nctu.edu.tw/pub/bbs/misc/innbbsd/innbbsd-??.tar.gz

patch from the previous version, use
patch -p1 < innbbsd-patch.xx-xx

A. FEATURES:
   1. support Sun-OS, Solaris, Linux, AIX, IRIX, HP-UX
   2. carry(receive) news from mulitple servers
      by mulitple client gateways or server gateways.
   3. feed multiple servers (BBS or News) by post or ihave protocol to
      different port number (nntp ,7777, ....)

B. Test and Install

   1. Please read innd/README and
      change your newsfeeds.bbs, nodelist.bbs, and bbsname.bbs
   2. read innd/src/modify.doc

   3. edit Makefile and change these two lines:
   BBSHOME=/u/staff/bbsroot/csie_util/bntpd/home
   BBS_SRC=/u/staff/bbsroot/bbs_src

      into

   BBSHOME=/tmp/bbs
   BBS_SRC=/your/bbs-src-directory

   4. make
   5. mkdir /tmp/bbs/boards /tmp/bbs/boards/test /tmp/bbs/innd
      copy your newsfeeds.bbs, nodelist.bbs and bbsname.bbs to /tmp/bbs/innd
   6. add to newsfeeds.bbs
      tw.bbs.test test test-news
   7. add to nodelist.bbs
      test-news news-server-your-want-to-post POST(119)
      your-site-name your-host-domainname     IHAVE(7777)
   8. add a line to innd/test-news.active
      tw.bbs.test 0000000000 0000000001 y
   9. run
      innbbsd
      bbsnnrp news-server-your-can-read innd/test-news.active
  10. examine if /tmp/bbs/boards/test has some files and make sure if
      OK.

C. Install and Run your Server Gateway
   以上测试若还满意. 请改 Makefile
   BBSHOME=\"/tmp/bbs\"
   BBS_SRC = /your/bbs-src-directory
   设定正确之 BBSHOME.
   make clean
   make
   kill `cat /usr/tmp/innbbsd-7777.pid`

   su 成 bbsuser (和 bbs 同 uid)
   1. 假使跑过 mfchen 的 in.bntpd, 转换 history 如下:
      hisconvert ~bbs/usr/tmp/history ~bbs/usr/tmp/history.z >
~bbs/innd/history
      mkhistory ~bbs/innd/history
   2. innbbsd port-no (default=7777)

D. 跑 client (bbsnnrp) gateway
   1. 每个 bbsnnrp process 必须用不同的 active file. 当此 active file
      被 bbsnnrp process 使用时, 请勿修改. 修改前先停(杀)掉 bbsnnrp process.
   2. active file format 如下:
      newsgroup-name high-number low-number y
      .......

      例如:
      tw.bbs.test 0000000000 0000000001 y
      tw.test 0000000000 0000000001 y

   3. 假设 news server 是 news.csie.nctu.edu.tw,
      active file 在 ~bbs/innd/news.csie.nctu.edu.tw.active

      bbsnnrp news.csie.nctu.edu.tw ~bbs/innd/news.csie.nctu.edu.tw.active

   4. 若要跨站砍信, news server 有 control.cancel 则加入
      control.cancel 0000000000 000000001 y
      若无 control.cancel 则用
      control 0000000000 000000001 y

      先跑一次
        bbsnnrp -c server control-active-file

      bbsnnrp 对 control 或 control.cancel 会特别处理, 只取必要的 header.

   5. 若第一次跑 bbsnnrp, 建议不要取旧文章, 只 reset active file, 用
      bbsnnrp -c server-to-receive active-file

   6. 可将以上动作加到 crontab 定时抓,  或用
      bbsnnrp -w wait-time ......... &
      则 bbsnnrp 每 wait-time 抓一次.

   7. bbsnnrp 可在其它机器跑, 例如
      BBS host: bbs.dorm10.nctu.edu.tw
      bbsnnrp host: ccsun1.cc.nctu.edu.tw

      在 bbs.dorm10.nctu.edu.tw 跑 innbbsd 7777 并将
      ccsun1.cc.nctu.edu.tw 加入 nodelist.bbs, 如
      bbsnnrp-ccsun1 ccsun1.cc.nctu.edu.tw

      跑
      bbsnnrp -r bbs.dorm10.nctu.edu.tw -p 7777 server active-file

E. Feed 给多个 news servers 或 BBS server
   修改 nodelist.bbs, newsfeeds.bbs ,
   例如 nodelist.bbs
   news-server1 news-server1-full-domain IHAVE(119) comment .. server gateway
   news-server2 news-server2-full-domain POST(119)  comment .. client gateway
   bbs-server1  bbs-server1-full-domain  IHAVE(7777) comment .. server gateway
   bbs-server2  bbs-server2-full-domain  IHAVE(7777) comment .. server gateway

   newsfeeds.bbs
   tw.bbs.test test news-server1 news-server2 bbs-server1 bbs-server2
   tw.test     twtest news-server2 bbs-server1
   ........


F. Related commands
   innbbsd [portno]
   bbsnnrp [options]
   mkhistory history-file
   makedbz history-size

G. 其它说明
   innbbsd 只能跑一只, 但能收多个 news server 和 bbs server feed.
   bbsnnrp 能跑多只, 甚至在其它几器都可以.

   innbbsd 和 bbsnnrp 收的 newsgroups 可重复.

H. BBS 站不透过 News server 互转
   nodelist.bbs 加入
   bbs-server1 bbs-server1-host-name IHAVE(7777)
   bbs-server2 bbs-server2-host-name IHAVE(7777)

   newsfeeds.bbs
   newsgroups  board-name name1 name2 ...
   tw.bbs.test test       bbs-server1 bbs-server2
------------------------------------------
innbbsd options:
Usage: ./innbbsd [options] [port [path]]
        -v (verbose log)
        -h|? (help)
        -n   (not to use in core dbz)
-i   (start from inetd with wait option)
        -c connection  (maximum number of connections accepted)
======================================================================
<3>. 收信 Client Gateway (bbsnnrp) 安装和使用
   a. 设定 activefile
   b. 定时跑 bbsnnrp
这个 client gateway 让你 "乱拿 news".
同时可
1. 到 A server 取 a group, 到 B server 取 b group.
   a 和 b 可以相同或不同.
   例如, 到 netnews.ntu.edu.tw 取 ntu.dep.csie,ntu.dep.ee,tw.bbs.*
         到 aidebbs.edu.tw 取 csie.bbs.aidesysop,tw.bbs.*
         到 news.mgt.ncu.edu.tw 取 ncu.mgt.*
   设好不同的 active file, 如 act1, act2, act3
   跑
   bbsnnrp netnews.ntu.edu.tw act1
   bbsnnrp aidebbs.edu.tw act2
   bbsnnrp news.mgt.ncu.edu.tw act3

2. 分散 load, 及网路结构因素, 找一台 bbsnnrp 专属 host, 只用来跑 bbsnnrp,
   再喂给其它 BBS servers 或 news servsers.
   (用来 "偷" news)
   bbsnnrp -r bbs1.domain1 -p 7777 newsa.domainb bbs1.newsa.active
   bbsnnrp -r bbs2.domain2 -p 7777 newsb.domainb bbs2.newsb.active
      bbsnnrp -r newsc.domainc -p 119 newsx.domainx newsc.newsx.active
   (从 newsx 取 news 再喂给 newsc, a gateway ? )
   ............................

当然大量读取时必须礼貌地徵求 server 同意.
---------------------
bbsnnrp options:
Usage: ./bbsnnrp [options] nntpserver activefile
       -h|? (help)
       -v (verbose protocol transactions)
       -c (reset active files only; don't receive articles)
       -r remotehost(send articles to remotehost, default=local)
       -p port|(send articles to remotehost at port, default=7777)
          path(send articles to local at path, default=~bbs/innd/.innbbsd)
       -w seconds ( > 1 wait for seconds and run infinitely, default=once)
       -n (don't ask innbbsd server and stat articles)
       -a max_art(maximum number of articles received for a group each time)
          default=100
       -s max_stat(maximum number of articles stated for a group each time)
          default=1000
       -t stdin|nntp (default=nntp)
       -g newsgroups

Please E-mail bug to skhuang@csie.nctu.edu.tw or
post to tw.bbs.admin.installbbs
======================================================================
<4>. 送信程式 bntplink 安装设定
   a. bbaname.bbs 与 bntplink
   b. nodelist.bbs  与 bntplink
   c. newsfeeds.bbs 与 bntplink
   d. 执行 bntplink
bbsnnrp 只用来取 news, 转 news 出去还要另外跑 "bntplink".
很抱歉没有解释清楚. 关于 bntplink 用法请参考 bbsnnrp-??/innd/README
(此 README 是 Phoenix BBS innd 的, 其中 nodelist.bbs 和 newsfeeds.bbs
的写法不同, 请改用 innbbsd 的. in.bntpd 也不用架, 改用 innbbsd)

第一次跑 bntplink 前先执行 (假设 BBS home 在 /home/bbs/)
cmd> bbspost visit /home/bbs       # 第一次执行会非常久
     New article listed:
     test    M.770323413.A   SYSOP   测试文章 ...
     ....                                    # 列出所有未送信文章
     接下来到 test board post 一篇测试文章, 然后执行下列命令
cmd> bntplink /home/bbs
bntplink 要用 bbsnnrp-??/innd/bntplink 而非 Phoenix BBS 内附的.
另 newsfeeds.bbs 和 nodelist.bbs 的写法也和 Phoenix BBS 的 innd 不同.

======================================================================
<5>. Server gateway innbbsd 控制程式 (ctlinnbbsd) 介绍
  ctlinnbbsd reload   : reload datafiles for innbbsd
  ctlinnbbsd shutdown : shutdown innbbsd gracefully
  ctlinnbbsd mode     : examine mode of innbbsd
  ctlinnbbsd addhist <mid> path: add history
  ctlinnbbsd grephist <mid>: query history
  ctlinnbbsd hismaint : maintain history
  ctlinnbbsd getrusage: get resource usage (-DGETRUSAGE)
  ctlinnbbsd mallocmap: get malloc map     (only Sun-OS supported)
======================================================================
<6>. activefile and history database
a. 如果要把 bbsnnrp 加到 crontab 中该怎么设啊
和在 command line 一样.
for example, 每十分钟取一次:
10,20,30,40,50 * * * * /home/bbs/innd/bbsnnrp news-server \
  /home/bbs/innd/active-file > /dev/null 2>&1

bbsnnrp 的另一个好处是可依兴趣和讨论区特性 (和不同 server), 分不同 active-file
  再以不同频率去取: 例如
  1. active1: tw.bbs.rec.rail 等(例如 铁路站)
  2. active2: tw.bbs.comp.* 等
  3. active3: tw.bbs.rec.* 等
  3. active4: control 或 control.cancel

可设每分钟抓 active1, 每五分钟抓 active2,
每十分抓 active3, 每天抓 active3 一次:
* * * * * bbsnnrp news-server active1 > /dev/null 2>&1
0,5,10,15,20,25,30,35,40,45,50,55 * * * * bbsnnrp news-server active2 >
/dev/null 2>&1
2,12,22,32,42,52 * * * * bbsnnrp news-server active3 > /dev/null 2>&1
14 3 * * * bbsnnrp news-server active4 > /dev/null 2>&1

:   还有 就是我抓回来的文章怎么都是一两个月以前的呢 !!如果只抓最新的..且都不要
:    重复又该打什么指令呢......

Default 每次最多一个 group 只抓 1 百封, 避免造成 news server 负荷过重,
建议如下:
1. 倘若不要旧信, 试跑一次
   bbsnnrp -c news-server active-file
   这样将只 reset active-file 而不取 news. 以后再跑不用 -c, 取最新的.
2. 若要旧信, 斟酌 server load, 分多次取信, 用 -a 指定最多取信量:
   如每次最多取 500 封,
   bbsnnrp -a 500 news-server active-file

   正常状况即使向多个 server 抓相同 group 也不会重复.
======================================================================
<7>. BBS implementation dependent part: receive_article.c
Rabit 希望 innbbsd 能支援 Palm BBS, Samson 也希望我写一个
dbz server 支援 Power BBS, 顺便 Secret BBS, Pivot BBS
看能否一并解决, 关于 Samson dbz server 的要求, 我是希望
PBBS 考虑使用 innbbsd. 因为 innbbsd 所耗用的资源主要就是
在处理 dbz. 只要 PBBS (Palm, Secret, 或 Pivot) 提供
receive_article() 和 cancel_article_front(mid) 两个 routine.
用以下方式处理:

   innbbsd 收到 article 后将文章 header 存到 extern char *HEADER[]
                                 body        extern char *BODY;
   (Subject 存到 HEADER[SUBJECT_H], From 存到 HEADER[FROM_H], 其它类推)
   再 call receive_article() 或 cancel_article_front(mid)
   PBBS, Palm, Pivot 或 Secret BBS 只要改写:
    1. receive_article: 将 char *HEADER 和 char *BODY 依其文章储存方式写入.
       再 call storeDB() 将 article path 存到 dbz.
    2. cancel_article_front(mid): 先 call fetchDB(mid) 获得 article filename
       (to be cancelled), 再依各 BBS 的 cancel 方式处理.
就能达到以下功能:
1. 接受 multiple feeds (duplicated feed is OK)
2. only single process (won't fork)
3. 接受 bbsnnrp feed   (bbsnnrp 和 BBS 无关, 也可以 feed News server)

innbbsd 尚不稳定, 效率和系统 load 影响尚在评估中, 以后须要修改的地方不少,
我不太希望同时 maintain dbzserver 和 innbbsd 的 source.
(因为 innbbsd 主要就是一个 dbzserver)

大家若能接受, 我再将 innbbsd 整理好, 分出 BBS implementation
dependend 和 independent 部份, 供 PBBS, Palm, Pivot, 和 Secret BBS 使用.

======================================================================
<8>. 转信架构
[Q.1]: 自由飞翔的云雀 (skylark@Venus.Dorm9.nctu.edu.tw) 提到:
   小弟最近因为架了一个站(使用 Phoenix 4.0),而且已经转信成功
   (使用内附的 innd 程式)。如今想要换用 innbbsd , bbsnnrp
   等的程式来达到转信的目的,在不破坏之前的转信设定下要如何设定:
① 已经有一个 news server 喂信给我我不想要破坏我和它之间的转信
   服务。在这种情况下我要如何设定?

[A.1]:
若已稳定, 我建议不要换成 innbbsd. 等到熟悉 Phoenix innd 的运作,
innbbsd 也够稳了再换.

innbbsd 基本上尽量做到和 Phoenix bbsinnd 相容, 但改成支援 client gateway,
若先前已跑 bbsinnd, 必须做以下转换:
1. 转换 history
   请先 disable 在 inetd.conf 的 in.bntpd, kill -1 pid-of-inetd
   cd ~bbs/usr/tmp
   hisconvert history history.z > ~bbs/innd/history
   (hisconvert 附在 innbbsd, ~bbs/usr/tmp 可能没有 history.z)
   cd ~bbs/innd
   mkhistory history
   (innbbsd make 之后会产生一个 mkhistory 执行档)
   mv history history.o
   mv history.n history
   mv history.n.dir history.dir
   mv history.n.pag history.pag
2. newsfeeds.bbs, nodename.bbs 不必改变.
3. nodelist.bbs 原先为
name          hostname & domainname                    full name
  改为
name          hostname & domainname   protocol(port)   full name

例如
ccnews        ccnews.nctu.edu.tw      IHAVE(119)       News server in CC

4. bntplink 换成 innbbsd/innd 内的 bntplink
5. 执行 innbbsd [port-no]
只要 port-no 和先前 in.bntpd 跑的 port 一样, news server 不用做任何更动.

[Q.2]:
② 我想和其它的 bbs 站之间互转信(不透过 news server ),我知道
   innbbsd 可以达成这项要求,但是要如何设定才不会破坏之前的转信
   设定?
[A.2]
假设 bbs-1.domain1 bbs-2.domain2 bbs-3.domain3 想不经 news server 互相转信,
1. 三站都跑 innbbsd 的 innbbsd 和 bntplink
2. 三站都将对方加入各自的 nodelist.bbs, 如
#[nodelist.bbs]
bbs-1 bbs-1.domain1 IHAVE(7777) bbs-1 server
bbs-2 bbs-2.domain2 IHAVE(7777) bbs-2 server
bbs-3 bbs-3.domain3 IHAVE(7777) bbs-3 server
news-1 news-1.domain4 IHAVE(119) news-1 server
3. newsfeeds.bbs 设定, bbs-1.domain1 的 newsfeeds.bbs
   (假设 bbs-1 也接 news-1)
# newsgroup    board      server1 server2 ....
localbbs.group board-name bbs-2 bbs-3
tw.bbs.test    test       news-1 bbs-2 bbs-3

bbs-2.domain2 的 newsfeeds.bbs
# newsgroup    board      server1 server2 ....
localbbs.group board-name bbs-1 bbs-3

bbs-3.domain3 的 newsfeeds.bbs
# newsgroup    board      server1 server2 ....
localbbs.group board-name bbs-1 bbs-2

再定时跑 bntplink. 其中的 localbbs.group 可自行取名, 只要三站协调
好都接受即可.

innbbsd 的好处是, bbs-1, bbs-2, bbs-3 还可再自行接任意数量的 news server
feed, 或跑多个 bbsnnrp 取 news.

======================================================================
<9>. 错误诊断 and FAQ
--------------------
a) BBS 和 News Server 在同一台机器上, 安装时, 是否要特别留意什么的 ??
只要 innbbsd 不跑在 port 119 (nntp) 应该没有问题.

还有请注意 active file high, low number 一定要保留
10 (> 10) 个 digit. 例如:
tw.bbs.test 0000000000 0000000001 y

这是因为 bbsnnrp 利用 mmap 将 active file 直接 map 到
memory. 若 digit 位数不够会被 truncated.
若有管理 news server 经验, 应该就知道为何 active file
中的 high, low 也要留十个 digits 了.

又因为是 mmap, 若在 bbsnnrp 执行期间改 active file 就会
有惨剧发生. 这和 INN news server 改 active 的道理相同.
请先停掉相关的 bbsnnrp process.

为预防 active 毁损, 每次 update active 都会产生两个 backup active
activefile.BAK 和 activefile.BAK.OLD.
因为 innbbsd 有存 history, 即使 active 毁损, 将 active reset 再重拿
也无妨.

跑 server gateway 者, 可用 bbsnnrp 来拿 "旧 article".
建议 bbsnnrp 用 cron 来启动. 不要用 -w. 可将 newsgroups 区分成
几个部份, 如 tw.bbs.hot.active, tw.bbs.2ndhot.active,....
[tw.bbs.hot.active]
tw.bbs.talk.love 0000000000 0000000001 y
tw.bbs.comp.unix 0000000000 0000000001 y

[tw.bbs.2ndhot.active]
tw.bbs.admin.installbbs 0000000000 0000000001 y
tw.bbs.talk.lady 0000000000 0000000001 y

[crontab]
10,20,30,40,50 * * * * /home/bbs/innd/bbsnnrp your-news-server \
/home/bbs/innd/tw.bbs.hot.active
35 * * * * /home/bbs/innd/bbsnnrp your-news-server
/home/bbs/innd/tw.bbs.hot.active

比较重要或有兴趣的 group 取的频率高一点, 文章少的就低一点. 并依系统 load
情况调整. 每次每个 group 最多取 100 篇 article.
(改 innbbsconf.h: # define MAX_ARTS 100)
--------------------
b. 如果没有参与转信可不可以用 innbbsd.....
--------------------
innbbsd 是用来接收 Internet Net News 的.
如果你接了 tw.bbs.* 讨论区, 就是加入俗称的 TW.BBS 连线网.
如果再跑 bntplink, 就是双向转信.
欢迎拿 innbbsd 做任何事, 不过必须警告各位的是, innbbsd 仍在
测试阶段. 使用 bbsnnrp 时也最好先礼貌性地知会 news server 管理者.
--------------------
[c]. 用innbbsd要不要修改 inetd.conf 和services!!
innbbsd 是 standalone server, 所以不用改 inetd.conf 和 services.
只要指定 port number 或不指定用 default=7777.
例如:
1. 跑在 port 5555

innbbsd 5555

  用 telnet localhost 5555 测试.

2. 用 default 7777

   innbbsd

   其它用法:

3. 指定 unix domain socket path
innbbsd 5555 /home/bbs/innd/.innbbsd.5555

此时 local bbsnnrp 用

bbsnnrp -p /home/bbs/innd/.innbbsd.5555 server-host active-file

remote bbsnnrp 用
bbsnnrp -r bbs-server-hostname -p 5555 news-server-hostname active-file


innbbsd 的连线限制
1. local socket
   若 socket file 在 /home/bbs/innd,  把 mode 改为 700.
2. remote access
   把 hostname 加到 nodelist.bbs

另外若要用 inetd 启动, 请在 inetd.conf 加入:
innbbsd stream  tcp wait  bbs  /home/bbs/innbbsd innbbsd -i
                    ^^^^^
并在 service 定义 innbbsd. 请特别注意, 是 "wait" 而非 "nowait".

standalone 或 inetd.conf 只能选一种. 加在 inetd.conf 的方法目前
尚不稳定, 不鼓励使用. 稳定后会推荐使用.
--------------------
[d]. bbsnnrp 对方bbs-server hostname test-news.active
     结果出现以下讯息:
     NNRP server not ok

bbsnnrp 是一个 client gateway, 使用时一定要指定一个 "news server"
(抓 news 的 server). 所以你必须找一个 news server, 假设是
ccnews.nctu.edu.tw (确定你能连上), 再执行:

       bbsnnrp ccnews.nctu.edu.tw test-news.active

以上是 bbsnnrp 在 bbs server 上执行时的用法. 若 bbsnnrp 在其它 host
执行, 例如 ccsun1.cc.nctu.edu.tw, bbs server 是 bbs.dorm10.nctu.edu.tw,
则将 ccsun1.cc.nctu.edu.tw 加到 nodelist.bbs, 重跑 innbbsd,
在 ccsun1.cc.nctu.edu.tw 跑
    bbsnnrp -r bbs.dorm10.nctu.edu.tw -p 7777 ccnews.nctu.edu.tw
test-news.active
--------------------
[e]. 如果跑 bbsnnrp 时, 网路有问题或 BBS shutdown 时, 这个 active file
     会不会改变?

bbsnnrp 启动时会先尝试连上两个 server
1. news server   (default to port nntp)
2. innbbs server (default to unix domain socket ~bbs/innd/.innbbsd or
                  -r host -p port)
必须二者都连线成功 bbsnnrp 才会动作. 如有疑问, 试试连到其它非 BBS server
(没跑 innbbsd) 或 News server, 例如
bbsnnrp -r ftp.edu.tw -p 7777 ccnews.edu.tw bbs1.newsa.active
看 active file 会不会改变.
--------------------
[f]. 还有就是跑 innbbsd 的系统如果想要 shutdown, 该注意些什么事?
     如果是不小心当掉的话, 对 innbbsd 是否有影响?

如果刚好正在写入 history 或文章时当掉可能有些影响. 若因当机使
~bbs/innd/history  与 history.pag, history.dir 不一致, 请用
mkhistory ~bbs/innd/history 重做 history (必须停掉 innbbsd).
万一 history 毁了, 用 history.o (救回几天前的). 目前 innbbsd
有对 shutdown 特别处理, 请养成习惯用
  ctlinnbbsd shutdown
     或
  kill `cat /usr/tmp/innbbsd-xxxx.pid`
不要用 kill -9 ......
这样 innbbsd 尚能做一些善后.

history, history.dir 和 history.pag 三个档互相关连, 请勿直接用
editor 修改. 对 history 做任何事前请先停掉 innbbsd.
--------------------
[g]. 目前对 dbz maintain 的方式为何?

在 innbbsconf.h 定义有
EXPIREDAYS, HIS_MAINT_HOUR 和 HIS_MAINT_MIN.

每 EXPIREDAYS x 2 天, 在 HIS_MAINT_HOUR 时, HIS_MAINT_MIN 分,
innbbsd 会将 > EXPIREDAYS x 1.5 天的 entries 拿掉.

dbz 并无覆盖或 remove 旧 entries 的功能, 只能从 source (history)
找出须保留之 entries 再 rebuild dbz. 大概会造成一两分钟的 peak load.
已将 EXPIREDAYS, HIS_MAINT_xx 放到 innbbs.conf.
----------------------------
[h]. 如何在 Palm BBS 使用 innbbsd
我刚刚把 PalmBBS 的 innd-palm.tgz 看过与 Phoenix BBS 的 bbsinnd 对照一番,
发现在 post 和 cancel 上并无不同. 目前使用 PalmBBS 者不妨开一个板测看看.
要改的地方如下:
1. innbbsd-0.xx/innd/bbspost.c 换成 PalmBBS innd-palm.tgz 内之 bbspost.c
2. innbbsd-0.xx/innd/bntplink 之 sub save_article 改为
########
sub save_article
{
    local       ($target) = @_;
    $now = time;

    open( FN, $target );
    print FN "发信人: $poster, 信区: $board\n";
    print FN "标  题: $subject\n";
    print FN "发信站: $mysite ($date)\n";
    print FN "转信站: $path\n";
    print FN "\n";
    print FN @BODY;
    close( FN );
    utime $mtime, $mtime, $target;
    utime $now, $now, "$bbshome/.bcache/$board"
}
###################

可能是 PalmBBS 也能读取 M.xxxx.A 之类的档名. 当然 BBS_SRC 要设对, bbs.h
和 record.c 都要用 PalmBBS 的. 我没测过. 有兴趣者测后把结果告诉我, 看还
有甚么要配合修改的.
----------------------------
[i]. bbsnnrp 收不到信

1. 确定 BBS board 已开启.
2. newsfeeds.bbs, bbsname.bbs 和 nodelist.bbs 更改后, innbbsd 必须重跑.
3. innbbsd 执行者 uid 和 bbs user 相同.
4. 若第一次启动, 出现以下 message, 且收不到文章,
GROUP groupname
211 1453 11644 13105 groupname
    ^^^^ ^^^^^ ^^^^^
    total low  high

试加上 -s 参数:   bbsnnrp -s total news-server active-file

若还收不到, 试用 bbsnnrp -s very-large-number news-server active-file
5. 检查 active-file format 是否正确
groupname high-no low-no y
6. compile 时 BBSHOME 是否正确.
-----------------------------
[j]. bntplink 送不出去

none (kuq.bbs@csie.nctu.edu.tw) 提到:
:  请问要从BBS 转信出去的bntplink 该注意什么吗!1我试过一次....不过只看到
:   try to send article  可是我去 转信站的版看好像没有转过去耶....这是什
:   么问题啊!!

1. 确认所用的 bntplink 是 innbbsd 所附.
2. 确定 nodelist.bbs 内的 news server 和 protocol 设定正确,
   (protocol: POST(119) for client gateway)
   newsfeeds.bbs server 的栏位和 nodelist.bbs 定的相符.
   确定你的 host 有 post 到你设定 news server 的权限.
3. 检查 ~bbs/out.going
4. 转信 BBS 站不一定马上收到, 可能是你送往的 news server 因网路或
   其它因素暂时无法转到.
-----------------------------
[k]. 增加一个讨论区加入转信的步骤中,
     如果不想要旧信的话, 可以用 bbsnnrp -c
     可是这样不是就会把原有的转信区文章 lost (部份)掉了吗?

A1:
先将此讨论区单独放在一个 activefile, 例如
[act1]
tw.bbs.test 0000000000 0000000001 y

bbsnnrp -c news-server act1

再 append act1 到平常用的 activefile.
例如 cat act1 >> activefile
(确认无使用 activefile 的 bbsnnrp process)

另一种方法如下:
telnet news-server 119
group tw.bbs.test

211 27 7162 7594 tw.bbs.test
       ^^^^ ^^^^
       low  high

将 low, high 放到 activefile
tw.bbs.test 0000007594 0000007162
            ^^^^^^^^^^ ^^^^^^^^^
            high        low
            留十个 digit

A2:
另一个快速 reset active 方法如下:
% telnet news-server 119 > tmp-active
list
quit
% grep ^tw.bbs tmp-active
或用 editor 只抓有兴趣之 newsgroups.

-----------------------------
[l] 如果想要换 news server 该怎么作 ?
建议如下:
1. 将 news.active reset 成 0000000000 0000000001
   换成新 server, 先跑 bbsnnrp -c new-server news.active
2. 用 tin 连到新换的 server, 比较你所收的文章和新 server 之间的差异,
   在缺的文章前加 tag (t), 再 pipe 给 bbsnnrp -t stdin
   通常 article 有时间顺序, 所缺的文章是连续的.
   如果新换的 server 文章较少, 步骤 2 可省略.
3. 以后跑 bbsnnrp 的方式不变, 改 server 即可.

  如果嫌第 2 步麻烦, 估计讨论区的文章量, 若 news.active 讨论区一天
  有 10 封信, 将 bbsnnrp -c 跑过之 news.active 对应的 high-no 减去
  50 再跑正常的 bbsnnrp 即可.
  (或用 tin 计算缺少的文章数, 再改 news.active 对 high-no 减去相当
   的数目)
  例如 bbsnnrp -c 之后的 news.active
tw.bbs.xxx 3246 1234

用 tin 与 BBS board 比较, 若缺 30 封, 则将 news.active 改为
tw.bbs.xxx 3200 1234
   ^^^^^
           与 3246 相差一个与 30 差不多但略大的数字.

-----------------------------
[m] [如何收旧信] bbsnnrp 也能用在 in.bntpd

很久以前提过如何做 batch file 来重送信件. 步骤繁复不易.
现在推荐使用 innbbsd 的 bbsnnrp. 特别是为 in.bntpd 使用者.
(Phoenix BBS mfchen's bbsinnd)
innbbsd 使用者当然也适用.

0. 不管你是用甚么 BBS, in.bntpd 如何更改.
   bbsnnrp 是 BBS implementation independent.
   (只要收信者懂 NNTP, CNEWS nntpd, INN1.4 innd, pbbsnnrpd,... 应该都可以)
1. 取 ftp.csie.nctu.edu.tw:/pub/bbs/misc/innbbsd/innbbsd-0.43.tar.gz
2. 只要造出 bbsnnrp 即可. 其它都可丢弃.
   改 Makefile 中 BBS_SRC 和 BBSHOME
   (改这个没多大意义, 只是骗骗 bbsnnrp 和 make, 一定要正确, 但不会用到)
   make depend   (ignore any error)
   make sys-type (选择你的 sys-type, 打 make 即列出所有 sys-type)
   中间过程有任何错误都不用管, 最重要的是造出 "bbsnnrp".
3. 决定将重送的 newsgroups, 例如 tw.bbs.comp.mac,....
造 activefile, 例如,
tw.bbs.comp.mac 0000000000 0000000001 y
.....

4. 在 news server (或任何 in.bntpd 能接受 feed 的 host) 执行
bbsnnrp -r your-bbs-host -p bbsinnd-port news-

--
☆ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 210.39.0.47]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店