BSD daemon

NetBSD 문서:

NetBSD-current 따라가기

자주 묻는 질문

특별한 문제들


자주 묻는 질문


왜 NetBSD-current을 사용하나요? (맨 위)

NetBSD의 개발자들은 여러가지 이유에서 현재 개발중인 소스를 일반에 공개합니다. 무엇보다도 NetBSD-current를 제공하면 좀더 안전하고 사용하기 쉬운 시스템을 만드는 데에 도움이 됩니다.

NetBSD-current를 통해 많은 사람들이 쉽게 NetBSD개발에 참여할 수 있습니다. 현재 개발중인 소스를 배포해서 훨씬 많은 사람들이 시스템이 어디로 흘러가는지 알고, 개발중인 새로운 기능을 사용하게 됩니다. 또한 사용자가 만든 변경사항을 쉽게 적용할 수 있습니다. 실제로 사용자가 현재 개발 소스에 대해 만든 변경사항을 주 소스 트리에 적용하는 것은 일도 아닙니다.

또한 개발중인 소트프웨어는 광범위한 테스트를 필요로 합니다. NetBSD-current의 사용자들이 현재 소스에 대해 버그 보고서를 보내도록 장려하고 있습니다. 이를 통해 쉽게 버그를 찾아 고칠 수 있습니다. 많은 사람들이 작성된 소프트웨어를 바로 테스트하기 때문에 많은 버그를 발견하고 없앨 수 있습니다.

current 다운받기 (맨 위)

anoncvsftp://ftp.NetBSD.org/pub/NetBSD/NetBSD-current/tar_files/src/, 또는 sup를 통해서 -current의 소스를 다운로드 받으십시오. 또한 근처에 있는 NetBSD 미러 사이트를 확인해보십시오. 받아놓은 소스를 업데이트 하려면 소스 트리의 최상단 디렉토리에서 'cvs -q update -dP'를 수행하면 됩니다. 처음 카피를 받아올 때도 -P 옵션을 꼭 사용하십시오.

NetBSD 소스의 변경사항을 추적하기 위해 로컬 CVS 트리를 설정하려면 sup 변경사항을 임포트하십시오.

릴리즈 빌드하기 (맨 위)

src/BUILDING과 최신 변경 사항을 다룬 src/UPDATING을 꼭 확인하십시오.

소스 트리의 최상위 디렉토리에서 './build.sh -D DESTDIR -R RELEASEDIR release'를 수행하십시오. 여기서 DESTDIR에는 전체 인스톨을 하기 위한 충분한 공간이 있어야 하고, RELEASEDIR에는 tar 파일들을 위한 충분한 공간이 있어야 합니다. 빌드가 완료되면 인스톨 수단과 문서를 포함한, 인스톨에 필요한 모든 것이 갖춰집니다.

다른 아키텍쳐용으로 크로스 컴파일을 하고 싶다면 '-a ARCH'를 추가하십시오. 더 자세한 사항은 BUILDING 파일을 참고하거나 './build.sh -h'를 수행 하십시오.

현재 시스템 업데이트하기 (맨 위)

우선 새로운 커널을 빌드하고 설치한 후에 커널에 맞는 유저랜드를 업데이트하면 됩니다. 빌드를 시작하기 전에 최신의 중요 변경 사항을 확인하기 위해서 UPDATING 파일을 반드시 읽어보십시오.

기억해 두어야 할 것들 (맨 위)

*: 잘 모르는 사이에 시스템 콜이 추가되었을 수도 있습니다. 어쨌든 이렇게 하십시오. 이 방법이 더 안전합니다.

Makefile의 타겟에는 무엇이 있나요? 그리고 실제로 빌드는 어떻게 하나요? (맨 위)

