Skip navigation.

火与冰--alva's blog

胸有激雷,面如平湖

drcom的进展

这几天还是有点迷糊,原来的设想似乎是错误的,在drcom-module里面无法操作。应用程序联网的过程,是使用socket(),通过调用general BSD Socket,然后针对于type调用不同的ops,而ops的细节实现是调用网络层的sock。
struct socket {
        socket_state            state;  
        unsigned long           flags;  
        const struct proto_ops  *ops;
        struct fasync_struct    *fasync_list;
        struct file             *file;  
        struct sock             *sk;    
        wait_queue_head_t       wait;   
        short                   type;   
};

这是所有unix,linux程序共同的地方,否则也不存在网络应用程序的可移植性了,再往下面一层就是inet层了,需要的入口肯定在这里。却不能在这个结构体里面进行指定,原来天真的想可以覆盖下面具体的函数实现,仔细一看内核的代码,但发现是不可操作的。后来想能否通过操作inetsw_array [ ]来实现。它是一个静态数组,但是却不是外部变量,所以从内核模块无法操作这个变量。inet_stream_ops等等被声明定义为常量,所以无法操作,再往下就是ops所调用的各个函数,而这些函数却是无法被暂时的替换然后在模块退出时返回原值的。再往下就到了网络层,这层往下的操作如何来做,我是不知道。

最近还有些其他的事情,所以这个也只有暂时放下了,我想除了FC5,其他的发型版还是用老版的内核吧,应该还有时间等后面有人做出来。自己能力有限吧,我需要时间再加强加强。如果是FC5的用户,需要用的,那么就自己hacker一下内核吧,为了drcom发布一个内核补丁是不值的。应该还有其他的解决方案。下面是通过读内核源码想到的hacker内核的方法,我自己还没有测试过,我懒得装2.6.16的内核,有用FC5的就先充当这个测试吧。内核版本为 2.6.16.1,其他版本的应该行数也没有变或者在附近。该完之后重新编译内核和drcomsuite
1. 修改声明
/*file:include/net/inet_common.h,第四行和第五行,去掉常量的声明*/
extern struct proto_ops           inet_stream_ops;
extern struct proto_ops           inet_dgram_ops;

2. 修改定义
/*file:net/ipv4/af_inet.c,line 790,811行,去掉常量声明*/
790: struct proto_ops inet_stream_ops = {
       //omited
     };
811: struct proto_ops inet_dgram_ops = {
       //omited
     };

摩羯座男人[连载-开篇]

真实是一种美,率性和实干是一种力量,为什么而活着,什么是快乐?没有半点的虚假;
人们会同情一些小丑,所以造就了芙蓉姐姐芙蓉哥哥一类的人;我更同情的是,那些以为那种同情是一种追捧,而自己去学小丑的人。
“什么垃圾嘛”,看完学校bbs上那一篇所谓的校园文学连载我这样说。
所以我想写连载,写我的大学,写这四年……

别人说我是一个有故事的人,回首这四年,确实经历了很多的事情,我的生活跟身边大多数的人不一样,有让自己忍俊不禁的,有让自己心酸落泪的,没有成为当初想成为的自己,相对于自己的要求而言,太多的失败,不过我从未放弃过努力。

是下雨心情不好,还是在感慨些什么?

,

