荔园在线

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

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


发信人: Lg (创造人生的传奇), 信区: InstallBBS
标  题: BBS 安装精简手册 -2
发信站: BBS 荔园晨风站 (Sun Dec  6 19:29:01 1998), 站内信件

发信人: Bodyguard (Peggy~我忘不了您), 信区: InstallBBS
标  题: BBS 安装精简手册 -2 [六次放送] (转载)
发信站: Hong Kong Internet BBS (Mon Nov  9 22:22:09 1998), 转信

  四□转信[此部份摘至sexboy bbs]

     当我们的站大致完成后,就可以开始弄转信了
     我们在 ftp.csie.nctu.edu.tw 的 pub/bbs/misc下
     可以找到 innbbsd 这个转信程式 (在 ~bbsroot/bbs_src/innbbsd
     下也有附,不过请先把 bbs_src/innd/bbspost.c 拷到 innbbsd/innd 下,
     而Makefile中BBS_SRC的目录请更正成自己bbs_src的目录,如compiler到
     parsdate or timoff时出问题,请yacc parsdate.y or timefmt.y,
     后会产生一个XXX.c的档在将这个XXX.c改成parsdate.c ortimefmt.c
     到你的makefile将parsdate.y 改成parsdate.c)

     有了这个,我们就可以主动的到 News server 抓取你想要的 board 的信了
     同时也可以把自己站上的 article 送到 News server,让大家都能看到喔!

     抓到 innbbsd 后,按照说明在/bbs_src/innbbsd中 complie 好 innbbsd
     然后把 ctlinnbbsd , innbbsd , bbsnnrp , bbslink
     这几个档 copy 到 ~bbs/innd 下, 先在 ~bbs/innd
     建立如下的几个档案

[bbsname.bbs]
JCPP

[ nodelist.bbs  ]
   ---------------------------------------------------------------  |
   |                                                                |
debbie          debbie.cc.nctu.edu.tw         POST(119)  Center     |
                                                                    |

csie            news.csie.nctu.edu.tw         POST(119)  Csie       |
JCPP            sexboy.Dorm3.nctu.edu.tw     IHAVE(7777) Coba BBS   |
 ^^^  这是转信用的 ID , 如果你要送信出去,请记得此名不要跟别人重覆   |

[ newsfeeds.bbs ]                                                   |
                                                                    |
tw.bbs.rec.tv             tv               csie     | ---相对应-----
nctu.club.culture-service culture          csie     |
cna.today                 cna              debbie---|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  以上是喂至csie,debbie主机......如果喂给自己,设成null,或代称
  bbsnnrp用前两栏位抓信,bbslink用全三栏位送信
tw.bbs.comp.linux         linux            hole
tw.bbs.comp.unix          unix
~~~~~~~~~~~~~~~~~        ~~~~~~            ~~~~~~~
  讨论族群        你所要张贴于你bbs的版名    可以不填
[ debbie.active ]

tw.bbs.rec.tv                          0000000000 0000000001 y
tw.bbs.lists                           0000000000 0000000001 y
tw.bbs.comp.unix                       000xxxxx.....以此类推


      其中  nodelist.bbs  定义了 News Server 的名称位址和本站位址

            newsfeeds.bbs  写明了站内的那一个 boards 是从 TANET
的那个讨论
                          区转进.及要送到那一个 News Server

        而  debbie.active  则是定义要从那个 News Server 抓那些 boards
                          ,对于每个 News Server 都要建立一个对映的
active
                          File,而无论哪个讨论区,对应的初值一律
                          0000000000 0000000001 y
就可以了,程式会自动抓 .
      写好这些档案后, 先执行 innbbsd , 再执行

     ~$ ctlinnbbsd reload
                   ^^^^^^ 重读 innbbsd 的设定资料
     ~$ bbsnnrp netnews.nctu.edu.tw   debbie.active
                ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^
                到那个 News Server 抓  对映的 active File

      bbsnnrp参数如下:
 bbsnnrp -c <news server> <active file> 重新reset不抓文章
         -w     "  "         " "        多久时间抓一次
         -a <number>  <news server> <active
