試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

VMGLの覚え書き(パッケージのインストール)

仮想マシンの中でOpenGLを使用したアプリケーションをハードウェアアクセラレーション付きで実行するVMGL(sysweb.cs.toronto.edu/projects/7)を実験した際のメモの内、パッケージのインストールについてを扱う。

  1. ビルドとインストール(一般的な方法)
  2. vmglextについて

ビルドとインストール(一般的な方法)

配布されているファイルを展開し、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のソースツリー内でそのままビルドすることはできない。
これをビルドするには

  1. パッチの中に含まれる「vmglproto」のヘッダファイル群をインストール
  2. X.orgサーバのソースツリーを別途入手・展開
  3. パッチを当てる
  4. モジュールをビルド

というような流れになり、今回は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のインストール状態をチェックするためのものなので、インストールされていればそのままでもよい。

*1:上のTightVNCのビルドエラーがそのままであることや、公式ページにあるパッケージがx86_32版のみであることなどから、x86_64上でテストされているのか疑問が残るが、x86_64固有の動作上の問題があるのかどうかは何とも言えない