昨天晚上大概搞懂了这几天研究的思路,由于要为drcom的内核模块,在linux下找到新的入口。我准备阅读linux的TCP协议栈源代码。在电脑上看书,总是觉得眼睛太累,所以第一步还是去图书馆找是否有相关的资料。计划早上早起,先陪一个朋友出去吃早餐,送她上课,然后去图书馆。昨天是她生日,可是我错过了,算做补偿吧。也好像很久没有见到她了。早上起来发现昨晚下过雨,出去看看,还挺冷。所以也就只好说改天了,也不知道那边卖铁板里脊的来不来,天色挺暗,也许待会会下雨。这次变天让我挺不爽的,几次计划好和同学去踢球,都被一些事情打断了,可能有一个多星期没有运动过了吧。昨天上午天气还挺好,下午去踢球时,风太大,去的人不多也没有踢得尽兴。计划早上和很久不见的朋友出去,结果下雨。呵呵,也没有感性到让天气影响心情的地步,只是这么多天,毕业设计包括自由软件的项目都没有什么大进展,让我感觉自己挺失败的。而身边的同学,沉浸于大学最后时光的享受当中,整天的魔兽,这对于我项目关键时候需要安静的环境来说,确实是一种挑战--如何的拒绝诱惑,拒绝干扰。
到了图书馆,照例查查有没有什么我感兴趣的新书上架。有一本FreeBSD的。FreeBSD曾经有一段时间对于我的吸引力特别的大,我想让它来做网站的服务器。FreeBSD坚如磐石的特性很让我着迷,结果却还是暂时的放弃掉了,而是选择了Linux。原因在于我让它运行的环境。网站改版之后大部分是用java重写了,因为想为后面的维护省下很多事情,不再多写代码。我实现的是开发了一套页面标签,就用那些标签插入到页面里面就可以很容易的建立一个版块的内容,而这点php做不到。而当时从网上知道,Sun的java源码协议和BSD之间出了点问题,在FreeBSD上安装java开发环境有点麻烦。(这个问题,昨天,4月5日已经不成问题了,FreeBSD基金会已经和Sun达成了发布JDK和JRE二进制包的协议)另外还有就是学校开始正式的使用drcom作为校园网的控制,而FreeBSD上暂时没有实现开源版本的drcom客户端。虽然服务器放在网络中心可以不受限制的上网运行,那么测试服务器呢,那么我日常的使用呢?而FreeBSD的软件包管理机制,很依赖于网络。后来我选择了gentoo作为我主要的操作系统,它给了我最大的自由和最真实的体验,用linux以来从来没有过的体验。但是即使是现在,BSD还是对我有着深深的吸引力,或者别人或者我自己如果开发了BSD下的drcom,或者是我走出了这个被Drcom困住的环境,遇到服务器运用的场合,我可能还要尝试再应用FreeBSD,但是桌面的操作系统,我想gentoo是没有其他任何发行版可以取代了,因为我随着我对它开始熟悉,它很听我的话了,我对它无可挑剔了。
今天第二点让我不爽的地方就是这本书的序,序是某社区的负责人写的。但是对于他的观点我想我不能苟同,关于linux的。我想要么是当时(2002年)linux没有发展到令人感觉很好的境地,要么就是他当时对于linux并不是了解,虽然里面也列举了他用过的几个linux的发型版本。但是却在文中把Linux和Linux发型版的概念去混淆,把各个发型版的特性来混淆。把各个发型版的不足之处,都算到linux之上。如slackwave的难于安装配置和redhat的太傻瓜化都算成linux的不足之处。最后得出一个结论:“Linux轻浮,FreeBSD优雅,Solaris高贵”,这些话如果发到某个拥有linux和FreeBSD重多用户的社区,那么我想又是一场口水战。“轻浮”这个词是不能随便用的,轻浮的永远是人,而不是一个伟大的工程。如果说轻浮,那我可以承认一下我当初选择gentoo的初衷,我看到了gentoo的很多贴图,很漂亮,而没有其他任何一个发型版有这样的东西。我应用linux,不是光在服务器上应用,而是所有开电脑的时候我都在用,很长一段时间我只有一个gentoo linux,从2004.8到现在的2006.0;并且我试图让所有的学习工作,娱乐都往上面进行,我不能容忍自己写代码的同时却可以心安理得的跑着盗版的操作系统。我想,这对于windows我没有半点的贬低,我想这是尊重!最实际最客观的尊重。gentoo linux让我做我想做而它又能做的的任何事情,我喜欢对着它漂亮的脸蛋儿工作(fbsplash和fvwm)。这也许和生活中的我一样,我想我是喜欢美女的,只有内秀的女人只可能做朋友;花瓶我也消受不起,不可能真正的喜欢,更不可能成为我的老婆。我喜欢象gentoo linux这样的女人,也许在一起,互相了解,需要长的时间,需要一起去经历才可以如此的默契,但是经过了考验的感情才可以长久,但是她却可以成为我独一无二的,近乎完美的伴侣。说到windows,只到最近,要做毕业设计,才无奈装了一个windows2000,但是现在进入的次数不到5次。我自己也是对FreeBSD有着兴趣的,有人说它纯粹正宗,有人说它朴实,有人说它易于学习编程,其实我看上的,一是它的授权,如果我想在将来的产品中运用它但是又不得不封闭源码的时候;二是它作为服务器运行的接近于完美。我其实我也不想把别人2002年写的话再来提到现在来说,我只是觉得,开源世界的变换实在太快谁也不知道明天会发生什么,不要用一句话定了别人的将来,这样非但显不出水平,反而是浅薄轻浮。我想,master是绝不会下这样的定论。并且,有时侯这样的话会误导新人,会引起争端。我觉得开源世界应该健康活泼的发展下去,而不是总有windows vs linux,linux vs BSD,linux distribution A vs linux distribution B;我也承认没有竞争就没有发展,但是在国内有些地方,却竟然可以演化为人身攻击,而这些陷入争论的人是否有技术,其实大家都清楚。大家比技术共同发展是很好的,但是不要让别人觉得如果没有了微软,那么linux就会“树倒猢狲散”。说到轻浮,我很瞧不起国内的某些开源社区里面的某些人,说是什么“忠实追随者”,却不明白GPL的哲学,去不明白Free不等于no charge!整天论战挑起事端,自己弄不好就发牢骚,很久很久之后,还是个“green hand”而已,这是被开源世界定义为loser的,为什么呢,因为他即便是在论战的时候都是在windows下上网啊。我还记得,有一次在linuxsir的gentoo论坛,有人对gentoo的“月月秀”大发感慨,说都“沉迷于此,而不研究真正的技术。”我就认为发这话的一定是初学者中的初学者,技术?何必这么现实,各个有个人的追求,有些人用linux本来就是为了爱好,而爱好是什么,个人有个人的看法,“just for fun”而已。从来也不要认为用过linux就了不起,水平高低的是人的差别,而不是操作系统。不说了,即使那本书的序言作者看到本文,也请不要生气,本人就那点浅薄的知识,侃侃而已。
第三点让我不爽的是,我看到的linux的内核源代码分析的书。想从中间找到某些有用的部分,所以翻了很多的书。我以前不想去看内核源代码,感觉没有必要,我用不着,而确实要花不少的时间。图书馆里面关于内核源码分析的书还是有几本的,但是有些书却被画记了许多东西,但基本上不是重点,只要有相关知识的人就可以看出,划记的东西根本不可能是重点,而是很平白的几个形容词;划记的部分大概就前面几节吧。这让我感觉到两点:第一,素质,图书馆的书居然可以在上面划这么多东西,这是大学生该做的吗?;第二点,不说了,大家猜吧,其实还是轻浮。

