作者:逆流的鱼
目前世界上最流行的两大社区包括Linux开发社区,OpenSolaris开发社区。OpenSolaris凭借其中一些优秀的技术(例如ZFS, DTRACE, ZONE)等,吸引越来越多人员参与进去,社区也正在不断发展和壮大。但是,在中国,由于语言问题,由于信息闭塞等问题,在开源界很少能听到我们中国程序 员的声音,甚至连Linux基金会也承认,中国对Linux内核的贡献太少。因此,为了让更多中国同行和中国在校学生参与开源领域的开发,方便他们很快熟 悉开发流程,便写了这篇介绍如何参加OpenSolaris开发社区开发的文章。
首先,我们应该明白参加开源社区开发的意义。
参与开源社区的开发,有很多好处。
第一,我们的编程能力和软件工程思想得到了很大的锻炼。
第二,感受到了开源的精神,为开源做出了贡献。
第三,有利于个人发展。
第四,不虚度光阴。
那么参与Sun公司的OpenSolaris开源社区,又有什么特别的意义呢?大家可能一提到Sun公司,首先联系到的就是大名鼎鼎的Java,以及 Sun公司糟糕的财务状况。Sun公司是一个以创新和工程师文化而著称的公司,它发明的东西和对计算机领域的贡献,远远不止Java。
Sun在计算机领域的创新与贡献:
1.TCP/IP,Sun的创始人之一和技术天才Bill Joy完成了对TCP/IP协议的实现,对计算机和互联网的发展起到了巨大的推动作用。
2.分页虚拟存储(同样是Bill Joy首先实现了现代操作系统的分页存储)
3.NFS网络文件系统(Sun公司早在1983年左右就推出了NFS文件系统,实现了计算机的网络共享)
4.ZFS首个128位文件系统(有了它,文件系统发生了革命性的改变,号称每个操作系统都想使用的文件系统,也被赞美为最后一个文件系统)
5.DTRACE(探测内核活动的利器)
6.VI编辑器(Unix和Linux程序员的最常用工具)
7.JAVA(几十亿部手机,互联网都在用它)
8.酷线程(CPU进入多线程,低能耗的绿色时代)
SUN目前的产品也非常齐全:
OpenSolaris,
Sparc CPU
MySQL
OpenOffice
Java
Netbean
Glassfish
基于ZFS的OpenStorage
xVM Virtual Box
Sun Ray
从上面,我们可以看出,Sun公司的技术的确不是吹的,更重要的是,Sun毫无保留的将自己的技术开源,供大家学习和研究。但是,Sun的生意却做得不怎 么好,经常亏损,甚至濒临倒闭和出卖的边缘。一方面,我们希望它能站起来,开源的世界不能没有Sun。另一方面,我想即使Sun倒闭了,但是它曾经发明的 技术,将会继续得到使用,继续得到发展。
所以,参加Sun的开源社区,拥抱Sun提供的创新技术和开源精神,是一件很有意义的事情。
那么,如何参加OpenSolaris社区开发呢?
1.在[url][/url]注册一个帐号,并加入你感兴趣并将要在该领域贡献代码的某个讨论组
([url]http://opensolaris.org/os/discussions/[/url])和社区([url][/url])
2.签署并邮寄Sun贡献者协议(Sun Contributor Agreement,简称SCA协议)
此协议表明Sun和你同时拥有对你贡献出的代码的版权。
下载并打印SCA协议书([url][/url])
填写协议书并在协议书上签名
将该协议书邮寄到下面地址:
Sun Microsystems, Inc
17 Network Circle
Menlo Park, CA 94025
United States
Attention: Linda Bernal
如果你觉得邮寄速度很慢,可以传真到+1 650-745-3307
或者将数字扫描照片(扫描照片要求必须达到3 megapixels/180 dpi.)发送到:
[email]contrib-faxes(at)sun.com[/email].
随后,你将收到一个带有编号(此编号将在后面你提交代码时候有用)的确认信
关于协议书的更多问题,可参考:[url][/url]
3.花一定时间学习OS开发的流程和原理
你应该具备C语言基础,学会如何开发Solaris内核的基础知识,并学会调试内核程序的基本技能。建议花一定时间学习《writing device drivers》。
4.从[url][/url] 或 [url][/url]发布一个你发现的Bug或查找一个已经存在的Bug,这个Bug就是 下面你要着手解决的问题。在发Bug之前,检查一下是否已经有相关此Bug的一些讨论。在你想解决某一个特定Bug之前,请在申请发起人表(
[url][/url])查询一下该 Bug是否已经有人负责了。如果有人负责了,你可以和该Bug的发起人联系要求负责此Bug或者查找其它无人负责的Bug。
5.确定你要解决的Bug属于Solaris系统的哪个组成部分(consolidation),例如是文件系统,网络驱动,还是声卡驱动部分等,确定编码位置。
6.安装Solaris系统,搭建项目编译环境
6.1安装Solaris系统
编译OpenSolaris内核需要基于Solaris Express Community Edition,所以需要从SUN的网站上下载该系统的CD或DVD格式的安装镜像,然后将镜像刻录在光盘上,利用安装光盘安装Solaris Express系统。该操作系统镜像可以在[url]http:///os/downloads/[/url]下 载,在安装该系统之前,最好到[url]http: ///os/downloads/on/solex_cr_known_issues/[/url]上看看一些已 知的问题。
6.2安装编译工具与源代码管理工具
下载sunstudio10-DATE.PLATFORM.tar.bz2(http: ///os/community/tools/sun_studio_tools/sun_studio_12_tools/)。 确保 /opt目录有900M空余空间。可通过下面的命令查询空余空间大小:
$ df -klh /opt
Filesystem size used avail capacity Mounted on
/dev/dsk/c1t0d0s0 7.9G 3.8G 4.0G 50% /
如果大于900M,则可继续安装:
$ su
Password:
# cd /opt
# bzip2 -dc /var/tmp/sunstudio10-20050614.sparc.tar.bz2 | tar xf -
安装完SunStudio后,继续安装ON相关的编译工具SUNWonbld-DATE.PLATFORM.tar.bz2 和SVR4 补丁([url]current/[/url]):
$ cd /var/tmp
$ bzip2 -dc SUNWonbld-DATE.PLATFORM.tar.bz2 | tar xf -
$ su
Password:
# pkgadd -d onbld SUNWonbld
安装后,我们接着安装源代码管理工具SUNWmercurial([url][/url])
# pkg install SUNWmercurial
6.3创建项目工程,编译源代码
下载OpenSolaris源代码。代码分两部分,一部分是开源部分,一部分是未开源部分的二进制文件(这部分是很少的一部分,由一些第三方厂家为Solaris提供的代码而他们又不愿意提供自己的代码开源),两部分都必须下载才能完成编译。
可以通过两个途径来下载OpenSolaris源码:从[url][/url]上下载,或通过hg命令从OpenSolaris的源码库里面下载最新的源代码。
Hg通过ssh管道连接到OpenSolaris的源码库。通过hg clone命令可以获得一份OpenSolaris源代码的拷贝:
$ hg clone ssh://anon@hg.opensolaris.org/hg/onnv/onnv-gate
OpenSolaris系统中(不仅仅是内核)还包含了一些尚未公开源代码的部分,这部分是以二进制代码的形式公开的,所以需要下载该文件。这些文件被压缩在一个tar文件中,通过
[url][/url]可以下载该tar文件。
我们假设 /aux0/testws 作为当前工程所在目录。
首先进入/aux0/testws ,解压源文件和闭源的二进制包:
$ mkdir /aux0/testws
$ cd /aux0/testws
$ bzip2 -dc opensolaris-src-DATE.tar.bz2 | tar xf -
$ bzip2 -dc opensolaris-closed-bins-DATE.PLATFORM.tar.gz | tar xf -
源代码将解压到usr/src 而闭源的二进制文件将解压到closed/root_PLATFORM (如 closed/root_i386或者closed/root_sparc))。
下面,我们来完成基本的编译。
首先创建编译环境配置文件:
首先将opensolaris.sh文件拷贝到/aux0/testws/下。
$ cp /aux0/testws/usr/src/tools/env/opensolaris.sh /aux0/testws
设置/opt/onbld/bin添加到PATH环境变量中
修改opensolaris.sh:
设置GATE为testws
设置CODEMGR_WS 为/aux0/testws
设置STAFFER为你的登陆名或你的邮件地址,编译完后将向此地址发送编译结果报告日志
配置VERSION.为uname -v
最后可以编译了:
$ cd /aux0/testws
$ nightly ./opensolaris.sh &
编译时间会根据编译机器的性能而不一样,大概持续几个小时,你可以运行下面的命令来监视编译输出。
$ tail -f /aux0/testws/log/nightly.log
如果不想编译整个内核,而只是想编译其中一部分,可以先运行bldenv命令,然后切换到某模块下运行dmake all。例如:
$ cd /aux0/testws
$ bldenv ./opensolaris.sh
$ cd usr/src/cmd/vi
$ dmake all
7.为自己申请一个发起人(sponsor)。可发送Email到[email]request-sponsor(at)opensolaris.org[/email]申请发起人,或者直接在论坛发贴申请。信件内容应包括下面的内容:
* Bug/RFE ID
* 概要
* 你的全名
* Sun代码贡献者协议上的编号
8.如果你修改了代码中供其它程序调用的接口,你还必须发布一个被称为Architecture
Review Committee (ARC)的案例。常见的ARC类型如下:
* PSARC – 系统平台软件
* LSARC – 分层软件,中间件,Web服务
* FWARC – 固件
* CLARC - Sun Cluster.
9.开始编程,按照自己的思路和想法修改代码
在某个领域编写或修改代码,你应该熟悉相关的理论知识,查找一些相关资料,参与其中的一些讨论,如果是写驱动,应该拿到相关的硬件规范(specification或者datasheet)。
10.检查代码的C风格是否符合OpenSolaris内核的代码风格
$ hg pbchk
运行上面的命令之后如果没有任何警告信息输出,则表示代码是符合规范的,否则需要逐个修改。
11.编译并测试代码
为了测试代码,我们可能将自己的系统更新到最新编译后的系统,可以采用一种叫BFU的方式以很快的速度更新到最新的系统。
# mkdir /var/tmp/bfu
# cd /var/tmp/bfu
# bzip2 -dc /path/to/opensolaris-bfu-LATEST.sparc.tar.bz2 | tar xf -
# /opt/onbld/bin/bfu /var/tmp/bfu/archives-LATEST/sparc
bfu# acr
bfu# reboot
为了更加方便的测试某个模块,你也可以直接拷贝编译好的模块二进制文件直接替换原系统中的文件,重新启动机器来进行测试。
12.如果测试通过,创建并上传webrev
$ webrev
Webrev将你修改的代码和原来的代码做一个diff,反映出你对文件所做的改动。将webrev生成的文件夹(此文件夹就在项目的根目录/aux0/testws下)放在一个可供其它人(如代码审核专家)浏览的地方。
13.选择发起人或者该领域的专家做代码审核(code review)
14.如果代码审核者提出了代码存在的不足或Bug,则需对代码进行再次修改,回到10点重新执行,直到代码审核者同意提交代码。
15.等待发起人最后提交代码,整个过程结束(putback)。
阅读(1247) | 评论(0) | 转发(0) |