x86_64版Gentoo Linuxの自前管理32bitライブラリを更新(2008/6/10現在)
色々とパッケージを入れ直しているところで、自前管理の32bit版ライブラリをしばらくぶりに新しくしようということで、更新作業を行った。
- eclassの修正によりebuildファイルの管理を簡単に
- ビルドしたtbz2ファイル群を展開してまとめる作業を自動化
- ビルド上のメモ
- medialibs
- soundlibsとLADSPAプラグイン
- gtklibs
- sdl
eclassの修正によりebuildファイルの管理を簡単に
Portageのebuildファイルにはeclassというものがあり、複数のebuildファイルから使用される処理や依存関係などが記述できる。以前は、x86_32なパッケージを個別にビルドしたものを(分野ごとに)一括でインストールするためのebuild(emul-linux-x86-[分野名]-[バージョン].ebuild)に対して、独自管理をする上での修正を個別に書いていたのだが、面倒なので、Portageツリーの中の「emul-linux-x86-*」パッケージのebuildを名前変更したものがそのまま使えるようにするため、eclassファイル側を変更することにした。
変更したeclassファイルは
cid-3f9be5b1cd4a806c.skydrive.live.com/self.aspx/%e5%85%ac%e9%96%8b/Gentoo%20Linux%20ebuild/emul-linux-x86%e3%81%ae%e8%87%aa%e5%89%8d%e7%ae%a1%e7%90%86%e7%94%a8/eclass/emul-linux-x86.eclass.txt
にアップロードした。
テスト不十分につき、使用する場合には「FEATURES="collision-protect"」の指定を推奨。
(2008/6/30)soundlibsの一部実行ファイルが残らないで消えてしまう不具合に対処
ビルドしたtbz2ファイル群を展開してまとめる作業を自動化
ビルドしたtbz2ファイル群をあらかじめ分野ごとにディレクトリに分けて入れてから次のスクリプトを実行することで、distfilesディレクトリに.tar.bz2ファイルに簡単にまとめられる。スクリプトは
cid-3f9be5b1cd4a806c.skydrive.live.com/self.aspx/%e5%85%ac%e9%96%8b/Gentoo%20Linux%20ebuild/emul-linux-x86%e3%81%ae%e8%87%aa%e5%89%8d%e7%ae%a1%e7%90%86%e7%94%a8/emul-linux-x86-packer.sh.txt
にアップロードした。
下はbaselibsでの使用例。
$ [emul-linux-x86-packer.shの場所] baselibs [emul-linux-x86-baselibsのtbz2ファイル群のあるディレクトリ]
ただし、これを実行した後には、システムへインストールするebuildファイルに対してebuildコマンドを実行してダイジェストを取る作業が必要。
ビルド上のメモ
分野ごとの一番上に書いてあるのは、ビルド後に生成されたtbz2ファイル群の一覧。Portageツリー版とは一部異なる(幾つか削ったものがある)。パッケージビルドの前に、一通りの「emul-linux-x86-*」パッケージを「USE="-nodevelop"」で入れておく必要がある(ビルドに必要な開発用ファイルを含めて配置しておくため)。
baselibs
bzip2-1.0.5.tbz2 gdbm-1.8.3-r3.tbz2 libxml2-2.6.31.tbz2 com_err-1.40.8.tbz2 giflib-4.1.6.tbz2 ncurses-5.6-r2.tbz2 cracklib-2.8.12.tbz2 glib-1.2.10-r5.tbz2 openssl-0.9.8g-r2.tbz2 cups-1.3.7-r1.tbz2 glib-2.14.6.tbz2 pam-0.99.9.0.tbz2 db-4.5.20_p2.tbz2 gpm-1.20.1-r6.tbz2 pwdb-0.62.tbz2 dbus-1.1.20.tbz2 jpeg-6b-r8.tbz2 readline-5.2_p12-r1.tbz2 dbus-glib-0.74.tbz2 lcms-1.17.tbz2 slang-1.4.9-r2.tbz2 e2fsprogs-1.40.8.tbz2 libart_lgpl-2.3.20.tbz2 ss-1.40.8.tbz2 expat-2.0.1.tbz2 libmng-1.0.10.tbz2 tiff-3.8.2-r3.tbz2 file-4.23.tbz2 libperl-5.8.8-r2.tbz2 zlib-1.2.3-r1.tbz2 flex-2.5.33-r3.tbz2 libpng-1.2.26-r1.tbz2 gamin-0.1.9-r1.tbz2 libtool-1.5.26.tbz2
USEフラグは"-X -python -dbus"。libtoolはCHOST/ABI指定でビルドしたもので置き換える。
pam(0.99.9.0 USE="cracklib nls")ではx86_32版flexが必要*1。別途ビルドの上で/usr/lib32/以下にusr/lib32/libfl.aをコピーしておく。
gaminでは、バージョン0.1.9-r1を使用してUSE="-python"指定することでPythonサポートが外せる。
e2fsprogs(1.40.8)は問題なくビルドできた。
xlibs
fontconfig-2.5.0-r1.tbz2 libXcursor-1.1.9.tbz2 libXrandr-1.2.2.tbz2 freetype-2.3.5-r2.tbz2 libXdamage-1.1.1.tbz2 libXrender-0.9.2.tbz2 glut-1.0.tbz2 libXdmcp-1.0.2.tbz2 libXt-1.0.5.tbz2 glut-3.7.1.tbz2 libXext-1.0.3.tbz2 libXtst-1.0.3.tbz2 libICE-1.0.4.tbz2 libXfixes-4.0.3.tbz2 libXv-1.0.3.tbz2 libSM-1.0.3.tbz2 libXft-2.1.12.tbz2 libXvMC-1.0.4.tbz2 libX11-1.1.4.tbz2 libXi-1.1.3.tbz2 libXxf86vm-1.0.1.tbz2 libXScrnSaver-1.1.2.tbz2 libXinerama-1.0.2.tbz2 libdrm-2.3.0.tbz2 libXau-1.0.3.tbz2 libXmu-1.0.3.tbz2 mesa-6.5.2-r1.tbz2 libXaw-1.0.4.tbz2 libXp-1.0.0.tbz2 libXcomposite-0.4.0.tbz2 libXpm-3.5.7.tbz2
freetype関係により、USEフラグは"-X -utils"。openmotifは外した。他は基本的に以前と同じだが、xcb関係も外している。
glutでは、Portageツリー版のemul-linux-x86-xlibsを「USE="-nodevelop"」で入れた後
$ sudo sed -i "s:\(/usr/lib\):\132:" /usr/lib32/libGLU.la
をした上でPKG_CONFIG_PATH指定*2でOKだった。
まとめたebuildをシステムへインストールする際に
* Detected file collision(s): * * /usr/lib32/libGL.la
が出た場合、このファイルは削除しておく。
この他、何故かfreetypeにUSE="-bindist"を付けたときにWineでフォントが内蔵ビットマップを優先して使用されてしまうようになってしまった(Wine 0.9.46でもダメ)。USE="bindist"(もしくはPortageツリー版xlibs)ではアンチエイリアスが効くものの、文字が少し大きくなってしまった(その上汚い)。
なお、Adobe Readerのようなx86_32なGTK+アプリケーションではフォントは正常/綺麗に描画されていて、UIフォントとして使用したときにもアンチエイリアスが正常に機能していることを確認している。
原因がよく分からない*3ため、しばらくは内蔵ビットマップを抜いたフォントを使用してしのぐことにする。
(2008/6/25)この少し前に入れていたIPAモナーフォントが1.0.5から1.0.8になり、アンチエイリアスに関するフォント情報が変わったことによりアンチエイリアスがされなかったということが分かり、1.0.8のフォントの修正もしくは1.0.5へ戻すことにより、この問題は解決した。
medialibs
fribidi-0.10.7.tbz2 libdv-1.0.0-r2.tbz2 libtheora-1.0_beta3-r1.tbz2 lame-3.97-r1.tbz2 libmad-0.15.1b-r2.tbz2 xvid-1.1.3.tbz2
lameに関して、/usr/lib64/glib/include以下のヘッダファイルを参照している部分があるが、これはライブラリ部分ではなく捨てられることになるため、特に問題にはならない。
Portageツリー版ではDirectFBなどが追加されているが、これらは外した。
soundlibsとLADSPAプラグイン
alsa-lib-1.0.16-r1.tbz2 libmikmod-3.1.11-r2.tbz2 alsa-oss-1.0.15.tbz2 libogg-1.1.3.tbz2 audiofile-0.2.6-r3.tbz2 libsndfile-1.0.17-r1.tbz2 esound-0.2.38-r1.tbz2 libvorbis-1.2.0.tbz2 jack-audio-connection-kit-0.109.2.tbz2
USEフラグは"-python -netjack -flac"。
libmikmodは以前と同じ3.1.11-r2を使用した(r4では、そのままでは64bit版のライブラリにリンクしようとするため修正が必要)。
aRtsなどは外し、LADSPAプラグインはPortageツリーのebuildを使用するために分離した。
そのebuildは
cid-3f9be5b1cd4a806c.skydrive.live.com/self.aspx/%e5%85%ac%e9%96%8b/Gentoo%20Linux%20ebuild/emul-linux-x86%e3%81%ae%e8%87%aa%e5%89%8d%e7%ae%a1%e7%90%86%e7%94%a8/app-emulation/emul-linux-x86-ladspa/emul-linux-x86-ladspa-99999999.ebuild.txt
にアップロードした。入れたLADSPAプラグインは以下。
caps-plugins-0.3.0-r1.tbz2 ladspa-sdk-1.13.tbz2 tap-plugins-0.7.0.tbz2 fil-plugins-0.1.0.tbz2 mcp-plugins-0.3.0.tbz2 ladspa-cmt-1.15.tbz2 rev-plugins-0.3.1.tbz2
gtklibs
atk-1.20.0.tbz2 gtk+-1.2.10-r12.tbz2 imlib-1.9.15-r2.tbz2 cairo-1.6.4.tbz2 gtk+-2.12.9-r2.tbz2 pango-1.18.4.tbz2 glitz-0.5.6.tbz2 gtk-engines-aurora-1.4.tbz2 pixman-0.10.0.tbz2
cairoではxcbサポートを外した。
cairo-1.6.4はx11-libs/pixmanを要求するため、これを別途ビルドしてファイルを/usr/lib32/以下に配置した。
GTK+ 2では、baselibsのところでCHOST/ABI指定で作成したlibtool32を使用したときに
libtool32: link: unable to infer tagged configuration libtool32: link: specify a tag with `--tag' make[2]: *** [autotestkeywords] Error 1
のようになってしまったが、変数MAKEを上書き*4しなければOKだった。
sdl
freealut-1.1.0.tbz2 sdl-image-1.2.6-r1.tbz2 sdl-sound-1.0.3.tbz2 libsdl-1.2.11-r2.tbz2 sdl-mixer-1.2.8.tbz2 sdl-ttf-2.0.9.tbz2 openal-0.0.8-r2.tbz2 sdl-net-1.2.7.tbz2 smpeg-0.4.4-r9.tbz2
基本的に前回と同じ。
libmikmodを使用するebuildで64bit版ライブラリにリンクしようとしたため、調べたところ
$ find /usr/lib32 -name "*.la" -exec grep lib64 {} \; -print dependency_libs=' -ldl -L/usr/lib64 /usr/lib64/libaudiofile.la -lm' /usr/lib32/libmikmod.la
libmikmodのlaファイルがおかしかったので
$ sudo sed -i 's:lib64:lib32:g' /usr/lib32/libmikmod.la
とした。
libGLUも引っかかる原因になるため、修正していなければしておく(作業内容は上で書いている)。
*1:pam_conv_l.c:(.text+0xde1): undefined reference to `yywrap'
*2:FEATURES="noman noinfo" CHOST=i686-pc-linux-gnu ABI=x86 PKGDIR=[tbz2ファイルの出力先] PKG_CONFIG_PATH=/usr/lib32/pkgconfig USE="-X -utils" emerge -avOB [パッケージ名...]
*3:原因かは不明だが、fontconfigは2.4系から2.5系になっていて、freetypeは2.3.4から2.3.5になっている
*4:MAKE="make LIBTOOL=libtool32"