出大问题了!

这几天不断有FC5的用户向我询问2.6.16内核下无法编译drcom的问题,(注:drcom是宽带登陆客户端,这个drcom-client是linux下实现的开源版本,本人启动了一个q-drcom项目,做drcom的使用支持和图形界面的开发)。编译的错误很明显,是drcom内核模块中给常量inet_stream_ops赋值的原因,但是我自己不用Fc5,并且身边的机器也没有Fc5.我想吧,也许是fedora社区对内核进行更改了,最近比较忙,也不想管,因为其他的发行版本都没有反馈这个问题的。昨天下下来一个fedora5的rpm包,不过是2.6.15的。我的gentoo没有办法解rpm包,在linuxsir上fedora论坛里发贴请fc5的用户帮我把头文件发过来,很久都没有人回应。后来从网上找到一个脚本,可以利用gunzip这些普通命令什么的解rpm包。解开之后,查看那些patch,发现没有对那个头文件进行修改的,而2.6.15的原始内核也是没有象我想象的有修改。fc5下2.6.15内核编译错误的原因,是因为应用的patch-2.6.16的补丁。不过不知道为什么,解压内核补丁的bz2压缩包时出错,所以也没有去管了。我开始意识到,是否是2.6.16内核的原因,今天早上更新了portage之后,emerge了最新的2.6.16-r1内核,我去内核源码树里面去看那个头文件,gentoo里面的那两个量也被声明为常量了,那么是否linux的原始内核已经在这个地方做了修改了呢?于是去了kernel.org下了2.6.16版本的内核下来,一看,果然如我所想,做了修改。那么我的猜想也是对的,fc5中应用的2.6.15的内核发布比较玩,是加了各个补丁的内核,并且这个修改并入了2.6.16;而且inet_common.h这个头文件做修改的就这两行,都被声明了外部常量了。
extern const struct proto_ops           inet_stream_ops;
extern const struct proto_ops           inet_dgram_ops;


