荔园在线

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

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


发信人: jjksam (2 years), 信区: InstallBBS
标  题: innbbsd+FreeBSD-HOWTO
发信站: 荔园晨风BBS站 (Sun Aug  4 01:52:04 2002), 转信

innbbsd+FreeBSD-HOWTO

jjk,
<antispam.jjk.bbs@antispam.bbs.szu.edu.cn(remove both "antispam.")>

v0.1, 03, August 2002

==========================================================================
此文档将会告诉你如何在FreeBSD安装innbbsd。注:此文档不包括所有的安装说明
希望这份文档能对其他人有用。欢迎有其他意见,
==========================================================================
<1>. 要使 innbbsd 在 FreeBSD下运行需要怎样做。
     1. 错误诊断。
     2. 修改 dbzserver.c 和 inndchannel.c
<2>. 怎样解决在FreeBSD下被动转信时不能跨站砍信的问题。
     1. 错误诊断。
     2. 修改his.c
<3>. 结束。
==========================================================================
<1>. 要使 innbbsd 在 FreeBSD下运行需要怎样做。
--------------------------------------------------------------------------
   先参考innbbsd自带的README, 在了解innbbsd之后,就开始做跟FreeBSD相关的
   东西。
   1. 错误诊断。
      以下面版本的innbbsd为例,说明如何诊断innbbsd的错误。如果不想知道为
      什么要改的话就跳过这里直接看第2部分吧。
      innbbsd版本如下:
      VERSION         = 0.50beta-5F
      NCMVERSION      = NoCeM_0.66
      按照README所说的安装好innbbsd之后,

接着设置好bbsname.bbs newsfeeds.bbs nodelist.bbs

# su bbs
$ /home/bbs/innd/innbbsd
su-2.04$ /home/bbs/innd/innbbsd
su-2.04$ PID file is in /usr/tmp/innbbsd-7777.pid
Try to listen in port (null) and path (null)
Trying to listen in port 1904
Trying to listen in port .innbbsd1
bind: Address already in use
.innbbsd1: Address already in use
Trying to listen in port .innbbsd2
.innbbsd2/tcp: Unknown service.
local pmain, existing: Address already in use
if no other innbbsd running, try to remove (null)

或者出现跟这个类似的信息

%PID file is in /usr/tmp/innbbsd-7777.pid
Try to listen in port (null) and path (null)
Trying to listen in port 1904
Trying to listen in port .innbbsd1
bind: Permission denied
.innbbsd1: Permission denied
Trying to listen in port .innbbsd2
.innbbsd2/tcp: Unknown service.
local pmain, existing: Permission denied
if no other innbbsd running, try to remove (null)

但是在Redhat 6.2下面编译后运行就没问题。

[bbs@fly innd]$ PID file is in /usr/tmp/innbbsd-7777.pid
Try to listen in port 7777 and path /home/bbs/innd/.innbbsd

[bbs@jjk innbbsd]$ telnet localhost 7777
Trying 127.0.0.1...
Connected to jjk.szu.edu.cn.
Escape character is '^]'.
200 flyBBS InterNetNews INNBBSD server 0.50beta-5F_NoCeM_0.63

(bbs@jjk.szu.edu.cn).

quit
[bbs@jjk innd]$

说明是freebsd自己的问题。
再继续追查原因。用暴力法把那个端口也改了,还是不行。

分析下面这段错误信息:
su-2.04$ /home/bbs/innd/innbbsd
su-2.04$ PID file is in /usr/tmp/innbbsd-7777.pid
                                         ~~~~这里表明port还是用默认的7777
Try to listen in port (null) and path (null)
                      ~~~~~~~          ~~~~~~但这两个就变了。
Trying to listen in port 1904
怎样解决这个问题呢?请看下面的解决方法。

      2. 修改 dbzserver.c 和 inndchannel.c
