· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Gentoo Development Guide/Quick Start Ebuild Guide

Quickstart Ebuild Guide


번역자 : jachin 작성

이 문서는 ebuild 작성에 대해 대략적인 소개를 합니다. 이 문서는 어떻게 ebuild들이 동작하는지 기본적인 개념을 얻을 수 있도록 시험해 볼 수 있는 몇몇 예제들을 제공하는 것 외에는 개발자로서 겪게 될 많은 세부사항이나 문제들을 다루지 않고 있습니다.

모든 입력들과 출력들의 적절한 범위는 ebuild 작성을 보십시오. 일반 개념 부분 또한 유용합니다.

여기서 사용된 예제는 몇몇 부분으로 나눠진 실제 트리 ebuild에 기반하는 동안 (트리를) 변경하고 단순화한다는 것을 주의하십시오.

First Ebuild (최초의 ebuild)


시작을 소스코드 인덱싱 도구인 Exuberant Ctags 유틸리티에 대한 ebuild로 하겠습니다. 여기에 단순화된 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: /home/httpd/kldp/wiki/data/text/RCS/GentooDevelopmentGuide_2fQuickStartEbuildGuide,v 1.11 2006/11/17 13:49:25 kss Exp kss $

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
}

기본적인 형식 (Basic Format)


여러분이 보시다시피, ebuild는 특정한 환경에서 실행하는 bash 스크립트에 지나지 않습니다.

ebuild 의 제일 윗 부분은 머릿말 부분(Header Block)입니다. 이것은 모든 ebuild 에 있습니다.

ebuild들은 탭을 사용하여 들여쓰기 되며, 한 탭은 4칸으로 대체됩니다. ebuild 파일 형식을 보십시오.

정보 변수 (Information Variables)


다음으로, 여기 변수들의 집합이 있습니다. 이것들은 질의에서 Portage 와 관련된 다양한 것들을 알려줍니다.

DESCRIPTION 변수는 패키지와 패키지의 목적에 대한 짧은 설명 모음입니다.

HOMEPAGE 는 패키지의 홈페이지 링크입니다. (http:// 부분도 포함해야 하는 것을 기억하십시오)

LICENSE 는 GPL-2 입니다. (GNU 일반 공용 라이센스 버전 2).

SRC_URI 는 Portage 에 소스 타볼(Tarball) 파일을 내려받기 위해 사용될 주소를 알려줍니다. 여기 mirror://sourceforge/ 는 "어떤 소스포지 미러들"을 뜻하는 중요한 표식입니다. ${P} 는 Portage 에 의해 정의된, 읽기만 가능한 변수입니다. 이 변수는 패키지의 이름과 버전을 나타냅니다. 위의 예제의 경우 변수는 ctags-5.5.4 의 값을 갖고 있습니다.

SLOT 변수는 Portage 에 이 패키지를 설치할 슬롯(slot)을 알려줍니다. 만약 여러분이 이전에 슬롯들을 본 적이 없다면, 그냥 "0" 을 사용하거나 [http]Slotting 을 읽으십시오.

KEYWORDS 변수는 이 ebuild 가 시험되어진 (CPU 의) 구조(아키텍쳐)에 대한 집합입니다. 우리는 새로 작성된 ebuild 들에 대해서 ~ 키워드들을 사용합니다. 이 패키지들은 잘 작동하는 것으로 보인다고 해도 안정버전으로 바로 인증되지 않습니다. 더 자세한 사항은 [http]Keywording 을 보십시오.

구축 함수들 (Build Functions)


다음으로 src_compile (이)라고 이름붙여진 함수입니다. Portage 는 패키지를 컴파일 하기 원할 때 이 함수를 호출합니다. econf 함수는 ./configure 를 호출하는 것에 대한 랩퍼입니다. 그리고 emake 는 make 에 대한 랩퍼입니다. 이 두 경우 공통적으로 || die "something went wrong" 관용 수식을 사용합니다.이것은 어떤 이유로 인한 오류가 발생했을 때, Portage 가 설치를 계속하도록 시도하지 않고 멈추도록 확실히 하기 위한 것입니다.

src_install 함수는 패키지를 설치하기 원할 때 Portage 에 의해 호출됩니다. 바로 파일 시스템에 설치하지 않는다는 점이 약간 희한한 부분입니다. ${D} 변수에 의해 주어진 특별한 위치에 설치될 것입니다. (Portage 가 이 변수를 설정합니다. [http]Install Destinations and Sandbox 를 보십시오.) 다시 || die construct 구성을 사용하여 에러에 대해 확인합니다.

의존성을 갖는 ebuild (Ebuild with Dependencies)


ctags 예제에서 Portage 에 어떠한 의존성에 대해서도 (정보를) 전달하지 않았습니다. 사실 그래도 상관은 없습니다. 왜냐하면 ctags는 컴파일 하고 실행하는데 기본적인 도구모음(toolchain)만 필요하기 때문입니다. (왜 이 패키지에 대한 의존성 정보가 필요 없는지에 대해서 [http]Implicit System Dependency를 보십시오.) 하지만 삶이 그렇게 간단하지는 않습니다. (의존성이 없을 일은 거의 없기 때문이지요.)

여기 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: /home/httpd/kldp/wiki/data/text/RCS/GentooDevelopmentGuide_2fQuickStartEbuildGuide,v 1.11 2006/11/17 13:49:25 kss Exp kss $

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
}


