A. 아... 컴퓨터 뒤에 붙은 직렬 포트에 대해 생각하고 있군요. 여기에서는 `port'라는 말은 유닉스의 한 버전에서 다른 버전으로 프로그램을 `포팅'한 것의 결과를 말하고 있습니다(컴퓨터 관련의 사람들에게는 불행히도 같은 말을 여러가지 서로 다른 것을 지칭해서 사용하는 나쁜 버릇이 있습니다).
A. 그렇습니다. 그것이 보통 가장 빠르고 쉬운 방법입니다.
A. 몇가지 이유가 있습니다:-
A. 패치는 어떤 버전의 파일이 다른 버전으로 바뀌어진 내용을 지정해 놓은 (보통)조그만 파일입니다. 이것은 텍스트인데, 실제적으로 ``23행을 지우시오''라든가 ``468행 다음에 다음 두 줄을 더하시오'', ``197행을 다음과 같이 바꾸시오'' 등등이라고 쓰여져 있습니다. `diff'라고도 알려져 있는데, 패치가 이 프로그램으로 만들어지기 때문입니다.
A. .tar나 .tar.gz(.tar.Z일수도 있고, DOS 파일시스템에 이름을 우겨넣으려 했다면 .tgz일 수도 있습니다)로 끝나는 파일입니다.
기본적으로, tarball은 하나의 파일(.tar)나 때로는 압축되기도 하는(.gz) 디렉토리 트리의 묶음입니다. 이 방법은 원래 Tape ARchives (그래서 이름이 `tar'입니다)에서 사용하던 방법입니다만, 인터넷에서 프로그램 소스코드를 배포하는데 가장 널리 쓰이는 방법입니다.
기본 FreeBSD 시스템에 있는 표준 유닉스 tar 프로그램을 사용하여 그 안에 어떤 파일이 있는지 볼 수 있고, 풀어볼 수도 있습니다.
tar tvzf foobar.tar.gz # foobar.tar.gz의 내용을 본다 tar xzvf foobar.tar.gz # 현재 디렉토리에 내용을 풀어놓는다 tar tvf foobar.tar # foobar.tar의 내용을 본다 tar xvf foobar.tar # 현재 디렉토리에 내용을 풀어놓는다
A. 체크섬은 여러분이 검사하고 싶은 파일의 모든 데이터를 더해서 만들어지는 숫자입니다. 어떤 글자들이 바뀌면, 체크섬이 원래 합계와 달라지므로, 차이점을 알기 위해서 쉽게 비교해 볼 수 있습니다(실제적으로는 위치 바꾸기와 같은 문제점을 해결하기 위해 더 복잡한 방법을 사용하므로, 단순한 더하기로 끝나지는 않습니다).
# make install >> cku190.tar.gz doesn't seem to exist on this system. >> Attempting to fetch from ftp://kermit.columbia.edu/kermit/archives/.왜 없다는 거죠? 잘못된 CDROM인가요?
A. kermit의 라이센스 조건은 그 tarball을 CDROM에 넣지 못하도록 하였기 때문에 직접 가져와야 합니다 - 죄송합니다! 이런 오류 메시지가 나오는 이유는 그때 인터넷에 직접 연결되어 있지 않았기 때문입니다. 일단 위 사이트에서 소스 파일을 다운로드하면 이 과정을 다시 시작할 수 있습니다(그렇지만 인터넷의 대역폭과 시간을 아끼기 위해 가장 가까운 사이트에서 먼저 해 보세요).
A. 포트 메카니즘은 /usr/ports/distfiles에서 tarball을 찾습니다만, 이 디렉토리가 읽기 전용인 CDROM에 심볼릭 링크되어 있으므로 파일을 복사해 넣을 수는 없습니다. 다음과 같이 해서 다른 곳을 찾아보도록 할 수 있습니다.
DISTDIR=/파일이/있는/곳 make install
A. PORTSDIR과 PREFIX 변수를 사용하여 포트 시스템에게 다른 디렉토리를 사용하라고 말해줄 수 있습니다. 예를 들면
make PORTSDIR=/u/people/guests/wurzburger/ports install
은 /u/people/guests/wurzburger/ports에 있는 포트를 컴파일해서 모든 것을 /usr/local아래에 설치합니다.
make PREFIX=/u/people/guests/wurzburger/local install
은 /usr/ports에 있는 것을 컴파일해서 /u/people/guests/wurzburger/local 아래에 설치합니다.
그리고 물론
make PORTSDIR=.../ports PREFIX=.../local install
은 두가지 모두를 해 줍니다(이 줄은 페이지 크기에 비해 너무 길어서 다 쓰지는 않았습니다만, 어떤 이야기인지 아셨을 줄로 믿습니다).
포트를 설치할 때 마다 매번 이와 같은 것을 다시 입력하는 것을 좋아하지 않는다면(솔직히 말해서 누가 좋아할까요?) 환경 변수에 이 변수들을 놓는 것도 좋은 생각입니다.
A. 포트 콜렉션의 모든 tarball을 얻으러면, 다음과 같이 하세요.
# cd /usr/ports # make fetch
한 포트 디렉토리의 모든 tarball을 얻으려면, 다음과 같이 하세요.
# cd /usr/ports/directory # make fetch
그리고 한개의 포트에 대해서는 - 아, 이미 알고 계시다고요.
A. 예. 가령 ftp.FreeBSD.ORG가 MASTER_SITES에 나열된 사이트들보다 가깝다는 것을 알고 있다면 다음과 같이 하세요.
# cd /usr/ports/directory # make MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSD.ORG/pub/FreeBSD/distfiles/ fetch
A. 'make fetch-list' 라고 하면 포트에 필요한 파일 목록을 보여줍니다.
A. 'make extract' 하면 소스을 받고 풀어 놓은 다음 멈춥니다.
A. 예, 'make patch'가 바로 그것입니다. 또한 PATCH_DEBUG옵션도 유용하다는 것을 알게 될 것입니다. 그건 그렇고, 당신의 노력에 감사드립니다!
A. 예, gcc 버전 2.6.3(FreeBSD 2.1.0과 2.1.5에 들어있는 버전)에서는, -O2 옵션은 -fno-strength-reduce옵션을 같지 주지 않으면 버그있는 코드를 만들어 낼 수 있습니다(대부분의 포트는 -O2를 사용하지 않습니다). 여러분은 반드시 다음과 같은 컴파일러 옵션을 지정해 주어야 합니다.
make CFLAGS='-O2 -fno-strength-reduce' install
또는 /etc/make.conf를 수정할 수도 있습니다. 그러나 불행히도 모든 포트가 이런 방법을 존중해 주는 것은 아닙니다. 가장 확실한 방법은 'make configure'를 하고 소스 디렉토리에 들어가서 Makefile들을 수동으로 고쳐주는 것입니다만, 소스가 각각 Makefile이 딸린 많은 부디렉토리로 구성되어 있다면 지겨울 수 있습니다.
A. /usr/ports에 있는 INDEX 파일을 보세요. 포트 콜렉션을 키워드로 찾고 싶다면, 그렇게 할 수 있습니다. 예를 들면, LISP 프로그래밍 언어 사용에 관련된 포트를 찾고 싶다면 다음과 같이 합니다.
cd /usr/ports make search key=lisp
A. '갑' 포트는 '을'에서 제공하는 무언가를 필요로 합니다 - 예를 들면, '갑'이 그래픽을 사용하면, '을'은 유용한 그래픽 처리 라이브러리를 갖고 있을 것입니다. 또는 '을'은 '갑' 포트를 컴파일하는데 필요한 도구일지도 모릅니다.
A. 문제 없습니다. 그냥 다음처럼 하세요.
pkg_delete grizzle-6.5
A. 물론이죠. 다음과 같이 찾아볼 수 있습니다.
pkg_info -a | grep grizzle
그럼 다음과 같이 알려줄 것입니다:-
Information for grizzle-6.5: grizzle-6.5 - the combined piano tutorial, LOGO interpreter and shoot 'em up arcade game.
A. 예, 프로그램을 설치하고서 소스가 다시 필요하지 않다는 확신이 있으면, 남겨둘 이유는 없겠죠. 가장 좋은 방법은
# cd /usr/ports # make clean
인데, 모든 부디렉토리를 찾아서 각 포트의 스켈러튼을 뺀 모든 것을 지워버릴 것입니다.
A. 예, 일단 tarball에 대한 일이 끝났으면, 그렇게 하세요.
A. 이렇게 하세요.
# cd /usr/ports # make install
A. 아니오, 문제는 어떤 포트는 우리가 여러분 대신 대답해 줄 수 없는 문제들을 물어보는 일을 필요로 하기 때문이며(가령 ``A4용지에 출력할 것입니까 US 레터 용지에 출력할 것입니까?''), 답해주려면 누군가 수동으로 해 주어야 합니다.
A. 예, 잠자러 가거나, 일하러 가거나, 공원에 산책하러 가기 전에 다음과 같이 하세요:-
# cd /usr/ports # make -DBATCH install
이러면 사용자 입력을 필요로 하지 않는 모든 포트를 설치할 것입니다. 그리고 나서 돌아왔다면,
# cd /usr/ports # make -DIS_INTERACTIVE install
이렇게 해서 작업을 완료하세요.
A. 문제 없습니다. 변경에 따른 패치를 어떻게 해야 하는지 알고 있다면:-
# cd /usr/ports/어딘가/frobble # make extract # cd work/frobble-2.8 [패치를 적용합니다] # cd ../.. # make package
A. 비밀이란 없습니다. makefile 디렉토리의 bsd.ports.mk와 bsd.ports.subdir.mk파일을 보세요. (주: 복잡한 쉘 스크립트에 대한 혐오감이 있는 독자는 이 링크를 따라가지 말기를 바랍니다...)