玩式草子─ソフトウェアとたわむれる日々

第17回 64ビット化への遠い道程[その2]

この記事を読むのに必要な時間:およそ 4 分

いつの間にか2010年もあと数週間を残すのみとなりました。さすがに12月の声を聞くと身辺もあれこれ多忙となってきて,Plamo Linux関連の作業も停滞気味ではありますが,今回は前回の続きで,CLFSのx86-64用環境からPlamo Linux用の64ビット環境を構築していくあたりの話を紹介しましょう。

CLFS版x86-64用開発環境

前回紹介したように,CLFS(Cross Linux From Scratch)の64ビット環境は

  1. 32ビット環境上で64ビット用のバイナリを生成するクロスコンパイラの構築
  2. 上記クロスコンパイラを用いて64ビット用のミニマム開発環境を構築
  3. 作成したミニマム開発環境上に移行して,正式な64ビット環境を構築

という手順になります。このうち1.と2.の段階は前回紹介しましたので,今回は3.の段階からになります。

前回の最後に紹介したように,2.で作成した64ビット用の開発環境に移行するには,カーネル自体もx86-64用にコンパイルされている必要があります。そのため1.で作ったクロスコンパイラ環境でx86-64用にカーネルをビルドし,CLFS環境をホストしているPlamo-4.73環境をそのカーネルで再起動することにしました。

前回紹介したように,今回開発機用に導入したCore i7などx86-64機能を持つCPUでは,64ビット用のロングモードの中に32ビット用のバイナリを動かす互換モードが用意されており,x86-64用のカーネルでも32ビット用のPlamo-4.73環境をそのまま動かすことができます。

この特徴を使えば,通常のPlamo-4.73環境の中でchroot機能を使って64ビット用の開発環境を動かすことができ,1つのターミナル内を64ビット環境にして,その周囲では32ビット用のブラウザやエディタを動かしながら開発作業を進めることも可能です。

図1 Plamo-4.73内のCLFS x86-64環境

図1 Plamo-4.73内のCLFS x86-64環境

図では左側のターミナル内が64ビット環境になっており,CLFSの手順に従ってビルドした64ビット用GCC(/tools/bin/gcc)はバージョン4.5.1,右側のターミナル内はホスト側のPlamo-4.73の環境で,GCCは4.3.5になっています。

この状態では,chrootしている64ビット環境内からはホスト側の32ビット環境を見ることはできませんが,ホスト側の32ビット環境からは64ビット環境も1つのディレクトリ以下に見えるので,必要なソースコードやパッチファイルは32ビット環境でダウンロードして64ビット環境に送り込むことも可能です。

全くのゼロから環境を構築する場合は手順を十分に考慮しないと「ダウンロードするためのコマンドをダウンロードしなければならない」といったニワトリと卵的な問題がよく生じるのですが,x86-64の機能で32ビット環境を併存させておけば,必要な処理は32ビット環境で行い,結果だけを64ビット環境に持ってくることも容易なので作業効率は断然良くなります。このあたりもx86環境と互換性を持たないIA64アーキテクチャに比べてx86-64アーキテクチャが急速に普及した大きな理由でしょう。

さて,次はこうやって用意したミニマム開発環境を使って正式な64ビット環境を構築していく3.の段階になります(CLFSのドキュメントではV-9,10)⁠

CLFSの手順では,すでに2.の段階で64ビットネィティブで動く開発環境がビルドできていますが,2.の段階で作った環境は--prefix=/toolsで作った限定版なので,一般的な環境用にするためには再度--prefix=/usrでGCC等もビルドし直すことになります。

また,今回は64ビット用バイナリと32ビット用バイナリの双方を動かすことができるmultilib環境を構築するつもりですので,eglibcやzlib, e2fsprogsなど,主要なライブラリは32ビット用と64ビット用の双方をビルドすることになります。このような作業には新たに導入したCore i7のCPUパワーの面目躍如といったところです。

パッケージをビルドしていく順番やコンパイル時の設定等はCLFSのドキュメントに詳しく記載されていますが,かいつまんで紹介するならば,multilib用にビルドするソフトウェアは,いったん32ビット用に設定してビルド,インストールしてから,再度64ビット用に設定してビルド,インストールし直す,という手順になります。その結果,32ビット用のライブラリ類は/usr/lib/に,64ビット用のライブラリは/usr/lib64/に分離されますが,/usr/bin/ 等にインストールされる一般コマンドは後からインストールされる64ビット用のバイナリで上書きされるので,それらのコマンドは64ビット版が利用されるようになります。

一部,32ビット版と64ビット版を併存させる必要があるコマンドは multiarch_wrapper と呼ばれる簡単なラッパーコマンドを経由して使い分けるような工夫もされています。

CLFSのV-10節をざっと数えたところ32ビット用のライブラリもビルドするソフトウェアはeglibcやzlib, util-linux-ng等21種,64ビット版のみをビルドするパッケージがbashやsed等,32種ありました。これら合わせて53種のソフトウェアを--prefix=/usrを指定してビルド,インストールしていくことで,CLFSの正式環境が完成します。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html

コメント

コメントの記入