HOME / コンピュータTips / Solaris / IPSと開発 / パッケージ作成用開発環境の作成

Date: 2009/02/21 |  このエントリーをはてなブックマークに追加  |  Tags: opensolaris, IPS, pkgbuild, spec, build, Software, compile, コンパイル, cbe, osd, osd-cbe, jds-cbe

IPSレポジトリ用パッケージの標準開発環境(OSD CBE(OpenSolaris Desktop Common Build Environment))のビルドマシンの用意

IPSレポジトリ(独自でも、sourcejuicer用でも)に用意するためのコンパイル環境を、仮想マシンであっても良いので、Zoneを1つ用意するのがよいでしょう。

HOMEディレクトリに様々なファイルを設置するために、既存のHOMEで利用するよりは、仮想マシン上のHOMEで作ることをおすすめします。

下記は、Build用のZoneを作成したことを前提に記載しています。

オペレータユーザの作成

ZONE名work-spec
オペレータユーザosduser
プロファイルPrimary Administrator
ZFSrpool/zones/work-spec/ROOT/export/home/osduser
HOME/export/home/osduser
SHELL/bin/zsh
初期パスワードosduser ((私が配っているVirtualBoxのイメージの場合))
pfexec zfs create -o mountpoint=/export rpool/zones/work-spec/ROOT/export
pfexec zfs create -p rpool/zones/work-spec/ROOT/export/home/osduser
pfexec pkg install -v SUNWzsh
pfexec useradd -m -d /export/home/osduser -s /bin/zsh -P 'Primary Administrator,Software Installation' osduser
pfexec chown osduser:other /export/home/osduser
pfexec passwd osduser

zshは僕の趣味です

テスト

  1. osduser 権限でログインする
  2. pfexec cat /etc/shadowで表示することを確認する

既にあるユーザをオペレーションユーザにしたい場合

既にあるユーザを利用する場合、オペレーションユーザにPrimary Administratorの権限をつけておきます。この作業をした後は、シェルの再起動をする必要があります。

pfexec usermod -P 'Primary Administrator,Software Installation' ユーザ名

反映させるため、利用しているシェルの起動しなおしをします。

以後、上記で作成したユーザでコマンドを実行します。

事前に入れて置いた方が良い物のインストール

contribの追加

pfexec pkg set-publisher -O http://pkg.opensolaris.org/contrib contrib
pfexec pkg install -v \
  SUNWgtar \
  SUNWxcu4 \
  SUNWcar \
  SUNWkvm \
  SUNWwget \
  SUNWpkgcmds \
  SUNWrsync

開発環境のインストール

pfexec pkg install -v \
 ss-dev sunstudio12u1\
 gcc-dev \
 SUNWgnome-common-devel \
 SUNWperl-xml-parser \
 SUNWgnome-xml-root SUNWgnome-xml SUNWgnome-xml-share \
 SUNWgpch SUNWsprot SUNWhea SUNWsfwhea SUNWxwinc SUNWxorg-headers SUNWgnu-coreutils SUNWgnu-diffutils

上記のモジュールの一部は、下記に示すcbe-installである程度は勝手にインストールはされるのですが、全部が全部はいるわけではないので、敢えて指定してあります。

物によってコンパイラを選ぶソフトがあるので、コンパイラは一通り入れておきます。

従来、SUN Studioは、/opt/SUNWsproにインストールされておりました。いくつかのソフトは自分がコンパイルされた環境を覚えており、拡張モジュールのコンパイルに自分と同じコンパイラを要求します。そこで、下記の様にシンボリックリンクを張っておきます。

pfexec ln -s /opt/sunstudio12.1 /opt/SUNWspro

OSD CBE(OpenSolaris Desktop Common Build Environment)のインストール

OSD(OpenSolaris Desktop)CBE(Common Build Environment)は、昔、JDS(Java Desktop System)CBE(Common Build Environment)と言われておりました。所々でjdsという言葉が出てきますが、過渡的な物だと考えてください。

以後、オペレーションは、osduserでログインしておきます。

OpenSolarisでは、1.7.0-rc1以降を利用します。1.6系はSXCE用になるので、動作させるのはちょっと手間がかかります。

