Building OpenSolaris : やっぱり Sun がスキ! やっぱり Sun がスキ!

やっぱり Sun がスキ!

http://blogs.sun.com/yappri/date/20060416 2006年 4月 16日 日曜日

Building OpenSolaris

OpenSolaris をビルドしてみよう

Solaris はオープンソースになりました、と言われてもまだ実感の湧かない方も居られるのではないでしょうか。「それがどうしたの?」とおっしゃる貴方、「関係ないよ」と思っている皆さん。これからは「参加の時代」です。とっても簡単ですから、まずはビルドに挑戦してみてはいかがでしょうか。

用意するもの
  インターネット接続環境
  CD-R 書き込み環境
  CD-R 未使用メディア4枚
    # Solaris Express インストールメディアとして使用
  Solaris Express の動作する SPARC または x86/x64 システム
    # ターゲットシステム、ビルド環境兼用
    # 4GB 程度の空きディスク領域を用意

OpenSolaris Websiteへのアクセス

用意ができたら Web browser を使ってまずは http://www.opensolaris.org へアクセスしてください。OpenSolaris の総本山となるサイトです。ここから、ページ右上の CDROM (Download アイコン) をクリックし、さらにリンク先ページ中ほどの "Operating System / Networking (ON)" をクリックすると、作業手順をまとめたページに辿り着きます (http://www.opensolaris.org/os/downloads/on/)。"How do I start?" 以下、Step 3a の方へ進みます。


Solaris Express のインストール

ビルド環境 兼 ターゲットシステムのベースとなる Solaris Express: Community Release をダウンロードし CD-R を作成してください。これを使ってターゲットシステムのインストールを行います。

# cat /etc/release
                           Solaris Nevada snv_34 SPARC
           Copyright 2006 Sun Microsystems, Inc.  All Rights Reserved.
                        Use is subject to license terms.
                           Assembled 22 February 2006

インストールが完了したら、ビルド作業用ディレクトリを作成します。場所は任意ですが今回は以下のように作成します。

  /opensolaris/  - OpenSolaris 用 Top
    + ws-test/   - ビルドワークスペース
    + download/  - ファイルダウンロード用

ファイルの入手

