OpenIndianaにSmartOSのパッケージを流用する
お久しぶりです。完全に記事の執筆をサボっていましたが、Gehirn Newで1番投稿数の多い社員としてのプライドは捨てられないと思いまして、数週間ぶりに投稿することにしました。みんなもっと記事書こうよ!>社員(俺が暇なだけとか言わない)。
さて、ついにやってしまいました。記事のタイトル。もうタイトルだけでドン引きですよね。誰得記事なんでしょうか。今まで、内容はニッチでもタイトルだけは穏やかに、という考えでタイトルをつけていたのですが、今回は内容があまりにニッチすぎて、(よく考えたのですが)ゆるいタイトルをつけることができませんでした。ここにお詫び申し上げます。
目標
未だについてこられていない読者をさらに置いてけぼりにして解説を始めてしまいます。
今回は例としてgcc 4.7
のインストールをして、Node.js
をビルドしてみます。というのも実はOpenIndianaの公式リポジトリのgcc
のバージョンは4.4
止まりで、少し残念なのです。しかし、SmartOSのリポジトリにはバージョン4.7
のgcc
があるので、ぜひともこれを使いたいわけです。
前提知識
というわけで早速流用したいのですが、そもそもSmartOSのパッケージ管理システムはOpenIndiana標準のものとは違い、pkgin
というものなのです。つまりこのpkgin
をはじめにインストールしないといけないのです。(pkgin
はpkgsrc
のバイナリパッケージマネージャです)
また、無事pkgin
を導入できてもたくさんのハマリポイントがあるので、こちらにも注意が必要です。具体的なハマリポイントについては順を追って解説します。
作業
pkgsrcの導入
ではまずpkgin
をインストールします。SmartOSの公式サイトを参考に、次のコマンドを実行します。
# cd /
# curl -k http://pkgsrc.joyent.com/packages/SmartOS/bootstrap/bootstrap-2013Q1-x86_64.tar.gz | gzcat | tar -xf -
すると/opt
以下あたりにいろいろ展開されます。
次に、PATH
の設定を変更します。以下の行を.bashrc
などに追記してください。
PATH=/opt/local/bin/:/opt/local/sbin/:$PATH
再読み込みも忘れずに。
# source ~/.bashrc
するとpkgin
関連のコマンドが使えるようになります。ここでパッケージデータベースの再構築とアップデートをしておきます。
# pkg_admin rebuild
# pkgin -y up
以上で、pkgin
の導入は終わりです。
ハマりポイント1(pkg_alternativesのインストール)
ここでさっそくハマリポイントです。
pkgin
をインストールしただけでは一部のパッケージ(gcc
など)をインストールしても、コマンドのパスが通りません。これはpkg_alternatives
というパッケージをインストールすることで解決します。
# pkgin install pkg_alternatives-1.6
gccのインストール
pkgin
を導入できたので、お次はgcc
のインストールです。
次のようにコマンドを入力します。
# pkgin install gcc47
バイナリインストールなので割とダウンロードに時間がかかりますが、気長に待ちましょう。SmartOSのリポジトリは日本国外にあるので、比較的遅いです。
ハマりポイント2(依存ファイルのインストール)
ここでまたハマりポイントです。
また、gcc
をインストールしても、依存しているヘッダーファイルなどが見つからずにビルドできない例があります。基本的なヘッダーファイルなどは標準のパッケージマネージャからインストールしておきましょう。
# pkg install pkg:/system/header
# pkg install pkg:/system/library/math/header-math
# pkg install pkg:/developer/library/lint
これくらいあればとりあえずNode.js
のビルドはできます。
gmakeのインストール
Node.js
のMakefile
はGNU make
の書式なので、gmake
の導入が必要です。
以下のコマンドでインストールします。
# pkgin install gmake
Node.jsのビルド
ビルドツールのインストールが済んだので、Node.js
のビルドをします。
まずはtarballのダウンロードです。同時に解凍もしてしまいたいので、以下のコマンドを入力します。
# curl -k http://nodejs.org/dist/v0.10.9/node-v0.10.9.tar.gz | gzcat | tar xf -
あとは普通のNode.js
のビルドです。ただし、make
ではなく、gmake
なので注意です。
# cd node-v0.10.9
# ./configure
# gmake
# gmake install
というわけでNode.js
のインストールができました。めでたしめでたし!
まとめ
SmartOSがOpenIndianaの親戚ということもあって、割とスムーズに導入することができました。今回はglobal zoneに導入しましたが、同様の方法でnon-global zoneにも導入できます。また、pkgin
を導入したnon-global zoneをテンプレートとして作っておき、cloneすることではじめからpkgin
を使えるnon-global zoneを量産することが簡単にできます。
というわけで安全性は保証できませんがお試しあれ(?)