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

第7回 ビルド,ビルド,ビルド! ─あるいは賽の河原の小石積み[その2]

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

前回までにX11R7.5のproto/, lib/, app/の各部分をビルド,インストールしてきました。このあたりまでビルドできれば,X Window Systemの中心となるソフトウェアであるXサーバ(xorg-server)もビルドできます。

Xサーバについて

Xサーバはディスプレイ画面を描画すると共に,キーボードやマウスからの入力を受けとって適切なクライエントソフトウェアに送信する,という重要な処理を担っています。

「Xサーバ」という名称が示すように,X Window Systemはサーバ/クライアントモデルを採用しています。通常のサーバ/クライアントモデルの場合,手元ではクライアント側のソフトウェアを動かして,サーバはネットワーク上のどこかで黙々とクライアントからのリクエストを処理するような構成を取りますが,Xの場合は逆で,⁠Xサーバ」は常に手元のマシン上で動いてディスプレイに描画したりキーボードやマウスからの入力を受けつけており,画面を操作したいクライアントソフトウェアはXプロトコルを用いてサーバに話しかけて,必要な処理をしてもらうことになります。

画面描画などウィンドウ操作に必要な処理はハードウェアを直接操作する必要があるため,GUIを前提に設計されたMacOSやMS Windowsではカーネルレベルに必要な機能を組み込んでいます。一方,X Window Systemでは,UNIXの簡潔な設計を守るため,Xサーバは独立した1つのプロセスとして動作する設計になっており,その結果,Xサーバはずいぶん複雑で大規模なソフトウェアになっています。

加えて,PC UNIX環境では画面描画用のビデオカードにもさまざまなメーカが存在するので,Xサーバもハードウェア的に異なる多数の種類のビデオカードに対応する必要があります。

伝統的な一枚岩的設計のサーバでは,周辺機器用のすべてのドライバもXサーバと共に開発されていましたが,最近のモジュール的設計に変更されたXサーバ(xorg-server)では,各種ドライバはXサーバ本体とは分離され,独立したソフトウェアとして開発,配布されています。

今回ダウンロードしたファイルのうちdriverディレクトリに収められているのが,それらドライバ類のソースコードです。xorg-serverでは,linuxカーネルと同じように,これら周辺機器用のドライバはモジュールとして用意され,検出したハードウェアに応じたドライバを動的に組み込むようになっています。そのためxorg-serverを更新する際は,Xサーバ本体だけではなく,そのサーバに対応したドライバ類も忘れずにインストールしてやる必要があります。

ビルド,ビルド,ビルド!(その2)

それではxorg-serverをビルドしてみましょう。xserverディレクトリに移動し,ビルドスクリプトを起動します。

% ./PlamoBuild.xorg-server-1.7.1 
autoreconf: Entering directory `.'
...
checking for SHA1Init in -lmd... no
checking for XSERVERCFLAGS... configure: error: Package requirements (randrproto >= 1.2.99.3 renderproto >= 0.11 
  fixesproto >= 4.1 damageproto >= 1.1 xcmiscproto >= 1.2.0 xextproto >= 7.0.99.3 xproto >= 7.0.13 xtrans >= 1.2.2 
  bigreqsproto >= 1.1.0 fontsproto inputproto >= 1.9.99.902 kbproto >= 1.0.3 videoproto compositeproto >= 0.4 
 scrnsaverproto >= 1.1 resourceproto xineramaproto xkbfile xfont xau pixman-1 >= 0.15.20 hal dbus-1 xdmcp openssl) were not met:

Requested 'pixman-1 >= 0.15.20' but version of Pixman is 0.15.12

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

おっと,configureの段階でエラーになってしまいました。

configureスクリプトはxorg-serverをビルドするのに必要なソフトウェアの有無やバージョンをチェックしますが,その際にpixmanと呼ばれるピクセル操作用ライブラリのバージョンが,求められている0.15.20よりも低い0.15.12だったことが見つかってしまいました。

configureスクリプトはpkgconfigコマンドを用いてそれぞれのソフトウェアの有無やバージョンをチェックします。pkgconfigコマンドが利用する各種pcファイル(前回紹介したxpm.pc等)は,通常/usr/lib/pkgconfig ディレクトリに 収められますが,ビルド時の設定によってインストール先は変わります。/usr/lib/pkgconfig/以外にインストールされたpcファイルを探すには,PKG_CONFIG_PATHという環境変数にpcファイルを収めたディレクトリのリストを設定します。

pixmanのビルドスクリプトを調べてソースコードの配布元へ行ってみると0.17.2というバージョンが公開されていたので,まずそれをビルド,インストールして再度ビルドスクリプトを流すと,無事configureの処理は通過しました。

libuuidの祟り

続いてビルド作業に移ると,コンパイルは問題なく進んでいくものの,リンクの時点でlibuuid.la が無いというエラーが再発しました。

...
 /usr/bin/install -c -m 644 xorg.conf.5 '/home/kojima/X11R75/xserver/work/usr/X11R7/share/man/man5'
  LINK  libxorg.la
copying selected object files to avoid basename conflicts...
  LINK  Xorg
libtool: link: cannot find the library `/usr/lib/libuuid.la' or unhandled argument `/usr/lib/libuuid.la'
make[4]: *** [Xorg] エラー 1
make[3]: *** [install-recursive] エラー 1
...

