개요
포티지(Portage)는 젠투 리눅스(Gentoo Linux)를 위해 개발된 패키지 관리 시스템이다. Python 프로그래밍 언어로 작성된 자유 소프트웨어이며, GNU 일반 공중 사용 허가서(GPL)로 배포된다. 포티지는 BSD 계열의 포츠(ports) 컬렉션 개념에 기반을 두고 있으며, FreeBSD의 포츠 시스템을 참고하여 설계되었다.
주요 기능
포티지는 사용자가 설치를 원하는 패키지를 소스 코드로부터 직접 컴파일하여 설치하는 것을 특징으로 한다. 이 과정에서 컴파일러 옵션과 애플리케이션 옵션을 시스템 사양과 사용자의 요구에 맞게 조정할 수 있다. 포티지가 제공하는 시스템 관리 기능에는 병렬 패키지 설치 허용, 패키지 간 의존성 추적, 설치된 패키지 데이터베이스 관리, 로컬 저장소(리포지토리) 제공, 원격 저장소와의 동기화 등이 포함된다.
포티지 시스템은 크게 두 가지 주요 구성 요소로 이루어진다. 첫째는 이빌드(ebuild) 시스템으로, 패키지의 빌드와 설치에 관한 실제 작업을 담당한다. 둘째는 이머지(emerge)로, 이빌드에 대한 사용자 인터페이스를 제공하며 저장소 관리, 의존성 해결 등의 기능을 수행한다. 이 구조는 RPM과 yum, 또는 dpkg와 APT의 관계와 유사하다.
USE 플래그
포티지의 대표적인 특성 중 하나는 'USE 플래그(USE flags)' 시스템이다. 사용자는 이를 통해 패키지를 빌드할 때 포함하거나 제외할 선택적 기능을 지정할 수 있다. 예를 들어 DVD 지원을 나타내는 USE 플래그를 활성화하면 해당 기능이 패키지 컴파일 시 포함된다. USE 플래그는 일반적으로 컴파일 설정(configure) 스크립트의 옵션으로 변환되어 적용된다.
이빌드(ebuild)
젠투 리눅스는 기본적으로 다른 패키지 관리 시스템처럼 미리 컴파일된 바이너리 패키지를 사용하지 않고, 이빌드라는 형식을 사용한다. 이빌드는 소프트웨어에 대한 설명과 소스 코드 취득, 설정, 컴파일, 설치 방법에 대한 지침을 담고 있는 셸 스크립트이다. 공식 저장소에는 19,600개 이상의 이빌드가 제공되고 있으며, 대부분 젠투 미러를 통해 배포된다. 젠투는 컴파일에 오랜 시간이 걸리는 일부 프로그램에 대해서는 사전 컴파일된 바이너리 패키지도 제공한다.
이머지(emerge)
이머지 명령줄 도구는 포티지의 핵심 인터페이스이다. 이머지는 의존성 계산 및 관리, 이빌드 실행, 로컬 포티지 트리와 설치 패키지 데이터베이스 유지 관리를 수행한다. 이머지는 이빌드를 샌드박스 환경에서 실행하여, 빌드 과정에서 실행되는 스크립트로부터 시스템을 보호하고 성공적인 빌드와 설치 후에만 결과물을 시스템에 병합한다.
안정성 등급
포티지는 이빌드의 안정성을 세 가지 등급으로 구분한다. '안정(stable)'은 출시 당시 의도된 대로 동작하며 알려진 보안 문제가 없는 패키지, '키워드 마스크(keyword masked)'는 대상 시스템 아키텍처에서 충분히 테스트되지 않아 안정적인 것으로 간주되지 않는 패키지, '하드 마스크(hard masked)'는 손상되었거나 보안상 매우 취약한 패키지를 의미한다. 사용자는 /etc/portage 설정 파일을 통해 마스크된 패키지라도 설치할 수 있다.
다른 운영 체제로의 이식
포티지의 유연성 덕분에 젠투는 운영 체제 독립적인 '메타 배포판'으로 일컬어지기도 한다. 젠투/Alt 프로젝트는 포티지를 FreeBSD, Mac OS X, 솔라리스 등의 다른 운영 체제에서 사용할 수 있도록 이식하는 작업을 진행했다. 그중 가장 대표적인 구현으로는 젠투/FreeBSD 프로젝트가 있다. 현재는 젠투 Prefix 프로젝트가 Mac OS X 및 다른 플랫폼 사용자에게 젠투 환경을 제공하고 있다.
패키지 관리자 명세(PMS)
포티지의 동작을 표준화하고 문서화하기 위한 '패키지 관리자 명세(Package Manager Specification, PMS)' 프로젝트가 진행 중이다. 이 프로젝트는 이빌드 트리와 젠투 시스템 패키지를 Paludis, pkgcore 같은 대체 패키지 관리자에서도 사용할 수 있도록 지원하는 것을 목표로 한다.
비슷한 소프트웨어
포티지와 유사한 소프트웨어로는 pkgsrc, 팔루디스(Paludis), pkgcore 등이 있으며, 아치 리눅스의 아치 빌드 시스템(ABS)도 포츠 계열 시스템으로 분류된다.