mkdir ~/tmp && cd ~/tmp
wget \
http://dlc.sun.com/osol/jds/downloads/cbe/test/desktop-cbe-1.7.0-rc1-x86.tar.bz2
gtar jxvf desktop-cbe-1.7.0-rc1-x86.tar.bz2
cd desktop-cbe-1.7.0-rc1
./cbe-install
Desktop Common Build Environment (CBE) Installer version 1.7.0-rc1
Using "pkg" packaging system
Checking for required packages...
All required packages are installed.
Starting from pkgbuild 1.1.0 (CBE 1.5) there is no system-wide
build directory (%_topdir), instead, each user has their own.
The default directory is $HOME/packages.
If you wish to use a different build directory, you can define it
in $HOME/.pkgbuildmacros as follows:

%_topdir /path/to/my/build/area

Would you like to do this now? [no]: 

ENTERを押す。

The default topdir (/export/home/osduser/packages) will be used
Locating compilers...

The following compilers were found on your system:
1 - GNU gcc 3.4.3 (3) in /usr/bin
2 - GNU gcc 3.4.3 (3) in /usr/sfw/bin
3 - Sun Studio Express 5.10 (Ceres) in /opt/SUNWspro/bin
4 - Sun Studio Express 5.10 (Ceres) in /usr/bin
5 - Sun Studio Express 5.10 (Ceres) in /opt/SunStudioExpress/bin
Would you like to configure more compilers for use with the Desktop CBE? [no]: 

ENTERを押す。

The following compilers were found on your system:
1 - GNU gcc 3.4.3 (3) in /usr/bin
2 - GNU gcc 3.4.3 (3) in /usr/sfw/bin
3 - Sun Studio Express 5.10 (Ceres) in /opt/SUNWspro/bin
4 - Sun Studio Express 5.10 (Ceres) in /usr/bin
5 - Sun Studio Express 5.10 (Ceres) in /opt/SunStudioExpress/bin

Please select the default compiler [5]: 4

34が、Stuio12u1で、5はStudioExpressです。StudioExpressはβ版的な扱いなので、ここでは指定しません。

コンパイラ(開発環境)は、gcc-dev、ss-dev(StudioExpress)、Studio12、StudioExpressなどが選べますが、ここで選んだもの以外でも、specファイル内で明記しておけば、利用は可能です。

OpenSolarisはON(OS+NET)がStudio12でコンパイルされているため、これを拡張するモジュール群はONと同じコンパイラを要求することがあります。トラブルを避けるためには、デフォルトをStudio12にしておくとよいのですが、12のインストールはちょっと面倒なので、ここでは簡単に利用出来る12u1を利用します。

The Desktop CBE includes tools for building GNOME, KDE and/or SFE packages
It also includes some optional tools. Please select the tools you wish
to install.
 
Would you like install the tools for GNOME? [yes]: 
Would you like install the tools for KDE? [yes]: 
Would you like install the tools for SFE? [yes]:

The following tools are optional: rsync cvs
Would you like install the optional tools? [yes]: 
Package SFpkgbuild is already installed.
Would you like uninstall it? [yes]: 
Always uninstall previously installed packages? [yes]: 

このへんはひたすらENTERを連打。

Installation of <SFpkgbuild> was successful.
Looking for package SUNWaconf
... already installed
Looking for package SUNWgnu-automake-110 SUNWgnu-automake-19
... already installed
Looking for package SUNWbison
... already installed
Looking for package SUNWgnu-coreutils
... already installed
Looking for package SUNWgnu-diffutils
... already installed
Looking for package SUNWflexlex
... already installed
Looking for package SUNWlibtool
... already installed
Looking for package SUNWgm4
... already installed
Looking for package SUNWgmake
... already installed
Looking for package SUNWsvn
... already installed
Installing package CBEant

Installation of <CBEant> was successful.
Installing package CBEcmake

Installation of <CBEcmake> was successful.
Installing package CBEcvs

Installation of <CBEcvs> was successful.
Installing package CBEgettext

Installation of <CBEgettext> was successful.
Installing package CBEgawk

Installation of <CBEgawk> was successful.
Installing package CBEsed