file>一次抓多少文章,预设100封
      信件就会转进来罗!另外, 送信只要打 bbslink -v /home/bbs
就会送到指定的 News Server 去

  ps. 你可以把执行 innbbsd 的动作写在 /etc/rc.d/rc.local 里面
      加一行像 su bbsuser -c /home/bbs/innd/innbbsd
      把执行 bbsnnrp 的动作用 cron 来跑 (自动程序)
          ex:   crontab -e bbsuser
       30 0,3,6,9,12,15,18,21,23 * * * /home/bbs/innd/bbsnnrp
xxx.active
    minutes    hours            day month  yesrs
      0~60     0~23
       0 * * * * /home/bbs/innd/bbslink /home/bbs
      在第一次执行bbslink /home/bbs 之前请执行bbspost -visit /home/bbs
      此外,需note你有没有 post 到某 News Server 的权利
      ,否则不能送信到那,测试指令: telnet <news-server> 119 如出现post
      ready or post ok! 表示你有权力post文章至该new server
      你可以观看/home/bbs/innd/bbslog档来debug


      [ ※以下摘至热心助人的Shou的post]
  我用简单一点的讲法讲好了..不知道对不对..有错请更正..
  IHAVE(119)对方是news server..且有开你的nntp permission
  IHAVE(7777)对方是bbs..且有将你设到nodelist中..
            或是自己的bbs也是用这个protocol
  POST(119) 对方是news server..但没有开你的nntp permission
            也没有把nnrp permission关掉时用的
  POST(7777)这种的我就没看过了..:) 应该不会有这种protocol出现才对...

      [※以下摘至skhuang 黄世昆,innbbsd的原作者??bbsnnrp太好用了!^_^]
 问:
跑innbbsd的系统如果想要shutdown,该注意些什么事??如果不小心当掉的话,对
     innbbsd是否有影响?
 答:
如果刚好写入history或文章时当掉可能有些影响,若因当机使~/bbs/innd/history
       与history.pag , history.dir不ㄧ致,请用mkhistory
~/bbs/innd/history重做

history(必须停掉innbbsd),万一history毁了,用history.o(救回几天前的).目前
       innbbsd对shutdown特别处理,请养成习惯使用ctlinnbbsd shutdonw或
       kill 'cat /usr/tmp/innbbsd-xxxx.pid' 不要用kill
-9...这样innbbsd尚能
       处理一些善后

    请仔细细阅读 innd/README. 此文件后半部有介绍许多不同的转信
    选择, 包括单向转信 (BBS-> News, News-> BBS), 和多对一转信,
    这些说明是针对 bbsinnd 的使用者, innbbsd 也适用, 不过有以下
    几个个不同处 (其中一点 innd/README 未提到):

N: newsgroup
B: board
S: server

请设定 newsfeeds.bbs 为
(其中 null 就是 "null" 四个字或任何不在 nodelist.bbs 的 keyword,
 bbsroute 是 nodelist.bbs 中的 server node):
A) 只转入不转出
   N    B    null

   Example: tw.bbs.campus -> campus board
   tw.bbs.campus      campus       null

B) 转出不转入 ( note N 旁边加上 ','):
   N,   B    S

   Example: newboards -> tw.bbs.newgroups
   tw.bbs.newgroups,  newboards    bbsroute
                  ^^^^
                  请note此 "," 必须加上
C) 多(newsgroups)对一(board)转入, 一(board)对多(newsgroups)转出:
   N1,N2 B S
   N1 B null
   N2 B null

   Example: tw.bbs.campus.nctu + nctu.talk -> nctu board
                                nctu board ->
tw.bbs.campus.nctu,nctu.talk
   tw.bbs.campus.nctu,nctu.talk  nctu    bbsroute
   tw.bbs.campus.nctu            nctu    null
   nctu.talk                     nctu    null

C1)多(newsgroups)对一(board)转入, 一(board)对一(newsgroups)转出:
   N2 B bbsroute
   N1 B null

   Example: tw.bbs.test + csie.test -> test board
                               test -> csie.test
   csie.test              test    bbsroute
   tw.bbs.test            test    null

