新しいemul-linux-x86-*パッケージと、これを利用した32bitライブラリの自前管理について
Java以外長く更新のなかったemul-linux-x86-*パッケージだったが、ついに新しいバージョンが出た。既存のインストールシステムをもとにした新しいインストールシステムによるものとなっている。
SRC_URIについて
以前は、作成された(32bitの)各tbz2パッケージごとに「mirror://gentoo/[パッケージ名]-[バージョン].tbz2」というURLからの取得を行うもので、以前書いた、32bitライブラリを自前で管理する記事においても、一つ一つ、そのバージョン番号部分を手元でビルドしたものに合わせるという作業を必要としていた。新しいインストールシステムでは、「emul-linux-x86-baselibs」などのパッケージを構成する複数のtbz2ファイルを「emul-linux-x86-[種類]-[日付].tar.bz2」という1つのファイルにまとめてある。これは、自前で管理する場合においても都合がよい。
中身の各パッケージのバージョンを知るには
複数の「SRC_URI」から1つの.tar.bz2ファイルになったことにより、その中に含まれている個々のパッケージのバージョンを知るのは難しくなった。しかし、.tar.bz2ファイルの中には、パッケージのインストール情報を格納する/var/db/pkg/以下のディレクトリツリーが一緒に入っていることにより、これを知ることはできる。自前で管理する場合に行うこと
「バージョンが古い」「hashstyleが使えない」ということはなくなったので、自前で管理する意味は以前ほどはなくなったが、パッケージで提供されないものを追加したり、中のパッケージの最新版を常に使いたいなどといった場合などには有用。その際に行う流れは下のようになる。- CHOST/ABI指定もしくはemul用chrootにより、tbz2パッケージを作成
- 一時ディレクトリの中に、パッケージを構成するtbz2ファイルを展開していく
- その一時ディレクトリの全体を「emul-linux-x86-[種類]-[日付].tar.bz2」というファイルにまとめ、DISTDIR(デフォルトは/usr/portage/distfiles/)へ入れる
- ebuildファイルのファイル名の日付部分を修正し、ローカルOverlayに配置*1
- ダイジェストを取る
- インストール
「ebuild中にSRC_URIの記述をする代わりに、日付入りの.tar.bz2ファイルを使用する形をとる」ということにより、ebuildファイル自体に手を加える必要性がほぼ無くなった*2。これは非常にありがたい。
その一方、パッケージを構成する各tbz2ファイルのパッケージのバージョンについてはきちんと把握している必要があるが、ビルドして作成したtbz2ファイルを種類(「baselibs」や「xlibs」など)ごとにディレクトリに分けて保管してさえいれば、バージョンが分からなくて困るということにはなりにくいのではないか、という気がする。
USEフラグによるパッケージ選択(除外)
ebuild内の記述では、以前の形では、SRC_URIの部分においてqt3? ( mirror://gentoo/gtk-engines-qt-0.8.tbz2 )
のような形でUSEフラグによる分岐を行うことにより、emerge時にそのtbz2ファイルを一時ディレクトリに展開するかどうかを決めることになっていた。
新しい形では、1つの.tar.bz2ファイルを展開するだけなので、この手法は使えない。ALLOWED変数の値をいじって、残すファイルを選択することはできるが、これは/usr/bin/の実行ファイルなどに対しては意味があるが、特定のライブラリ(.soファイル)を残さないといったことはできない*3ため、結局のところ、「USEフラグがオフのときにそのパッケージに該当する.soファイル(場合によっては、それを含むディレクトリ全体)を削除」という処理を追加するしかない。
それ以前に、自前で管理するのであればUSEフラグを設けて分岐処理を書く必要があるのかどうかは怪しいが...
インストールするためのebuild例
ファイル名やRDEPENDのバージョン部分に関しては変わっていく。ある程度テストは行ったが、万が一のため、「FEATURES="collision-protect"」を付けておくことを推奨。(2007/11/20)バージョン番号(日付)部分は「99999999」にしておくと、公式のパッケージで更新されることはなくなる。
ファイル名: emul-linux-x86-baselibs-99999999.ebuild
# Copyright 1999-2007 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header$ inherit emul-linux-x86 LICENSE="|| ( Artistic GPL-2 ) || ( BSD GPL-2 ) BZIP2 CRACKLIB DB GPL-2 || ( GPL-2 AFL-2.1 ) LGPL-2 LGPL-2.1 MIT OPENLDAP openssl PAM ZLIB as-is" KEYWORDS="-* ~amd64" IUSE="nodevelop" DEPEND="" RDEPEND="!<app-emulation/emul-linux-x86-medialibs-10.2" # bug 168507 src_unpack() { local x allowed="^${S}/lib32/security/pam_filter/upperLOWER|^${S}/etc/env.d" use nodevelop \ || allowed="${allowed}|^${S}/usr/lib32/glib|^${S}/usr/lib32/dbus|^${S}/usr/bin/libtool$|^${S}/usr/lib32/pkgconfig|.*lib32.*\.l?a$" ALLOWED="(${allowed})" emul-linux-x86_src_unpack rm -rf "${S}/etc/env.d/binutils/" \ "${S}/usr/lib32/binutils/" \ "${S}/usr/lib32/engines/" \ "${S}/usr/lib32/openldap/" \ "${S}/usr/lib32/python2.4/" ln -s ../share/terminfo "${S}"/usr/lib32/terminfo if ! use nodevelop; then mv -f "${S}/usr/bin/libtool"{,32} for x in hwm pwd pwi; do ln -s ../lib64/cracklib_dict.${x} "${S}"/usr/lib32/cracklib_dict.${x} done fi }
ファイル名: emul-linux-x86-xlibs-99999999.ebuild
# Copyright 1999-2007 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header$ inherit emul-linux-x86 LICENSE="fontconfig FTL GPL-2 LGPL-2 glut libdrm libICE libSM libX11 libXau libXaw libXcomposite libXcursor libXdamage libXdmcp libXext libXfixes libXft libXi libXinerama libXmu libXp libXpm libXrandr libXrender libXScrnSaver libXt libXtst libXv libXvMC libXxf86dga libXxf86vm libxcb xcb-util" KEYWORDS="-* ~amd64" IUSE="opengl nodevelop" DEPEND="opengl? ( app-admin/eselect-opengl )" RDEPEND=">=app-emulation/emul-linux-x86-baselibs-20071114 x11-libs/libX11" src_unpack() { use nodevelop \ || ALLOWED="(^${S}/etc/env.d|^${S}/usr/lib32/pkgconfig|.*lib32.*\.l?a$)" emul-linux-x86_src_unpack } pkg_postinst() { #update GL symlinks use opengl && eselect opengl set --use-old }
ファイル名: emul-linux-x86-gtklibs-99999999.ebuild
# Copyright 1999-2007 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header$ inherit emul-linux-x86 LICENSE="GPL-2 LGPL-2 LGPL-2.1 FTL || ( LGPL-2.1 MPL-1.1 ) BSD" KEYWORDS="-* ~amd64" IUSE="qt3 nodevelop" DEPEND="" RDEPEND=">=app-emulation/emul-linux-x86-baselibs-20071114 >=app-emulation/emul-linux-x86-xlibs-20071114" src_unpack() { local query_tools="^${S}/usr/bin/gtk-query-immodules-2.0|^${S}/usr/bin/gdk-pixbuf-query-loaders|^${S}/usr/bin/pango-querymodules" local allowed="^${S}/etc/env.d|^${S}/etc/gtk-2.0/i686-pc-linux-gnu|^${S}/etc/pango/i686-pc-linux-gnu|${query_tools}" use nodevelop \ || allowed="${allowed}|^${S}/usr/lib32/gtk-2.0/include|^${S}/usr/lib32/pkgconfig|.*lib32.*\.l?a$" ALLOWED="(${allowed})" emul-linux-x86_src_unpack # these tools generate an index in /etc/{pango,gtk-2.0}/${CHOST} mv -f "${S}/usr/bin/pango-querymodules"{,32} mv -f "${S}/usr/bin/gtk-query-immodules-2.0"{,-32} mv -f "${S}/usr/bin/gdk-pixbuf-query-loaders"{,32} use qt3 || rm "${S}/usr/lib32/gtk-2.0/2.10.0/engines/libqtengine.so" "${S}"/usr/kde/3.5/lib32/kde3/kcm_kcmgtk.* -f } pkg_preinst() { #bug 169058 for l in ${ROOT}/usr/lib32/{pango,gtk-2.0} ; do [[ -L ${l} ]] && rm -f ${l} done } pkg_postinst() { PANGO_CONFDIR="/etc/pango/i686-pc-linux-gnu" if [[ ${ROOT} == "/" ]] ; then einfo "Generating pango modules listing..." mkdir -p ${PANGO_CONFDIR} pango-querymodules32 > ${PANGO_CONFDIR}/pango.modules fi GTK2_CONFDIR="/etc/gtk-2.0/i686-pc-linux-gnu" einfo "Generating gtk+ immodules/gdk-pixbuf loaders listing..." mkdir -p ${GTK2_CONFDIR} gtk-query-immodules-2.0-32 > ${ROOT}${GTK2_CONFDIR}/gtk.immodules gdk-pixbuf-query-loaders32 > ${ROOT}${GTK2_CONFDIR}/gdk-pixbuf.loaders }
ファイル名: emul-linux-x86-qtlibs-99999999.ebuild
# Copyright 1999-2007 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header$ inherit emul-linux-x86 LICENSE="|| ( QPL-1.0 GPL-2 ) GPL-2 LGPL-2" KEYWORDS="-* ~amd64" IUSE="nodevelop" DEPEND="" RDEPEND=">=app-emulation/emul-linux-x86-baselibs-20071114 >=app-emulation/emul-linux-x86-soundlibs-20071114 >=app-emulation/emul-linux-x86-xlibs-20071114" src_unpack() { use nodevelop \ || ALLOWED="(^${S}/usr/lib32/pkgconfig|^${S}/usr/qt/3/lib32/pkgconfig|.*lib32.*\.l?a$)" emul-linux-x86_src_unpack NEEDED="(libDCOP.so|libkdecore.so|libkdefx.so|libqt-mt.so|libqt.so|libqui.so)" find "${S}"/usr/*/3* -name '*.so*' | egrep -v "${NEEDED}" | xargs rm -f }
ファイル名: emul-linux-x86-medialibs-99999999.ebuild
# Copyright 1999-2007 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header$ inherit emul-linux-x86 LICENSE="GPL-2 LGPL-2.1 as-is BSD" KEYWORDS="-* ~amd64" IUSE="nodevelop" DEPEND="" RDEPEND=">=app-emulation/emul-linux-x86-baselibs-20071114 >=app-emulation/emul-linux-x86-soundlibs-20071114 >=app-emulation/emul-linux-x86-xlibs-20071114 >=app-emulation/emul-linux-x86-sdl-20071114 !<media-video/mplayer-bin-1.0_rc1-r2" src_unpack() { use nodevelop || ALLOWED="(^${S}/usr/lib32/pkgconfig|.*lib32.*\.l?a$)" emul-linux-x86_src_unpack }
ファイル名: emul-linux-x86-soundlibs-99999999.ebuild
# Copyright 1999-2007 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header$ inherit emul-linux-x86 LICENSE="as-is BSD GPL-2 LGPL-2 LGPL-2.1" KEYWORDS="-* ~amd64" IUSE="arts ladspa nodevelop" RDEPEND=">=app-emulation/emul-linux-x86-baselibs-20071114 arts? ( >=app-emulation/emul-linux-x86-qtlibs-20071114 ) >=app-emulation/emul-linux-x86-medialibs-20071114 >=app-emulation/emul-linux-x86-xlibs-20071114 ladspa? ( media-libs/ladspa-sdk )" # /etc/env.d/60ladspa src_unpack() { local x allowed="^${S}/etc/env.d|^${S}/usr/bin/esddsp$|^${S}/usr/bin/aoss$|^${S}/usr/bin/jack" use arts && allowed="${allowed}|^${S}/usr/kde/.*/bin/artsdsp$" use ladspa && allowed="${allowed}|^${S}/usr/lib*/ladspa" use nodevelop \ || allowed="${allowed}|^${S}/usr/lib32/pkgconfig|.*lib32.*\.l?a$" ALLOWED="(${allowed})" emul-linux-x86_src_unpack for x in "${S}"/usr/bin/esddsp "${S}"/usr/bin/aoss "${S}"/usr/bin/jack*; do mv -f "${x}"{,32} done if use arts; then for x in "${S}"/usr/kde/*/bin/artsdsp; do mv -f "${x}"{,32}; done else rm "${S}"/usr/kde/ -fr fi if use ladspa; then mv "${S}"/usr/lib/ladspa/* "${S}"/usr/lib32/ladspa/ else rm "${S}"/usr/lib32/ladspa/ -fr fi rm "${S}"/usr/lib/ladspa/ "${S}"/etc/env.d/60ladspa -fr } pkg_postinst() { if use ladspa && [[ ${ROOT} == "/" ]]; then grep "/usr/lib32/ladspa" /etc/env.d/60ladspa > /dev/null \ || sed -i 's|$|:/usr/lib32/ladspa|' /etc/env.d/60ladspa fi } pkg_postrm() { sed -i 's|:/usr/lib32/ladspa||' "${ROOT}"/etc/env.d/60ladspa }
(2008/1/7)JACK関係のコマンドは、32bitなJACKアプリ使用時に必要なので残すように修正
ファイル名: emul-linux-x86-sdl-99999999.ebuild
# Copyright 1999-2007 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header$ inherit emul-linux-x86 LICENSE="LGPL-2 LGPL-2.1" KEYWORDS="-* ~amd64" IUSE="nodevelop" DEPEND="" RDEPEND=">=app-emulation/emul-linux-x86-xlibs-20071114 >=app-emulation/emul-linux-x86-baselibs-20071114 >=app-emulation/emul-linux-x86-soundlibs-20071114" src_unpack() { use nodevelop || ALLOWED="(^${S}/usr/lib32/pkgconfig|.*lib32.*\.l?a$)" emul-linux-x86_src_unpack }