Installation of <CBEsed> was successful.
Installing package CBErsync

Installation of <CBErsync> was successful.
Installing package CBEyasm

Installation of <CBEyasm> was successful.
Building CBEenv
INFO: Copying %use'd or %include'd spec files to SPECS directory
INFO: Processing spec files
pkgparam: ERROR: unable to locate parameter information for "SUNWcar"
pkgparam: ERROR: unable to locate parameter information for "SUNWkvm"
INFO: Installing package CBEenv

Summary:

                         package |      status | details
---------------------------------+-------------+-------------------------------
                          CBEenv |   INSTALLED | 
CBE setup complete
Run
. /opt/dtbld/bin/env.sh [environment]
or
source /opt/dtbld/bin/env.csh [environment]
depending on your shell, to use this build environment.
You can also run /opt/dtbld/bin/env.sh [environment] to start subshell.
Installation log saved in /tmp/desktop-cbe-install-2010-03-14-21:28.log

pkgbuildのアップデート

ods-cbeに含まれているpkgbuildは古いため、IPSに対応していません。そこで最新版に入れ替えます。

1.3.1をアンインストール

pfexec pkgrm SFpkgbuild

Source Juicer上のバージョンに入れ替えるため、juicerを追加します。

pfexec pkg set-publisher -O http://jucr.opensolaris.org/pending jucr.opensolaris.org

インストールします。

pfexec pkg install -v pkgbuild

本当の最新版

本当の最新版は、http://sourceforge.net/projects/pkgbuild/ からダウンロード出来ます。

普通にconfigure && make install出来ますが、インストールPATHには注意してください。

ただし、手動でのコンパイルが必須です。

Source Juicerが追加出来なかった人は、Source Juicerに関してをご覧ください。

aclocal周りの設定

dirlistへ追加

CBE m4関連のファイルが見つからないと、コンパイル時にACLOCALでエラーが出ることがあります。/usr/share/aclocal/dirlistに、/opt/dtbld/share/aclocalがあるか、確認する必要があります。

正しい例( /usr/share/aclocal/dirlist )

/usr/sfw/share/aclocal
/opt/dtbld/share/aclocal

正しくなければ、追加します。

pfexec sh -c 'echo /opt/dtbld/share/aclocal >> /usr/share/aclocal/dirlist'

aclocalの名前解決

OpenSolarisは、aclocalという名で実行できないので、シンボリックリンクで回避します。

pfexec ln -s /usr/bin/aclocal-1.10 /usr/bin/aclocal

ビルド用ユーザ環境の設定

cbe-setupによって、~osduser/packages/以下に、ワークディレクトリが作られているはずです。

packages/
|-- BUILD
|   `-- CBEenv-1.7.0-rc1
|-- PKGMAPS
|   |-- copyright
|   |-- depend
|   |   `-- CBEenv.depend
|   |-- pkginfo
|   |   |-- CBEenv-src.pkginfo
|   |   `-- CBEenv.pkginfo
|   |-- proto
|   |   |-- CBEenv-src.proto
|   |   `-- CBEenv.proto
|   `-- scripts
|       `-- CBEenv.preremove
|-- PKGS
|   `-- CBEenv
|       |-- install
|       |   |-- depend
|       |   `-- preremove
|       |-- pkginfo
|       |-- pkgmap
|       `-- reloc
|           `-- bin
|               |-- env.csh
|               |-- env.sh
|               |-- env_include.sh
|               |-- gendiff
|               `-- ld-wrapper
|-- SOURCES
|   |-- env.csh
|   |-- env.sh
|   |-- env_include.sh
|   |-- gendiff
|   `-- ld-wrapper
|-- SPECS
|   |-- CBE.inc
|   `-- default-depend.inc
`-- SPKGS
    `-- CBEenv-src
        |-- pkginfo
        |-- pkgmap
        `-- reloc
            `-- share
                `-- src
                    `-- CBEenv-1.7.0-rc1
                        |-- SOURCES
                        |   |-- env.csh
                        |   |-- env.sh
                        |   |-- env_include.sh
                        |   |-- gendiff
                        |   `-- ld-wrapper
                        `-- SPECS
                            |-- CBE.inc
                            |-- CBEenv.spec
                            `-- default-depend.inc

