Trans:WritingEbuilds

Gentoo Korea Wiki
둘러보기로 가기 검색하러 가기

이 페이지에서는 ebuild를 어떻게 작성하는지 설명되어 있습니다. 젠투 위키는 현재 ebuild 명령에 대한 문서가 부족합니다. (기부자분들 참고: 개발자를 위한 많은 문서는 이미 존재합니다. 이 페이지는 사용자를 위해 소개 내용을 포함한 실제 정보를 제공합니다.)


ebuild는 텍스트 파일입니다.

ebuild는 젠투 패키지 입니다. 데비안의 .deb과 레드햇의 .rpm과는 다르며, ebuild는 아카이브가 아닌 단순한 스크립트입니다. 고로, ebuild를 만들려면 ebuild 스크립트를 작성하기만 하면 됩니다.

가장 쉬운 방법 : 이미 있는 ebuild 새로 고치기

ebuild를 준비하기 위해 일반적이고 (운 좋게도) 가장 쉬운 방법은 최신 버전의 소프트웨어가 공식 포티지 트리의 ebuild를 새로 고치는 것이지만, 실제로 ebuild는 최신으로 바뀌는 것이 아닙니다.

오버레이

여러분이 만든 ebuild는 /usr/portage에 놓으면 안됩니다. 이는 공식 포티지 트리를 위한 것이며 개인적으로 사용할 수 없습니다. (물론 놓을 수는 있지만 emerge --sync 명령으로 지워질 것입니다.)

대신 여러분의 ebuild를 제공할 오버레이 디렉터리를 다른 곳에 만듭니다. 오버레이 디렉토리를 만들려면 다음을 /etc/make.conf 에 추가하여야 합니다:


파일 : /etc/make.conf
PORTDIR_OVERLAY="/usr/local/portage"


이제 emerge, ebuild, eix 등과 같은 명령들을 통해 계정의 오버레이로 접근하게 될 것입니다.

최신 ebuild 만들기

이 예제에서, 상상의 패키지 foo-zilla-2.0.8은 구버전, 그리고 2.0.9는 여러분이 원하는 버전입니다.

카테고리 알아보기

먼저, 다음을 통해

eix foo-zilla

또는

emerge --search foo-zilla

를 사용하여 www-client 카테고리를 알아봅니다. 이제 됐습니다.

오버레이로 복사하기

다음, ebuild를 위한 디렉토리를 다음처럼 새로 만듭니다.

mkdir -p /usr/local/portage/www-client/foo-zilla

구조대로 따랐는지 확인합니다. /overlay/category/package 로 되어야 합니다. 이제 ebuild를 복사합니다:

cp /usr/portage/www-client/foo-zilla/foo-zilla-2.0.8.ebuild /usr/local/portage/www-client/foo-zilla/foo-zilla-2.0.9.ebuild

원한다면 버전을 유지할 수 있습니다. 이 경우 오버레이된 ebuild는 공식 포티지 트리보다 우선하게 될 것입니다. 이는 어떤 패키지의 버전 번호가 증가시키고 싶지는 않지만, 포티지 컴파일 방법을 바꾸고 싶을때 유용합니다.

또 한가지 알아둘 것은 항상 새로운 버전이 선택되기 때문에 2.0.10이 메인라인에 존재한다면 오버레이상에 2.0.9이후의 것을 준비해야 할 것입니다. 접두 문자 = 을(를) 사용하여 언제든지 정확한 버전을 지정할 수 있습니다:

emerge =www-client/foo-zilla-2.0.8

포티지 트리로부터 패치하기

이전 ebuild에서 몇몇 패치를 유지하려 한다면, 복사할 필요가 있습니다.

cp -R /usr/portage/www-client/foo-zilla/files /usr/local/portage/www-client/foo-zilla/files

심볼릭 링크도 좋습니다.

매니페스트 만들기

마지막으로 manifest 또는 보안 인증 파일을 만듭니다.

ebuild foo-zilla-2.0.9.ebuild manifest

ebuild를 편집했다면, 때때로 manifest를 만들어야 합니다. 이 시점에서 소스가 다운로드 됩니다.

다른 방법으론 emerge 명령에 FEATURES="-strict"를 앞서 덧붙이는 것입니다. ({{{#007700 /etc/make.conf }}} 에 추가할 수는 있지만, 추천하는 것은 아닙니다. 공식 포티지 트리를 깨지게 할 수 있기 때문입니다.)

이제

emerge foo-zilla

하면 빌드 될 것입니다. 자 이제 해보세요! :D

예제

엄청난 양의 주석이 달린 좋은 예제는 /usr/portage/skel.ebuild에 있습니다.

고치는 방법

때로는, 뭔가를 고치는 일이 필요합니다. ebuild를 편집하거나 패치를 추가하고 나면 manifest를 만드는 걸 잊지 마시기 바랍니다.

패치 추가

my-new-patch.patch에 패치 내용이 있고 적용하고 싶습니까? 쉽죠. .../category/package/files/ 에 넣고 ebuild에 추가하시면 됩니다:


파일 : /usr/local/portage/www-client/foo-zilla/foo-zilla-2.0.9.ebuild
src_unpack() {

    unpack ${A}
    cd "${S}"
    epatch "${FILESDIR}"/my-new-patch.patch

}


만약 src_unpack이 있다면, epatch를 cd "${S}" 다음에 붙여줍니다. 그리고 다음을

inherit eutils

ebuild 시작 부분 어딘가에 추가하여 ebuild가 epatch를 사용할 수 있도록 합니다. (inherit 줄이 이미 있다면 eutils가 있는지 확인합니다).

매니페스트를 최신으로 만드는 것을 잊지 마시기 바랍니다:

ebuild /usr/local/portage/www-client/foo-zilla/foo-zilla-2.0.8.ebuild digest


참고: 예를 들어 ebuild가 cvs의 기능을 물려받는다면, 다음처럼 사용해야 합니다: unpack ${A}가 있는 자리에 cvs_src_unpack 을 넣습니다. git를 사용할 때도 방식은 비슷합니다.


디렉터리 구조가 잘못됨

위의 예제에서 emerge는 foo-zilla-2.0.9/ 에 압축이 풀린 타르볼을 넣는 것을 가정합니다. 만약 이런 경우가 아니라면 다음 줄을

S=dirname-tarball-makes

ebuild의 앞 부분에 추가합니다.

요령

이전 ebuild

공식 포티지 트리에 있던 ebuild지만 지금은 지워진 오래된 ebuild는 젠투 소스 저장소에서 얻을 수 있습니다. -> gentoo-x86 (x86 뿐만 아니라 모든 아키텍처에 대한 ebuild가 여기에 있습니다.)

가지고 있는 소스 활용

기본적으로 ebuild는 소스 타르볼이 온라인 어딘가에 있는 점을 고려합니다. my-zilla-1.0이라고 하는 소스를 사용한다면 /usr/portage/distfiles 에 넣고 manifest를 만드시면 됩니다.