NetBSD 공작소

NetBSD 5 브랜치

작년 말에 발표된 NetBSD 4.0의 뒤를 이을 새 버젼, 5.0을 내놓기 위한 안정 브랜치가 NetBSD CVS 저장소에 모습을 드러냈다. 지난 몇 달간 기능 동결을 선언하고 안정화에 집중해 온 결과이다. 아직 5.0 릴리스 전에 해결해야 할 문제가 남아있긴 하지만, 5.0이라 부를만큼 수많은 새 기능들이 들어갔다. 특히 쓰레드 관리가 개선되어 멀티 프로세서를 제대로 지원하게 된 것과, BSD 계열의 대표 파일 시스템인 FFS에 최초로 저널링 기능을 추가한 것 등이 눈에 띈다. 정식 발표보다 앞서 NetBSD 5.0을 써보고 싶다면 CVS에서 netbsd-5 브랜치를 받아서 설치하면 된다.

% cvs -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -rnetbsd-5

기능 동결 기간 동안 안정성도 많이 향상되어서, 특별히 중요한 써버가 아니라면 일반 용도로는 큰 무리가 없을 것이다. 몇 달째 NetBSD의 개발 버젼을 기반으로 많은 작업을 해왔지만 아직 심각한 문제는 발견하지 못했다. 특히 듀얼 코어 기종에서의 성능은 아주 만족스럽다. 저널링도 몇 주 전부터 사용하고 있는데, 더 이상 정전과 재부팅이 두렵지 않게 되었다. 1.6부터 쭈욱 NetBSD를 써 왔지만, 이번 5.0이 기능상 가장 많은 발전을 이룬 버젼이 아닌가 한다.

netbsd-5 브랜치가 생겼으므로 netbsd-current는 4.99.73에서 5.99.1로 버젼이 올라갔다.

64비트 환경에서 32비트 실행 파일 지원

x86 기종이 32비트 환경에서 64비트 환경으로 넘어가면서 가장 먼저 고려해야할 것은 하위 호환성이었다. 80386과 함께 보급된 수많은 32비트 피씨에서 돌고 있는 소프트웨어들이 있었기 때문이다. 하지만 인텔은 이를 무시하고 펜티엄과 호환되지 않는 아이태니엄(IA-64)을 발표해버렸다. 하지만 일반 사용자 입장에서는 잘 쓰던 프로그램을 돌릴 수 없는데 이 칩이 내장된 컴퓨터를 살 이유가 없었다. 결국 잽싸게 펜티엄 호환 64비트 칩(AMD64)을 출시한 AMD가 개인용 64비트 피씨 시장을 선점해버렸다. 인텔도 뒤늦게 잘못을 깨닫고 AMD64를 베낀 EM64T를 내놓았지만, 만회하기까지에는 상당한 시간이 걸렸다.

어쨌든 그 결과 지금은 대부분의 개인용 피씨가 AMD64 아키텍쳐를 채택하고 있어서, 사용자는 64비트든 32비트든 자기가 원하는 버젼의 운영 체제를 설치해서 사용할 수 있다. 하지만 32비트와의 호환성 문제는 여기서 그치지 않는다. 비록 64비트 운영 체제를 설치했다고 하더라도, 32비트 프로그램을 돌리고자 할 때가 있다. 이전에 32비트 환경에서 개발했는데 64비트 환경으로 이식하기엔 너무 노력이 많이 드는 프로그램이나, 32비트용으로 구매를 해서 바이너리만 갖고 있는 소프트웨어 등이 그런 경우에 해당할 것이다. 이 경우 우선 운영 체제가 32비트 호환 모드로 프로그램을 실행할 수 있어야 하고, 해당 32비트 프로그램이 필요로 하는 모든 동적 라이브러리도 제공해 주어야 한다. 몇몇 리눅스 시스템의 경우 /usr/lib32라는 디렉토리를 만들어 32비트용 라이브러리를 넣어두고 쓰는 방식을 택하기도 했다.

