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 版だけの問題だとおもうのですが)
パッケージアーカイブの入ったリポジトリイメージをダウンロード
パッケージファイルは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=
# /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