D) 一(newsgroups)对多(board)转出, 只转入一(board):
   N, B1 S
   N  B2 S
   Example: tw.bbs.sci.math   ->    math1, math2 board
            math2             ->    tw.bbs.sci.math
   tw.bbs.sci.math,  math1   bbsroute
   tw.bbs.sci.math   math2   bbsroute
D1)一(newsgroups)对多(board)转出, 一(newsgroups)转入多(board):
   TODO work, 尚未支援, 可能的写法如下:
   N, B1 S
   N, B2 S
   N  B1,B2 S

还有那些花样, 其它转信程式可以做到但 newsfeeds.bbs 变不出来的?
欢迎建议.
 --
Shih-Kun Huang
EC638, CSIE, NCTU, Taiwan, R.O.C. Phone: 886-35-712121 (x54709)
-------------------------------------------------------------------------

 => ※ 两bbs站互相转信方法:(摘黎专小站jog的post)

    nodelist.bbs的设法

# name          hostname & domainname       protocol    full name
#-------        --------------------------- ---------   ----
litbbs          bbs.lit.edu.tw                  IHAVE(7777)
黎明工专
#^^^^^^自己的站
hwcbbs          bbs.hwc.edu.tw                  IHAVE(7777)
醒吾商专
#^^^^^^对方的站
bbsroute        bunny.ntu.edu.tw                POST(119)
台大计中 Nes
#^^^^^^^ News Server

    newsfeed.bbs 法和 News 一样

#  newsgroups                   board           news server
#-----------------------------  --------------  -----------
lithwc                          lithwc          hwcbbs
#<==对方BBS站名
#^^^^ 自己编..但是两占必须互相对应,不需再设定xxx.active档
tw.bbs.campus.activity          activity        bbsroute #<==News

 不用跑 bbsnnrp 抓对方的信,因为两 BBS 互转只是用 bbslink
将本站使用者发表的
 文章 "送" 至另一站而己!!因为都是采用news的方式文章互送, 所以不必再
"抓"!!
 也因为不是news server所已无信可以抓,所以只要这样设好,两端互跑 bbslink
就行

五、自动回信确认方式(firebirdbbs不用看)
    source allocation:dear.dorm8.nctu.edu.tw:/bbs/register/

   1、 起源

     由于 E-mail post 的方式的造假性容易,
故转由使用自动发确认信的方式,
以获得正确的使用者身份, 确认方式为由 bbs 系统发出一封来源为

           uid.reg@bbs.host.domain
的地方, sendmail 收到这类的信件时便会 交给 register 处理, 故需再改
sendmail.cf, 收信程式修改于 mail2bbs。
—————————————————————————————————————

  2、 安装方式

 (一) 修改 bbs source:
      为了让 bbs 系统自动发出确认信

   1. 使用 NapoleonBBS-1.5b 的请抓  For_Napoleon1.5/ 下的 xyz.c 与
      userinfo.c, mail.c 这三个档, 这是属于 NapoleonBBS-1.5b source
      的两个档, 抓回后换掉原来的档, 再重新 compile 即可
   2. Ph4 系列的系统请抓 For_Ph4/ 下的 userinfo.c , register.c 与
      mail.c 这三档回去参考修改之
   3. 在 ~bbs/etc  下加一个 bbsregister 档

 (二) 安装 bbsreg:

    1. 请抓 bbsreg/ 下的所有档。
    2. 将档按放到 bbs_src/ 下的 bbsreg(自己建) 中
    3. 更改 bbsreg.c 中的

          TMPDIR
          MAILDIR
          MYPASSFILE
          DOMAIN_NAME
          BBSHOME
          BBSGID
          BBSUID

    4. make bbsreg
    5. su 成 root , make install_bbsreg

 (三) 修改 sendmail.cf

    1. 加入新的 mailer 定义到 sendmail.cf, 对 sendmail8.6.x, 则

##################################################
###   Local and Program Mailer specification   ###
##################################################