NetBSD에서는 최근 Matthew Green씨가 이를 깔끔한 방법으로 구현하여 발표했다. /usr/lib에는 해당 운영 체제의 원래 라이브러리가 들어가고, 다른 아키텍쳐의 라이브러리는 /usr/lib 밑에 아키텍쳐 이름과 같은 디렉토리에 들어간다. 즉, AMD64용 라이브러리는 /usr/lib에 두고, /usr/lib/i386에 32비트용 x86 라이브러리를 넣는 것이다. 이 방식은 다른 NetBSD 포트에도 동일하게 적용되어, NetBSD/sparc64라면 /usr/lib에는 sparc64의 라이브러리가, /usr/lib/sparc에는 32비트용 sparc의 라이브러리가 들어간다. 중요한 것은 사용자는 이에 대해 전혀 신경 쓸 필요가 없다는 점이다. 32비트 바이너리이든 64비트 바이너리이든, 그냥 실행만 하면 동적 링커가 알아서 맞는 라이브러리를 찾아 실행해준다. 더 나아가 64비트 환경에서 32비트 프로그램을 만드는 일도 간단하다. 컴파일러에 -m32 옵션만 주면 된다. 어떤 바이너리가 생성되었는지는 file 명령으로 간단히 알아볼 수 있다. 옵션 없이 NetBSD/amd64에서 C 프로그램을 컴파일하면 다음과 같이 64비트 실행파일이 생긴다.

% gcc test.c
% file a.out
a.out: ELF 64-bit LSB executable, x86-64, ...

이제 -m32 옵션을 줘 보자.

% gcc -m32 test.c
% file a.out
a.out: ELF 32-bit LSB executable, Intel 80386, ...

32비트 실행파일이 만들어진 것을 알 수 있다. 이 실행파일은 64비트 실행파일과 마찬가지로 그냥 셸에서 바로 실행할 수 있다. 게다가 이 파일을 32비트 환경, 즉 NetBSD/i386으로 가져가도 실행할 수 있다. 느려터진 32비트 컴퓨터에서 컴파일할 일이 있다고 좌절할 필요가 없는 것이다. 빠른 64비트 컴퓨터에서 32비트용으로 순식간에 컴파일한 후, 파일만 그대로 복사하면 된다.

이 기능은 최신 NetBSD 소스를 받아 NetBSD를 설치하면 사용할 수 있으며, 다음 버젼인 5.0에 포함될 예정이다.

NetBSD 보안 권고 13, 14, 15

NetBSD 프로젝트에서 보안 권고 세 개를 잇달아 발표했다. 보안 권고 2008-013보안 권고 2008-015는 IPv6와 관련된 것이므로, 대부분의 사용자들에게는 영향이 없을 것이다. 보안 권고 2008-014는 NetBSD의 ftpd(8)로 FTP 써버를 운영하고 있는 경우에 해당하는 보안 문제이다. 세 가지 모두 NetBSD 4.0.1에서 이미 고쳐진 것이므로, 4.0.1을 쓰고 있다면 염려하지 않아도 된다. 하지만 아직 4.0을 쓰고 있다면, 어서 4.0.1로 업그레이드해야 할 이유가 하나 더 늘어난 셈이다.

2009년 AsiaBSDCon

내년 AsiaBSDCon공고가 올라왔다. AsiaBSDCon은 동경에서 매년 개최되는 BSD 컨퍼런스이다. 이제 두 번 열린 걸 가지고 매년 한다고 하기는 좀 그렇지만서도… 장소가 장소인터라 일본 사람들의 참여가 많긴 하지만, 미국이나 유럽의 BSD 개발자들도 많이 참여하고 있다. 작년의 경우 십여개의 논문이 채택되었는데, 데스크탑 환경(PC-BSD)부터 CPU 깊숙한 곳까지 다양한 주제들을 다루었다. 유즈닉스에서 주최하던 BSDCon이 2003년을 마지막으로 사라진 이후, BSDCan, EuroBSDCon, NYCBSDCon, AsiaBSDCon 등의 지역별 모임으로 찢어지는 것 같아 좀 아쉽지만, 그래도 일본을 중심으로나마 아시아 지역에서도 꾸준히 컨퍼런스가 이어지고 있어서 다행이다.

AsiaBSDCon 2009는 NetBSD와 FreeBSD 개발자인 사토 히로키씨가 총 책임을 맡고 있으며, 내년 3월 12일부터 15일까지 동경이과대학(東京理科大学)에서 열릴 예정이다. 벚꽃을 보기에는 조금 일러서 아쉽지만, 그래도 BSD쪽의 유명한 사람들을 많이 만날 수 있는 기회인만큼 BSD에 관심이 있다면 한번 참가해보는 것도 좋을 것이다.

pkgsrc 바이너리 패키지

pkgsrc에 대해 흔히들 오해하는 것 중 하나가, pkgsrc에서는 패키지를 항상 소스로부터 직접 컴파일해서 설치해야한다는 것이다. 하긴 pkgsrc란 이름 자체가 소스(src)가 있어야만 할 것 같은 인상을 주긴 하지만, 실상은 pkgsrc는 소스를 컴파일해서 패키지를 만들 수도, 이미 만들어진 바이너리 패키지를 설치할 수도 있다. 아무래도 소스 기반으로 쓰고 있는 사용자들이 많다 보니, 그쪽 지원이 더 잘 되는 것은 사실이지만, pkgsrc에 어느 정도 경험이 있는 사람이라면 바이너리 패키지를 쓰는 것도 어렵지 않다.

