Wprowadzenie do ebuildów Gentoo

Niniejszy artykuł stanowi szybkie wprowadzenie do ebuildów gentoo. Artykuł zawiera kilka przykładowych ebuildów i pobieżny ich opis. Szczegóły opisane są w kolejnych artykułach z tej serii.

Pierwszy Ebuild

Oto uproszczony ebuild dla dev-util/ctags/ctags-5.5.4.ebuild.
# Copyright 1999-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

DESCRIPTION="Exuberant ctags generates tags files for quick source navigation"
HOMEPAGE="http://ctags.sourceforge.net"
SRC_URI="mirror://sourceforge/ctags/${P}.tar.gz"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~mips ~sparc ~x86"
IUSE=""

src_compile() {
    econf --with-posix-regex || die "econf failed"
    emake || die "emake failed"
}

src_install() {
    emake DESTDIR="${D}" install || die "install failed"

    dodoc FAQ NEWS README
    dohtml EXTENDING.html ctags.html
}
Ebuildy są skryptami basha wykonywanymi w specjalnym środowisku. Ebuildy zawierają szereg zmiennych, oto podstawowe z nich:
  • DESCRIPTION - Krótki opis aplikacji
  • HOMEPAGE - Adres www strony aplikacji
  • LICENSE - Licencja aplikacji
  • SRC_URI - Określa adresy URL, spod których można pobrać źródła aplikacji. mirror://sourceforge/ jest specjalną notacją oznaczającą dowolny serwer sourceforge. ${P} jest zmienną ustawianą przez portage i przyjmującą wartość "NAZWA_APLIKACJI-WERSJA", w tym przypadku: ctags-5.5.4
  • SLOT - Określa slot, pod którym aplikacja ma być zainstalowana. Zazwyczaj stosuje "0" i nie slotuje się kolejny wersji.
  • KEYWORDS - Określa architektury, pod którymi ebuild był testowany.

Funkcje kompilacji i instalacji

  • src_compile - Portage wywoła tą funkcję, gdy będzie chciało skompilować aplikację. econf to nakładka na ./configure a emake na make.
  • src_install - Funkcja wywoływana w celu zainstalowania pakietu. Instalacja nie odbywa się od razu w systemie lecz do specjalnego katalogu określonego przez zmienną ${D}
  • dodoc i dohtml są pomocniczymi funkcjami do instalacji plików do odpowiednich miejsc w /usr/share/doc


Zależności

Oto uproszczony ebuild dla app-misc/detox/detox-1.1.1.ebuild:
# Copyright 1999-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

DESCRIPTION="detox safely removes spaces and strange characters from filenames"
HOMEPAGE="http://detox.sourceforge.net/"
SRC_URI="mirror://sourceforge/${PN}/${P}.tar.bz2"

LICENSE="BSD"
SLOT="0"
KEYWORDS="~hppa mips sparc x86"
IUSE=""

DEPEND="dev-libs/popt
    sys-devel/flex
    sys-devel/bison"
RDEPEND="dev-libs/popt"

src_compile() {
    econf --with-popt || die "econf failed"
    emake || die "emake failed"
}

src_install() {
    emake DESTDIR="${D}" install || die "install failed"
    dodoc README CHANGES
}
  • ${PN} jest zmienną przechowującą nazwę pakietu bez numeru wersji
  • DEPEND określa zależności do kompilacji, a RDEPEND zależności wymagane do działania


Ebuildy z łatami

Często trzeba nałożyć jakieś łaty na źródła. Operację tą wykonuje się w funkcji src_unpack za pomocą epatch. By mieć dostęp do epatch należy dodać obsługę eutils poprzez inherit eutils. Przykład na bazie app-misc/detox/detox-1.1.0.ebuild:
# Copyright 1999-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

inherit eutils

DESCRIPTION="detox safely removes spaces and strange characters from filenames"
HOMEPAGE="http://detox.sourceforge.net/"
SRC_URI="mirror://sourceforge/${PN}/${P}.tar.bz2"

LICENSE="BSD"
SLOT="0"
KEYWORDS="~hppa ~mips ~sparc ~x86"
IUSE=""

DEPEND="dev-libs/popt
    sys-devel/flex
    sys-devel/bison"
RDEPEND="dev-libs/popt"

src_unpack() {
    unpack ${A}
    cd "${S}"

    epatch "${FILESDIR}"/${P}-destdir.patch
    epatch "${FILESDIR}"/${P}-parallel_build.patch
}