Mbbsreg,        P=/usr/local/etc/bbsreg/register, F=lsSDFMuhP, S=10,
R=20,
                A=register -d $u $s

    2.  更改 sendmail.cf rule set 0

######################################
###   Ruleset 0 -- Parse Address   ###
######################################

S0
R$+.reg<@>$*            $#bbsreg $:$1                   bbs register
gateway
....
# short circuit local delivery so forwarded email works
R$+ < @ $=w . >         $: $1 < @ $2 @ $H >             first try hub
R$+.reg< $+ @ $+ >$*    $#bbsreg $: $1                  bbs register
gateway
R$+.reg< $+ @ >$*       $#bbsreg $: $1                  bbs register
gateway
.....
......
# everything else is a local name
R$+.reg                 $#bbsreg $:$1                   bbs register
gateway

         注意: rule 两端以 tab 间隔.


    3.  重跑 sendmail 即可

——————————————————————————————————————

                                                 E-mail:
tby@ccca.nctu.edu.tw

六、自动定期砍信

       如何使用 expirepost 来定时砍信呢 ?
       首先你得在 ~bbs/innd 下建一个 expire.ctl
       内容像这样

       test    10    500  400
       sysop  1000   500  400

     ( sysop 区保留 1000 天, 最多 500 篇 , 最少 400 篇 )

      ;31m 然后用su成 bbsuer 的身份执行 expirepost0m
  ex:  expirepost /home/bbs 1000 500 400

       就可以了,如果要定时砍,就把上面那行加入 cron 中
       需注意,没有在 expire.ctl 中定义的 board , 才会遵照
       你执行 expirepost 后附的参数来砍信.
       另外注意, bbspost.c (expirepost 会呼叫到) 有 bug
       如果你的 boards 目录放在别的 partition 的话 , 请修改
       bbspost.c


expire_article( brdname, days_str, maxpost, minpost )
char    *brdname, *days_str;
{
.......
    sprintf( lockfile, "%s/.dellock", homepath, brdname );
    sprintf( index, "%s/boards/%s/.DIR", homepath, brdname );
    sprintf( tmpfile, "%s/boards/.tmpfile", homepath, brdname );
    sprintf( delfile, "%s/boards/.deleted", homepath, brdname );

    if( (fd = open( lockfile, O_RDWR | O_CREAT | O_APPEND, 0644 )) ==
-1 )


  七  utmp的问题: <From lmp.bbs@bbs.csie>

[状况]

   (1)会有Bad data in utmp出现
   (2)bbs会有"不祥""unknown"
   (3)开始不正常断线
[处理一] ->治标
   cd /var/adm
   rm utmp
   touch utmp

[处理二] ->治本
   (1) 改Makefile 把 -DINVISIBLE 拿掉
   (2) 改bbsrf.c
       去找到有关  fopen(UTMP.....) 的东东, 把 r+ 改成 r, 或 mark
起来...
[处理三]
       不里他,忍耐两星期后,自动恢复正常

   八 排行榜 &十大热门话题排行榜以及bbsnet等外部程式

  A,bbsnet
  1)  HYD-[14:17]-/home/ftp/linux/bbsnet/program# cat bbsnet.readme
版本可能随时会更新,可在 ftp://140.138.246.113/linux/bbsnet/program/
中取得.作者 HYD.root@[140.138.246.113].
若您需要哪方面的资讯或有任何建议欢迎来信.
  2) bbsnet-v1.8版
     照著文件做应该没有太大问题,compile好bbs执行档后rename成bbsnet.sh
   cp至/bin下,在把bbsdata-v1.8 cp至/usr/local/etc,记的修改下列:

* [offscreen] 90              # 多久进入保护模式 (秒)
* [mailcheck] true            # 是否检查有新信件
* [counttime] true            # 是否计算连线时间
* [mailserv]  true            # 是否可直接与程式作者连络
* [security]  false           # 仅能单纯连线,无 mail 等功能 (适用于
bbsnet)
* [etenmode]  false           # 萤幕保护模式下关掉状态列

  下面是 bbs 所呼叫的外部程式设定, 你可以用 whereis 查询位置

