2006年 4月 16日 日曜日
やっぱり Sun がスキ!
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 に変更を加えます。
- GATE としてワークスペース名を設定 ( ws-test )
- CODEMGR_WS にワークスペースのフルパス名を設定 (/opensolaris/ws-test).
- 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 開発者が現れることを期待したいと思います。
Posted at 08:00午後 4 16, 2006 by masahiko in Sun | 投稿されたコメント[0]