HOME / コンピュータTips / Solaris / IPSと開発 / パッケージ作成用開発環境の作成
Date: 2009/02/21 | | Tags: opensolaris, IPS, pkgbuild, spec, build, Software, compile, コンパイル, cbe, osd, osd-cbe, jds-cbe
IPSレポジトリ(独自でも、sourcejuicer用でも)に用意するためのコンパイル環境を、仮想マシンであっても良いので、Zoneを1つ用意するのがよいでしょう。
HOMEディレクトリに様々なファイルを設置するために、既存のHOMEで利用するよりは、仮想マシン上のHOMEで作ることをおすすめします。
下記は、Build用のZoneを作成したことを前提に記載しています。
ZONE名 | work-spec |
オペレータユーザ | osduser |
プロファイル | Primary Administrator |
ZFS | rpool/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は僕の趣味です
既にあるユーザをオペレーションユーザにしたい場合
既にあるユーザを利用する場合、オペレーションユーザに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
以後、オペレーションは、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
3か4が、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
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に関してをご覧ください。
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'
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に(私の用の)小細工をしてあります :)
適当に掘っておきます。
mkdir ~/work/
サンプルの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環境が必要であるならば、下記を参照してください。
特別gnome系のソースがいらない場合は、この中にある基本的なspecファイル用のincludeファイルがあります。これをコピーします。
cp ~/work/spec-files/include/*.inc ~/packages/SPECS/
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
これを、ログインスクリプトに書いておきましょう。
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しておくと良いでしょう。
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/