[BKM]编译OpenSolaris系统

和所有的开源软件一样,你可以从网络上下载OpenSolaris的源代码,然后根据自己的需求对源代码进行修改,并使用编译工具将源代码编译成可以update系统的archive文件,然后对系统进行update。下面介绍如何下载源代码,建立编译环境,以及如何编译和更新系统。本文认为读者已经安装了最新的Nevedaonnv_b71)。具体安装过程,参见“Solaris系统安装指南

下载源代码

可以从下面的website下载各种版本的OpenSolaris源代码。

 

http://dlc.sun.com/osol/on/downloads/

 

[BKM]编译OpenSolaris系统_第1张图片

对于在x86平台上的编译,需要下载如下文件:

ON Source – OpenSolaris系统的源代码文件包

ON Specific Build Tools 编译OpenSolaris系统的一些辅助工具

ON Binary-Only Components OpenSolaris中尚未开源的部分,通过二进制文件的方式进行发布,这里包含debugnone-debug两种,可以根据实际情况选择其一。

OpenSolaris使用Mercurialhttp://www.genunix.org/wiki/index.php/Mercurial)作为源代码的管理工具,所以可以通过hg命令,从OpenSolaris的源代码库里面获得最新的源代码。

首先,需要建立Socks Tunnel

 

# cat ~/.ssh/config

Host *.opensolaris.org

ProxyCommand /usr/lib/ssh/ssh-socks5-proxy-connect -h proxy02.xx.xxxxx.com %h %p

Compression yes

 

OpenSolaris的源代码库中获取源代码:

 

bash-3.00# hg clone ssh://[email protected]/hg/onnv/onnv-gate

bash-3.00# cd onnv-gate

bash-3.00# hg tip

changeset:   4896:ff3edba9ce8c

tag:         tip

user:        jw149990

date:        Sun Aug 19 18:53:09 2007 -0700

summary:     6594084 fixing of 6591973 could cause system panic.

bash-3.00# hg tags

tip                             4896:ff3edba9ce8c

onnv_71                         4814:57cc010c0779

onnv_70                         4709:dc10a713d1a0

onnv_69                         4621:77407f8b6bb2

onnv_68                         4541:62ca1e3cb5d3

...lots of display...

bash-3.00# hg update -C onnv_71

544 files updated, 0 files merged, 2011 files removed, 0 files unresolved

hug update只是针对本地的数据库,要使本地使用最新的源代码目录树,使用如下命令:

bash-3.00# hg pull -u

 

Hg仅仅下载或更新了OpenSolaris的源代码,仍然需要到上面的网站上下载closed binaryonbld工具。

下载并安装编译器

x86平台上推荐使用SunStudio作为OpenSolaris的编译器。OpenSolaris上最新的SunStudio的版本为12,但OpenSolaris的编译暂时并未很好的支持12,所以需要使用SunStudio 11OpenSolaris Express Develop Edition默认安装了SunStudio 12,可以将SunStudio12卸载掉,然后重新安装SunStudio11,但笔者经过几次试验后,发现卸载SunStudio 12并不能完全卸干净,所以暂时推荐不要安装Develop Edition,而是安装Solaris ExpressSolaris Express没有默认安装SunStudio,需要到网站上下载SunStudio 11。下载SunStudio 11的入口地址为:

http://www.opensolaris.org/os/community/tools/sun_studio_tools/sun_studio_11_tools/

目前该网站上只提供binary形式的SunStudiopackage形式将在以后release。安装binary形式的SunStudio

l         下载sunstudio11-ii-20070202-sol-x86.tar.bz2文件到本地,比如/var/tmp

l         bash-3.00# cd /opt

l         bash-3.00# bzcat /var/tmp/ sunstudio11-ii-20070202-sol-x86.tar.bz2 | /bin/tar -xf –

l         设置shell的环境变量,如何使用csh
% setenv PATH [installpath]/bin:$PATH
% setenv MANPATH [installpath]/man:$MANPATH
如果使用shbashksh
$ PATH=[installpath]/bin:$PATH ; export PATH
$ MANPATH=[installpath]/man:$MANPATH ; export MANPATH
当然你可以将环境变量的设置放在~/.bash_profile中,这样每次用户登陆时,环境变量的设置都自动完成。

安装onbld工具

Onbld的安装文件已经在上面的步骤中下载了,也可以直接到http://dlc.sun.com/osol/on/downloads/current/ 下载。下面安装该工具:

 

# cd /export/home/fs1

# bzcat SUNWonbld.i386.tar.bz2 | tar xf –

# pkgadd –d onbld

 

Onbld工具安装在/opt/onbld目录下。更改PATH变量,使/opt/onbld/bin包含其中:

 

# export PATH=$PATH:/opt/onbld/bin

 

安装close binary文件

如前所说,OpenSolaris系统中没有开源的部分通过close binary的方式发布,可以在http://dlc.sun.com/osol/on/downloads/current/上下载最新的close binary文件。close binary文件分为debugnon-debug两种版本,默认我们安装debug版本,使用不同版本的close binary文件,编译参数会有所不同,详细内容在下面会有描述。

 

# cd /export/onnv-gate

# bzcat /export/home/fs1/on-closed-bins.i386.tar.bz2 | tar xf –

 

Close binary被解压缩在closed目录下。

编辑环境脚本opensolaris.sh

# cd onnv-gate

# cp usr/src/tools/env/opensolaris.sh .

# vi opensolaris.sh

 

