Solaris 11 Early Adopter でのパッケージのインストール

先日 Solaris11 Early Adoperがリリースされました。既存のコードが Solaris11 EA 上でビルド可能か確認しようとさっそくインストールしたのですが、pkg(1M) コマンドを使ったネットワーク経由での gcc や ヘッダファイル等のパッケージのインストールがエラーになってしまい困っておりました。

# pkg install developer/opensolaris/X
Creating Plan /               
pkg install: No matching version of developer/opensolaris/X can be installed:
  Reject:  pkg://solaris/developer/opensolaris/X@0.5.11,5.11-0.151:20101026T181446Z
  Reason:  All versions matching 'require' dependency pkg:/compatibility/ucb are rejected
    Reject:  pkg://solaris/compatibility/ucb@0.5.11,5.11-0.151.0.1:20101104T230637Z
    Reason:  This version is excluded by installed incorporation pkg://solaris/consolidation/osnet/osnet-incorporation@0.5.11,5.11-0.173.0.0.0.0.17656:20110826T144402Z

その事を twitter 上でつぶやいたところ @mayn_lum さんからローカルレポジトリからパッケージのインストールする方法を教えて頂き、さっそく試したところようやく必要なパッケージのインストールできたので、こちらに簡単な手順を紹介しておきます。(@mayn_lum さんいつもありがとうございます!)


なお、ネットワーク経由でのパッケージがインストール失敗する根本の原因(パッケージ名違い?)はわかっていません。
もしうまくいく方法がありましたら教えて下さい。(おそらくEA 版だけの問題だとおもうのですが)

Solaris 11 EA のローカルにパッケージのリポジトリを作成し集積サーバを起動する

パッケージアーカイブの入ったリポジトリイメージをダウンロード

パッケージファイルは2つの zip ファイルに分割して配布されているので Solaris11 EA のページ の「Oracle Solaris 11 Early Adopter Repository Image」という部分から以下の2つのリンクをクリックして、それぞれ sol-11-ea-repo-full-iso-a.zip と sol-11-ea-repo-full-iso-b.zip というファイルをダウンロードする。

 Download Part A SPARC, x86 (2 GB) 
 Download Part B SPARC, x86 (2 GB) 

ファイルの統合

ダウンロードした zip ファイルを解凍した後、cat(1M) コマンドで一つファイルに連結します。
連結後の ISO ファイルのサイズはだいたい 6.1GB ほどです。

$ unzip sol-11-ea-repo-full-iso-a.zip
$ unzip sol-11-ea-repo-full-iso-b.zip
$ cat sol-11-ea-repo-full-iso-a sol-11-ea-repo-full-iso-b > sol-11-ea-repo-full.iso

ISO ファイルをブロックデバイスに関連付け

パッケージのISOファイルの中身をこのあとの集積サーバーで利用するために、lofiadm(1M) コマンドを使って ISOファイルをブロックデバイスに関連付けします。
ここからは root 権限が必要です。

# /usr/sbin/lofiadm -a /repo/sol-11-ea-repo-full.iso /dev/lofi/1

ブロックデバイスをマウント

関連付けを行ったブロックデバイスをマウントします。
ここでは /mnt にマウントしていますが他もディレクトリでも大丈夫です。

# /usr/sbin/mount -F hsfs /dev/lofi/1 /mnt

集積サーバの設定

先ほどマウントしたリポジトリデータの場所を指定して Image Packaging System の集積サーバを設定します。
inst_root には先ほどマウントしたマウントポイント /mnt の下の repo というディレクトリを指定しています。もし /mnt 以外のところにマウントしている場合には inst_root=/repo という具合に指定します。

# /usr/sbin/svccfg -s application/pkg/server setprop pkg/inst_root=/mnt/repo
# /usr/sbin/svccfg -s application/pkg/server setprop pkg/readonly=true

集積サーバの起動

Image Packagin System の集積サーバを起動します。
起動には svcadm(1M) コマンドを使用します。これによって集積サーバはデフォルトで TCP ポート 80 番で接続を待機します。

# /usr/sbin/svcadm refresh application/pkg/server         
# /usr/sbin/svcadm enable application/pkg/server

パッケージ配布元の設定

pkg コマンドに配布元(パブリッシャー)の場所をセットします。
上記の通りに設定した場合には場所は http://localhost になります。

# pkg set-publisher -O http://localhost solaris

これで以降の pkg コマンドの実行時にはパッケージはローカルのパッケージから取得されるようになります。
私もこれで無事 gcc のインストールができました。


このエントリは基本的に下記の記述を参考に書いています。あわせてこちらもご参照下さい。
Oracle SolarisTM 11 Early Adopter Release Repository Image