如果向drcom模块现在这样的方法,通过给inet_stream_ops赋值来达到改变发送的数据的方法,肯定是行不通的。而为这个改内核的那个头文件或者发布一个布丁,如果能编译运行的话,这也是为大家所不可接受的。在2.6.16版本中对内核进行的修改肯定是为某个原因,甚至有可能是安全方面的原因。现在我所想的是,好好读读这一部分代码,然后是否能有一个比较完美的方案,改动drcom模块本身,或者说确认不声明为常量对其他部分没有影响,而对内核打补丁。对于在drcom下生存的linux用户,也只有请稍微缓缓再升级内核到2.6.16了。我尽力,这几天把重心移到这个上面来,找到一个可以接受的方案。

opera blog has some wonderful improvement!

Ok,I see it!when I entered Chinese in the title of this blog,It turned to be unrecognizable before,but it works well now!Thank for the Opera blog!

Our deepest fear

一段让我震撼的话,南非前总统纳尔逊·罗利赫拉赫拉·曼德拉;
By Nelson Rolihlahla Mandela
-----------------
Our deepest fear is not that we are inadequate. Our deepest fear is that we are powerful beyond measure. It is our light, not our darkness that most frightens us. We ask ourselves, Who am I to be brilliant, gorgeous, talented, fabulous? Actually, who are you not to be? You are a child of God. Your playing small does not serve the world. There is nothing enlightened about shrinking so that other people won't feel insecure around you. We are all meant to shine, as children do. We were born to make manifest the glory of God that is within us. It is not just in some of us; it is in everyone. And as we let our own light shine, we unconsciously give other people permission to do the same. As we are liberated from our own fear, our presence automatically liberates others.

清华的镜像里面有ubuntu了

今天去清华的ftp里面去找点东西,在mirror里面发现有ubuntu了,这意味以后工作站的更新不用忍受几十k的慢速了,真是高兴啊。看到了清华有了ubuntu的镜像,我感觉到的是一种鼓舞。想到了,三年前买盗版的redhat光盘的情形,想起了两年前在清华的镜像里面发现好多linux发型版的欢喜,还有认识了,并且现在成为我的最爱的gentoo。那样的时刻我仍然记得。我突然想,如果我在两年前不知道linux,而到现在才知道,我是否会遗憾错过了这样的一片世界,让我欢喜,让我找到乐趣的世界?当然也许什么感觉都没有,就象身边大多数的同学一样,甚至不知道这些概念。不用说linux,即便就是计算机的很普通的一些概念都不清楚,知道的只是游戏和电影,或者我会把另外的一些东西当成乐趣。我不习惯虚度时光,没有目标的麻木生活会让我厌恶。我很享受,听着古典乐编程或是看文档的感觉,当然多数时候是为了逃离周围嘈杂的环境,所以我喜欢一个人在周末的时候呆在工作室,去享受属于我的那份宁静。

我的悲哀和遗憾

今天因为google一个开源项目上了某重点大学的主页,突然很奇怪的看到该大学的主页跟本校的布局简直一个样。我突然记起上个学期我给网络中心提的一个意见,我说你们的导航栏的源码里面还有那个某某大学的标题,然后他们告诉我说,领导让他们做成那个样子的,我当时也没有多想,只是想也许就拷个人家的导航栏吧,没有什么大不了的。但是今天,却让我感到羞耻!我虽然从来都是做网站或者其他项目要钱的,但是,如果是为校争光的东西,我想我分文不取,甚至耗费时间考试通不过交重修费我也愿意,并且相信还有其他的一些热血的同学跟我的想法一样。我可以说,我深爱着这个可以将来让我称之为母校的大学。今年,她要成功的晋级为大学了!然而有多少东西需要去改变呢,有多少东西需要去发展以让我们为之而骄傲呢?我不知道,在中国,很多本来好好的东西,如果一被官僚化了,形式化了就没有任何的意义了,只会留下令人作呕的躯壳!我有的时候会遗憾自己为什么高考会失误,然后考研也失败,或者根本是我能力的问题,我不善于给自己找借口说我本来可以。然而不管怎么样,她是我的母校!
可是当我在平常的时候,我不得不去想一些问题:
如果没有清华的镜像,那么我的gentoo不可能这样好的运行;
如果没有西安交大和上海交大的ubuntu源,我的工作站不可能升级的那么容易;
很多重点大学的bbs质量很高,我们的人在校外搞的一个bbs全是水贴和闲话,校内的没有;
我记得我在网络中心为校某官方网站部署了第一台linux服务器时,用java写的整个系统时,某老师说的微软和Asp是全球标准;
虽然我不是计算机系的人,但我看到了即便是计算机系的人很多因为工作不好找而只顾学习课本考研,基本的开发能力却丧失;
我为学校缺乏一个生机勃勃的研究型兴趣小组或者协会而悲哀,有很多所谓的协会和社团居然是靠什么素质拓展认证来吸引人去参加活动!实际的能力不比这个形式化的系统重要吗?
……
我搞不懂,我大四了,我要走了,也不想懂,只是到了现在仍然有那么一点的悲哀。
但是我会尽量留下一些东西:
1. 影响几个人,让我做的工作可以延续下去
2. 多留下些资料,系统的经验之谈,为启航网站或者说将来的linux协会做知识上的累积