绝大部分的环境变量的设置是不需要改变的,除了下面这些:

 

GATE=onnv-gate; export GATE

CODEMGR_WS="/export/home/araj/work/b59/$GATE"; export CODEMGR_WS

STAFFER="my_idsid"; export STAFFER

VERSION="$GATE-$STAFFER";export VERSION

 

对于每个环境变量,opensolaris.sh文件中都做了详细的注释。默认的环境变量设置为编译debug版本的系统,对于non-debug版本(对应的close binary文件为on-closed-bins-nd.i386.tar.bz2),需要去除-F, -D标志。详细参见opensolaris.sh中的注释。

 

变量MAKEFLAGS=k,表明nightly将尽可能的做(编译)更多,直到遇到比较致命的错误导致编译无法进行;而如果没有k这个参数,则make一旦遇到问题,就会停止下来。一般在开发过程中,我们不需要k选项,这样可以很快定位到发生问题的地方。

使用nightly编译

Nightly会编译整个OpenSolaris系统,并生成可以BFU系统的archives文件。一般刚刚check out完源码或在check in源码之前,都需要使用nightly进行一次编译,以保证源码的统一性。Nightly需要很长时间来完成编译,在笔者的core 2 3.0G系统上(2G内存)大概需要2个多小时。

 

# cd onnv-gate

# nightly opensolaris.sh &

# tail –f log/nightly.log

 

Nightly的输出文件被定向到log/nightly.log中,通过tail命令可以查看nightly的输出。

编译onbld tools

上面我们直接从网上下载并安装了onbld工具,下面我们用最新的源代码来编译和安装该工具:

 

[osol@onnv-gate] bldenv -d opensolaris.sh

Build type   is  DEBUG

RELEASE      is

VERSION      is  onnv-gate

RELEASE_DATE is

The top-level 'setup' target is available to build headers and tools.

Using /bin/bash as shell.

[osol@onnv-gate] cd usr/src/tools

[osol@onnv-gate] dmake install

.... lots of spew...

[osol@onnv-gate] exit

[osol@onnv-gate] bldenv -t -d opensolaris.sh

 

运行bldenv后,一个新的shell会被fork出来,并在新的shell中应用opensolaris.sh中的环境变量,所以需要先通过exit退出,然后重新使用bldenv生成一个新的shell,然后编译其他部分的代码。编译完的onbld存放在usr/src/tools/proto/opt/onbld目录下。

编译完后,也可以更改opensolaris.sh中的环境变量ONBLD_TOOLS,使onbld的目录指向usr/src/tools/proto/opt/onbld/目录。

Bldenv有几个重要的参数:

-d: 建立可debug builds,默认的为non-debug builds

-t: 创建使用usr/src/tools目录下工具的环境,上面的命令中就是使用该参数使新编译的onbld生效。

编译OpenSolaris内核

OpenSolaris内核源代码存放在usr/src/uts目录下,和编译onbld tools一样,首先需要使用bldenv创建一个使用适当参数的shell

 

# cd /export/onnv-gate

# bldenv –d opensolaris.sh

# cd usr/src/uts

# dmake all

 

内核编译的make有很多有用的target

defdefault编译

all:编译所有

install:安装内核

install_h:安装内核头文件

clean:删除编译产生的obj文件

clobber:相当于Linux内核编译的mrprober,让内核源代码回到最初状态

modlistlist modules

lint:查看代码中是否有危险性的代码,比如指针没有赋值就使用,等等。

 

有两种方法来安装刚才编译好的内核,其一:

 

# dmake install

 

这种方法将生成的所有内核所需要的文件存放在onnv-gate/proto/root_i386下:

另一种方法:

 

bash-3.00# Install -G kernel.foo -k i86pc

 

bash-3.00# Install -G kernel.foo -k i86pc –o obj

来编译一个non-debug版本的内核。该命令在/tmp/Install.root/下创建一个Install.i86pc.tar文件包含了编译结果。在根目录下解压缩Install.i86pc.tar文件,并修改/boot/grub/menu.list,加上新编译的内核的boot项:

 

#---------- ADDED BY BOOTADM - DO NOT EDIT ----------

title Solaris Express Community Edition snv_69 X86

kernel$ /platform/i86pc/kernel/$ISADIR/unix

module$ /platform/i86pc/$ISADIR/boot_archive

#---------------------END BOOTADM--------------------

#---------- ADDED BY BOOTADM - DO NOT EDIT ----------

title Solaris failsafe

kernel /boot/platform/i86pc/kernel/unix -s

module /boot/x86.miniroot-safe

#---------------------END BOOTADM--------------------

#---------- ADDED BY Cap-Eye-Install------- ----------

title kernel.foo

kernel$ /platform/i86pc/kernel.foo/$ISADIR/unix

module$ /platform/i86pc/$ISADIR/boot_archive

#---------------------END BOOTADM--------------------

 

运行:

 

# bootadm update-archive

# reboot

 

Reboot会自动运行bootadm,如果bootadm没有被运行的话。

Build kernel easy step

$ cd

$ bldenv opensolaris.sh

$ cd usr/src

$ make setup   #setup the development environment

$ make uts    #build kernel

$ cd pkgdefs; make all    #pkgdefs

$ cd lib; make install      #lib

$ cd cmd; make all       #cmd

$ cd ucblib; make install   #ucblib

$ cd ucbcmd; make all    #ucbcmd

BFU

 

待续。。。 。。。

 

你可能感兴趣的:([BKM]编译OpenSolaris系统)