/usr/src/Makefile에 있는 가장 분명한 타겟은 'make build'입니다. 이것은 파일, 라이브러리를 포함한 'mk' 파일을 업데이트하고 나서 시스템을 다시 빌드합니다. 만약 소스트리를 업데이트를 했다면 새로운 시스템 콜이 추가되었을 수도 있기 때문에 다른 어떤 것을 하기 전에 새로운 커널을 컴파일해서 설치해야합니다. 다른 유용한 타겟은 /usr/src/share/mk/bsd.README에 적혀 있습니다. 이 파일은 /usr/share/mk/에 설치됩니다. 툴체인이 업데이트 되면서 'make build'는 사장되었고, 강력히 쓰지 말기를 권합니다. 'build.sh'(이것은 소스 트리의 최상위 디렉토리에 있습니다.)를 통해 새로운 툴체인을 사용하는 방법은 BUILDING에 있습니다.

anoncvs로 NetBSD-current 따라가기 (맨 위)

설정

이 과정은 암호화되지 않은 anoncvs를 다룹니다. 암호화 프로토콜을 이용하고 싶다면, 여기에 적혀있는 설명을 이용하십시오.

  1. cvs를 설치합니다. 2000-09-04이후의 -current 소스로부터 만든 NetBSD에는 cvs가 이미 설치되어 있습니다. 주의: cvs의 몇몇 버전 (특히 1.11.5버전)은 -z 옵션에 문제가 있을 수 있습니다. 아래에 있는 유용한 팁를 참고하십시오.

  2. CVSROOT 환경 변수를 사용하고자 하는 anoncvs 서버로 설정합니다. 서버의 주소는 anoncvs.NetBSD.org로 하던지 미러에 있는 것을 사용하십시오:
    • csh(1)이나 tcsh 사용자:
      % setenv CVSROOT :pserver:anoncvs@anoncvs.NetBSD.org:/cvsroot
      
    • sh(1), ksh(1)bash2 사용자:
      $ CVSROOT=:pserver:anoncvs@anoncvs.NetBSD.org:/cvsroot; export CVSROOT
      

  3. $ cd /usr
    $ cvs login
    
    (use password "anoncvs")
    처음 체크아웃을 하려면 현재 디렉토리에 쓰기 권한을 갖고 있어야 합니다. 체크아웃을 한 후에 소스 트리의 소유자를 다른 유저로 변경할 수 있습니다. root로 처음 체크아웃을 하고 이후 사용을 위해서 다른 유저에게 소스트리의 소유권을 넘겨주는 것도 한가지 방법입니다.

  4. 커널 소스 체크아웃
    $ cvs checkout -P src/sys
    
    이를 수행하면 /usr/src/sys에 커널 소스를 받아옵니다. 커널을 빌드하는 방법에 있는 정보를 참고하십시오.

  5. (커널을 포함한) 전체 소스트리 체크아웃
    $ cvs checkout -P src
    
    이제 /usr/src에 NetBSD의 전체 소스가 생겨있을 것입니다.

    주의: 처음으로 "전체 소스"를 가져올 때에는 타르볼을 FTP로 가져와서 압축을 푸는 것이 네트웍을 가장 효율적으로 사용하기 때문에 빠릅니다. 다음부터는 cvs의 체크아웃/업데이트를 사용하면 변경점만 받아오기 때문에 전송량을 줄일 수 있습니다.

  6. 퍼미션 수정하기
    만약 소소 트리의 소유자를 root가 아닌 유저로 변경하고 싶다면, (root로) 다음을 수행하십시오:
    # chown -R user /usr/src
    

소스 업데이트 하기

$ cd /usr/src
$ cvs update -dP
주의 cvs checkout -d dir src (또는 다른 src* 모듈에 대해 비슷한 명령)은 동작하지 않습니다. "existing repository ... does not match ...; ignoring module _gnusrc-cmp"와 같은 에러 메세지가 출력될 것입니다. 이를 피해가려면 -d 옵션을 빼서 cvs가 기본 디렉토리를 사용하도록 하십시오.

특정 날짜의 소스를 가져오기

$ cvs checkout -D 20020501-UTC src

특정 브랜치의 소스를 가져오기

