都是逼出来的,.PASSWDS 的问题快要把人整疯了。干脆快点移植到KBS上算了。
等我有空了,再写一下KBS在debian上的安装吧。
现在比较详细的安装说明可以参考这里:http://www.newsmth.net/bbsanc.php?p=196-4-1-2-4-1
关于.PASSWDS
.PASSWDS存放userec在smth1.2和KBS之间数据结构不同,所以是需要转换的。不过我比较了一下lilac版本和kbs的userec结构,大小一样,居然能够兼容,也就是说可以不加转换的使用。
不过好事多磨,在kbs的登陆界面,输入marvel居然说错误用户,在水母求助无果。后来仔细一看,原来是kbs的MAXCLUB定义是256,而lilac定义是1024,所以结构体的大小变化了,也就无法载入用户信息了。
修改这个定义,重新编译,done。发现marvel能够进入,但是marvela、marvelb等都无法进入,sigh。仔细一对比,原来是kbs的MAXUSERS才定义20000,而lilac定义为40000。所以很多用户都被截掉了。
这次索性全部对照着修改define值,编译,启动,ok。
关于十大
/*
*本部分于2007.07.10添加。
*/
前两天就发现无法添加十大,以为问题不大,所以就没放在心上,而且主体部分没有完成,所以打算以后处理。昨晚把东西弄得差不多了,今天准备看看十大。
今天带实验的时候看这部分东西,发现不是那么简单的。poststat 这个东西比较 e,涉及到/etc/posts/day.0,还有共享内存的部分。查了半天,无果,逼我使用gdb。调试到最后,发现是writestat函数中的get_records_from_id每次都失败。
不解,但是涉及到结构体的东西,就不好做了。(从这点上来说,相对于结构体串行化,我还是喜爱xml这种数据存储方式,简单明了,损坏易恢复)于是自己写了一个程序来读讨论区的.DIR文件。结果发现新发的帖子的id号突然变大,例如原来是2000,新发的帖子变成了200000。涉及到共享内存的东西我就郁闷了,不好调试。
最后没有办法,停服务,清共享内存,覆盖.BOARDS文件,覆盖.DIR,世界清静了……
这个解决了。但是诡异的事情在后面:
KBS 对十大增加了不少功能,最特出的就是十大模式了,用户能够实时的读取十大信息。但是我怎么弄就是不行,告诉我当前没有十大信息,但是/etc/posts/day明明已经生成了,ft!
没办法,这种情况下唯一的做法就是读代码。kbs 是将十大信息放在了全局的共享内存 public_data结构体 的top_header中。poststat 的时候读入,但是我猜程序启动的时候应该会读day.0载入。
最后终于发现错误在哪里了。原来我在调试的时候增加了一个新版,但是后来覆盖.BOARDS文件的时候这个版消失了。但是day.0文件依然存在,所以程序会加载旧的十大信息。不幸的是那个消失的版面的文章在十大第一,所以当程序处理到这里的时候,误认为十大的信息不存在。
解决方法很简单,删除day.0,整个世界又安静了……
刚刚收到lanslot的信,收到KCN的授权书了。可惜给我的信箱是基本上废弃的hit信箱……
/*
*本部分于2007.07.10添加完毕。
*/
关于automake
/*
*本部分于2007.07.12添加。
*/
安装kbs的时候先要运行以下./autogen.sh。
但是我运行之后出现错误:
automake: bbs2www/phplib/Makefile.am: not supported: source file `../../src/lilacfuncs.c’ is in subdirectory
automake: libBBS/Makefile.am: not supported: source file `$(top_builddir)/libBBS/site.c’ is in subdirectory
automake: libBBS/Makefile.am: not supported: source file `$(top_builddir)/libBBS/default.c’ is in subdirectory
查了一下,我的automake是1.4的,就是这个问题。解决方法很简单,到/usr/bin下面。
apt-get automake1.8
unlink automake
ln -s automake-1.8 automake
此外,还需要用同样的方法对aclocal进行处理,将其替换为1.8版本。
/*
*本部分于2007.07.10添加完毕。
*/
/*
*本部分于2007.07.19添加。
*/
关于新用户注册
本来都做好了,新用户需要邮箱激活。可是今天移植主站的时候发现没有起作用,ft。
回头一看,原来我写的代码都在LILAC_REG_MARVEL定义里面,而lilac.h文件中由于版本问题,这个定义被覆盖了,所以一点我的代码都没有进去。
添加#define LILAC_REG_MARVEL 1即可。
关于用户自定义键
deem把这部分修改了,如果用户找不到自己home目录的definekey文件,则会使用默认的系统define.lilac文件。
移植的时候没有考虑这个,而且测试的人员可能都自己定义了,所以这部分没有发现。今天按照deem的修改一下definekey.c,就ok了。
/*
*本部分于2007.07.19添加完毕。
*/
关于bonline
/*
*本部分于2007.07.21添加。
*/
发现cron中的bonline运行有问题,输出是一长串的No database selected。
错误很简单,就是没有找到数据库,修复方法如下:
1,修改etc/sysconf.ini,添加:
MYSQLHOST = “127.0.0.1”
MYSQLUSER = “root”
MYSQLPASSWORD = “xxxx”
MYSQLSMSDATABASE = “dbxxxx”
MYSQLPORT = “3306”
其中xxxx就不说了。按一下”~”生效。
2,修改mysql服务器的root密码为xxxx。
3,建立数据库dbxxxx:
mysql>create database dbxxxx;
mysql>USE dbxxxx;
mysql> CREATE TABLE bonline (
id int(10) NOT NULL auto_increment,
bname varchar(20) NOT NULL default ”,
users int(11) NOT NULL default ‘0’,
nowid int(11) NOT NULL default ‘0’,
bdate date NOT NULL default ‘0000-00-00’,
bhour int(2) NOT NULL default ‘0’,
min int(2) NOT NULL default ‘0’,
PRIMARY KEY (id),
KEY bdate (bdate)
) TYPE=MyISAM COMMENT=’bonline’;
现在就可以运行bonline了。
//////////////////////////
突然发现以上部分用处不大,因为紫丁香系统中没有NEWSSMTH的宏定义,所以post_brdlog没有用,所以上面的数据也没有用。
相应的,紫丁香是用了usage来生成版面信息的。
但是telnet和web的热门版面不一样,telnet是按照版面人数排序的,而web是按照平均在版面的时间来排序的。由于存在挂机的现象,可能版面只有一个人在,但是平均在线时间很高,所以我改了一下统计方式,让web也按照人数来排序。在此作为备忘录。
/*
*本部分于2007.07.19添加完毕。
*/