BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / bbs-man-dev / #10386同步于 1 周前
BBSMan_Dev机器人发帖

cygwin上编译fb2k的日记(第...谁知道第几天)

jackfnx.
1 周前镜像同步2 回复
转信站: BYR!news.byr.edu.cn!news.shec6.edu.cn!USTC 上次以来,停了好几天,现在捡起来 上次说到发现了一个新问题,发现编译出来的bbsd,可以用cygwin下的telnet连 也可以用windows的telnet连,但就是不能用sterm连 后来琢磨了一下,想通了 应该是因为sterm不支持ipv6 按理来说,ustcbbsd在linux下运行时,是可以支持ipv4/ipv6无差别访问的 可是大概是cygwin的ipv6补丁不完善吧,总之支持了ipv6以后就不支持ipv4了 那么我们就回过头来考虑,我们原来是用给cygwin装ipv6补丁的方法解决ipv6问题的 但是其最好的办法是让bbsd在不支持ipv6的cygwin上也可以编译 就是说让bbsd不依赖ipv6环境 这个就要依赖于__CYGWIN__宏,作条件编译了 仔细分析了一下目前依赖ipv6的地方,主要有两个: lib/ip.c 主要相关内容是字符串ip地址和数字ip地址互相转换 这个主要是为了处理.DIR中的ip地址,用于保存和显示 这个东西好改(这个文件就是我写的-_-) bbsd.c 主要相关内容是端口的绑定和监听 这个就比较复杂了,幸好以前的代码是ipv4的,只不过删了 所以去svn里找历史版本,虽然看不懂,照葫芦画瓢把代码恢复了就可以了 这个过程还有一个插曲,后面讲 然后开始呜喳bbswww 上次说了,bbsfind.c会调用getloadavg(),这个函数ms cygwin不支持 google了一下,全是英文结果,随便看了一个,官网上的 大意似乎是说,这玩意现在不支持,能不能想个办法让他支持 算了,看上去很复杂的样子,屏蔽了算了 这东西的主要用途就是在系统负荷较高时禁用全站文章搜索 其实cygwin下,再怎么搞性能也好不了,这个地方干脆禁用 加个条件编译,cygwin下直接返回不繁忙 然后是lib/file.c有一个warning(奇怪上次记得没有) 看了一下,说的是把uid_t赋值给int 这个问题在linux下没有,可能是linux下和windows下类型定义不同 不管了,直接加一个强制类型转换,反正错不了 最后是lib/ip.c,前面fb2k已经改了,这里基本上相同 编译成功,不过因为没装lighttpd,所以暂时没有测 总之,还是很有成就感的 然后,把代码提交,从此USTCBBSD算是正式支持CYGWIN平台了,呵呵。 ============================================== 附:菜鸟调查bug记 话说,我把ipv4代码恢复以后,编译,通过,运行,成功 但是,telnet一下,连不上,ps一下,发现进程已经退出了 为什么呢?想不通,没办法只好加printf语句调试 结果没反应,大概是服务程序不能输出信息吧 那么咱们用文件输出,自己打开文件输出未免太麻烦了,用report函数代替 另外,再开一个cygwin窗口tail -f trace 然而,结果很诡异 trace文件一直没变化,即使我把report函数写在main刚开始也不行 回头想一想,main刚开的地方应该还没有chdir(BBSHOME) 这个时候输出的trace文件应该在当前目录中 看了一下,果然。 好,一步一步定位,把report函数逐渐往后移 最后,在start_daemon函数的结尾,又发现了诡异现象 start_daemon的后半部分的report函数都没效果 难道是这里的问题吗? 但是看上去不像,因为这个地方怎么看也不像会异常退出的样子 只有一段: while(n) close(n--); 这个东西看不懂,这里的n是什么呢? 看前面n = getdtablesize(); 这个函数啥意思呢? google 原来是获得打开的符号表 这种用法属于daemon程序的定式,用于关闭标准输入标准输出之类的 看来是因为这个report没有效果 干脆再往后走,终于我们来到了bind_port4函数 yi!这个可是我加的代码,这个最可疑 在函数前面加一个report,后面再加一个report 结果发现前面的report输出了,后面的没输出,基本定位了 进入函数体,在函数开头加report,OK的 把report函数往后挪,结果在这个过程中发现了一个bbsd_log函数 嗨,原来如此,原来bbsd用的log函数在这呢 看了一下这个函数的输出路径 /home/bbs/reclog/bbsd.log 这回就不用report函数了,只要tail -f 这个文件就行了 这回连改代码都不用了,直接就可以看到之前的出错信息 error in bind port 23 ... err... 原来如此,看来确实是bind port的时候出错了 那么,是什么原因呢? 这个时候,我想起此前有一句被封掉的代码// xsin.xxx = AF_INET 这玩意看上去很可疑,把它解开,ok,这回ok了。 bbsd启动成功 telnet it,shm错误,这个难不倒我 根据上次的经验export CYGWIN=server 结果,终于登陆进去了 over 【 在 jackfnx (9907.玄之又玄) 的大作中提到: 】 : 说是日记,其实是昨天和今天两天,主要是讨个好彩头,希望明天还能有点进展 : 系统是cygwin1.5.25-15,其实就是最新的cygwin正式版,没特意选什么包 : 除了默认的包,好像就选了编译器和vim,记不太清了 : bbs代码是ustc当前的代码,base是fb2000,改了不少东西,不过应该对移植性 : 影响不大 : 第一天 : 刚刚开始就遇到了拦路虎 : ./configure的时候,提示编译测试程序失败 : 提示说ld 没有-export参数 : 在cn.bbs.admin.install发帖问,没人理,没办法只好自己研究 : .................(以下省略)
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
JulyClyde.机器人#1 · 1 周前
转信站: BYR!news.byr.edu.cn!news.newsmth.net!NEWSMTH 现在源代码里是不是还有大量的feature和feature set的宏定义相互混用的情况? 【 在 jackfnx.bbs@bbs.ustc.edu.cn (9907.玄之又玄) 的大作中提到: 】 : 上次以来,停了好几天,现在捡起来 : 上次说到发现了一个新问题,发现编译出来的bbsd,可以用cygwin下的telnet连 : 也可以用windows的telnet连,但就是不能用sterm连 : ...................
jackfnx.机器人#2 · 1 周前
转信站: BYR!news.byr.edu.cn!news.shec6.edu.cn!USTC 你说谁,kbs还是fb2k? 【 在 JulyClyde@newsmth.net-SPAM.no (torred) 的大作中提到: 】 : 现在源代码里是不是还有大量的feature和feature set的宏定义相互混用的情况? : 【 在 jackfnx.bbs@bbs.ustc.edu.cn (9907.玄之又玄) 的大作中提到: 】 : : 上次以来,停了好几天,现在捡起来 : : 上次说到发现了一个新问题,发现编译出来的bbsd,可以用cygwin下的telnet连 : : 也可以用windows的telnet连,但就是不能用sterm连 : : ...................