環境変数の設定

cbe-setupの最後に書かれているメッセージの通り、下記の通り設定すると、環境が読み込まれます。

sh系

. /opt/dtbld/bin/env.sh

csh系

source /opt/dtbld/bin/env.csh

osduserは、専用のユーザなので、/opt/dtbld/bin/env_include.shを投入しておきます。

echo . /opt/dtbld/bin/env_include.sh >> ~/.zshrc
echo init_dt_cbe  >> ~/.zshrc

私が配布しているVirtualBox環境では、.zshrcに(私の用の)小細工をしてあります :)

workディレクトリの作成

適当に掘っておきます。

mkdir ~/work/

サンプルのspecの取得

サンプルのspecファイルを取得します。

spec-filesのincludeファイルと、いろいろなincludeファイルを取得します。下記の例ではtrunkを引っ張ってきます。

ダウンロード(レポジトリから取得なので多少時間はかかります)

cd ~/work/
svn co svn+ssh://anon@svn.opensolaris.org/svn/jds/spec-files/trunk spec-files

gnomeなどのbuild環境が必要であるならば、下記を参照してください。

  • http://hub.opensolaris.org/bin/view/Project+jds/building
    • 4. OSD Build Sources

特別gnome系のソースがいらない場合は、この中にある基本的なspecファイル用のincludeファイルがあります。これをコピーします。

cp ~/work/spec-files/include/*.inc ~/packages/SPECS/

pkg/serverの起動

pfexec svcadm enable pkg/server
pfexec pkg set-publisher -O http://localhost:80 mypkgs

参考

ワーク用のIPSサーバがローカルホストに無い場合は、次の様に設定します。書きは例です。

PKGBUILD_IPS_SERVER=http://192.168.199.xx/ ; export PKGBUILD_IPS_SERVER

これを、ログインスクリプトに書いておきましょう。

参考サイト

  • http://blogs.sun.com/mattman/entry/how_to_build_jds_on
  • http://opensolaris.org/os/project/jds/contributing/building/

Source Juicerに関して

レポジトリが追加出来ないとき

Source Juicerは割とメンテナンスに入るので、次のエラーが出た時には10分程度、待ちましょう。

pkg: 0/1 catalogs successfully updated:
    Could not retrieve catalog from 'juicer'
HTTPError code: 503 - Service Temporarily Unavailable

追加に失敗するとき

次の様なエラーがでて、追加に失敗することがあります。

pkg set-publisher: 
One or more of the repository origin(s) listed below contains package data for jucr.opensolaris.org; not juicer:

http://jucr.opensolaris.org/pending/

This is either because one of the repository origins is not valid for this publisher, or because the list of known publishers retrieved from the repository origin does not match the client.

snv_13xあたりから、publisherの追加の時、発行元名(PUBLISHER名)をチェックする様になりました。PUBLISHERが公開している名前で追加する様にしてください。source juicerの場合、jucr.opensolaris.orgです。

レポジトリのリフレッシュ

このレポジトリは開発用なので、「毎日」何かがカレントで書き換わります。

そこで、定期的に次のようにして、レポジトリのメタ情報のリフレッシュを頻繁にすると良いでしょう。

pfexec pkg refresh jucr.opensolaris.org

レポジトリのdisable

このレポジトリは開発用なので、時折、利用に芳しくない状態があります。

そこで、普段は--disableしておくと良いでしょう。

pfexec pkg set-publisher --disable jucr.opensolaris.org

必要なときだけ、enableにします。

pfexec pkg set-publisher --enable jucr.opensolaris.org

一覧を見たいときは次の様にします。

pkg publisher -a 
PUBLISHER                             TYPE     STATUS   URI
opensolaris.org          (preferred)  origin   online   http://pkg.opensolaris.org/release/
jucr.opensolaris.org     (disabled)   origin   online   http://jucr.opensolaris.org/pending/
mypkgs                                origin   online   http://localhost:80/

参考

  • 環境作成用のboot strap スクリプト
    • http://tom.bn-ulm.de/~tom/sfe/bootstrap-sfe-latest-os20nn