$ cvs checkout -rnetbsd-1-6 src
CVS 저장소의 브랜치에 대해서 알고 싶으면 src/doc/BRANCHES 를 참고하십시오.

유용한 팁

소스에서 NetBSD 빌드하기

(이미 최신의 NetBSD 바이너리 스냅샷을 갖고 있고 /usr/src에 소스를 넣어두었고 BSDOBJDIR은 /usr/obj 이라고 가정한다면):

먼저 유저랜드를 빌드합니다:

# mkdir /usr/obj
# cd /usr/src
# ./build.sh -O /usr/obj -D /usr/NetBSD-new-build -T /usr/tools build # ./build.sh -O /usr/obj -D /usr/NetBSD-new-build -T /usr/tools install=/

build.sh를 사용해서 처음으로 시스템을 빌드하면 이후의 컴파일 과정에서 사용될 도구들도 같이 빌드됩니다. 이후의 컴파일은 미리 만든 도구들을 사용하기 때문에 시간이 절약됩니다.
물론 ./build.sh build가 실패했다면 ./build.sh install=/를 실행하지 마십시오.

CVS 업데이트 후에 유저랜드의 바이너리 업데이트하기:

# cd /usr/src
# ./build.sh -D /usr/NetBSD-new-build -O /usr/obj -T /usr/tools -u build
# ./build.sh -D /usr/NetBSD-new-build -O /usr/obj -T /usr/tools -u install=/
이를 통해 현재 동작중인 시스템에 새로운 바이너리를 설치할 수 있습니다. 전부를 확실히 적용하려면 리부팅 하십시오.

시스템을 자주 업데이트하고 현재 동작중인 시스템에 바로 빌드하고 싶으면, DESTDIR=/옵션을 준 채로 전문가모드를 사용해보십시오. 다음과 같이 할 수 있습니다:

# ./build.sh -E -O /usr/obj -T /usr/tools -u build
전문가만 사용하십시오. 아무것도 컴파일이 되지 않을 정도로 시스템이 망가질 수 있습니다. 빌드가 성공적으로 되리라는 확신이 있을 때만 사용하십시오.

ssh를 통해 anoncvs 사용하기 (맨 위)

anoncvs 사용하기에서 설명한 방식은 소스를 좀더 확실히 받기 위해 ssh를 이용해서도 사용될 수 있습니다.

anoncvs 미러 리스트에 있는 서버들중에서 ssh 접속을 지원하는 것은 필요한 정보가 추가로 적혀있습니다.

ssh를 통해 anoncvs를 사용하려면 cvsroot에서 ':pserver'를 부분을 지우고 사용하고 있는 쉘에 따라 적절히 CVS_RSH 변수를 'ssh'로 설정합니다.

SUP을 이용해 CVS로 NetBSD-current 따라가기 (맨 위)

개요

다음과 같은 방식으로 current를 이용할 수 있습니다. 보통 한 1주일에 한번씩 sup을 이용해 소스의 기본 카피를 최신으로 유지합니다. 이 기본 소스 트리를 로컬 CVS 저장소로 임포트합니다. 그리고 나서 저장소에서 소스를 체크아웃해서 current를 만듭니다.

이 방식을 사용하는 이유가 세가지 있습니다.

  1. current가 시간에 따라 어떻게 변하는지 추적할 수 있습니다.
  2. 개인이 고친 변경 사항이 거의 자동으로 업데이트된 current 소스와 합쳐집니다.
  3. 빌드에 문제가 있을 때를 위해 수정되지 않은 깨끗한 NetBSD-current 소스 트리를 얻을 수 있습니다.

이 방식의 유일한 단점은 3개의 독립적인 소스 트리 카피를 유지하기 때문에 실제 current를 빌드할 때 사용되는 공간을 빼고도 약 150MB의 디스크 용량을 사용한다는 점입니다.

요구 사항

상세 과정