需要自动挂载的工具吗?

在linux下有两种磁盘自动挂载工具可用,用gnome的,一般会选择gnome-volume-manager,其他系统的用户会用ivman,说实在的如果你用gnome的话,那么gnome-volume-manager无可挑剔,它和gnome和Nautilus配合的提供的功能非常的人性化,插入U盘,就会自动检测到,并且挂载,弹出文件夹。ivman也不错,但是需要一些设置。这些我都嫌麻烦,它们至少要运行几个daemon,dbus,hald,对于我这样的U盘次数用得不是很多的,其实很多人都用得不多。如果不用gnome,那么没有必要自己再搞一个,ivman个人觉得挺麻烦的,root用户运行,还是普通用户运行都不太好搞,所以我放弃它们了。今天准备用一下它们,是因为我的U盘从/dev/sda1上挂载不了,后来偶然发现我的U盘居然是/dev/sda这个设备,真是奇怪,没有见过这样的。所以能用命令挂载了,我想我就不需要它,我犯不着为了一个并不经常用的设备,来启动n个Daemon。如果我不是在启动时让它自动启动,那么到用时来启动比我用mount命令不会少。
mount -t vfat -o iocharset=cp936 /dev/sda
#仅我的U盘是这样的,其他人的是/dev/sda1

另外对于我这样的Fvwm,Rox用户其实可以让Fvwm,或者Rox来做。当点需要挂载到的文件夹时,Rox会自动挂载,退出时会提示是否卸载。而Fvwm就可以做一个按钮来实现上面的命令了。其实最好是在/etc/fstab里面加上一行,以后挂载就更方便了,这样也方便在Rox中来用。
 /dev/sda                /mnt/usb        vfat            noauto,noatime,rw,iocharset=cp936,user,umask=002  

那么以后只需要
mount /mnt/usb

就可以了。
我想对于非gnome用户,自动挂载工具是不太必要的,如果你坚持的话,那么随意,呵呵。

原来是没有装字体

换成了xorg7之后,发现几个终端都变得特别宽,特别是mrxvt过分,字符间隔也特别宽,开始找不到原因,今天从命令行启动mrxvt,提示说找不到Bitstream vera Sans Mono字体。难道是字体的原因,我只记得我很喜欢Bitstream vera Sans Mono的英文字体。从网上找到了了Bitstream vera familly的包,下载了,突然发现gentoo的portage里面其实有的。是media-fonts/ttf-bitstream-vera。xorg7默认是不装这个这个TTF字体包的。所以有人运用这个字体的升级到xorg7之后,会出点小问题,需要安装上这个字体,才可以让你的桌面跟以前一样pp。我现在用的中文字体是Vera Sans YuanTi,英文字体就是上面提到的BitStream-vera了。个人觉得很不错,下面贴urxvt的截图。是urxvt和mrxvt,urxvt支持utf-8,效果也非常的好,但是我不能用它登陆到远程的redhat服务器上去,提示说不认识urxvt-unicode终端,mrxvt也还不错,它支持多标签,但是不支持utf-8.两个结合就挺不错了。以前用urxvt和xterm,但是locale换回到gb2312之后,xterm不能显示中文了。所以还是把mrxvt找了回来。
December 2009
S M T W T F S
November 2009January 2010
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31