VMGLの覚え書き(パッケージのインストール)
仮想マシンの中でOpenGLを使用したアプリケーションをハードウェアアクセラレーション付きで実行するVMGL(sysweb.cs.toronto.edu/projects/7)を実験した際のメモの内、パッケージのインストールについてを扱う。
ビルドとインストール(一般的な方法)
配布されているファイルを展開し、vmgl.hgディレクトリの中でmakeによるビルドを行い、インストールはホストOSとゲストOSそれぞれに向けたファイル群を配置するためのターゲットを指定する。$ tar jxf [vmgl-0.1.tar.bz2の場所] $ cd vmgl.hg/ $ make (ホストOSの場合) $ sudo make install-host (ゲストOSの場合) $ sudo make install-guest
x86_64上では
make[2]: Leaving directory `/tmp/work/vmgl.hg/tightvnc/vncconnect' make[1]: Leaving directory `/tmp/work/vmgl.hg/tightvnc' imake -I../..//config/cf -DTOPDIR=../../ -DCURDIR=. In file included from ../..//config/cf/Imake.tmpl:91, from Imakefile.c:35: ../..//config/cf/linux.cf:120: warning: "HasGcc" redefined Imakefile.c:26: warning: this is the location of the previous definition ../..//config/cf/linux.cf:121: warning: "HasGcc2" redefined Imakefile.c:27: warning: this is the location of the previous definition make[1]: Entering directory `/tmp/work/vmgl.hg/tightvnc/Xvnc/config/imake' gcc -O -ansi -pedantic -I../..//include -I../..//exports/include/X11 -I../../ -I../..//exports/include -Dlinux LinuxMachineDefines -D_POSIX_C_SOURCE=199309L -D_POSIX_SOURCE -D_XOPEN_SOURCE=500L -D_BSD_SOURCE -D_SVID_SOURCE -D_REENTRANT -DFUNCPROTO=15 -DNARROWPROTO -DCPP_PROGRAM="\"/lib/cpp\"" -c -o imake.o imake.c gcc: LinuxMachineDefines: No such file or directory imake.c:911: warning: string length ‘1390’ is greater than the length ‘509’ ISO C90 compilers are required to support make[1]: *** [imake.o] Error 1 make[1]: Leaving directory `/tmp/work/vmgl.hg/tightvnc/Xvnc/config/imake' imake -I.//config/cf -DTOPDIR=./ -DCURDIR=. In file included from .//config/cf/Imake.tmpl:91, from Imakefile.c:35: .//config/cf/linux.cf:120: warning: "HasGcc" redefined Imakefile.c:26: warning: this is the location of the previous definition .//config/cf/linux.cf:121: warning: "HasGcc2" redefined Imakefile.c:27: warning: this is the location of the previous definition make Makefiles make[1]: Entering directory `/tmp/work/vmgl.hg/tightvnc/Xvnc' making Makefiles in include... make[2]: Entering directory `/tmp/work/vmgl.hg/tightvnc/Xvnc' /bin/sh: line 4: .././/config/imake/imake: No such file or directory make[2]: *** [include/Makefile] Error 127 (以下エラーが続く)
というエラー(「LinuxMachineDefines」のところ)でビルドができないが、この問題は
code.fluendo.com/elisa/trac/attachment/wiki/ElisaAndXen/tightvnc-1.2.9-amd64support.patch
の修正で解決した。
vmglextについて
ゲストOSのX.orgサーバへの出力に使用するvmglextというモジュールはx86_32向けのビルド済み共有オブジェクトとX.orgのソースツリーに対するパッチという形でのみ提供されている。VMGLのソースツリー内でそのままビルドすることはできない。これをビルドするには
- パッチの中に含まれる「vmglproto」のヘッダファイル群をインストール
- X.orgサーバのソースツリーを別途入手・展開
- パッチを当てる
- モジュールをビルド
というような流れになり、今回はMandriva Linux向けのRPMファイルを作成し、その中で上記作業は自動で行うようにした(vmglprotoは別のRPMパッケージとなる)。別館の配布ページにてvmglprotoと本体のRPMパッケージを公開した(パッケージの依存情報や作り方など、まだ不完全と思われる)。
(2014/10/13)配布ページは削除済み。
ただし、このモジュールのビルドはエラーなくできているものの、実験(別記事)では正常に動いていることは確認できていないため、どこかおかしな部分がある可能性はある。また、パッチが対象としているX.orgサーバはバージョン1.1(X11R7.1)のものであることや、実験した環境がx86_64上であること*1なども関係しているかもしれない(し、関係していないのかもしれない)。ビルド手順についての(「パッチをxorg-serverのソースツリーに当ててビルドする」ということ以上の)情報は探しても得られず、公式ページで公開されているRPMパッケージの.specファイルも見たが、このモジュールは.specファイルの中ではビルドしていないため、作り方の参考にはできなかった。
今回使用したxorg-serverはバージョン1.4.2(X11R7.3)だが、パッチの適用に関しては
[xorg-server-1.4.2]$ patch -p2 < [vmgl.hgディレクトリの場所]/extra/patches/Xorg.patch patching file vmglproto/autogen.sh patching file vmglproto/ChangeLog patching file vmglproto/configure.ac patching file vmglproto/COPYING patching file vmglproto/Makefile.am patching file vmglproto/vmgl_ext.h patching file vmglproto/vmgl_extproto.h patching file vmglproto/vmglproto.pc.in patching file configure.ac Hunk #1 FAILED at 1. Hunk #2 FAILED at 513. 2 out of 2 hunks FAILED -- saving rejects to file configure.ac.rej patching file hw/xfree86/dixmods/Makefile.am Hunk #1 succeeded at 35 (offset 12 lines). Hunk #2 succeeded at 98 (offset 14 lines). patching file hw/xfree86/dixmods/VMGLExtension.c patching file hw/xfree86/dixmods/vmglmod.c
1箇所だけパッチが当たらないが
ファイル名: xorg-server-1.4.2/configure.ac
REQUIRED_MODULES="[randrproto >= 1.2] $RENDERPROTO [fixesproto >= 4.0] [damageproto >= 1.1] xcmiscproto xextproto [xproto >= 7.0.9] xtrans [scrnsaverproto >= 1.1] bigreqsproto resourceproto fontsproto [inputproto >= 1.4.2] [kbproto >= 1.0.3]"
の行を
REQUIRED_MODULES="[randrproto >= 1.2] (中略) [kbproto >= 1.0.3] vmglproto"
にすればOK。この部分は、実際にはビルド前のvmglprotoのインストール状態をチェックするためのものなので、インストールされていればそのままでもよい。