소스를 추적하고 빌드하는 것은 다음의 6단계로 구성됩니다:

  1. SUP으로 업데이트된 소스를 주 소스트리로 가져옵니다.
  2. SUP으로 가져온 소스를 CVS로 임포트하고, CVS에서 체크아웃한 소스도 업데이트합니다.
  3. SUP으로 가져온 소스와 로컬 소스를 합칩니다.
  4. current를 빌드하고 설치합니다.
  5. 성공적으로 빌드한 소스에 태그를 붙입니다.

소스를 SUP으로 가져오기

아무 NetBSD sup 서버에서나 소스를 SUP으로 가져올 수 있고, SUP의 결과물은 이후에 참고하기 위해 파일로 저장해야 합니다.

소스 임포트하기와 합치기.

다음과 같이 소스를 임포트합니다.

$ cvs -d /misc/cvsrep import -I ! -I CVS netbsd netbsd current-date

date 부분은 소스를 추적할 때 사용하기 위해 SUP의 날짜로 고쳐서 적어줍니다. -I ! -I CVS 옵션을 사용해서 'CVS'디렉토리를 제외한 나머지 소스트리의 모든 파일이 무시되지 않도록 합니다. 이는 몇몇 NetBSD 소스파일이 CVS에서 기본적으로 무시되는 확장자를 가지고 있기 때문입니다. 만약 직접 수정한 사항과 충돌이 발생하면 임포트할 때 보고서를 출력하고 다음과 같이 충돌 사항을 합칠 수 있는 명령어를 알려줍니다:

$ cvs checkout -jnetbsd:yesterday -jnetbsd netbsd

이 합치는 명령어를 사용해서 임포트한 NetBSD소스를 확실히 합칠 수 있지만 SUP과정에서 삭제된 파일을 지우지는 못합니다. 이렇게 하려면 합치는 명령을 다음과 같이 합니다:

$ cvs update -jprevious import tag -j current-date

previous import tag 부분을 이전 cvs 임포트에서 사용한 태그의 이름으로 고쳐써줘야 합니다. date는 방금 합친 current 임포트에서 사용된 것과 동일한 태그를 붙인 날짜로 바꿔서 써줍니다.

import 명령어에서 나온 충돌문제는 잠재적인 충돌사항입니다. 대개 update 명령어로 합쳐지지만, 가끔 실제로 충돌이 발생합니다. 그러면 직접 손으로 충돌이 발생한 것을 합쳐주어야 합니다. 실제로 발생한 충돌 사항은 C와 파일이름의 형태로 cvs update의 결과에서 보고됩니다.

수동으로 충돌 문제를 해결하는 것은 간단하지 않지만 대개의 경우 로컬에서 수정한 사항을 지워서 원래의 NetBSD 소스 코드와 같이 만들어주면 해결됩니다.

CVS는 충돌을 다음과 같이 표시합니다.:

<<<<<<
  로컬 파일의 코드
======
  임포트한 파일의 코드
>>>>>> 새로 임포트한 리비젼의 로컬 리비젼 번호

import 보고서에 충돌사항이 없다면, 체크아웃한 소스트리 카피는 충돌이 생겼을 때와 똑같은 방식으로 업데이트되어야 합니다.

모든 업데이트 체크아웃 명령어는 소스를 체크아웃한 디렉토리에서 실행해야 합니다. 저의 경우엔 /usr/src/netbsd 입니다.

처음 import할 때에는 당연히 체크아웃한 소스가 없을 것입니다. '/usr/src/netbsd'에 소스트리를 만든다고 가정한다면, 다음의 명령어를 이용해서 합치는 과정 없이 소스를 가져올 수 있습니다.

$ cd /usr/src
$ cvs -d /misc/cvsrep checkout netbsd

current 빌드.

  1. 커널을 설정하고 build하고 새로운 커널로 리부팅 합니다.
  2. -current 소스 트리의 최상위 디렉토리에 가서 다음을 실행합니다. ./build.sh -T /usr/tools -O /usr/obj .
  3. /etc에 있는 파일에 변경사항이 있다면 이것을 적용해야 할 수도 있습니다.

