IllumosBuild
目次
Table of Contents |
OpenIndiana で illumos をbuild する方法 : †
参考記事 Building illumos
準備 †
お約束ですが、まずシステムを最新状態にアップデートします。
$ sudo pkg update
Update には、けっこう時間がかかりますがアップデートがおわったら、リブートします。
$ sudo reboot
リブート後は最新環境の BEで起動されています。
OpenIndiana 上では build-essential パッケージを追加でインストールします。さらに最新 build に必要な GCC7 と Python 3.5 を追加でインストールします。
$ sudo pkg install build-essential runtime/python-35 developer/gcc-7
次に build のためのワークスペースを作成します。 OpenIndiana の build では /code が使われているので /code にします。
$ sudo zfs create -o mountpoint=/code rpool/code
/code はユーザでRW可能なプロパティに変更しておきます。
次に /code の下に illumos のソースコードを展開します。
$ cd /code $ git clone https://github.com/illumos/illumos-gate.git
展開すると /code/illumos-gate ディレクトリが作成されます。これが実際の build workspace となります。
クローズドバイナリの準備(オプション) †
最新の OpenIndiana もしくは OmniOS(r151016 or later)では、/opt/onbld/closed に必要なクローズドバイナリはインストールされているので ON_CLOSED_BINS 環境変数の設定だけでインストールは必要ありません。
必要な場合は、以下の方法でダウンロードして build workspace に展開します。
$ cd /code/illumos-gate $ wget -c \ https://download.joyent.com/pub/build/illumos/on-closed-bins.i386.tar.bz2 \ https://download.joyent.com/pub/build/illumos/on-closed-bins-nd.i386.tar.bz2 $ tar xjvpf on-closed-bins.i386.tar.bz2 $ tar xjvpf on-closed-bins-nd.i386.tar.bz2
Build の環境設定 †
Build の環境設定はソースにある illumos.sh を編集して行います。
$ cd /code/illumos-gate $ cp usr/src/tools/env/illumos.sh . $ vi illumos.sh
OpenIdiana の場合は、下記を書き足します。
# # Set a package version number which is greater than the current OpenIndiana # build number. Note that ONNV_BUILDNUM is ignored if PKGVERS_BRANCH is set: # export PKGVERS_BRANCH=9999.99.0.0 # # Set to current version of Perl shipped with OpenIndiana: # export PERL_VERSION="5.22" export PERL_PKGVERS="-522" export BUILDPERL64="#" # # If you are building on the latest OpenIndiana (2017-03-07 and later), use # OpenJDK 8: # export BLD_JAVA_8= # # IPS packages published at 2019-08-08 and later ship only Python 3.5 modules, # so you have to use this Python version to build illumos tools # if your pkg:/package/pkg version is 0.5.11-2019.0.0.5521 or later. # export BUILDPY2TOOLS="#" # # Use the copy of the closed binaries that comes with the "build-essential" # package: # export ON_CLOSED_BINS="/opt/onbld/closed"
あと .bashrc や .profile に export CODEMGR_WS=/code/illumos-gate
入れておきます。
Build の実行 †
build する際は build command を screen や tmux から起動するといいでしょう。 フル build を開始するには
$ cd /code/illumos-gate $ time ./usr/src/tools/scripts/nightly illumos.sh
ログは log/nightly.log から確認できます。
$ tail -F /code/illumos-gate/log/nightly.log
エラーやワーニングを確認するには
$ tail -F /code/illumos-gate/log/nightly.log | grep -5 '(error|warning).*: '
build が完了すると log/latest/mail_msg にサマリーが書かれます。 もし mail_msg に submitting a patch の内容が書かれていれば build は成功しています。
Incremental build (差分 build)の実行 †
nightly build が成功したあと、コードの変更分だけの追加しての build を行うには -i オプションを付けます
$ cd /code/illumos-gate $ time ./usr/src/tools/scripts/nightly -i illumos.sh
※なお、patch を当てる場合は、incremental build でなく full build を行う必要があります。
Build した環境のインストール †
Build 時にNIGHTLY_OPTIONS 環境変数で、 DEBUG Build か non-DEBUG build かと指定できます。
Build で作成されたパッケージはwotkspace の以下にあります。
packages/i386/nightly for a DEBUG build
packages/i386/nightly-nd for a non-DEBUG build
作成されたパッケージは、onu コマンドを使ってインストールします。
DEBUG build の例
$ sudo /code/illumos-gate/usr/src/tools/proto/root_i386-nd/opt/onbld/bin/onu \ -t "$(date -u +nightly-%Y%m%d-%H%MZ)" \ -d "/code/illumos-gate/packages/i386/nightly"
OmniOS で illumos-gate を build する方法 †
参考記事 Building illumos-gate on OmniOS
OmniOS の build では /build が使われているので /build にします。
$ pfexec pkg install illumos-tools $ pfexec zfs create -o mountpoint=/build rpool/build $ cd /build $ git clone https://github.com/illumos/illumos-gate $ cd illumos-gate $ ./usr/src/tools/scripts/nightly /opt/onbld/env/omnios-illumos-gate
illumos-gate の build だけでしたらこれで済むはずですが、まだ build が成功したことはありません。
omuni utility を使った build の方法が、下記で紹介されてますが 参考記事 Building OmniOS
現在は illumos-omnios という illumos-gate から folk された github のソースが有効ではなくなったので
build スクリプト omuni の実行中に ソース展開で失敗してしまいます。 どうやら
参考記事 Building illumos
の OmuniOS 用の方法で build するのが最新情報のようです。
準備 †
$ sudo pkg update
の後、再起動後に以下を実行し、OmniOS 上の build で必要なツールをインストールします。
$ sudo pkg install pkg:/developer/illumos-tools
Build の環境設定 †
OpenIndiana 上での build と違うのは、以下の内容を illumos.sh に追加します。
# Set to the current perl version (this is correct for OmniOS r151028) export PERL_VERSION=5.28 export PERL_ARCH=i86pc-solaris-thread-multi-64int export PERL_PKGVERS= # Set to current python3 version (this is correct for OmniOS r151028) export PYTHON3=/usr/bin/python3.5 export TOOLS_PYTHON=$PYTHON3 export SPRO_ROOT=/opt/sunstudio12.1 export SPRO_VROOT="$SPRO_ROOT" export ONLY_LINT_DEFS="-I${SPRO_ROOT}/sunstudio12.1/prod/include/lint" export ON_CLOSED_BINS=/opt/onbld/closed export __GNUC= export GNUC_ROOT=/opt/gcc-7/ export PRIMARY_CC=gcc7,/opt/gcc-7/bin/gcc,gnu export PRIMARY_CCC=gcc7,/opt/gcc-7/bin/g++,gnu export SHADOW_CCS=gcc4,/opt/gcc-4.4.4/bin/gcc,gnu export SHADOW_CCCS=gcc4,/opt/gcc-4.4.4/bin/g++,gnu SMATCHBIN=$CODEMGR_WS/usr/src/tools/proto/root_$MACH-nd/opt/onbld/bin/$MACH/smatch export SHADOW_CCS="$SHADOW_CCS smatch,$SMATCHBIN,smatch" # This will set ONNV_BUILDNUM to match the release on which you are building, allowing ONU. export ONNV_BUILDNUM=`grep '^VERSION=r' /etc/os-release | cut -c10-` export PKGVERS_BRANCH=$ONNV_BUILDNUM.0
追加で以下の IPPとSMB printing option を無効にしておきます。
# export ENABLE_IPP_PRINTING= # export ENABLE_SMB_PRINTING=
このあとの build 方法は OpenIndiana と共通です。