MacPorts
1. 개요
MacPorts는 macOS 및 Darwin 운영 체제에서 유닉스 소프트웨어 설치를 돕는 패키지 관리 시스템이다. 2002년 애플 직원들이 시작한 DarwinPorts 프로젝트에서 시작되었으며, OpenDarwin 프로젝트의 일부로 운영되었다. OpenDarwin 종료 후 Mac OS Forge를 거쳐 2016년 GitHub로 이전되었다. MacPorts는 33,600개 이상의 포트를 제공하며, 포트 설치, 업데이트, 변형(variants) 기능을 제공한다. MacPorts는 소스 코드 컴파일 또는 미리 빌드된 바이너리 아카이브를 통해 소프트웨어를 설치하며, 포트파일(Portfile)을 사용하여 빌드 과정을 관리한다.
-
자유 패키지 관리 시스템 -
F-Droid
F-Droid는 2010년 키어런 걸트니엑스가 설립한 안드로이드용 자유 소프트웨어 앱 저장소로, 구글 플레이 스토어에 없는 자유/오픈 소스 소프트웨어 앱을 제공하며 감시, 검열 저항, 개인 정보 보호에 중점을 둔 클라이언트 앱, 저장소 관리 도구, 웹사이트 생성기 등의 하위 프로젝트로 구성된다. -
자유 패키지 관리 시스템 -
어드밴스트 패키징 툴
어드밴스트 패키징 툴(APT)은 데비안 계열 리눅스 배포판에서 패키지를 관리하는 도구 모음으로, 패키지 설치, 삭제, 업데이트, 업그레이드 기능을 제공하며, 특히 패키지 간 의존성을 자동 관리하는 특징을 가진다. -
MacOS용 유틸리티 -
야후! 위젯
야후! 위젯은 자바스크립트와 XML을 기반으로 하여 다양한 기능을 수행하는 위젯을 제작하고 배포할 수 있도록 지원하는 소프트웨어이다. -
MacOS용 유틸리티 -
F.lux
f.lux는 사용자의 위치와 시간에 따라 컴퓨터 디스플레이의 색온도를 자동으로 조절하여 야간 작업 시 블루 라이트 노출을 줄여주는 소프트웨어이다. -
콘솔 애플리케이션 -
MS-DOS 편집기
MS-DOS 편집기는 MS-DOS 운영 체제에 포함된 텍스트 편집기로, 다중 문서 인터페이스, 이진 파일 모드, 마우스 지원 기능을 제공하며, 다양한 버전으로 출시되었다. -
콘솔 애플리케이션 -
Top (소프트웨어)
top은 시스템의 실시간 상태를 보여주는 프로세스 모니터링 소프트웨어 유틸리티로, CPU 사용률, 메모리 사용량, 실행 중인 프로세스 목록 등 다양한 정보를 제공한다.
2. 역사
MacPorts는 2002년 랜드 풀러, 케빈 반 베히텐, 조던 허바드를 포함한 여러 애플 직원들의 참여로 시작되었다. 원래는 Darwin과 FreeBSD Ports에서 이름을 따와 DarwinPorts로 알려졌으며, OpenDarwin 프로젝트의 일부로서 macOS 및 Darwin 사용자들이 유닉스 소프트웨어를 설치하도록 돕는 것을 목표로 했다.
2006년 OpenDarwin이 종료된 후, DarwinPorts는 애플이 지원하지 않는 타사 프로젝트를 위해 애플이 만들고 유지 관리하는 오픈 소스 호스팅 서비스인 Mac OS Forge에서 호스팅되었다. 이후 프로젝트가 macOS에 중점을 두고 있음을 나타내기 위해 이름이 MacPorts로 변경되었다.
2016년 애플이 Mac OS Forge를 폐쇄하면서 프로젝트는 GitHub로 이전되었다. 이러한 변경의 일환으로 git이 새로운 버전 관리 시스템으로 사용되었지만, Trac은 GitHub 이슈보다 티켓 관리에 여전히 선호되었다.
2005년 4월 28일, 버전 1.0이 출시되었다. 같은 해 12월, 프로젝트는 3000개가 넘는 포트를 기록하며 이정표에 도달했다. 당시 패키지 설치는 소스 코드를 다운로드하여 최종 사용자의 시스템에서 컴파일하는 방식으로 이루어졌다. 2011년에 출시된 버전 2.0은 미리 빌드된 바이너리 아카이브에 대한 지원을 도입하여, 사용 가능한 경우 미리 빌드된 바이너리 아카이브를 사용하여 포트를 설치하고, 그렇지 않은 경우 소스에서 빌드하는 방식으로 변경되었다. 2023년 5월 현재, MacPorts는 33,600개 이상의 포트를 가지고 있으며, 커뮤니티에서 최선을 다한 지원을 받을 수 있다.
3. 사용법
MacPorts는 터미널에서 `port` 명령어를 통해 사용한다. `port [옵션] [명령]` 형식으로 사용하며, 자세한 명령어와 옵션은 `port help`로 확인할 수 있다.
자주 쓰이는 명령어는 다음과 같다:
* `selfupdate`: MacPorts 자체를 업데이트한다.
* `install`: 패키지를 설치한다.
* `upgrade`: 설치된 패키지를 업데이트한다.
3.1. 소프트웨어 설치
MacPorts를 사용하여 소프트웨어를 설치하려면 `sudo port install [패키지 이름]` 명령어를 사용한다. 예를 들어, LibreOffice와 Texmaker를 모두 설치하려면 다음과 같이 실행한다.
```text
sudo port install libreoffice texmaker
```
이는 로컬 포트 트리에 표시된 최신 버전을 설치한다. `selfupdate`를 미리 실행하면 다운로드한 패키지가 MacPorts에서 가장 최신 버전인지 확인할 수 있다.
3.2. 소프트웨어 업데이트
설치된 소프트웨어를 업데이트하려면 `sudo port upgrade outdated` 명령어를 사용한다. `sync` 명령어는 로컬 포트 트리를 업데이트하여 새로운 소프트웨어 및 업데이트된 소프트웨어에 대한 정보를 가져온다. 이는 `brew update` 또는 `apt update`와 유사하다. `selfupdate` 명령어는 `sync`와 같은 기능을 수행하며, 추가로 MacPorts 시스템 자체도 업데이트한다. 대부분의 경우 `sync`만 실행하는 것보다 이 명령어를 사용하는 것이 좋으며, MacPorts를 사용하기 전에 매번 실행하는 것이 좋다.
예를 들어, 오래된 포트를 업데이트하는 일반적인 작업은 다음 명령어를 실행하여 수행할 수 있다.
```shell
sudo port selfupdate
sudo port upgrade outdated
```
MacPorts는 and, or, not과 같은 논리 연산자와 glob 패턴(기본적으로 활성화됨) 및 정규 표현식(`--regex`를 통해 활성화됨)을 지원한다. 예를 들어, 모든 PHP 버전을 제외하고 오래된 포트를 업데이트하려면 위 명령어를 다음과 같이 변경한다.
```shell
sudo port selfupdate
sudo port upgrade outdated and not php*
3.3. 변형 (Variants)
변형(Variants)은 포트 설치 시 호출될 수 있는 다양한 옵션을 제공한다. 일반적인 작업에는 종속성 추가 또는 제거, 빌드 인수 변경 등이 포함된다. 이는 모든 사용자에게 반드시 유용하지는 않지만, 다른 사용자에게는 유용할 수 있는 추가 기능을 제공한다.
예를 들어, youtube-dl 포트는 기본적으로 활성화된 ffmpeg 변형을 제공한다. 이는 두 개의 추가 종속성을 추가하는 대신 오디오를 추출할 수 있게 해준다. 변형은 `+` 또는 `-` 기호를 사용하여 포함하거나 제거할 수 있다. 예를 들어 ffmpeg 변형을 비활성화하려면 다음 명령어를 실행한다.
`sudo port install youtube-dl -ffmpeg`
여러 변형은 공백으로 구분하여 차례로 나열할 수 있다. 예를 들어, apache2 포트에서 기본 prefork MPM을 작업자 MPM으로 변경하려면 다음 명령어를 실행한다.
`sudo port install apache2 -preforkmpm +workermpm`
포트의 변형은 `port variants 패키지이름`을 실행하거나 MacPorts 웹사이트에서 포트를 검색하여 확인할 수 있다.
4. 구현
MacPorts는 macOS 운영 체제 위에 추가적인 소프트웨어를 설치하여, 기본 시스템에 포함되지 않았거나 최신 버전이 아닌 소프트웨어를 제공한다. 이는 운영 체제의 일부로 포함된 APT나 DNF와 같은 패키지 관리 시스템과는 다른 방식이다. MacPorts는 Fink, Homebrew와 함께 오버레이 배포판으로 분류된다.
MacPorts는 FreeBSD Ports Collection과 달리 기본적으로 `/opt/local`에 데이터를 저장하여, 다른 패키징 시스템과의 충돌을 방지한다. Fink 역시 비슷한 방식으로 `/sw`에 데이터를 설치한다.
4.1. 바이너리 아카이브
빌드봇은 사용자가 패키지를 로컬에서 컴파일할 필요가 없도록 포트를 미리 빌드하는 데 사용된다. 이 결과는 바이너리 아카이브라고 하며 설치에 필요한 시간을 줄이는 데 도움이 된다. 하지만 바이너리 빌드가 실패하거나 포트의 라이선스가 바이너리 배포를 허용하지 않는 경우, 로컬에서 소스 코드를 빌드해야 할 수도 있다.
4.2. 포트파일 (Portfiles)
MacPorts는 포트를 빌드하는 데 필요한 지침을 포트파일(Portfile)에 저장하며, 이는 TCL 스크립트 언어로 작성된다. 포트파일은 완전한 TCL 프로그램으로, 간단한 '키-값' 쌍을 사용하여 속성을 정의한다.
각 포트파일에는 미리 정의된 단계가 있으며, 여기에는 다음이 포함된다.
* Fetch: MacPorts는 포트에 대한 모든 관련 파일을 업스트림에서 검색하고 다운로드한다. 이를 distfile이라고 한다. 설치가 완료되면 임시 빌드 파일과 함께 제거된다.
* Checksum: 체크섬은 파일마다 다르므로 항상 포트파일 내에서 정의된다. 다운로드한 파일의 체크섬은 포트파일의 체크섬과 비교하여 일치하는지 확인한다.
* Patch: 경우에 따라 MacPorts를 통해 설치할 수 있도록 코드를 수정해야 할 수 있다. 이는 기본적으로 잘못된 위치에 설치되는 것과 같은 다양한 이유로 발생할 수 있다. 패치 파일을 사용하여 소스 코드를 읽을 수 있는 형식으로 수정할 수 있다.
* Configure: 프로젝트의 configure 스크립트는 빌드 프로세스를 준비하기 위해 실행된다. 이 과정의 일부는 필요한 라이브러리가 있는지 여부를 결정하는 것이다. configure 스크립트가 없는 포트의 경우 이 단계(및 필요한 다른 단계)를 비활성화할 수 있다.
* Build: 포트파일의 지침을 사용하여 포트를 빌드한다. 실행되는 명령어는 언어에 따라 다를 수 있다.
* Test: 일부 포트는 빌드가 성공했는지 확인하는 테스트를 정의한다. 이는 사용자가 `port test packagename`을 실행하는 경우에만 실행되는 선택적 단계이다. 따라서 포트를 설치할 때는 실행되지 않는다.
* Destroot: destroot 단계는 빌드된 파일을 올바른 위치로 이동하는 첫 번째 단계이다. MacPorts는 파일을 올바른 위치에 배치하기 전에 먼저 설치를 중간 위치(destroot)에 스테이징하는 방식을 사용한다. 이것의 한 가지 장점은 생성된 파일을 쉽게 기록하여 깨끗하게 제거할 수 있다는 것이다. 예를 들어, 일반적으로 `/opt/local/lib/libfoo.a`에 설치될 파일은 destroot 단계에서 `/tmp/stage/opt/local/lib/libfoo.a`에 먼저 설치되어 상대 디렉토리 구조를 유지할 수 있다.
* Install: destroot된 파일은 안전하게 보관된다. 이러한 파일이 아직 활성화되지 않았으므로 동일한 포트의 여러 버전을 서로 간섭하지 않고 보관할 수 있다.
* Activate: 포트를 활성화하면 destroot 디렉토리의 파일이 올바른 위치로 이동한다. 이렇게 하면 사용자가 액세스할 수 있어 설치 프로세스가 완료된다. 다른 버전의 포트를 사용해 보려면 현재 버전을 비활성화하고 새 버전을 활성화할 수 있다. 아카이브된 파일에서 쉽게 다시 활성화할 수 있으므로 이전 포트를 제거하지 않는다.
포트를 업그레이드할 때 MacPorts는 현재 버전을 비활성화하지만 안전을 위해 제거하지 않는다. 이를 통해 업데이트로 인해 변경이 발생할 경우 사용자는 이전 버전으로 쉽게 되돌릴 수 있다. 대부분의 시나리오에서 사용자의 시스템에서는 Install, Activate 단계만 발생하는데, 이는 포트에 대한 이진 파일이 미리 빌드되어 로컬에서 소스에서 빌드할 필요가 없기 때문이다.
5. 개발
MacPorts 개발은 개별 유지보수자(Maintainer) 책임 하에 이루어지며, 포트파일에 명시되어 있다. 유지보수자는 필요에 따라 포트를 업데이트하고 버그 수정을 적용해야 한다. 포트 파일을 수정하려는 사람은 변경 사항을 적용하기 전에 유지보수자에게 알려야 하지만, 사소한 수정의 경우에는 항상 필요한 것은 아니다.
누구나 풀 요청을 통해 MacPorts에 기여할 수 있으며, 기여자는 유지보수자로서 좋은 실적을 거둔 후 커밋 권한을 신청할 수 있다. 프로젝트 관리자로 알려진 MacPorts 회원 팀은 프로젝트를 이끌고 조정하는 데 도움을 준다.
2016년부터는 회의가 가끔 연 1회 개최되었다. 일반적으로 슬로베니아에서 열리며, MacPorts 회원들이 향후 개발을 위해 작업할 수 있게 한다.