성공적으로 빌드한 소스에 태그 붙이기

빌드과정이 성공적으로 끝나고 실행파일들을 만들어 냈다면 현재 소스에 태그를 붙이는 편이 좋습니다. 나중에 어떤 이유로 소스트리에 문제가 발생한 경우에, 한번의 CVS 명령만으로 잘 동작하는 소스 트리로 돌아갈 수 있습니다. 태그를 붙이는 것은 다음의 명령을 이용합니다:

$ cvs tag successful-build-build date

주의

커멘트나 제안사항이 있으면 (이 문서를 담당하고 있는) Mike Pumford mpumford@black-star.demon.co.ukwww@NetBSD.org로 보내주십시오.

전체 저장소 가져오기 (맨 위)

위에서 설명한 모든 방식들은 사용자의 저장소에 있는 변경사항을 유지합니다. 이를 이용해 자신만의 NetBSD기반 소프트웨어를 편하게 개발할 수 있습니다. CVS 저장소를 유지하는 대신에 NetBSD의 CVS 저장소를 그대로 미러하는 방법에는 네가지 정도가 있습니다.

아래에서 간략히 살펴볼 방법을 통해 NetBSD CVS 저장소(RCS, v 파일, 체크 아웃 파일) 를 얻을 수 있습니다. 이걸로 자신만의 anoncvs 서버를 만들수도 있고, 하드 디스크로 체크아웃할 수도 있습니다. 저장소에 저장된 과거 정보를 빨리 접근할 때 편리합니다.

전체 저장소를 가져오는 방법에는 다음이 있습니다:

sup:
NetBSD 소스의 다른 부분을 미러하려고 이미 sup을 사용중이라면 sup 설정파일의 다음을 추가하십시오:
anoncvs release=all  host=sup.NetBSD.org hostbase=/ftp/pub base=/usr prefix=/usr backup use-rel-suffix compress
그리고나서 "sup /path/to/supfile anoncvs"를 실행하여 파일을 가져오십시오.

/usr/share/examples/supfiles에 예제 sup 파일이 있습니다. 그리고 SUP 미러 리스트에서 가장 가까운 서버를 확인하십시오!

ftp:
마음에 드는 미러 프로그램(예, mirror)을 설치하고 ftp://ftp.NetBSD.org/pub/NetBSD-cvs/main/에서 파일을 가져옵니다.

FTP 미러 리스트를 확인해보십시오!

rsync:
rsync는 rsync 서버에 많은 부담을 준다는 점을 명심하십시오. 그래서 rsync서버의 동시 접속자수는 제한되어 있습니다. 그래도 rsync를 사용하고 싶다면 저장소를 가져오기 위해 다음 명령어를 수행하십시오:
rsync -v -a rsync://rsync.NetBSD.org/anoncvs/
rsync 미러 리스트를 확인해보십시오!
cvsup:
현재 CVSup은 M3 컴파일러가 포팅되지 않았기 때문에, 모든 NetBSD 아키텍쳐에서 사용할 수는 없습니다. i386의 경우 cvsup package를 설치하고 다음의 설정파일을 적용해서 cvsup.de.NetBSD.org으로부터 저장소를 미러할 수 있습니다:
*default host=cvsup.de.NetBSD.org
*default base=/usr
*default prefix=/local/NetBSD-cvs
*default release=cvs
*default delete use-rel-suffix
*default compress

netbsd

CVSup 미러 리스트를 확인해 보십시오!

문제가 발생했다면? (맨 위)