바이너리 패키지를 쓰기 위한 첫째 조건은 바이너리 패키지가 있어야 한다는 것이다. 언뜻 듣기엔 당연한 것 같지만, 워낙 대부분의 사람들이 소스 기반으로 쓰고 있는 터라, 바이너리 전용인 많은 리눅스 배포판들처럼 바이너리 패키지가 잘 제공되지 않기 때문이다. NetBSD 프로젝트 자체에서 체계적으로 바이너리 패키지를 만들지 않고, 몇몇 개발자들이 자신들이 사용하는 환경에서 바이너리 패키지를 만들어 공개하고 있기에 더욱 그렇다. 하지만 많이 쓰이는 i386이나 amd64 포트의 경우는 바이너리 패키지가 비교적 잘 관리되고 있으며, pkgsrc 안정 브랜치를 기반으로 정기적으로 갱신되고 있다.

바이너리 패키지는 NetBSD 프로젝트의 FTP 써버에서 받을 수 있다. 운영 체제, 아키텍쳐 별로 다른 디렉토리가 마련되어 있으므로 원하는 디렉토리에서 패키지를 받아서 쓰면 된다. 며칠 전 발표된 2008Q3의 경우, NetBSD/i386용 패키지는 ftp://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/i386/4.0_2008Q3/에, NetBSD/amd64용 패키지는 ftp://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/amd64/4.0_2008Q3/에 있다. All 디렉토리 밑에 모든 패키지가 들어가 있으므로, 원하는 패키지를 골라 설치하면 된다. 4.0에서 만든 패키지이지만 4.0.1은 4.0과 호환되므로 4.0.1에서 써도 무방하다. 패키지를 설치할때는 pkg_add 명령 뒤에 URL을 바로 인자로 주면, 해당 패키지 설치에 필요한 모든 패키지를 자동으로 받아서 설치한다. 예를 들어, NetBSD/i386에서 emacs를 설치하고 싶으면 다음과 같이 한다.

% pkg_add ftp://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/i386/4.0_2008Q3/All/emacs-22.1nb6.tgz

설치하고자 하는 패키지가 몇 개 안 된다면 모르겠지만, 이런 식으로 매번 긴 URL을 써 주는 것은 상당히 번거로운 일이다. 바이너리 패키지를 자주 쓴다면 아예 그 위치를 환경 변수로 지정해 줄 수 있다. PKG_PATH란 변수를 만들어 그 값을 "ftp://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/i386/4.0_2008Q3/All"로 설정하면, 이후 바이너리 패키지를 설치하려 할 때 패키지 이름만 써 주면 된다.

% pkg_add emacs

간단하지 않은가? “make clean; make install“은 잊어버려도 좋다. 네트워크를 통해 패키지를 받은 시간 정도는 컴파일하는데에 걸리는 시간에 비하면 새발의 피다. 이제 NetBSD를 설치하고 데스크탑 환경을 보기까지 하염없이 컴파일 메시지만 바라보고 있지 않아도 된다.

물론 바이너리 패키지에도 단점은 있다. 컴파일시에 줄 수 있는 각종 옵션을 지정할 수 없다는 점이다. 평소 옵션을 통해 패키지를 입맛대로 바꿔쓰기를 좋아하는 사람이라면 바이너리 패키지로는 만족할 수 없을 것이다. 바이너리 패키지는 언제나 기본 옵션값대로만 만들어지기 때문이다. 방법이 없는 것은 아니다. 다른 옵션을 쓰고 싶으면 해당 패키지를 직접 만들어 쓰면 된다. pkgsrc의 장점은 소스를 컴파일하든 바이너리 패키지를 컴파일하든 사용자가 원하는대로 할 수 있다는 것이다. 다만 몇몇 패키지의 경우 그 패키지가 사용하는 다른 패키지들과 같은 옵션을 주어야만 동작하는 것들이 있으므로 주의할 필요가 있다.

이제 바이너리 패키지도 준비되어 있으므로 NetBSD를 써보고자 했던 사람들에게는 최신의 NetBSD와 최신의 패키지를 바로 설치해볼 수 있는 절호의 기회이다. 토렌트로 NetBSD 4.0.1을 받고 바이너리 패키지로 kde나 gnome-platform 패키지를 설치하면 윈도우즈 설치보다 훨씬 짧은 시간에 멋진 NetBSD 데스크탑의 주인이 될 수 있을 것이다.

이전 글 »