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

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

x86_64版Gentoo Linuxの32bitライブラリを自前で管理(chroot無しでemul-linux-x86-soundlibsをビルド)

準備として、「emul-linux-x86-soundlibs」をインストールしておく。

  1. 問題なくビルドできたもの
  2. alsa-lib(1.0.15 USE="midi -python")
  3. aRts(3.5.5 USE="alsa esd jack mp3 vorbis")
  4. libsndfile(1.0.17-r1 USE="alsa -flac")
  5. 32bit版LADSPAプラグイン
  6. インストールするebuildの例
  7. emul-linux-x86-medialibsについて

問題なくビルドできたもの

  • alsa-oss(1.0.14)
  • audiofile(0.2.6-r3)
  • esound(0.2.38 USE="alsa tcpd")
  • jack-audio-connection-kit(0.103.0 USE="alsa jack-tmpfs mmx sse")
  • libmikmod(3.1.11-r2 USE="alsa esd")
  • libogg(1.1.3)
  • libvorbis(1.2.0)

alsa-lib(1.0.15 USE="midi -python")

64bitと32bitのバージョンの大きな違いにより、Wine

ALSA lib pcm_softvol.c:889:(_snd_pcm_softvol_open) Unknown field max_dB

というメッセージが出るようになっていたが、新しいバージョンを入れることで、この問題は解決。

まず、

In file included from /usr/include/python2.4/Python.h:60,
                 from python.c:22:
/usr/include/python2.4/pyport.h:616:2: error: #error "LONG_BIT definition appear
s wrong for platform (bad gcc/glibc config?)."

のエラーを回避するため、Pythonのサポートを切ることができるようにebuildを修正し、

--- /usr/portage/media-libs/alsa-lib/alsa-lib-1.0.15.ebuild.orig
+++ /usr/portage/media-libs/alsa-lib/alsa-lib-1.0.15.ebuild
@@ -17,7 +17,7 @@
 LICENSE="GPL-2 LGPL-2.1"
 SLOT="0"
 KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sh ~sparc ~x86"
-IUSE="doc debug alisp midi"
+IUSE="doc debug alisp midi python"
 
 RDEPEND=">=media-sound/alsa-headers-${PV}"
 DEPEND="${RDEPEND}
@@ -59,6 +59,7 @@
 		$(use_enable alisp) \
 		$(use_enable midi instr) \
 		$(use_enable midi seq) $(use_enable midi aload) \
+		$(use_enable python) \
 		"--with-pcm-plugins=${ALSA_PCM_PLUGINS}" \
 		--disable-dependency-tracking \
 		|| die "configure failed"

これまでと同様にdigestを取ったら、USE="-python"指定をしてビルドする。
(2008/5/14)alsa-lib 1.0.16-r1から「python」のUSEフラグが付くようになっているため、修正する必要はなくなっている。

aRts(3.5.5 USE="alsa esd jack mp3 vorbis")

64bit版のQT3とkdelibsが必要で、
emul-linux-x86-baselibs-9999」をUSE="-nodevelop"でインストールし、

--- /usr/portage/kde-base/arts/arts-3.5.5.ebuild.orig
+++ /usr/portage/kde-base/arts/arts-3.5.5.ebuild
@@ -73,7 +73,23 @@
 
 	export BINDNOW_FLAGS="$(bindnow-flags)"
 