[bbs /root/src/bbssrc/util/innbbsd]# grep "Try to listen in port" *
dbzserver.c:            fprintf(stderr, "Try to listen in port %s and path
%s\n", port, path);
inndchannel.c:          fprintf(stderr, "Try to listen in port %s and path
%s\n", port, path);

找到两个地方。我想,既然不知道port跟path在什么时候被改变了,那不如加一个
static看看怎样吧。

分别要修改 dbzserver.c 和 inndchannel.c 这两个文件,在里面加上一个static声
明。
具体的代码如下:

dbzserver.c:
大约在 dbzserver.c 的578行的main函数那里:
main(argc, argv)
int     argc;
char  **argv;
{

        static char   *port, *path;/* 加一个static的声明 */
        int     c, errflag = 0;
        extern  INNBBSDhalt();
#if !defined(DBZSERVER)
        initial_lang();
#endif

大约在 inndchannel.c 的604行的main函数里:

修改跟上面相似的代码。

到此为止修改完毕,接着:
重新make && make install
#su bbs
$~bbs/innd/innbbsd
PID file is in /usr/tmp/innbbsd-7777.pid
Try to listen in port 7777 and path /home/bbs/innd/.innbbsd

Oh!!! 终于行了!!!
$telnet localhost 7777
Trying 127.0.0.1...
Connected to localhost.szu.edu.cn.
Escape character is '^]'.
502 You are not in my access file. (unknown@localhost.szu.edu.cn)
Connection closed by foreign host.

那两个指针具体在哪里被改变就不清楚了,反正加了static就没事。希望这些能对
遇到同类问题的人有所帮助。:)

感谢:此innbbsd问题的解决要感谢Czz跟ELM两位的指点。

--------------------------------------------------------------------------
<2>. 怎样解决在FreeBSD下被动转信时不能跨站砍信的问题。
--------------------------------------------------------------------------

      1. 错误诊断。
         同<1>: 如果不想知道为什么要改的话就跳过这里直接看第2部分吧。:)
         此bug表现为在其他站发出砍信信息之后,本站也收到cancel信息,但是
         不会砍信。
         正常的bbslog在收到cancel msg之后出现如下信息:
Aug 03 22:25:58 [32289] Control: cancel <41YhPd$YC1@smth.org>
Aug 03 22:25:58 [32289] **** try to cancel 1028384758  Art/M.1028384757.A
*****
Aug 03 22:25:58 [32289] **** Get file  ****
Aug 03 22:25:58 [32289] cancel post /home/bbs/boards/Art/M.1028384757.A

不正常的就只是出现
Aug 03 22:25:58 [32289] Control: cancel <41YhPd$YC1@smth.org>
然后就没有cancel动作了。


      2. 修改his.c
         经过debug知道收到cancel信息后,程序在his.c里面的HISfilesfor函数
         出错了.
char   *
HISfilesfor(key, output)
datum  *key;
datum  *output;
{
        char   *dest;
        datum   val;
        off_t   offset;
        register char *p;
        register int i;
        int     Used;
        /* Get the seek value into the history file. */
        val = dbzfetch(*key);
        if (val.dptr == NULL || val.dsize != sizeof offset) {
                              // ^^^^^^^^^^^^^^something wrong here!!
                /* printf("fail here val.dptr %d\n",val.dptr); */
                return NULL;
        }

........................................................................

是什么造成上面的问题呢?
原来FreeBSD的off_t的size是8, 而Linux下面的是4. 这样的话不出问题才怪。:)
off_t是在sys/types.h中定义的.

FreeBSD中的定义如下:
typedef _BSD_OFF_T_     off_t;          /* file offset */

FreeBSD:
sizeof(off_t) == 8

Linux(好像这个是glibc里面的定义):
#ifndef off_t
# ifndef __USE_FILE_OFFSET64
typedef __off_t off_t;
# else
typedef __off64_t off_t;
# endif
# define off_t off_t
#endif

Linux:
sizeof(off_t) == 4

而且在myHISwrite函数中的offset是long型的。
有下面的语句:
long    offset;

        val.dptr = (char *) &offset;
        val.dsize = sizeof offset;
所以,把HISfilesfor的 off_t offset; 改成 long offset; 就可以解决这个问题了。
最后不要忘了更新一下innbbsd, 还有重新启动innbbsd,当然,你也可以在改完这些
东西后, 再make && make install

感谢:此砍信问题的解决要感谢Czz的帮助。

<3>. 结束。
   如果你发现这份文件里有任何醒目的打字错误,或过时的信息,欢迎通知我。谢谢!


--
         ╱▉ ____ ____ ● ●       ╱▉     __▃_
       ╱__▉ ▉__ ▉   ▉ ▉     ╱__▉ ▉╱  ▉
   __╱    ▉ __▉_▉___▉_▉___╱    ▉_▉    ▉_
 ─────────────────────────

※ 修改:·jjksam 於 Aug  4 01:52:15 修改本文·[FROM: 192.168.0.234]
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.234]
--
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.234]


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

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