src_compile() {
    econf --with-popt || die "econf failed"
    emake || die "emake failed"
}

src_install() {
    emake DESTDIR="${D}" install || die "install failed"
    dodoc README CHANGES
}
  • ${FILESDIR}/${P}-destdir.patch odnosi się do "detox-1.1.0-destdir.patch" znajdujący się w katalogu files/. Duże łaty powinny być umieszczane na mirrorach, niż jako pliki w files w drzewie portage.


Ebuildy i flagi USE

Oto ebuild dla libiconv:
# Copyright 1999-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

DESCRIPTION="GNU charset conversion library for libc which doesn't implement it"
SRC_URI="ftp://ftp.gnu.org/pub/gnu/libiconv/${P}.tar.gz"
HOMEPAGE="http://www.gnu.org/software/libiconv/"

SLOT="0"
LICENSE="LGPL-2.1"
KEYWORDS="~amd64 ~ppc ~sparc ~x86"
IUSE="nls"

DEPEND="virtual/libc
    !sys-libs/glibc"

src_compile() {
    econf $(use_enable nls) || die "econf failed"
    emake || die
}

src_install() {
    emake DESTDIR="${D}" install || die "install failed"
}
  • IUSE - zmienna ta listuje flagi use używane przez ten ebuild
  • W powyższym przykładzie libiconv w ./configure przyjmuje --enable-nls lub --disable-nls. Funkcja pomocnicza use_enable generuje odpowiedni wynik na bazie włączonej/wyłączonej flagi USE.
Oto bardziej złożony przykład, mail-client/sylpheed/sylpheed-1.0.4.ebuild:
# Copyright 1999-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

inherit eutils

DESCRIPTION="A lightweight email client and newsreader"
HOMEPAGE="http://sylpheed.good-day.net/"
SRC_URI="mirror://sourceforge/${PN}/${P}.tar.bz2"

LICENSE="GPL-2"
KEYWORDS="alpha amd64 hppa ia64 ppc ppc64 sparc x86"
SLOT="0"

IUSE="crypt gnome imlib ipv6 ldap nls pda ssl xface"

DEPEND="=x11-libs/gtk+-1.2*
    nls? ( >=sys-devel/gettext-0.12.1 )
    crypt? ( >=app-crypt/gpgme-0.4.5 )
    gnome? ( media-libs/gdk-pixbuf )
    imlib? ( media-libs/imlib )
    ldap? ( >=net-nds/openldap-2.0.11 )
    pda? ( app-pda/jpilot )
    ssl? ( dev-libs/openssl )
    xface? ( >=media-libs/compface-1.4 )"
RDEPEND="${DEPEND}
    app-misc/mime-types
    x11-misc/shared-mime-info"

src_unpack() {
    unpack ${A}
    cd "${S}"

    epatch "${FILESDIR}"/${PN}-namespace.diff
    epatch "${FILESDIR}"/${PN}-procmime.diff
}

src_compile() {
    econf         $(use_enable nls)         $(use_enable ssl)         $(use_enable crypt gpgme)         $(use_enable pda jpilot)         $(use_enable ldap)         $(use_enable ipv6)         $(use_enable imlib)         $(use_enable gnome gdk-pixbuf)         $(use_enable xface compface)         || die

    emake || die
}

src_install() {
    einstall || die "einstall failed"
    dodir /usr/share/pixmaps
    insinto /usr/share/pixmaps
    doins *.png

    if use gnome ; then
        dodir /usr/share/gnome/apps/Internet
        insinto /usr/share/gnome/apps/Internet
        doins sylpheed.desktop
    fi

    dodoc [A-Z][A-Z]* ChangeLog*
}
  • Zwróć uwagę na opcjonalne zależności uwzględniane w przypadku aktywności danej flagi USE:
nls? ( >=sys-devel/gettext-0.12.1 )
  • W econf niektóre use_enable używaj dwóch argumentów - pierwszy określa nazwę flagi USE, a drugi nazwę elementu jaki należy dodać do ./configure:
$(use_enable gnome gdk-pixbuf)
Da nam --enable-gdk-pixbuf a nie --enable-gnome.
RkBlog

Ebuildy Gentoo, 14 July 2008, Piotr Maliński

Comment article
RkBlog main page Search RSS Contact