* [telnet] /usr/ucb/telnet          # telnet 程式
* [mailer] /usr/ucb/mail            # 送 mail 的程式
* [editor] /usr/local/bin/joe       # 若有设 EDITOR
环境变数,则此设定自动失效
* [gopher] /usr/local/bin/gopher    # Gopher client
* [ftp]    /usr/local/bin/ncftp -u  # FTP client

  程式结束时秀出的字串, 可定义多行

* [issue] Thanks for using BBS.

* [end]


-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  把外部程式做适当的修改,或加上你须要的参数

[安装方法说明]

    首先用 tar 解开 package.然后看看 Makefile 里的 LIBS,在 SYSTEM V
之前的
 UNIX 版本,$(LIBS) 要定义成 -lcurses -ltermlib或 -lcurses -ltermcap,
 Linux 之类的 UNIX 版本则要定义成 -lcurses.再来是修改 bbsnet.h
里所定义的
 DATAFILE,CTELNET,PTELNET 的路径,如果您的系统里没有
PTELNET,就请不必修改它.
 之后,打 make,就会跑出 bbsnet 执行档程式.DATAFILE
的格式目前是每一行要有站名
 ,ip,domain,port 可有可无.但每行至少要有四栏资料,每个资料间可用空白或
[TAB]
  间隔,若想改变分借字元,请修改 bbsnet.h 的 DELIMITER.可在 UNIX
系统下用编辑
  器自行增减修改资料档案.

[使用方法说明]

使用数字键换页,方向键选择欲连往的 BBS 站,空白键会呼叫系统的 snp telnet
 (ptelnet) 连往它站,ENTER 键会呼叫系统的 chinese telnet(ctelnet)
连往它站.
按两次 [ESC] 键结束本程式.

  B,排行榜
     在/bbs_src/local_utl中make
top(还有其他一堆东东如static,shower,可以试试看)

成功后将top改名已避免与系统指令top重复,然后cp至你所欲放置的目录之下crontabs设
 定如下:

    上站次数排行
0 0 * * * /home/bbs/bin/top /home/bbs 200 1 >
/home/bbs/0Announce/digest/1
    讨论次数排行
0 0 * * * /home/bbs/bin/top /home/bbs 200 2 >
/home/bbs/0Announce/digest/2
    上站总时数排行
0 0 * * * /home/bbs/bin/top /home/bbs 200 3 >
/home/bbs/0Announce/digest/3
    总表现积分排行
0 0 * * * /home/bbs/bin/top /home/bbs 200 4 >
/home/bbs/0Announce/digest/4
                                       \--->前两百名
存放目录----- /
     digest的目录可以在bbs中的管理功能选项中开启,
1,2,3,4是四个不同的的输入档
如执行时出现file exit时,可以在加上
12 25 * * * rm /home/bbs/0Announce/bbslists/1
12 25 * * * rm /home/bbs/0Announce/bbslists/2
12 25 * * * rm /home/bbs/0Announce/bbslists/3
12 25 * * * rm /home/bbs/0Announce/bbslists/4

  C,十大热门话题poststat
0 * * * (cd /home/bbs;bin/poststat /home/bbs)


    D,mail计数程式:
       小弟"东拼西凑"的小程式,没啥用,看看就算了!make
mailnumber产生mailnumber
      binary file,语法 mailnumber <userid>
     mailnumber.c code:
#include <stdio.h>
#include "bbs.h"
#define DOT_DIR  ".DIR"
#define MAILDIR  "/home/bbs/mail"

 main(argc,argv)
 int argc;
 char **argv ;
    {

    char genbuf[ 256 ];
    FILE *fp;
/*  if((fp=fopen( "numbers",O_RDONLY|O_WRONLY))==NULL){ */
    if((fp=fopen( "numbers","a+"))==NULL){
    printf("file can't open!\n");
    return;
    }
    else{
    sprintf(genbuf,"%s/%s/%s",MAILDIR,argv[1],DOT_DIR);
  fprintf(fp,"%s has %d
mail!\n",argv[1],get_num_records(genbuf,sizeof(
         genbuf)));
    fclose(fp);
    }

   }
        fclose(fp);
    }

   }
     get_num_records(filename,size)

    char   *filename;
    int     size;
    {
       struct stat st ;
       if(stat(filename,&st) == -1)
       return 0 ;

      return (st.st_size/size) ;
    }

  九 如何增加pty至256?
    (1) for linux

  [Q]. 请问如何使 Linux 突破 64 个人的限制 ,增加 tty/pty 到 256 个人

  [A].

  一. 简介

    □ Linux 1.3.38 以前,只有支援 64 个 user 使用 ( pty 有 64 个)
       渐渐地,64个 pty 不敷使用,因此交大果茶小站站长 小吉吉修改了核心
       使 Linux 可以支援 256 个 pty...

    □ Linux 1.3.39 以后的核心已经内涵支援 256 个 pty
了.所以不用在修改
       核心, 但是一些相关的程式仍然需要使用果茶小站站长所写的程式.

  二. 使用说明

     第一节,本节是给使用 linux 1.3.38 以前核心,要增加 256 个 pty
的使用说明
      □ 程式在

ftp://henry.dorm10.nctu.edu.tw/pub/linux/system/development/pty256

       您需要抓取的档案为 : (以在 /pty256 目录下看见的为准 )

        rlogind.pty256.tgz
        mkptys
        kernel/linux-1.2.13.pty256.tgz
               linux-1.3.25.pty256.tgz
               linux-1.3.32.pty256.tgz
               linux-1.3.38.pty256.tgz
       ( 请自已选一个核心 抓回 )

       telnetd.hole-patched/telnetd.pty256.tar.gz
       telnetd.hole-patched/libtelnet.tar.gz
       procps-0.97/procps-0.97.pty256.tgz

      抓回上列各档后 回到自已的 Linux 下

      A. Make the library for telnetd & rlogind

        1. 到 /usr/include 目录下吧.
        2. untar libtelnet.tar.gz
        3. make 程式, 会做出 'libtelnet.a'
        4. copy 此档 to any /xxx/xxx/lib (eg: /usr/lib/ or
/usr/local/lib)
        5. 好像要重跑一次 ldconfig? ( 不会用,重开机也可以)

      B. change your old telnetd & rlogind to hanky's version......

        1. 解开 telnetd.pty256.tgz 和 rlogind.pty256.tgz
           ( 放在你自己觉得爽的地方就好.    )
        2. make 吧, 应该不会有问题才是......
        3. 再来这个有点危险, 因为 make install 时会 overwrite 掉旧的,
           不妨先备份一份 (这时请注意不要有 login user! 不然......)

      C. change your kernel to pty256 version......

        1. 把你传回来有支援 256 pty 的核心 安装好..

      D. 增加 pty 到 256个

        1. mkptys 程式就是用来增加 pty 的
        2. cp mkptys /dev ; chmod +x /dev/mkptys
        3. 指令 :  mkptys -link 1
           ( 做出一组 256 个 pty )

      E. 解开 procps-0.97

        1. 就是更新 top , ps , who 等程式可以支援 pty256


-------------------------------------------------------------------------

   第二节.  本节是给使用 linux 1.3.39 以后核心,要增加 256 个 pty
的使用说明
       □ 程式在

