荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: 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软件 网络书店