OS X는 새로운 버전이 출시 될때마다 BSD의 표준에 좀더 충실히 따라가려는 노력이 보인다. 여기에서는 BSD 패키지 관리인 port tree system의 mac버전이 macports에 관해 살펴보기로한다. 개괄적인 설명이 포함될것이고 세부적인 면이 앞으로 추가되길 바란다. (여기에서 fink에 대해서는 따로 언급을 안하기로 한다.)
port 시스템은 기본적으로 port tree에 릴되어있는 패키지의 정보를 가져와서 원하는 패키지를 선택해서 소스로 설치를 한다. 바이너리의 설치도 지원이란 말은 포트를 pkg, dmg,rpm 따위의 바이너리 아카이브로 만들어줌을 의미한다(잘못알고 있다면 단호히 지적바란다.현재 leopard 10.5.1). 소스 설치의 경우 쓸때없이 컴파일 시간 잡아 먹을수도 있다고 느낄 것이다. 브라우져나 오피스같은 경우 다른 BSD의 경우 finrefox-bin, openoffice-bin따위를 제공하지만 macports는 이들이 없다 . 개인적으로 그리 특별히 컴파일의 매력이 없는 일반사용자로서 컴파일의 속도는 지옥이다. 이는 사용자마다 다를 것이다.
하지만 여전히 OS X에서 ports시스템은 매력이 존재한다. 터미널에서 수도없이 많은 명령어기반 소프트웨어, x11,그리고 심지어 Aqua기반의 오픈소스까지 설치할수 있다. 사용할수 있는 ports를 보려면...
위와 같이 주루룩 터미널에 뭔가를 뿌리고 'selfupdate done'이란 메세지를 뿜어낸다면 잘된것이다.
ports 시스템 사용시 가장 기본 명령어가 바로 'port'(NOT 'ports')이다. 위 명령어는
sudo port -d selfupdate
port tree를 새로 받아와서 업데이트를 시켜주는 가장 기본적이며 종종해주어야 하는 명령어이다. port tree는 아주 자주 업데이트 된다. 언제 업데이트 될지 모르기때문에 새로운 어플을 설치하거나 할때 아니면 macports에 손댈일이 생기면 먼저 실행 시켜주고 시작하는 것이 좋다. 아예 cron으로 예약을 해 두는 것도 좋은 방법이다.(이는 데스크탑의 경우 꼭해두는 것도 나쁘지 않다고 생각한다. 노트북에서는 글쎄..이다.이는 사견이다.)
port는 시스템을 관리하는 어플이기에 꼭 이를 변경시키는 명령어에서는 꼭 관리자 명령으로 실행해야한다. 이게 무슨말이냐 하면은... 일반사용자 계정에서
1. $>port search xmms
는 되지만
2. $>port install xmms (X)
는 안된다는 것이다. 1번은 단지 port tree에서 xmms 를 검색하는 명령어이다. 검색은 하지만 port tree를 건드려서 변경시키지는 않는다. 하지만 2번의 경우는 xmms패키지를 설치하는 것으로 port tree를 변경시킨다. 이렇게 어떠한 경우든 port를 설치하거나 제거,변경등이 일어날때는 앞에 sudo를 꼭 붙여주어야한다. (sudo의 authenticate timestamp를 배제하고 말한다.)
등이 있다. 꽤 많은 것 같지만 몇몇은 일반적으로 쓸일이 없을 것이다. 개인적으로 내가 자주 쓴 명령어를 위순서로 나열하면...
sudo port activate 'package' 패키지 활성화, 버전에 따라 겹치는 경우가 있는데 아래명령어와 같이 사용. sudo port deactivate 'package' sudo port clean 'package' 패키지설치도중 에러나 variants재설정시 기존 config를 제거 sudo port clean all 모든 패키지 초기화.distfile은 삭제되지 않는다. port distcheck 'package' port deps 'package' 패키지 의존성 검사 port dependents 'package' 패키지에 의존성이 걸려있는 패키지 sudo port edit 'package' 패키지 상태를 변경. 권하지 않는다. 차라리 버전이 겹치는 경우라면 따로 포트파일을만드는게 현명하다. sudo port fetch 'package' port info 'package' 패키지 정보 검색 sudo port install 'package' port list installed|grep 'arg' 설치된 패키지에서 검색 ... ... port list outdated 업그레이드된 포트 리스트 검색 sudo port upgrade outdated 업그레이드된 포트 설치 sudo port uninstall 'package' ... ... port variants 'package' 패키지 variants 보기
를 보면 각 패키지의 variants를 볼수 있다. 우리는 이 variants에 주목할 필요가 있다.
POSIX 계열의 OS에서 프로그램을 소스로 설치시 보통
1.configure make전에 컴파일 옵션과 다른 설정을 한다. 2.make 링크,컴파일 3.make install 바이너리,설정파일 정해진 경로에 설치
의 절차를 따른다. 1번에서... 보통을 아무 옵션을 주지 않고 설치하는 경우가 대부분이다. 하지만 아무 소스나 직접 받아서 configure --help 라고 입력해 보면 많은 옵션들을 볼수가 있다. 아래는 xmms-1.2.11의 소스를 받아와서 configure --help를 입력한 화면의 일부이다.
많은 옵션들이 보인다. 평상시 모르고 지냈던 옵션들이다. 하지만 이옵션들은 xmms를 좀더 다이나믹하게 사용하게 해주는 옵션들이다. configure할때 그냥 아무 arg를 안먹이는 것보다 예를들면
configure --enable-simd --enable-ipv6
라고 설정후 make, make install하며 x86SIMD와 ipv6를 지원하는 xmms로 컴파일 된다는 말이다.
아무옵션없이 했다면 default=no라고 표기 되어 있듯이 저 기능이 지원없이 컴파일이 된다. (simd와 ipv6이 뭐가 중요하겠나고 묻는사람도 있겠지만 그냥 예를 든것이다. 이외에도 configure --help해보면 훨~씬 많은 variable과 옵션이 존재한다.)
그렇다면 port에서는 어떻게 저런것들을 설정할수 있을까? configure를 실행할수도 없는데... 내가 아는 두가지 방법이 있는데 그 하나가 가장 많이 쓰는 variants 이다. 아래를 보자.
위의 두 명령어로 variants를 볼수 있다. xmms의 설정할수 있는 variants는 universal, darwin, linux 세가지 뿐이다. 여기서 잠깐... 내가 예를 xmms로 든것을 지금 글쓰는 이시점에서 무척이나 후회하고 있다.하필이면 설정할수 있는 variants의 값이 적고 일반적이지못한 xmms를 예로 들다니...; 하지만 어쩔수 없다. 어짜피 이해의 목적이 있으니 계속 이것으로 예를 들어 보겠다.
variants를 적용해서 설치할때는 아래와 같은 방법으로 해주면 된다.
sudo port install xmms +universal +linux
적용할 variants앞에 '+'를 붙여준뒤 써주면 된다. 위는 유니버셜로 컴파일되고 linux라는 옵션이 적용되어 컴파일된다. 보통 port에서는 설정할수 있는 옵션이 소스로 컴파일시보다 적은데 이는 의존성문제를 최대한 줄이기 위해서이다. 위에서 port info xmms에서 보면
가 보이는데 이는 xmms가 가지고 있는 의존성 걸린 패키지들이다. 이들을 xmms설치하면 이 패키지들의 설치 여부를 판단하고 없다면 이들부터 설치한다.
!!!중요한 한가지는... 만약 "sudo port install 'package' +var1 +var2" 했을때 var1,var2에 의존성이 걸리는 패키지가 있다면 이또한 설치를 하게 된다. 하지만 이들 패키지들은 port info 'package'라고 했을때 나오는 'Library Dependencies:'에는 나오지 않는다것에 주의하자.!!!
설정할수 있는 다른 한가지 방법으로
sudo port edit xmms
가 있다.
port edit를 실행하기 위해서는 터미널에서 EDITOR가 정의 되어 있어야 한다. export $EDITOR='/usr/bin/vi' (애용하는 걸로 하라.)
위에서 보면 xmms의 variants인 darwin과 linux를 볼수 있다. darwin 설정시 --disable-oss를 옵션으로 넣는다는 말이다. linux설정시는 두가지 경우가 보이는데 이는 linux와 섞어쓰는 특별한 경우가 되는데 설명이 갑갑하다.(사실 +linux하면 에러뜬다. 참고 해두시라.)
다시한번 xmms를 예를 든것은 잘못이다.;;; 지금 찾아보니 imageMagick 이 설명들기에 너무도 좋은 패키지란 생각이 떠오른다.
port edit 'package'하면 안에서 선택가능한 옵션을 변경할수 있다. xmms보다 sudo edit imageMagik 을 실행해서 한번 보기 바란다. 깔끔하게 정리가 될것이다. 하지만 이같은 경우 잘못 설정했을 경우 의존성이 마구 꼬기 시작하는 첫걸음이 된다. 코드에 자신이 있거나 작은 변화를 주는 경우가 아니라면 절대 자제하기 바란다.(실제 관리자권한으로 실행해야 수정이 가능하다.) 아주 많이 바꾸어야 한다면 소스를 받아와 따로 포트에 포함시키자.(이는 다음에 설명하도록한다.)
지금까지 macports의 대략적인 사용법을 보았다. 다음에는 여러 어플을 설치하고 실행해보고 또 빠진 설명이 있다면 보충해볼까한다.
emacs를 이용해 spelling 을 검사할 수 있는 ispell 설치하기
1. mac port를 설치한다 (Darwin port 라고도 하는 것 같았다..?)
http://darwinports.com/ 에서 Darwin port 를 다운로드
난 csh을 쓰기 때문에 다음을 ~/.cshrc 에 추가
setenv PATH /opt/local/bin:/opt/local/sbin:${PATH} setenv MANPATH ....