ftp://henry.dorm10.nctu.edu.tw/pub/linux/system/development/pty256

       您需要抓取的档案为 : (以在 /pty256 目录下看见的为准 )

       rlogind.pty256.tgz
       mknewptys-1.3.39
       telnetd.hole-patched/telnetd.pty256.tar.gz
       telnetd.hole-patched/libtelnet.tar.gz
       procps-0.97/procps-1.3.39.pty256.tar.gz

       核心的部份 因为 1.3.39 以后就有支援 pty256 了, 所以不用再修改

      抓回上列各档后 回到自已的 Linux 下

    A. Make the library for telnetd & rlogind
       [略]...用法同上一节

    B. change your old telnetd & rlogind to hanky's version......

       [略]...用法同上一节

    C. 增加 pty 到 256个

       1. mknewptys-1.3.39 是用来做出 pty257 的程式
          cp mknewptys-1.3.39 /dev
          chmod +w /dev/mknewptys-1.3.39

       2. 如果您自已没有动过 linux 1.3.39 的核心 则使用下列增加 pty
          please try 'mkptys-1.3.39 2'

       3. 如果您是用henry ftp server 里的 linux 1.3.39 maj49 的核心
          please try 'mkptys-1.3.39 49'

    D. 解开 procps-0.97

       1. 就是更新 top , ps , who 等程式可以支援 pty256


   ok 以上就是增加 pty 256 的方法说明了.大部份是 由 果茶  herny ftp
   里的 README 抓下来写的, 而一些使用方法也都是 果茶站长 教弟..
   我只是写个说明罢了..:>
   以上所写的内容 如有变更, 以 herny.dorm10.nctu.edu.tw 里的为准.
----------------------------------------------------------------------
        程式作者:交大果茶小站Hanky
        文件攥写:glchung@chinyi.ncit.edu.tw


   (2)for Sun OS

如何增加更多 pty

1. 简介
         由于 Phoenix BBS (Eagle BBS) 非 client/server
架构,所有操作必须在
   login pty 上.Sun-OS 可支援256 ptys.此数字足够正常使用.
但对于一些大站而
   言并不够.以下对 Sun-OS提供大于 256 pty 的作法:
     1. patch kernel
     2. 找寻 telnetd, rlogind source 并 patch 之.
     3. 利用多馀的 pty 加速 tty search.对于平常同时 login user 在 100
   以上的站而言, tty search 是一项负担. 假使有 100 个 on line user,
平均一
   次成功login 必须search 50 个 tty, 最差 100 次.

2. 以下介绍 patch Sun-OS kernel 之法. 由此将对 pty 有更深入了解.

   Step 1. cd /sys/os
   -------
   sed -e 's/NPTY/NNTY/g' -e 's/pty\.h/nty\.h/g' \
       -e 's/pty_softc/nty_softc/g' -e 's/npty/nnty/g'
         \tty_ptyconf.c > tty_ntyconf.c

tty_ptyconf.c >
tty_ntyconf.c

   Step 2. cd /sys/sun, edit conf.c,
   -------
   add the following lines before the array "struct cdevsw  cdevsw[]".
#include "nty.h"
#if NNTY > 0
extern struct streamtab ntsinfo;
extern int ntcopen(), ntcclose(), ntcread(), ntcwrite(), ntcioctl();
extern int ntcselect();
#define
ntstab      &ntsinfo
#else
#define ntstab      0
#define ntcopen     nodev
#define ntcclose    nodev
#define ntcread     nodev
#define ntcwrite    nodev
#define ntcioctl    nodev
#define ntcselect   nodev
#endif

   add more array element to "struct cdevsw   cdevsw[]". I suggest to
use element "108" and "109"
   use element "108" and "109"
(they will be the major number of the extra tty and pty pair).

    ,
    {
        nodev,          nodev,          nodev,          nodev,
/*108*/
        nodev,          nodev,          nodev,          0,
        ntstab,     0,
    },
    {
        ntcopen,    ntcclose,           ntcread,        ntcwrite,
/*109*/
        ntcioctl,   nulldev,            ntcselect,  0,
        0,              0,
    }


 Step 3.
 -------
 cd /sys/`arch -k`/OBJ
 sed 's/NPTY/NNTY/g' pty.h > nty.h
 perl -p -e 's/_ptsinfo/_ntsinfo/g;' -e 's/_ptc/_ntc/g;' \
         -e 's/_pty_softc/_nty_softc/g' tty_pty.o > tty_nty.o


 Step 4.
 -------
 add the following line to /sys/conf.common/files.cmn
os/tty_nty.c            optional nty
os/tty_ntyconf.c        optional nty

 Step 5.
 -------
 cd /sys/`arch -k`/conf
 cp GENERIC BBS-NTY
 add the following line to BBS-NTY