스냅샷이나 예전 -current에서 -current를 빌드하는 과정에서 문제가 생긴다면 당황하지 말고 다음의 과정을 수행해 보십시오:
  1. 빌드하려고 하는 릴리즈에 있는 UPDATING 파일을 읽어보십시오.
  2. current-users 아카이브에서 도움될 것을 찾아 읽어보십시오.
  3. 다시 업데이트 하십시오. 여러 개의 연관된 파일을 커밋하는 도중에 저장소를 가져왔을 수도 있고, 방금 전에 문제가 해결되었을 수도 있습니다.
  4. 이래도 안된다면 current-users에 문제를 설명하는 메일을 보내보십시오. 여기에는 날짜와 시간, -current 소스를 가져온 방법, 당신이 직접 수정한 사항 등을 적어주십시오. 그리고 에러메세지를 포함하는 짧은 글을 적으십시오. 누군가 문제를 금방 고칠수도 있습니다.

설정파일과 시동파일을 etcupdate로 업데이트 하기 (맨 위)

개요

etcupdate는 운영체제를 업그레이드 한 후에 새로운 설정파일과 시작파일(etc.tar.gz 배포 파일에 있는 파일들)을 /dev, /etc/, /root에 설치할 때 도움을 주는 스크립트입니다. 운영체제를 업그레이드는 직접 소스를 컴파일하는 방식이나 배포 바이너리를 가져오는 방식을 이용해 수행할 수 있습니다.

etcupdate 설치하기

  1. 최신 버전의 etcupdate 얻기
    # cd /usr/pkgsrc/sysutils
    # cvs update -dP etcupdate
    
  2. pkgsrc로 인스톨하기
    # cd /usr/pkgsrc/sysutils/etcupdate
    # make install clean
    

소소파일을 가지고 etcupdate 사용하기

소스가 /usr/src에 있는 경우에 다음의 명령을 내리면 됩니다:
# etcupdate
만약 /home/jdoe/netbsd/src와 같이 다른 장소에 NetBSD 소스가 있다면 어떻게 해야하냐구요? 걱정하지 마십시오. -s srcdir 옵션으로 소스트리가 있는 위치를 etcupdate에 알려주면 잘 동작합니다:
# etcupdate -s /home/jdoe/netbsd/src/etc

바이너리 배포본을 가지고 etcupdate 사용하기

소스를 얻을 수 없지만 설정파일과 시동파일을 업데이트하고 싶은 경우가 있습니다. 이 경우엔 배포 파일(적어도 etc.tgz)의 압축을 해제하고 -b srcdir 옵션을 사용해서 소스가 없이 공식 배포본으로 사용하겠다고 etcupdate에게 알려주십시오.
# mkdir /tmp/temproot
# cd /tmp/temproot
# tar xpzf /some/where/etc.tgz
# etcupdate -b /tmp/temproot

특별한 문제들


wscons를 업데이트한 후에 Console이 동작하지 않습니다 (맨 위)

src/etc에 있는 적절한 etc.port 디렉토리에서 현재 MAKEDEV파일을 /dev에 복사하고, single user로 부팅한 후에 다음을 입력하십시오:
# fsck -p
# mount -vt nonfs
# cd /dev
# ./MAKEDEV wscons

왜 항상 build.sh는 nbmake을 빌드하나요? (맨 위)

./build.sh tools를 하고 -u 옵션을 사용하거나 /etc/mk.confTOOLDIR을 사용하더라도, nbmakebuild.sh를 사용할 때마다 매번 빌드됩니다. 이것은 정상입니다. 이 이유는 ./build.shrebuildmake 함수에서 찾을 수 있습니다:
        # Note that we do NOT try to grovel "mk.conf" here to find out if
        # TOOLDIR is set there, because it can contain make variable
        # expansions and other stuff only parsable *after* we have a working
        # ${toolprefix}make.  So this logic can only work if the user has
        # pre-set TOOLDIR in the environment or used the -T option to
        # build.sh.
        #               
따라서 nbmake를 매번 빌드하고 싶지 않다면, -T tooldir 옵션을 사용하거나 환경 변수 TOOLDIR을 설정해야 합니다.

홈페이지
최상위 문서로

(연락하는 방법) $NetBSD: index.html,v 1.7 2006/06/22 15:49:21 jschauma Exp $
Copyright © 1994-2004 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.