FreeBSD src/ 트리 프리즈

FreeBSD 5.2를 위한 src 트리 프리즈가 시작되었습니다. ports는 아직 프리즈되지 않았는데, 얼마나 오래 프리즈할 지는 portmgr들이 상의 중이라고 합니다. 4.9에서 상당히 오래 프리즈했기 때문에, 아마도 1주일 정도하고 끝내지 않을까 싶군요. (작년처럼 2달 내내 하면 정말 -.-;; )

방금 오늘자 소스트리로 업글했는데, install 바이너리가 installworld하다가 뻑나는 바람에 수동으로 install먼저 설치한 다음에 했네요 -.- 뭔가 이번 statfs 업데이트는 너무 거시기 한듯.. 흐흐;;

(그리고 오늘 [FreshPorts]korean/gdick 0.9.1로 업데이트 했습니다.)

Ports-Rookies

NetBSD의 [WWW]pkgsrc-wip와 비슷한 커미터가 아닌 메인테이너들을 위한 공간이 드디어 FreeBSD에도 생겼습니다. 최근, 커미터들이 별로 관심없어 하는 포트들이 몇달이 지나도 커밋 안된다는 것에 대한 불만이 자주 나오면서, 그에 대한 해결책으로 새로 들어온 커미터인 Oliver Eikemeier (eik@)가 소스포지에 프로젝트를 개설했군요.

여기서는 current/라는 포트 카테고리가 별도로 나와서, 포트루키 프로젝트 내에 있는 것들은 이 카테고리 안에서 유지된다고 합니다. 그리고, 포트루키에서 많이 검증된 포트들은 포트루키 프로젝트에 참여하는 커미터들에 의해서 정식 포트에 들어가게 될 예정이라고 합니다.

우리나라에는 커미터가 아닌 메인테이너가 거의 없어서 (2명 있던가요.. 홀리님과 netj님 :)) 그다지 필요한 분이 많이 있을 것 같지는 않지만, 포트 문턱이 낮아졌다는 점에서는 기대가 되는군요~

FreeBSD 5-CURRENT make world 경보~

