Handbook:Parts/Working/USE/ko
USE 플래그란
USE 플래그 개념
젠투(또는 기타 배포판이나 어떤 운영체제든)를 설치할 때, 사용자는 다룰 환경에 따라 몇가지 선택을 하고 싶어합니다. 서버에 대한 설정은 워크스테이션에 대한 설정과 다릅니다. 게임용 워크스테이션은 3D 렌더링 워크스테이션과 다릅니다.
꾸러미를 설치할 때만 그런게 아니며 각각의 꾸러미에서 어떤 기능을 선택해야 하느냐를 따질때도 마찬가지입니다. OpenGL이 필요하지 않은데, 왜 대부분 꾸러미에서의 OpenGL의 설치 및 관리, 빌드 지원이 우릴 귀찮게 할까요? KDE를 쓰고 싶지 않은데, 왜 굳이 없어도 완벽하게 돌아가는 KDE 지원이 꾸러미 컴파일 과정에서 귀찮게 할까요?
사용자가 어떤 꾸러미를 설치하고 활성화 해야 할 지 말지 결정하는 일련의 과정을 돕기 위해, 젠투에서는 사용자가 쉬운 방법으로 환경을 지정하길 원했습니다. 이런 일련의 사고를 통해 사용자가 정말로 원하는 바를 결정하도록 사용자를 끌어넣었고, 쓸만한 결정을 처리하도록 포티지의 처리 과정을 쉽게 만들었습니다.
USE 플래그 정의
USE 플래그를 입력하십시오. 각각의 플래그는 지원 기능과 각각의 개념에 대한 의존성 정보를 포함하는 키워드입니다. 어떤 USE 플래그를 지정하면, 포티지에서는 선택한 키워드에 대해 사용자가 어떤 지원 기능을 원하는지 알아차립니다. 물론 이 과정에서 꾸러미에 대한 의존성 정보로 바꾸기도 합니다.
몇가지 특정 예를 살펴보겠습니다: kde
키워드가 있습니다. 이 키워드를 USE 변수에 넣지 않으면, 모든 꾸러미는 KDE 지원 없이 선택적인 KDE 지원을 컴파일합니다. 선택적 KDE 의존성을 지닌 모든 꾸러미는 KDE 라이브러리를 (의존 요소로) 설치하지 않고 설치합니다. kde 키워드를 지정하면 이 꾸러미에 KDE 지원 기능을 함께 컴파일하며 KDE 라이브러리를 의존 요소로 설치합니다.
When the kde
flag is set to enabled, then those packages will be compiled with KDE support, and the KDE libraries will be installed as dependency.
올바르게 키워드를 지정하면 사용자의 요구에 맞춰 시스템의 모양새가 갖춰집니다.
USE 플래그 사용
영구 USE 플래그 선언
앞에서 이야기한 바와 같이, 모든 USE 플래그는 USE 변수에 선언합니다. 사용자가 USE 플래그를 쉽게 검색하고 고를 수 있도록 하기 위해 기본 USE 설정을 제공합니다. 이 설정은 젠투 사용자가 보통 사용한다고 간주하는 USE 플래그의 모음입니다. 이 기본 설정은 선택한 프로파일의 일부인 make.defaults 파일에 선언했습니다.
시스템이 살펴보는 프로파일은 /etc/portage/make.profile이 가리킵니다. 각각의 프로파일은 다른 프로파일의 상위에서 동작하며 최종 결과는 모든 프로파일의 합입니다. 최상위 프로파일은 베이스 프로파일(/usr/portage/profiles/base)입니다.
현재 활성화 한 (전체) USE 플래그를 보려면 emerge --info를 사용하십시오:
root #
emerge --info | grep ^USE
USE="a52 aac acpi alsa branding cairo cdr dbus dts ..."
보시는 바와 같이, 변수에 수많은 키워드가 있습니다. 개인적인 용도로 USE 변수를 새로 뜯어고칠 목적으로 make.defaults 파일의 내용을 어떤 부분이든 바꾸지 마십시오. 이 파일의 내용을 바꾸면 젠투 저장소를 업데이트했을때 되돌릴 수 없습니다!
기본 값을 바꾸려면 USE 변수에서 키워드를 추가하거나 제거하십시오. /etc/portage/make.conf에서 전역 범위의 USE 변수 값을 지정하시면 됩니다. 이 변수에서 필요한 추가 USE 플래그를 추가하거나 더 이상 필요하지 않은 USE 플래그를 제거할 수 있습니다. 플래그 제거는 키워드 앞에 음수 부호(-
)를 붙이시면 됩니다.
KDE와 Qt 지원을 제거하고 LDAP 지원을 추가한다면, /etc/portage/make.conf에서 USE 값을 다음처럼 지정할 수 있습니다:
USE="-kde -qt4 -qt5 ldap"
개별 꾸러미당 USE 플래그 선언
때로는 시스템 전체가 아니라 특정 프로그램 하나 (또는 그 이상)의 USE 플래그 몇가지를 설정하고 싶을 때가 있습니다. 이럴 때는, /etc/portage/package.use 파일을 편집하십시오. package.use는 보통 파일이지만, 하위 경로에 파일이 들어간 디렉터리일 수도 있습니다. 아래 요령을 참고하고 man 5 portage 도움말에서 이 파일의 문법 정보를 참고하십시오. 다음 예제에서는 package.use가 단일 파일임을 가정합니다.
예를 들어 VLC 미디어 재생기 프로그램에 블루레이 지원만을 넣으려면:
media-video/vlc bluray
package.use가 이미 디렉터리(단일 파일 아님) 형태로 있다면, package.use/ 디렉터리 아래에 간단하게 파일을 만들어 USE 플래그를 부분적으로 설정할 수 있습니다. 어떤 파일 이름이든지간에 동작하지만 일관된 이름 형식을 갖추는게 좋습니다. 이름을 짓는 방식 중 하나로는 하위 파일 이름을 간단하게 꾸러미 이름으로 짓는 방식이 있습니다. 예를 들어
bluray
USE 플래그를 media-video/vlc 꾸러미에만 지정할 경우 다음 명령을 실행하여 처리할 수 있습니다:root #
echo "media-video/vlc bluray" >> /etc/portage/package.use/vlc
이와 비슷하게 각각의 프로그램에 대해 USE 플래그를 분명히 비활성화할 수 있습니다. PHP에서 bzip2지원을 비활성화할 경우(하지만 make.conf의 USE 플래그 지정을 통해 다른 꾸러미에는 활성화할 경우):
dev-lang/php -bzip2
임시 USE 플래그 선언
잠깐동안 USE 플래그를 설정해야 할 때도 있습니다. /etc/portage/make.conf를 두 번 편집하는 대신(USE값 바꾸기를 했다가 취소) USE 변수를 환경 변수처럼 지정하면 됩니다. 입력한 명령에 대해서만 이 설정을 적용함을 기억하십시오. 프로그램을 다시 이머지하거나 업데이트(분명히 둘 다 하든지 시스템 업데이트의 일부로 처리하든지)하면 (임시로) 지정한 USE 플래그로 바꾸어놓은 상태를 되돌립니다.
다음 예제에서는 SeaMonkey를 설치하는 과정에서 USE 변수의 pulseaudio
플래그 값을 임시로 제거합니다:
root #
USE="-pulseaudio" emerge www-client/seamonkey
우선 처리
물론 어떤 설정이 USE 설정에 우선하는가에 대한 우선 처리 방식이 있습니다. USE 설정에 대한 우선 처리는 우선 순위에 따릅니다(처음 항목은 우선순위가 낮음)
- 프로파일의 일부인 make.defaults 파일에서 지정한 기본 USE 설정
- /etc/portage/make.conf의 사용자 지정 USE 설정
- /etc/portage/package.use의 사용자 지정 USE 설정
- 환경 변수로 지정한 사용자 지정 USE 설정
포티지에서 본 최종 USE 설정을 보려면 emerge --info를 실행하십시오. 포티지에서 알고 있는 현재 지정 값을 지닌 모든 관련 변수(USE 변수 포함)를 보여줍니다.
root #
emerge --info
전체 시스템에 새 USE 플래그 적용
USE 플래그 값을 바꾸고 나면 필요한 변경 사항을 반영하기 위해 시스템을 업데이트해야합니다. 업데이트를 진행하려면 emerge 명령에 --newuse
옵션을 사용하십시오.
root #
emerge --update --deep --newuse @world
다음, 포티지의 depclean을 실행하여 "이전" 시스템에 이머지한 꾸러미 중, 새 USE 플래그 모음에서 사라진 조건부 의존성을 제거하십시오.
emerge --depclean 명령 실행은 위험한 동작이며 조심스레 취급해야합니다. 필요한 꾸러미를 제거하는지 확인하려면 "오래된" 꾸러미 목록을 다시 한 번 살펴보십시오. 다음 예제에서는 실제로 꾸러미를 제거하지 않고 depclean할 꾸러미의 목록이 무엇인지
-p
스위치로 확인합니다.
root #
emerge -p --depclean
depclean이 끝나면, revdep-rebuild를 실행하여 제거했을지도 모르는 꾸러미에서 제공하는 공유 객체에 동적으로 연결한 프로그램을 다시 빌드하십시오. revdep-rebuild는 app-portage/gentoolkit의 일부입니다. 이 꾸러미를 꼭 이머지하십시오.
root #
revdep-rebuild
모든 과정을 끝나면 시스템에서는 새 USE 플래그를 사용합니다.
꾸러미별 USE 플래그
사용할 수 있는 USE 플래그 보기
seamonkey 예제를 보도록 하겠습니다. 어떤 USE 플래그를 살펴보고 있을까요? emerge 명령에 --pretend
옵션과 --verbose
옵션으로 확인해보겠습니다:
root #
emerge --pretend --verbose www-client/seamonkey
These are the packages that would be merged, in order: Calculating dependencies... done! [ebuild N ] www-client/seamonkey-2.48_beta1::gentoo USE="calendar chatzilla crypt dbus gmp-autoupdate ipc jemalloc pulseaudio roaming skia startup-notification -custom-cflags -custom-optimization -debug -gtk3 -jack -minimal (-neon) (-selinux) (-system-cairo) -system-harfbuzz -system-icu -system-jpeg -system-libevent -system-libvpx -system-sqlite {-test} -wifi" L10N="-ca -cs -de -en-GB -es-AR -es-ES -fi -fr -gl -hu -it -ja -lt -nb -nl -pl -pt-PT -ru -sk -sv -tr -uk -zh-CN -zh-TW" 216,860 KiB Total: 1 package (1 new), Size of downloads: 216,860 KiB
emerge만 이 작업을 하는 도구가 아닙니다. 실제로 app-portage/gentoolkit 꾸러미에 있는 equery가 꾸러미 정보를 제공하기도 합니다.
root #
emerge --ask app-portage/gentoolkit
이제 equery에 uses 매개변수를 붙여 각각의 꾸러미에서 사용하는 USE 플래그를 살펴보겠습니다. gnumeric 꾸러미의 내용을 살펴보면:
user $
equery --nocolor uses =gnumeric-1.12.31
[ Legend : U - final flag setting for installation] [ : I - package is installed with flag ] [ Colors : set, unset ] * Found these USE flags for app-office/gnumeric-1.12.31: U I + + introspection : Add support for GObject based introspection - - libgda : Enable database support through gnome-extra/libgda. - - perl : Enable perl plugin loader. + + python : Enable python plugin loader. + + python_targets_python2_7 : Build with Python 2.7
REQUIRED_USE 상태 충족
일부 이빌드에서는 제대로 동작하게 하려 일부 USE 플래그 조합을 요구하거나 막는 경우가 있습니다. 이런 경우 REQUIRED_USE 조건에 있는 여러 조건으로 표현합니다. 이 조건은 모든 기능과 의존성이 완벽한지 확인하며, 빌드를 성공시키고, 기대하던 동작이 가능하도록 합니다. 이 조건을 만나지 못하면 이머지에서는 문제를 해결하도록 경고하고 요구합니다.
예제 | 설명 |
---|---|
REQUIRED_USE="foo? ( bar )"
|
foo 를 설정했다면, bar 를 설정해야 함.
|
REQUIRED_USE="foo? ( !bar )"
|
foo 를 설정했다면, bar 는 설정하지 말아야 함.
|
REQUIRED_USE="foo? ( || ( bar baz ) )"
|
foo 를 설정했다면, bar 또는 baz 를 설정해야 함.
|
REQUIRED_USE="^^ ( foo bar baz )"
|
foo , bar , baz 중 하나만 설정해야 함.
|
REQUIRED_USE="|| ( foo bar baz )"
|
최소한 foo , bar , baz 중 하나는 설정해야 함.
|
REQUIRED_USE="?? ( foo bar baz )"
|
foo , bar , baz 중 하나만 설정할 수 있음.
|