pseudo-device   nty256          # pseudo-tty's, also needed for
SunView
 if you find the line
pseudo-device   pty          # pseudo-tty's, also needed for SunView
 change it into
pseudo-device   pty256          # pseudo-tty's, also needed for
SunView
 当然, 至少, 加
maxusers    ??
 into
maxusers    64


 Step 6.
 -------
 cd /sys/`arch -k`/conf
 set path=(/bin /usr/etc $path)
 config BBS-NTY
 cd ../BBS-NTY
 cat pty.h nty.h
 (make sure their value are 256)
 make depend
 make
 mv /vmunix /vmunix.orig
 cp vmunix /
 fastboot

 Step 7.0, make sure you have made the first set of 256 PTYs by
 --------
/dev/MAKEDEV pty4
/dev/MAKEDEV pty5
.....
/dev/MAKEDEV pty15

 Step 7, run the following perl script
 -------
#!/usr/local/bin/perl
open(NTAB,"> /tmp/ttytab") || die "can't write /tmp/ttytab $!\n";
$ttys = "klmonKLMNOUVWXYZ";
@ttys = split(/ */, $ttys);
chdir('/dev');
$offset = 0;
foreach $tty (@ttys) {
  for ($i=0;$i<16;$i++) {
    $tname = sprintf("tty${tty}%x",$i);
    $pname = sprintf("pty${tty}%x",$i);
    print NTAB "$tname   none                            network  off
secure\n";
    system("/usr/etc/mknod $tname c 108 $offset");
    system("/usr/etc/mknod $pname c 109 $offset");
    $offset ++;
  }
}
close(NTAB);

cat /tmp/ttytab >> /etc/ttytab

Step 8, modify and recompile all commands which will use pty
 -------
         by changing a line with the string
"pqrstuvwxyzPQRST"
   into
"klmnopqrstuvwxyzKLMNOPQRSTUVWXYZ"

你必须至少重新 compile rlogind, telnetd 以使用多出的 pty/tty pair.
其它相关使用 pty 者有, screen, script, xterm 等.


  1.x 用 loadmod 之探讨.
    以上用 patch kernel 之法, 应该也可改为用 loadmod, 而无须 patch
kernel.
    在此略过. (需要一 wrapper, 一 script for making device )

--------------------------------------------------------------------
3. telnetd/rlogind source in the public domain
   建议使用
   1. logdaemon
(ftp.csie.nctu.edu.tw:/pub/security/logdaemon-2.tar.gz)
   2. NetBSD telnetd/rlogind source.
(netbsd.csie.nctu.edu.tw:/pub/...)
   其中 logdaemon 特别有考虑 tty security 问题.
---------------------------------------------------------------------
4. 利用多馀之 pty 加速 tty search
   中央 Totoro 和 交大资科 CIS BBS 都已增加到大于 512 组 tty/pty, 现在
   面临的新问题是 login 人数多时,  tty search 速度将变得很慢,
   若使用下列简单的 hashing 方法, 将使 tty/pty pairs 越多
   则 tty search 越快:
   取 time 做 hash key, 假设有 512 组 tty

time_t now;
int i,j,p,last;

time(&now);
now %= 512;
for (i = now ; i < now + 512 ; ++i) {
        line = "/dev/ptyXX";
        line[strlen("/dev/pty")] =
"klmnopqrstuvwxyzKLMNOPQRSTUVWXYZ"[i
%  32];
        line[strlen("/dev/ptyp")] = "0123456789abcdef"[(i%512)/32];
        if ((p = open(line, O_RDWR)) == -1)
               continue;
         ...............
}

 则第 0-512 秒 login 之 user 将可望在第一次 search 即 hit.
 tty 数越多 hit 机率越高.



--
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□          深圳大学荔园晨风 BBS 站为大家提供以下服务:          □
□    BBS: bbs.szu.edu.cn               FTP: bbs.szu.edu.cn     □
□    MUD: bbs.szu.edu.cn 5000          WWW: bbs.szu.edu.cn     □
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□

※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.0.1]


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

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