오늘 Kirk McKusick씨의 statfs 64비트 확장 커밋으로 인해, -CURRENT의 어제자 바이너리와 오늘 이후 커널이 호환되지 않게되었습니다. 따라서, 단순히 make world하면 df나 ls, zsh 등등 [FreeBSDMan]statfs 를 사용하는 수많은 프로그램이 Bad System Call로 죽어버리게 됩니다. -CURRENT 사용자들은 꼭 이번 빌드에서는 정상적인 make world 순서로 하셔야되겠습니당.

  • mergemaster -p

  • make buildworld kernel

  • 새 커널의 싱글모드로 리붓

  • mergemaster

  • make installworld

  • 멀티 유저모드로 전환

  • 5.2 프리즈 대비 대량 포트 업데이트

    5.2 프리즈가 일주일 앞으로 다가와서, 미리 관리하는 포트들을 모두 최신 버전으로 업데이트 했습니다. 이번엔 웬일로 개발자들이 다 부지런해서 업데이트된게 무지 많군요 -ㅁ-;

    포트

    새 버전

    주요 변동

    [FreshPorts]archivers/py-tarfile

    0.7

    2.0과 2.1도 지원하기 시작

    [FreshPorts]astro/py-metar

    0.6

    프론트엔드 재구현 (pymeta2로 실행파일이 바뀜)

    [FreshPorts]audio/py-mad

    0.5.1

    메인터넌스 릴리즈

    [FreshPorts]audio/py-xmms

    2.00

    모듈에서 패키지로 재구성되면서 기능 추가됨

    [FreshPorts]audio/py-serial

    2.0

    프러덕션 릴리즈 (변화는 별로 없음)

    [FreshPorts]devel/pyrex

    0.9

    익스텐션 객체간 상속, C 메소드 지원 시작

    [FreshPorts]devel/scons

    0.94

    버그픽스 릴리즈

    [FreshPorts]ftp/py-curl

    7.10.8

    curl 업데이트에 따른 따라잡기

    [FreshPorts]irc/py-irclib

    0.4.1

    메인터넌스 릴리즈

    [FreshPorts]korean/gdick

    0.8.1

    발음듣기 지원

    [FreshPorts]korean/nabi

    0.10

    euc-kr 로켈 지원 개선, GNOME 의존성 제거

    [FreshPorts]net/liferea

    0.4.4

    속도 개선

    [FreshPorts]www/mod_pcgi2

    2.0.2

    스켈러빌러티 개선

    이것 외에 [FreshPorts]graphics/py-magick 도 추가되었습니다. 이녀석은 [FreshPorts]graphics/ImageMagick 을 파이썬에서 라이브러리로 부를 수 있는 녀석인데, 사실상 이미지 매직의 거의 모든 기능을 지원하고 있어서 [FreshPorts]graphics/netpbm[FreshPorts]graphics/py-imaging 같은 것 안 쓰고도 쉽게 이미지를 조작할 수 있게 되었습니다. 믓흥~

    FreeBSD 5.2 Freeze 곧 시작

    FreeBSD 5.2 릴리즈를 위한 ports/와 src/의 프리즈가 곧 (10일 뒤) 시작됩니다. 프리즈된 후에는 보안버그나 치명적인 호환성 문제가 발생하지 않는한 고쳐지기 힘드니, 뭔가 문제가 있다고 생각하시면 얼른 PR을 보내주세용~*

    [FreshPorts]misc/utf8locale 을 5.2 전에 밀어넣어볼까 생각해 보고 있는데 과연 잘 될지 모르겠군요 음훗훗~

    최근의 bsd.python.mk 업데이트

    10월 21일, 29일과 방금 변경한 bsd.python.mk에 대한 짧은 변동사항 소개~

    10월 21일, 29일의 변경들은 파이썬에 딸려 나오지만 갈라져 있는 포트들 ([FreshPorts]databases/py-gdbm 같은 것) 이 파이썬 2.4 ([FreshPorts]lang/python-devel)에서 제대로 안 깔리는 문제와, 같은 브랜치에서 파이썬을 업그레이드하면 (예를 들어, 2.3 -> 2.3.2) 갈라진 포트들이 파일은 새 버전(2.3.2)을 받으려고 하는데, MASTER_SITE_SUBDIR은 옛날 것(2.3)에서 받아서, 결국은 전부 최신버전으로 올려야지만 되는 문제를 해결하였습니다. 그래서, 이제부터는 대충 옛날 버전을 마구 쓰거나 개발버전을 쓰더라도, 따로 나와있는 포트들을 설치할 수 있습니다.

    그 외에는 Zope의 의존성을 2.2에서 다시 2.1로 돌려놓았고, [FreshPorts]lang/python-devel 포트를 20031022 스냅샷으로 업데이트했습니다. 이번 스냅샷에서 가장 눈에 띄는 것은 아무래도 sre 테일 리켜전으로, sre 루틴의 알고리즘이 바뀌어서, 리커젼 제한에 안 걸리기 때문에 아무데서나 20000자 이상 연속 같은 것도 검색할 수 있게 되었습니다. (기존에는 스택 사이즈에 따라서, 3000도 안 되는데도 있었습니다. 믓흥~)

    그리고, 오늘 변경사항은 10월 29일에 실수로 제 데스크탑의 미러에 커밋해버려서 메인 CVS에는 반영 안 되어있었던, 따로 나와있는 포트들의 변경 사항을 marcus의 지적으로 오늘 바로 반영했으며, PyXML과 4Suite 코어 개발자들의 건의에 따라 [FreshPorts]lang/python[FreshPorts]lang/python-devel 에는 pyexpat 모듈을 기본적으로 넣도록 했습니다. Python 2.3부터는 pyexpat 소스를 들고다닌다는군요.. -.-;;;;;;

    지금 남아있는 문제는, [WWW]5.1-CURRENT 10월 이후버전에서 python2.3의 메모리 할당이 극도로 느리다는 PR이 왔는데, 대충 봐서는 느려질 문제가 없는데, 이상하군요~~ (그래서, 프로파일러 쓸 줄 몰라서 요즘 공부하고 있다는 –;;)

    그 외에 FreeBSD 포트에서의 파이썬 문제가 있으면 언제든 알려주세요 =3 =33

    FreeBSD 4.9 릴리즈

    FreeBSD 4.9가 릴리즈되었습니다. 거의 2달동안 별의 별 릴리즈 엔지니어링을 다 거쳤는데.. 뭐 이제는 4.x쓰는 사람이 별로 없으니.. 사실 관심 있는 사람도 별로 없어서 테스트가 좀 느렸던 것 같군요 으흐~

    이번 버전의 차이점은, 몇몇 sendmail, arp, openssh 같은 보안버그를 수정한 것 외에는 디바이스 드라이버 몇개 추가되고 별로 볼 것 없습니다. 그냥 마일스톤 성격의 릴리즈군요~ 앞으로 릴리즈될 4.10은 더욱 더 바뀔 게 없을 거라고 합니다. :) (과연 FreeBSDMall이 이래서 먹고 살 수 있을지~)

    그리고, FreeBSD의 다음 릴리즈는 11월말~12월사이에 릴리즈될 5.2입니다. 5.2 이후에도 계속 5는 CURRENT로 가다가 5.3릴리즈 즈음에 -STABLE로 포크될 예정이라고 합니다.

    그리고, 덤으로 :) Apache 1.3.28과 2.0.47 (각각 엊그제까지는 최신버전)의 보안 픽스 릴리즈인 1.3.29와 2.0.48이 나왔습니다. 포트에는 아직 커밋은 안 되었고 PR은 올라와 있습니다. 있다가 안 졸리면 커밋해 볼까 생각을;;

    FreeBSD PowerPC

    10월 23일에 나온 PowerPC 스냅샷을 이용해서 iBook에 설치해봤습니다. 흐흐 뭐 이제 iBook도 G4시대가 왔으니 구닥다리 G3 500에는 FreeBSD나 설치해서 써야죠 -_-;

    아직 FreeBSD/powerpc는 Tier-2로 개발 중인 상태입니다. 처음에 열심히 작업하던 Benno Rice씨와 요즘 열심히 하고 있는 Peter Grehan씨 둘이서 거의 모든 작업을 하고 있는데, 덕분에 요즘은 커널 작업은 거의 다 끝나가는 듯 합니다. 아직 약간의 완성도 문제는 있지만 말이죠 :)

    우선, Peter가 공개한 tarball을 Peter가 쓴 [WWW]설치방법에 있는 대로, 우선 CD를 구운 다음에 (NFS와 TFTP로 설치하는 방법은 DHCP서버를 통해 옵션을 주는 거라, DHCP를 따로 조작할 수 있는 환경이 있지 않으면 쓰기 힘듭니다.) 설치방법에 쓰여 있는대로 거의 젠투 깔듯이(-.-;;) 깔면 됩니다. 흐흐.. 그래도 NetBSD에 비하면 훨씬 간편한 것 같네요. 근데, 제 경우에는 iBook이 구형모델이라 그런지, 키보드가 오픈펌웨어에서는 잘 잡히다가, FreeBSD 콘솔만 뜨면 안 잡히게 됩니다. 실제 dmesg해보면 키보드가 전혀 안 잡혔는 것을 볼 수 있는데 Peter가 USB키보드 지원만 넣어놨다고 합니다 -.-; 그래서 USB키보드를 끼우고 부팅해보니 잘 되더군요. (ofw에서도 잘 됩니당.)

    0310-freebsdppc.jpg

    [WWW]전체 보기

    그런데, 좀 이상한게 하드에서 부팅할 때는 boot -s를 아무리 열심히 붙여줘도 싱글 부트가 안되고 바로 멀티 유저 모드로 들어가버리는데, 기본으로 깔면 pwdb가 리틀엔디안으로 들어가 있어서 로그인을 못하니까, 아까 CD로 부팅했을 때 pwd_mkdb까지 한번 해 주고 리붓하는 게 좋습니다.

    전체적으로 안정성은 지금 screen, vim, python, perl, gnuls 같은 것 깔고 하고 있는데 대체로 잘 되는 듯합니다. 콘솔도 NetBSD/ppc보다는 훨씬 빠른 편이고. 마음에 듭니다! 아직 X는 안 해봤는데 한번 해봐야겠군요~ 글고, powerpc로 cvsup이 아직 포팅이 안 돼서 cvsup이 안되니 cvs로 삽질을~;;;

    이대로 가면 5.3이나 5.4에서는 Tier-1으로 올라올 수 있을 듯 한데, 기대가 됩니다! 크크

    FreeBSD Update

    BSDCon에서 논문으로 발표되기도 했던 Colin Percival의 FreeBSD Update([FreshPorts]security/freebsd-update)를 대충 살펴보았습니다. 우선, FreeBSD Update가 무엇이냐 하면, FreeBSD는 바이너리 기반으로 업데이트되는 시스템이 아니라서, 보안 패치가 나올 때마다 업데이트 하려면 cvsup으로 전체 소스 업데이트한 다음에 make world하고, 커널 패치면 make kernel한 뒤에 reboot까지 해야하는데, 보통 빠른 컴퓨터라도 이 과정이 30분 이상 걸리고, 뻑날 가능성도 많고 필요한 툴도 많은 건 그동안 다들 경험하셨을 겁니당. 엔터만 치면 다운로드 받아서 바로 업데이트되는 데비안에 비하면 정말 일반 사용자 입장에서는 고통입니다~ 한시라도 빨리 업데이트해야하는 상황에서.. 흐흐;;

    그래서, FreeBSD Update에서는 바이너리로 쓱 업데이트해불는 데, 베이스 전체에 대한 바이너리 패치를 만들어서, 바이너리 패치를 다운받아서 업데이트를 하게 됩니다. 바이너리 패치는 [FreshPorts]misc/bsdiff 를 이용해서 만드는데, 이게 성능이 꽤 좋아서 diff 양이 엄청 적습니다. 흐흐. FreeBSD 4.7 릴리즈(2002년 9월)부터 지금까지 보안 패치를 패치가 아닌 그냥 변경된 파일 전체를 받으려면 36메가가 넘는데, bsdiff로 만들어진 패치는 621kB밖에 안 된다는군요. (만세!) 그리고, 기본 환경 설정의 핑거프린트를 씨앗으로 해서 웹 서버에서 공개키를 받아와서, 패치를 다운 받은 뒤에 그 패치의 무결성 검사도 하기 때문에, 믿고 자동 업데이트할 정도로 된답니다. 그런데, 지금은 아직 공식 사이트에서는 4.7과 4.8만 제공하고 있어서, 5.0이나 5.1에서는 쓸 수 없습니다. (저는 5.x 머신만 열라 많아서 테스트를 못 해봤;;) 참 그리고, 바이너리를 기반으로 패치하는 것이다보니 반드시 릴리즈 깔고 손을 안 대야합니다. 체크섬이 안 맞는 파일들은 전체를 새로 받아오니.. 업데이트가 제 구실을 못하는..

    Colin Percival의 [WWW]BSDCon 논문을 살펴보면, 단순히 생각해도 불가능하게만 보이는 바이너리 패치 업데이트를 어떻게 만들었는지 구구절절 써 놓았는데 정말 눈물납니다. 흐.. (아직 Debian이나 Redhat도 패치 기반이 아니라 전체 패키지를 받아와서 업데이트하는 방법이니, 패치기반 업데이트는 오픈소스에서는 거의 최초가 아닐까 싶네요.) 논문의 내용에 보면 대표적인 문제점들을 다음과 같이 해결하고 있습니다.

    • 날짜가 바이너리 안에 들어가서, 빌드할 때마다 달라지는 바이너리: 커널, 부트로더, 펄 같이 빌드할 때 현재 시간을 넣어버리는 바이너리들은 빌드할 때마다 자동으로 바뀌기 때문에, 패치를 빌드할 때 패치 안 해도 되는게 쓸데없이 들어가게 되는데. 요 녀석들을 퇴치하기 위해서 일단, RELEASE를 한번 빌드하고 또 다른데서 한번 빌드해서, 같은 버전으로 빌드했는데도 달라진 파일을 뽑아서 블랙리스트에 올리고 나중에 그 파일들이 보안 업데이트가 필요한 경우에는 수동으로 넣는 방법으로 해결했다는 군요. 이런 파일은 FreeBSD 4.7의 보안 브랜치에서 모두 160개라고 합니다.

    • 빌드 중에 랜덤 요소를 쓰는 파일: fortune이나 ntp같은 것들은 엔트로피를 좀 더 주려는 목적으로 빌드하다가 랜덤넘버를 컴파일된 파일에 넣어버립니다. (fortune은 데이터파일) 이런 것들을 랜덤을 안 쓰도록 모두 패치해버렸다고 합니다. (-ㅇ-)

    • 전역 심볼이 없는 경우에 쓰레기 값이 들어가 버리는 바이너리: libobjc같이 이런 경우는 동적 라이브러리 에서 많이 발생하는데, gcc를 패치해서 이런 경우 빌드 디렉토리를 기준으로 일정한 값을 넣도록 패치했다고 합니다.

    • 날짜 문자열이 길어져서 주소가 연달아 바뀌는 경우: 예를 들어 “February”가 “March”로 빌드하다가 바뀐 경우, 그 뒤에 있는 문자열들이 연달아서 주소가 밀려나서, 패치해야할 양이 엄청 늘어납니다. 이런 경우를 또 막기 위해서 가급적이면 0x00으로 최대 길이를 채우거나 하는 방법으로 패치해버렸다고 합니다.

    그런데, 커널의 경우에는 SMP지원이나 HTT지원 때문에, 일반적인 환경에서도 자주 빌드해서 쓰기 때문에 이런 걸 쉽게 패치할 수 있게 하기 위해서, GENERIC에 SMP기능만 넣은 GENERIC-MP 커널을 제공하자고 제안하고 있군요. 하여간.. 그 엄청난 빌드 구조를 다 파악해서 패치를 했다니.. 입이 벌어질 따름입니다. 만세! 곧 5.1에서도 쓸 수 있게 되길 기대합니당~

    bsd.python.mk 개선사항

    ports/Mk/bsd.python.mk에서 지원하지 않아서 그동안 각각의 포트들이 지저분하게 갖고있던 파이썬 버전 체크용 pkg-req들을 없애기 위해 bsd.python.mk에 파이썬 버전 체크를 할 수 있도록 패치했습니다. [FreshPorts]devel/py-optik 같이 2.3에서는 필요없는 포트나, [FreshPorts]databases/py-bsddb 같이 2.3부터만 지원되는 포트같은 것에서 유용하게 쓰일 수 있을 것 같네요. 사용방법은 기존 방법대로

    하는 것도 가능하고 다음같이 유효한 버전들을 써줘도 됩니다.

    ports 메일링 리스트에 리뷰를 요청했는데 아직 답장이 없는 것으로 봐서 별 문제가 없나보네요 (또는 관심이 없다거나;;;;) 흐흐흐. 3~4일 정도 더 지켜본 후에 커밋할 예정입니다. 시간나시는 분들은 패치를 다운로드하셔서 한번 테스트해봐 주세요 :) 패치는 http://people.freebsd.org/~perky/patch-bsd.python.mk 에 있습니다.