OpenSolaris是SUN于2005年创建的一个开源项目,通过创建OpenSolaris开源社区,SUN希望后续的Solaris产品基于OpenSolaris开源项目。OpenSolaris的社区网站是www.opensolaris.org,该网站公布了OpenSolaris社区的最新信息。同时,OpenSolaris discuss邮件组是讨论OpenSolaris开源项目的官方邮件列表。这篇文章作为一个step by step的guide,介绍如何从源文件开始创建自己的OpenSolaris系统。
OpenSolaris社区发布了一些基于OpenSolaris的操作系统,它们包括:
Solaris Express Community Edition - 代号为Nevada,是SUN为OpenSolaris开发者发布的二进制格式的操作系统,该系统包括由最新的OpenSolaris源代码和尚未公开的技术编译而成,尚未经过测试,没有任何技术支持。该系统每两个礼拜的礼拜五更新。
Solaris Express Developer Edition - 该系统是经过测试的开发版本系统,供免费免费使用,可以从http://developers.sun.com/solarisdevex/上获得技术支持。该版本每三到四个月更新一次。
BeleniX - 基于OpenSolaris源码的LiveCD。
marTux - 基于SPARC处理器的OpenSolaris发布。
NexentaOS - 基于GNU的OpenSolaris,该系统集成了OpenSolaris内核,和开源软件(OSS)应用程序。
Schillix - 为x86,x64和EM64T发布的OpenSolaris LiveCD。
编译OpenSolaris内核需要基于Solaris Express Community Edition,所以需要从SUN的网站上下载该系统的CD或DVD格式的安装镜像,然后将镜像刻录在光盘上,利用安装光盘安装Solaris Express系统。该操作系统镜像可以在http://www.opensolaris.org/os/downloads/下载,在安装该系统之前,最好到http://www.opensolaris.org/os/downloads/on/solex_cr_known_issues/上看看一些已知的问题。
可以通过两个途径来下载OpenSolaris源码:从http://dlc.sun.com/osol/on/downloads/上下载,或通过hg命令从OpenSolaris的源码库里面下载最新的源代码。
Hg通过ssh管道连接到OpenSolaris的源码库,所以首先需要设置ssh配置文件,该配置文件位于~/.ssh/config中:
# cat ~/.ssh/config
Host *.opensolaris.org
ProxyCommand /usr/lib/ssh/ssh-socks5-proxy-connect -h proxy.jf.intel.com %h %p
Compression yes
设置好ssh管道,后通过hg clone命令可以获得一份OpenSolaris源代码的拷贝:
[solaris-devx@b65]hg clone ssh://[email protected]/hg/onnv/onnv-gate
destination directory: onnv-gate
requesting all changes
adding changesets
adding manifests
adding file changes
added 3811 changesets with 70433 changes to 43748 files
40000 files updated, 0 files merged, 0 files removed, 0 files unresolved
当然,如果你不是OpenSolaris开发队伍中的一员,你只是想自己动手编译一下自己的OpenSolaris内核,那http://dlc.sun.com/osol/on/downloads/是最好的选择。
OpenSolaris系统中(不仅仅是内核)还包含了一些尚未公开源代码的部分,这部分是以二进制代码的形式公开的,所以需要下载该文件。这些文件被压缩在一个tar文件中,通过http://dlc.sun.com/osol/on/downloads/可以下载该tar文件。
Onbld工具提供了nightly,bldenv等有用的命令,这些命令是编译OpenSolaris必不可少的工具。
到目前为止,我们已经已经有了下面的一些必要的文件了:
SUNWonbld-DATE.PLATFORM.tar.bz2
on-src-DATE.tar.bz2
on-closed-bins-DATE.PLATFORM.tar.bz2
sunstudio11-ii-
DATE-
PLATFORM.tar.bz2
首先,查看/opt目录下,是否存在SUNWspro目录:
[solaris-devx@~]ls /opt
SUNWappserver SUNWspro netbeans-5.5_mars staroffice8
SUNWmlib netbeans-5.5 onbld
该目录是SUN Studio的安装目录,如果该目录已经存在,则安装操作系统时,你已经安装了SUN Studio,否则你需要用下面的命令来安装SUN Studio:
# cd /opt
# bzcat DOWNLOAD-DIRECTORY/sunstudio11-ii-DATE-PLATFORM.tar.bz2 | /bin/tar xf –
接下来安装onbld工具:
# bzcat SUNWonbld-
# pkgadd -d SUNWonbld-
注意,onbld工具是以安装包的形式下载的,所以需要超级用户权限通过pkgadd工具安装,卸载的时候需要使用pkdrm命令。
源代码和closed二进制文件安装位置是由你来确定的,但它们必须在同一个目录下:
[solaris-devx@b65]bzcat on-src-DATE.tar.bz2 | tar xf -
[solaris-devx@b65]bzcat on-closed-bins-DATE.PLATFORM.tar.bz2 | tar xf –
[solaris-devx@b65]cp usr/src/tools/env/opensolaris.sh .
[solaris-devx@b65]vi opensolaris.sh
Opensolaris.sh中保存了编译OpenSolaris的环境变量,将该文件中的一些变量改为适当值:
GATE=b65; export GATE
CODEMGR_WS="/export/home/user/$GATE"; export CODEMGR_WS
STAFFER="user"; export STAFFER
VERSION="$GATE-$STAFFER";export VERSION
最后使用nightly编译OpenSolaris:
[solaris-devx@b63]nightly opensolaris.sh &
[solaris-devx@b63]tail -f log/nightly.log
编译过程中所产生的log信息被保存在log/nightly.log文件中,可以使用tail工具来实事查看log信息。Nightly编译时间会很长,笔者的P4服务器使用了大概4个小时的时间来完成所有编译。当编译完成后,在log/log.date/mail_msg文件中保存一份邮件,告知改编译的结果,通过该邮件也会发送到用户邮箱中(默认为用户在OpenSolaris的帐户,如果编辑~/.forward文件,将转发邮箱地址放在该文件中,则该邮件会发送到指定邮箱)。成功的编译会在编译目录下生成archives目录,并在该目录下保存结果:
[solaris-devx@nightly]pwd
/export/home/user/build/b63/archives/i386/nightly
[solaris-devx@nightly]ls
conflict_resolution.gz generic.root i86pc.boot
generic.kernel generic.sbin i86pc.root
generic.lib generic.usr i86pc.usr
该文章总结了从源代码编译OpenSolaris内核的步骤。关键字:OpenSolaris,Kernel,SUN Studio,nightly。