ビルドツールとソースコードをダウンロードします。コンパイラには Sun Studio 10 を使います。先ほどの作業手順 (http://www.opensolaris.org/os/downloads/on/) の Step 3a 以下 "Sun Studio 10" をクリックし (http://www.opensolaris.org/os/community/tools/sun_studio_tools/) OpenSolaris用 Sun Studio 10 のページへ行きます。2つの Option がありますが、今回は Option 1 を選択します。"Download install image"からダウンロードできる install image には OpenSolaris のビルドに必要なパッケージ、パッチ、ライセンスが全て揃っているため非常に便利です。

# pwd
/opensolaris/download
# ls
sunstudio10-ii-20050912-sol-sparc.tar.bz2   ... [1]

さらに、先の作業手順に従って OpenSolaris Download Center ( http://dlc.sun.com/osol/on/downloads/current/ ) から、以下必要なファイルを入手します。

    * ビルドツール
          o  SUNWonbld-DATE.PLATFORM.tar.bz2    ...[2]
    * SPARCの場合は以下の追加ビルドツールも必要
          o  opensolaris-build-extras-DATE.sparc.tar.bz2  ...[3]
    * ソースファイル
          o  on-src-DATE.tar.bz2               ......[4]
    * クローズドバイナリ ( ソース非公開部分 )
          o  on-closed-bins-DATE.PLATFORM.tar.bz2   ...[5]

ビルドツールのインストール

Solaris Express をインストールしたシステムに、ビルド環境を構築します。 まず、Sun Studio 10 アーカイブ [1] を /opt ディレクトリ配下に展開します。

  # cd /opt
  # bzcat /opensolaris/download/sunstudio10-ii-20050912-sol-sparc.tar.bz2 | /bin/tar -xf -

  (SPARC の場合のみさらに) Sun Studio 10 追加バイナリ [3] をインストール

  # cd /opt
  # bzcat /opensolaris/download/opensolaris-build-extras-20050614.sparc.tar.bz2 | /bin/tar -xf - 

次に PATH と MANPATH シェル変数を設定します (何度も設定するのが面倒な場合は .cshrc や .profile を更新してください)。

  csh の場合:
  % setenv PATH /opt/SUNWspro/bin:$PATH
  % setenv MANPATH /opt/SUNWspro/man:$MANPATH

  sh (または ksh) の場合:
  % PATH=/opt/SUNWspro/bin:$PATH ; export PATH
  % MANPATH=/opt/SUNWspro/man:$MANPATH ; export MANPATH

その他のビルドツール [2] もインストールします。

 # cd /opensolaris/download
 # bzip2 -dc SUNWonbld-20060228.sparc.tar.bz2 | tar xf -
 # pkgadd -d . SUNWonbld

また .login や .profile を編集し、PATH シェル変数に /opt/onbld/bin を追加しておいてください。


ソースの展開

続きは Developer's Reference ページ (http://www.opensolaris.org/os/community/onnv/devref_toc/) にある "1.3.3 Building from Source" の手順を参照しながら進めます。 ワークスペース /opensolaris/ws-test へ移動し、先にダウンロードしたソース [4] とバイナリ [5] を展開します。

# cd  /opensolaris/ws-test

# bzip2 -dc ../download/on-src-20060228.tar.bz2 | tar xf -
# bzip2 -dc ../download/on-closed-bins-20060228.sparc.tar.bz2 | tar xf -

その後、環境ファイルのテンプレートを /opensolaris 直下にコピーし・・・

  # cd /opensolaris/ws-test
  # cp ./usr/src/tools/env/opensolaris.sh .

エディターを使ってコピーした opensolaris.sh に変更を加えます。

  1. GATE としてワークスペース名を設定 ( ws-test )
  2. CODEMGR_WS にワークスペースのフルパス名を設定 (/opensolaris/ws-test).
  3. STAFFER に自分のログイン名を設定
  GATE=ws-test;    export GATE
  ...
  CODEMGR_WS="/opensolaris/$GATE";    export CODEMGR_WS
  ...
  STAFFER=root;    export STAFFER

ビルドの実行

ワークスペースディレクトリ /opensolaris/ws-test にて次のようにビルドを行います。

  # cd /opensolaris/ws-test
  # nightly ./opensolaris.sh &

Sun Fire V240 (2 x UltraSPARC IIIi 1.28GHz) ではビルド完了までに 2時間20分49秒かかりました。ビルド中のログ出力は /opensolaris/ws-test/log/nightly.log に記録されますのでこちらを確認してください。コマンドラインには何も出力されません。

参考までに /opensolaris/ws-test/log/nightly.log は以下のような出力となります。

install -s -d -m 755 /opensolaris/ws-test/usr/src/tools/proto/opt/onbld/man
install -s -d -m 755 /opensolaris/ws-test/usr/src/tools/proto/opt/onbld/man/man1
/export/home/NVBLD/ws-test/usr/src/tools/cw
/opt/SUNWspro/bin/cc -xO3 -xarch=v8 -xspace -W0,-Lt -W2,-Rcond_elim -Xa  -xildoff 
-errtags=yes -errwarn=%all -erroff=E_EMPTY_TRANSLATION_UNIT -erroff=E_STATEMENT_NO
T_REACHED -xc99=%none -Wd,-xsafe=unboundsym -v -D_TS_ERRNO -DDEFAULT_CC_DIR='"/opt
/SUNWspro/bin"' -DDEFAULT_GCC_DIR='"/usr/sfw/bin"' -DDEFAULT_CPLUSPLUS_DIR='"/opt/
SUNWspro/bin"' -DDEFAULT_GPLUSPLUS_DIR='"/usr/sfw/bin"' -M/opensolaris/ws-test/usr
/src/cmd/mapfile_noexstk  -o cw cw.c 
/usr/bin/rm -f /opensolaris/ws-test/usr/src/tools/proto/opt/onbld/bin/sparc/cw; in
stall -s -m 0555 -f /opensolaris/ws-test/usr/src/tools/proto/opt/onbld/bin/sparc cw
/export/home/NVBLD/ws-test/usr/src/tools/stabs
/export/home/NVBLD/ws-test/usr/src/tools/stabs/sparc
jws50 --> 1 job
/opensolaris/ws-test/usr/src/tools/proto/opt/onbld/bin/sparc/cw -_cc -xO3 -xarch=v8
 -xspace -W0,-Lt -W2,-Rcond_elim -Xa  -xildoff -errtags=yes -errwarn=%all -erroff=
E_EMPTY_TRANSLATION_UNIT -erroff=E_STATEMENT_NOT_REACHED -xc99=%none -Wd,-xsafe=un
boundsym -v -D_TS_ERRNO -c -I.. -o main.o -c ../main.c
jws50 --> 2 jobs
/opensolaris/ws-test/usr/src/tools/proto/opt/onbld/bin/sparc/cw -_cc -xO3 -xarch=
v8 -xspace -W0,-Lt -W2,-Rcond_elim -Xa  -xildoff -errtags=yes -errwarn=%all -erro
ff=E_EMPTY_TRANSLATION_UNIT -erroff=E_STATEMENT_NOT_REACHED -xc99=%none -Wd,-xsafe
=unboundsym -v -D_TS_ERRNO -c -I.. -o stabs.o -c ../stabs.c
jws50 --> 3 jobs
/opensolaris/ws-test/usr/src/tools/proto/opt/onbld/bin/sparc/cw -_cc -xO3 -xarch=
v8 -xspace -W0,-Lt -W2,-Rcond_elim -Xa  -xildoff -errtags=yes -errwarn=%all -erro
ff=E_EMPTY_TRANSLATION_UNIT -erroff=E_STATEMENT_NOT_REACHED -xc99=%none -Wd,-xsafe
=unboundsym -v -D_TS_ERRNO -c -I.. -o forth.o -c ../forth.c
jws50 --> 4 jobs

prstat コマンドで確認すると、dmake が沢山動いているのがわかります。よく活動している割に TIME が増えませんが、これは個々の dmake の処理が短く次々と入れ替わっているためです。

jws50# prstat

   PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP       
148594 root     3608K 2944K run     31    0   0:00:00 0.6% dmake/1
153444 root     3368K 2704K run     31    0   0:00:00 0.3% dmake/1
100900 root       15M 4008K sleep   59    0   0:18:02 0.2% vtsk/5
154230 root     3608K 2944K run     22    0   0:00:00 0.1% dmake/1
154254 root     3632K 2968K run     21    0   0:00:00 0.1% dmake/1
154260 root     3616K 2952K run     29    0   0:00:00 0.1% dmake/1
154236 root     3632K 2968K run     22    0   0:00:00 0.1% dmake/1
154259 root     3512K 2848K run     31    0   0:00:00 0.1% dmake/1
154223 root     3480K 2816K sleep   51    0   0:00:00 0.1% dmake/1
153763 root     5208K 3480K cpu1    59    0   0:00:00 0.1% prstat/1
154279 root     3440K 2776K cpu0    31    0   0:00:00 0.1% dmake/1
100565 root     7064K 4048K sleep   59    0   0:20:40 0.1% intrd/1
154160 root     3232K 2568K sleep   52    0   0:00:00 0.1% dmake/1
154264 root     3240K 2576K run     29    0   0:00:00 0.1% dmake/1
150984 root     3536K 2872K sleep   49    0   0:00:00 0.1% dmake/1
152845 root     3504K 2840K sleep   59    0   0:00:00 0.1% dmake/1
100120 root     5032K 3184K sleep   59    0   0:00:40 0.1% nscd/26
127167 root     1192K  904K sleep   59    0   0:00:00 0.1% tee/1
152940 root     3296K 2632K sleep   59    0   0:00:00 0.0% dmake/1
153077 root     3064K 2400K sleep   59    0   0:00:00 0.0% dmake/1
152865 root     1488K 1168K sleep   54    0   0:00:00 0.0% sh/1
154281 root     1480K 1160K run     29    0   0:00:00 0.0% sh/1
154256 root     1480K 1160K sleep   41    0   0:00:00 0.0% sh/1
154269 root     1480K 1160K run     31    0   0:00:00 0.0% sh/1
Total: 110 processes, 221 lwps, load averages: 12.38, 7.10, 3.14

vmstat をみると cpu がフル稼働しているのを確認できます。

jws50# vmstat 2
 kthr      memory            page            disk          faults      cpu
 r b w   swap  free  re  mf pi po fr de sr s0 s3 -- --   in   sy   cs us sy id
 0 0 0 2342904 1494752 2 903 1  0  0  0  0 11  7  0  0  371 1206  264  9  2 89
 7 0 0 2291464 1399368 748 8882 24 0 0 0 0 80  0  0  0  773 17816 874 55 45  0
 13 0 0 2276688 1386568 748 8860 36 0 0 0 0 89 0  0  0  775 17715 875 54 46  0
 10 0 0 2284328 1393072 757 8883 20 0 0 0 0 67 0  0  0  682 17990 847 55 45  0
 11 0 0 2282200 1390856 741 8754 24 0 0 0 0 89 0  0  0  759 17693 872 55 45  0
 7 0 0 2278328 1387688 710 8652 24 0 0 0 0 88  0  0  0  808 17394 912 55 45  0

disk の活動状況です。

jws50# iostat -zxn 2
                    extended device statistics              
    r/s    w/s   kr/s   kw/s wait actv wsvc_t asvc_t  %w  %b device
   11.0    0.3 2786.6    1.4  0.0  0.2    0.1   14.1   0   9 c0t1d0
    7.2    0.0 1838.9    0.0  0.0  0.2    0.1   24.2   0  10 sd3
                    extended device statistics              
    r/s    w/s   kr/s   kw/s wait actv wsvc_t asvc_t  %w  %b device
   30.1  154.6  122.5 1443.4  0.0  0.7    0.0    3.7   1  38 c0t1d0
                    extended device statistics              
    r/s    w/s   kr/s   kw/s wait actv wsvc_t asvc_t  %w  %b device
   20.5  173.1   61.0 1383.1  0.0  0.6    0.0    3.2   1  30 c0t1d0
                    extended device statistics              
    r/s    w/s   kr/s   kw/s wait actv wsvc_t asvc_t  %w  %b device
   26.5  174.4   76.5 1403.2  0.0  0.9    0.0    4.4   1  34 c0t1d0
                    extended device statistics              
    r/s    w/s   kr/s   kw/s wait actv wsvc_t asvc_t  %w  %b device
   28.0  208.5   87.5 1926.2  0.0  0.7    0.0    3.1   1  39 c0t1d0
                    extended device statistics              
    r/s    w/s   kr/s   kw/s wait actv wsvc_t asvc_t  %w  %b device
   22.0  320.0   73.0 3118.9  0.0  1.9    0.0    5.6   1  58 c0t1d0

ビルドしたバイナリのインストール

ビルドが無事完了したら、ビルドに使ったシステムにインストールしてみます。Developer's Reference ページ (http://www.opensolaris.org/os/community/onnv/devref_toc/) の "5.3 Using BFU to Install ON" を参照しながら進めます。

まず以下のようにシェル変数を追加しておきます。

  # setenv  FASTFS  /opt/onbld/bin/`uname -p`/fastfs
  # setenv  BFULD  /opt/onbld/bin/`uname -p`/bfuld
  # setenv  GZIPBIN  /usr/bin/gzip

後は bfu コマンドにバイナリのディレクトリを指定し実行するだけです。bfu コマンドのフルパスは /opt/onbld/bin/bfu となります (ビルドツールのインストールで PATH 変数を追加しているためフルパス指定は不要です)。

# bfu /opensolaris/ws-test/archives/`uname -p`/nightly

後はシステムをリブートしてください。再起動後は新しい OpenSolaris が動作しているはずです。

# sync
# reboot
....
....

# uname -a
SunOS ginger 5.11 ws-test sun4u sparc SUNW,Sun-Fire-V240

uname コマンドで表示されるバージョンが ws-test になっていれば成功です。

いかがでしたでしょうか。実際に動作するソースコードは、緊急パッチの作成、APIのより深い理解に役立つだけでなく、開発者以外の方もログメッセージの意味の理解や、Dtrace を使った性能チューニング/トラブルシューティングなど大いに役立つことと思います。さらに今後、皆さんのなかから1人でも多く OpenSolaris 開発者が現れることを期待したいと思います。

投稿されたコメント:

コメント
  • HTML文法 不許可