다시 여러분들은 ebuild 헤더와 다양한 정보 변수들을 볼 수 있습니다. SRC_URI 에서, 버전에 대한 꼬릿말이 없는 패키지의 이름을 얻기 위해 ${PN}이 사용됩니다. (여기엔 여러가지 변수가 있습니다. [http]Predefined Read Only Variables 를 보십시오.)

다시, src_compile 과 src_install 함수들을 정의합니다.

DEPEND 와 RDEPEND 변수들은 Portage 가 패키지들을 설치하고 실행하는데 필요한 패키지들을 결정하기 위한 기준입니다. DEPEND 변수 목록은 컴파일 할 때의 의존성 목록이며, RDEPEND 은 실행시 의존성을 나타냅니다. 더 다양하고 복잡한 예제는 [http]Dependencies 를 보십시오.

변경적용사항이 있는 ebuild (Ebuild with Patches)


우리는 자주 변경적용사항(patch)들을 적용하길 원합니다. epatch 도움 함수를 사용하여 src_unpack 함수에서 완료합니다. epatch 함수를 사용하기 위해서는 ebuild 에서 먼저 Portage 에 eutils eclass (라이브러리와 같은 eclass) 가 필요하다고 알려야 합니다. 이것은 ebuild 의 머릿부분에서 inherit eutils 를 통해 완료됩니다. 여기 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: /home/httpd/kldp/wiki/data/text/RCS/GentooDevelopmentGuide_2fQuickStartEbuildGuide,v 1.11 2006/11/17 13:49:25 kss Exp kss $

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 를 보십시오. 이것은 Portage 트리에서 files/ 하위 디렉터리에 존재하는 detox-1.1.0-destdir.patch 을 참조합니다. 더 큰 변경적용사항(Patch) 파일들은 files/ 디렉터리보단 미러로 가야 합니다. [http]Patching with ematch 를 보십시오.

USE 플래그를 사용하는 ebuild (Ebuild with USE Flags)


이제 몇몇 USE 플래그들에 대한 것입니다. 여기 dev-libs/libiconv/libiconv-1.9.2.ebuild 가 있습니다. iconv 를 갖지 않은 libc 구현물에 대한 iconv 대체 패키지입니다.

# Copyright 1999-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /home/httpd/kldp/wiki/data/text/RCS/GentooDevelopmentGuide_2fQuickStartEbuildGuide,v 1.11 2006/11/17 13:49:25 kss Exp kss $

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 변수를 주목하십시오. 이것은 ebuild 가 사용할 (특별하지 않은) USE 플래그들을 나열합니다. 이것은 다른것들과 같이 emerge -pv 출력에 사용됩니다.

패키지의 ./configure 스크립트는 보통 --enable-nls 나 --disable-nls 인자를 갖습니다. 우리는 이것을 자동으로 생성하기 위해 사용자의 USE 플래그에 의존하는 use_enable 유틸리티 함수를 사용합니다. ([http]Query Functions Reference 를 보십시오.)

조금 더 복잡한 예제로 여기 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: /home/httpd/kldp/wiki/data/text/RCS/GentooDevelopmentGuide_2fQuickStartEbuildGuide,v 1.11 2006/11/17 13:49:25 kss Exp kss $

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*
}
부가적인 의존성들에 주의하십시오. 몇몇 use_enable 행은 두 개의 인자를 사용합니다. 이것은 ./configure 인자와 USE 플래그 이름이 완전히 일치하지 않을 때 유용합니다.



sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2006-11-17 22:49:25
Processing time 0.0080 sec