-	kde_src_compile
+	if use amd64 && [[ "${ABI}" = "x86" ]]; then
+		kde_src_compile myconf configure
+		find . -name Makefile | xargs sed -i -e 's/lib64/lib32/g'
+		sed -i \
+			-e 's|\(libkmedia2_idl_la_LIBADD =\)|\1 $(top_builddir)/mcop/libmcop.la $(top_builddir)/flow/libartsflow_idl.la|' \
+			-e 's|\(libkmedia2_la_LIBADD =\)|\1 $(top_builddir)/mcop/libmcop.la $(top_builddir)/flow/libartsflow_idl.la|' \
+			-e 's|\(libsoundserver_idl_la_LIBADD =\)|\1 $(top_builddir)/mcop/libmcop.la $(FLOWLIBS)|' \
+			-e 's|\(libartsgslplayobject_la_LIBADD =\)|\1 $(libsoundserver_idl_la_LIBADD)|' \
+			-e 's|\(libartswavplayobject_la_LIBADD =\)|\1 $(libsoundserver_idl_la_LIBADD)|' \
+			soundserver/Makefile
+		sed -i \
+			-e 's|\(libartscbackend_la_LIBADD =\)|\1 $(top_builddir)/mcop/libmcop.la $(top_builddir)/soundserver/libkmedia2_idl.la $(top_builddir)/flow/libartsflow_idl.la|' \
+			artsc/Makefile
+		kde_src_compile make
+	else
+		kde_src_compile
+	fi
 }
 
 src_install() {

の修正をし、

$ sudo bash -c 'CHOST=i686-pc-linux-gnu ABI=x86 FEATURES="noman noinfo" PKGDIR=[tbz2の出力先] MAKE="make LIBTOOL=/usr/bin/libtool32" emerge -avBO arts'

で何とかビルドできたが、ここまで苦労してビルドするほどのものでもないような気もする。

libsndfile(1.0.17-r1 USE="alsa -flac")

USE="-flac"を付ける。

32bit版LADSPAプラグイン

$ sudo bash -c 'CHOST=i686-pc-linux-gnu ABI=x86 FEATURES="noman noinfo" PKGDIR=[tbz2の出力先] LD="ld -m elf_i386" emerge -avBO ladspa-sdk ladspa-cmt caps-plugins fil-plugins mcp-plugins rev-plugins tap-plugins'

  • ladspa-sdk(1.12-r2)
  • ladspa-cmt(1.15)
  • caps-plugins(0.3.0-r1)
  • fil-plugins(0.0.1)
  • mcp-plugins(0.3.0)
  • rev-plugins(0.2.1)
  • tap-plugins(0.7.0)

上記プラグインは全てビルドできるが、swh-plugins(0.4.14)は外部ライブラリfftwを要求するため、今回は外した。

これらを後でインストールして使用するためには、LADSPA_PATHの編集が必要。
ファイル名: /etc/env.d/60ladspa

LADSPA_PATH=/usr/lib64/ladspa:/usr/lib32/ladspa

インストールするebuildの例

ファイル名: emul-linux-x86-soundlibs-9999

# Copyright 1999-2007 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/app-emulation/emul-linux-x86-soundlibs/emul-linux-x86-soundlibs-10.0-r1.ebuild,v 1.3 2007/03/02 15:04:01 blubb Exp $

inherit emul-libs

SRC_URI="mirror://gentoo/alsa-lib-1.0.15.tbz2
	mirror://gentoo/alsa-oss-1.0.14.tbz2
	arts? ( mirror://gentoo/arts-3.5.5.tbz2 )
	mirror://gentoo/audiofile-0.2.6-r3.tbz2
	mirror://gentoo/esound-0.2.38.tbz2
	mirror://gentoo/jack-audio-connection-kit-0.103.0.tbz2
	mirror://gentoo/libmikmod-3.1.11-r2.tbz2
	mirror://gentoo/libogg-1.1.3.tbz2
	mirror://gentoo/libsndfile-1.0.17-r1.tbz2
	mirror://gentoo/libvorbis-1.2.0.tbz2
	ladspa? (
		mirror://gentoo/caps-plugins-0.3.0-r1.tbz2
		mirror://gentoo/fil-plugins-0.0.1.tbz2
		mirror://gentoo/ladspa-cmt-1.15.tbz2
		mirror://gentoo/ladspa-sdk-1.12-r2.tbz2
		mirror://gentoo/mcp-plugins-0.3.0.tbz2
		mirror://gentoo/rev-plugins-0.2.1.tbz2
		mirror://gentoo/tap-plugins-0.7.0.tbz2
	)"

LICENSE="as-is BSD GPL-2 LGPL-2 LGPL-2.1"
KEYWORDS="-* ~amd64"

IUSE="arts ladspa nodevelop"

RDEPEND=">=app-emulation/emul-linux-x86-baselibs-10.0
		arts? ( >=app-emulation/emul-linux-x86-qtlibs-10.0 )
		!<app-emulation/media-libs-1.1"

src_unpack() {
	allowed_common="^${S}/usr/bin/esddsp|^${S}/usr/kde/.*/bin/artsdsp|^${S}/usr/bin/aoss"
	use nodevelop && allowed="${allowed_common}" \
		|| allowed="${allowed_common}|^${S}/usr/lib32/pkgconfig|.*lib32.*\.l?a$"

	use ladspa && ALLOWED="(${allowed}|/usr/lib*/ladspa)" \
		|| ALLOWED="(${allowed})"

	emul-libs_src_unpack

	for f in ${S}/usr/bin/esddsp ${S}/usr/bin/aoss ${S}/usr/kde/*/bin/artsdsp ; do
		mv -f "$f"{,32}
	done

	if use ladspa; then
		mv ${S}/usr/lib/ladspa/* ${S}/usr/lib32/ladspa/
		rm ${S}/usr/lib/ladspa/ -fr
	fi
}

インストール例。

$ sudo mkdir /usr/local/overlays/local/app-emulation/emul-linux-x86-soundlibs/files -p
$ sudo mv emul-linux-x86-soundlibs-9999.ebuild /usr/local/overlays/local/app-emulation/emul-linux-x86-soundlibs/
$ sudo cp [tbz2の保存先] /usr/portage/distfiles/
$ sudo emerge -avu emul-linux-x86-soundlibs

emul-linux-x86-medialibsについて

全て問題なくビルドでき、独立した記事にするほどではないため、ここに書くことにする。

  • fribidi(0.10.7)
  • lame(3.97-r1)
  • libdv(1.0.0-r2 USE="xv -sdl")
  • libmad(0.15.1b-r2)
  • libtheora(1.0_alpha6-r1 USE="encode")
  • xvid (1.1.3)

ファイル名: emul-linux-x86-medialibs-9999.ebuild

# Copyright 1999-2007 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/app-emulation/emul-linux-x86-medialibs/emul-linux-x86-medialibs-10.2.ebuild,v 1.3 2007/03/10 20:25:53 beandog Exp $

inherit emul-libs

SRC_URI="mirror://gentoo/fribidi-0.10.7.tbz2
		mirror://gentoo/lame-3.97-r1.tbz2
		mirror://gentoo/libdv-1.0.0-r2.tbz2
		mirror://gentoo/libmad-0.15.1b-r2.tbz2
		mirror://gentoo/libtheora-1.0_alpha6-r1.tbz2
		mirror://gentoo/xvid-1.1.3.tbz2"

LICENSE="GPL-2 LGPL-2.1 as-is BSD"
KEYWORDS="-* ~amd64"
IUSE="nodevelop"

DEPEND=""
RDEPEND=">=app-emulation/emul-linux-x86-baselibs-10.2
		>=app-emulation/emul-linux-x86-soundlibs-2.5-r2
		>=app-emulation/emul-linux-x86-xlibs-10.0
		!<media-video/mplayer-bin-1.0_rc1-r2"

src_unpack() {
	! use nodevelop && ALLOWED="(^${S}/usr/lib32/pkgconfig|.*lib32.*\.l?a$)"
	emul-libs_src_unpack
}