Handbook:Parts/Portage/Advanced/ko

도입부
대부분의 사용자들에게 지금까지 전달한 정보는 그들의 전체적인 리눅스 활용 측면에 있어 충분합니다. 하지만 포티지는 좀 더 방대합니다. 포티지의 대부분의 기능은 고급 사용자를 위한 것들이거나 특정 일부의 경우에만 활용할 수 있습니다. 고로, 이런 경우들에 대해 문서화하지 않는 것이 전혀 실례가 되지 않습니다.

물론 수많은 유연성은 상당한 잠재적 경우의 수를 수반하기도 합니다. 그들 모두를 이곳에 문서화할 수는 없습니다. 대신 여러분의 필요에 맞추기 위해 여러분이 좀 더 자세를 낮춰서 볼 수 있는 일부 일반적인 문제들에 초점을 맞추려 합니다. 좀 더 특별한 꼼수나 요령은 젠투 위키에서 찾아볼 수 있습니다.

이런 경우가 아니라면 대부분, 포티지에서 제공하는 메뉴얼 페이지를 깊게 파고들면 이러한 추가 기능들에 대해 찾아보실 수 있습니다.

결국 제대로 동작하지 않는 상황에서 고급 기능을 알아내면 디버깅을 할 수 있게 해주며 상당히 어려운 문제해결이 가능합니다. 버그를 직면하여 버그 보고서를 제출하려 한다면 이들 사항에 주의를 기울였는지 확인해보십시오.

/etc/portage/env 사용
기본적으로 꾸러미 빌드시 에 정의된 CFLAGS, MAKEOPTS 등과 같은 환경 변수를 사용합니다. 일부의 경우 각각의 지정한 꾸러미에 대해 다른 변수를 제공합니다. 이렇게 하기 위해 포티지에서는 와 의 사용을 지원합니다.

파일에는 여러분이 뭘 바꾸려는지 포티지에 알려줄 특정 식별자와, 이 식별자를 벗어난 변수들의 꾸러미 목록이 있습니다. 여러분이 직접 선택한 식별자 이름을 포티지가 해당 변수에 대한 내용을 파일에서 찾아봅니다.

예제: 개별 꾸러미 디버그하기
예제를 통해 꾸러미에 대한 디버깅을 활성화 하겠습니다.

제일 먼저 파일에서 디버깅 변수를 설정하겠습니다. 이름은 임의대로 정했지만, 물론 이름을 임의대로 지은 이유를 더욱 명확하게 하기위해 이유를 반영하겠습니다.

그 다음 이 내용을 사용하기 위해 꾸러미 태그를 넣겠습니다.

/etc/portage/bashrc 및 관련 파일 사용
When Portage works with ebuilds, it uses a bash environment in which it calls the various build functions (like,  ,  , etc.). But Portage also allows users to set up a specific bash environment.

배시 환경을 사용의 잇점은 각각의 단계 과정이 실행하고 있는 동안 emerge 프로세스를 훅킹(동작 가로채기)할 수 있다는 점입니다. 이는 항상 ( 를 통해) emerge 또는 (이전에 설명한 바와 같이 를 통해) 꾸러미별 환경을 사용하여 처리할 수 있습니다.

To hook in the process, the bash environment can listen to the variables EBUILD_PHASE, CATEGORY as well as the variables that are always available during ebuild development (such as P , PF , ...). Based on the values of these variables, additional steps/functions can then be executed.

예제: 파일 데이터베이스 업데이트
In this example, we'll use to call some file database applications to ensure their databases are up to date with the system. The applications used in the example are (an intrusion detection tool) and  (to use with ), but these are meant as examples. Do not consider this as a guide for AIDE ;-)

To use for this case, we need to "hook" in the   (after removal of files) and   (after installation of files) functions, because that is when the files on the file system have been changed.

/etc/portage/postsync.d 위치 사용
Until now we've talked about hooking into the ebuild processes. However, Portage also has another important function: updating the Portage tree. In order to run tasks after updating the Portage tree, put a script inside and make sure it is marked as executable.

예제: eix-update 실행
If was not used to update the tree, then it is still possible to update the eix database after running  (or ) by putting a symlink to  called  in.

/etc/portage/profile 사용
기본적으로 젠투는 (적절한 디렉터리로의 심볼릭 링크) 이 가리키는 프로파일에 들어있는 설정을 사용합니다. 이 프로파일은 다른 프로파일(parent 파일을 통해)로부터 상속받는 설정과 특정 환경에서의 설정을 정의합니다.

을 사용하여 꾸러미(어떤 꾸러미를 시스템 셋의 일부로 간주하는지)와 같은 프로파일 설정을 덮어씌울 수 있으며 USE 플래그를 강제할 수 있는 등의 설정을 할 수 있습니다.

예제: 시스템 셋에 nfs-utils 추가
When using an NFS-based file systems for rather critical file systems, it might be necessary to mark as a system package, causing Portage to heavily warn administrators if they would attempt to unmerge it.

To accomplish that, we add the package to, prepended with a :

epatch_user 사용
To manage several ebuilds in a similar manner, ebuild developers use eclasses (sort-of shell libraries) that define commonly used functions. One of these eclasses is which offers an interesting function called.

The  function applies source code patches that are found in, whatever directory is found first. Sadly, not all ebuilds automatically call this function so just putting a patch in this location might not always work.

다행스럽게도, prepare 과정과 같은 경우라면 위에서 언급한 정보를 제공하였을 때 후킹으로 함수를 호출할 수 있습니다. 이 함수는 원하는 만큼 호출할 수 있는데, 패치는 한번만 적용합니다.

Example: Applying patches to Firefox
The package is one of the many that already call   from within the ebuild, so there is no need to override anything specific.

If for some reason (for instance because a developer provided a patch and asked to check if it fixes the bug reported) patching Firefox is wanted, all that is needed is to put the patch in (probably best to use the full name and version so that the patch does not interfere with later versions) and rebuild Firefox.