前回紹介したように,このエラーはXorgがリンクしようとしているライブラリのいずれかにlibuuid.laを必要とするものがあることを示します。/usr/X11/lib/以下のライブラリはlibuuid.laを削除後にビルドしているので,libuuid.laを必要とするライブラリは/usr/lib/以下にあるのでしょう。

grepコマンドで調べてみると,確かにいくつかのライブラリがヒットしています。

% grep libuuid.la /usr/lib/*.la | cut -f1 -d':'
/usr/lib/libMagick++.la
/usr/lib/libMagickCore.la
/usr/lib/libMagickWand.la
/usr/lib/libggadget-gtk-1.0.la
/usr/lib/libggadget-npapi-1.0.la
/usr/lib/libgnomeuimm-2.6.la
/usr/lib/libgstgl-0.10.la
/usr/lib/libhal-storage.la
/usr/lib/libhal.la
/usr/lib/libparted.la
/usr/lib/libvlc.la
/usr/lib/libvlccore.la
/usr/lib/libxfce4kbd-private.la
/usr/lib/libxfcegui4.la
/usr/lib/libxfprint.la
/usr/lib/libxfsm-4.6.la

/usr/lib/以下では,これら16個のライブラリがlibuuid.laをリンクしているようです。前回紹介したようにlibuuid.laの無い,e2fsprogs版のlibuuid.so.1に移行するには,これらのライブラリは再ビルドする必要がありそうです。

だんだんと影響範囲が広がっているlibuuid問題に恐れながら,該当のライブラリをざっと見ると,これらはxorg-serverの動くレベルよりも上位層のライブラリが多そうです。たとえばlibMagick系のライブラリはImageMagickという画像処理ソフト用のライブラリだし,libvlc系のライブラリはVLCメディアプレイヤのライブラリ,libxf系のライブラリはXfceデスクチップ環境のライブラリなので,xorg-serverがそれらX用のアプリのライブラリを参照することはないはずです。

そう考えてライブラリのリストを改めて眺めると,これらの中でもxorg-serverが依存しそうなのはlibhal.laくらいのようです。

HAL(Hardware Abstraction Layer)とは,DBus等と共に提唱されたデスクトップ環境用の機能で,各種周辺機器の情報を仮想化してデスクトップ用アプリケーションに提供します。xorg-serverでは,キーボードやマウスといった入力機器に関する情報をHAL経由で入手していますが,Plamoの場合,xorg.confでInputDevice節の指定をしているのでHALを使って自動検出させる必要は無さそうですし,xorg-server付属のconfigureスクリプトのヘルプ情報を調べると--disable-halというHAL機能を使わないオプションが用意されていました。

そこで,このオプションをビルドスクリプトに追加すると,無事xorg-serverのビルドが完了しました。

著者プロフィール

こじまみつひろ

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

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

コメント

コメントの記入