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

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

x86_64版Gentoo Linuxの自前管理32bitライブラリを更新(2008/6/10現在)

色々とパッケージを入れ直しているところで、自前管理の32bit版ライブラリをしばらくぶりに新しくしようということで、更新作業を行った。

  1. eclassの修正によりebuildファイルの管理を簡単に
  2. ビルドしたtbz2ファイル群を展開してまとめる作業を自動化
  3. ビルド上のメモ
    1. baselibs
    2. xlibs
  4. medialibs
  5. soundlibsとLADSPAプラグイン
  6. gtklibs
  7. sdl

eclassの修正によりebuildファイルの管理を簡単に

Portageebuildファイルには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"