|
NetBSD 문서:NetBSD-current 따라가기 |
NetBSD-current를 통해 많은 사람들이 쉽게 NetBSD개발에 참여할 수 있습니다. 현재 개발중인 소스를 배포해서 훨씬 많은 사람들이 시스템이 어디로 흘러가는지 알고, 개발중인 새로운 기능을 사용하게 됩니다. 또한 사용자가 만든 변경사항을 쉽게 적용할 수 있습니다. 실제로 사용자가 현재 개발 소스에 대해 만든 변경사항을 주 소스 트리에 적용하는 것은 일도 아닙니다.
또한 개발중인 소트프웨어는 광범위한 테스트를 필요로 합니다. NetBSD-current의 사용자들이 현재 소스에 대해 버그 보고서를 보내도록 장려하고 있습니다. 이를 통해 쉽게 버그를 찾아 고칠 수 있습니다. 많은 사람들이 작성된 소프트웨어를 바로 테스트하기 때문에 많은 버그를 발견하고 없앨 수 있습니다.
cvs -q update -dP'를 수행하면 됩니다. 처음
카피를 받아올 때도 -P 옵션을 꼭 사용하십시오.
NetBSD 소스의 변경사항을 추적하기 위해 로컬 CVS 트리를 설정하려면 sup 변경사항을 임포트하십시오.
소스 트리의 최상위 디렉토리에서 './build.sh -D DESTDIR -R RELEASEDIR release'를
수행하십시오. 여기서 DESTDIR에는 전체 인스톨을 하기 위한 충분한 공간이 있어야 하고,
RELEASEDIR에는 tar 파일들을 위한 충분한 공간이 있어야 합니다. 빌드가 완료되면 인스톨 수단과
문서를 포함한, 인스톨에 필요한 모든 것이 갖춰집니다.
다른 아키텍쳐용으로 크로스 컴파일을 하고 싶다면 '-a ARCH'를 추가하십시오.
더 자세한 사항은 BUILDING
파일을 참고하거나 './build.sh -h'를 수행 하십시오.
./build.sh tools'를 수행하십시오.
이를 수행하면 tools/obj/tools.<hostplatform>/bin에 툴체인이 만들어집니다.
# ./build.sh kernel=GENERIC # mv /netbsd /onetbsd # mv sys/arch/<ARCH>/compile/GENERIC/netbsd /
./build.sh distribution을 수행하십시오./build.sh install=/커널이 잘 동작하게 되면 소스 트리의 최상위 디렉토리에 있는 BUILDING파일을 읽어보고 build.sh 스크립트를 사용해서 새로운 유져랜드를 빌드하십시오.
*: 잘 모르는 사이에 시스템 콜이 추가되었을 수도 있습니다. 어쨌든 이렇게 하십시오. 이 방법이 더 안전합니다.
이 과정은 암호화되지 않은 anoncvs를 다룹니다. 암호화 프로토콜을 이용하고 싶다면, 여기에 적혀있는 설명을 이용하십시오.
(use password "anoncvs")$ cd /usr $ cvs login
이를 수행하면 /usr/src/sys에 커널 소스를 받아옵니다. 커널을 빌드하는 방법에 있는 정보를 참고하십시오.$ cvs checkout -P src/sys
이제 /usr/src에 NetBSD의 전체 소스가 생겨있을 것입니다.$ cvs checkout -P src
주의: 처음으로 "전체 소스"를 가져올 때에는 타르볼을 FTP로 가져와서 압축을 푸는 것이 네트웍을 가장 효율적으로 사용하기 때문에 빠릅니다. 다음부터는 cvs의 체크아웃/업데이트를 사용하면 변경점만 받아오기 때문에 전송량을 줄일 수 있습니다.
# chown -R user /usr/src
주의 cvs checkout -d dir src (또는 다른 src* 모듈에 대해 비슷한 명령)은 동작하지 않습니다. "existing repository ... does not match ...; ignoring module _gnusrc-cmp"와 같은 에러 메세지가 출력될 것입니다. 이를 피해가려면 -d 옵션을 빼서 cvs가 기본 디렉토리를 사용하도록 하십시오.$ cd /usr/src $ cvs update -dP
$ cvs checkout -D 20020501-UTC src
CVS 저장소의 브랜치에 대해서 알고 싶으면 src/doc/BRANCHES 를 참고하십시오.$ cvs checkout -rnetbsd-1-6 src
$ cd /parent/dir/to/checkout/into $ mkdir NewName-temp $ cd NewName-temp $ cvs checkout ... src $ mv src ../NewName $ cd .. $ rmdir NewName-temp
cvs [update aborted]: could not chdir to gnu/usr.bin/gdb/gdb: Not a directory
make cleandir를 하고 다시 시도하십시오. 그리고 cvs 업데이트를 하고 나면
make obj를 꼭 실행하십시오.
-z5
(1부터 9까지 가능합니다.)를 명령어 앞에
추가해보십시오. (예, "cvs -z5 update -dP") 이렇게 하면 모든 데이터를 압축해서
전송합니다. 단 이 명령은 cvs 서버에 부담을 준다는 점을 잊지 마십시오!
주의: cvs의 몇몇 버전(특히 버전 1.11.5)은 -z 옵션에 문제가 있을 수 있습니다. 에러가 발생하면 cvs를 업그레이드하거나 -z옵션을 빼서 압축을 하지 마십시오.
홈디렉토리에 이는 .cvsrc파일에 특정 명령에 대한 옵션 넣을 수 있고 이것은 자동으로 적용됩니다. .cvsrc 파일의 예는 다음과 같습니다.
cvs -q -z5 update -dP checkout -P diff -u
먼저 유저랜드를 빌드합니다:
# 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=/
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
anoncvs 미러 리스트에 있는 서버들중에서 ssh 접속을 지원하는 것은 필요한 정보가 추가로 적혀있습니다.
ssh를 통해 anoncvs를 사용하려면 cvsroot에서 ':pserver'를 부분을 지우고 사용하고 있는 쉘에 따라 적절히 CVS_RSH 변수를 'ssh'로 설정합니다.
다음과 같은 방식으로 current를 이용할 수 있습니다. 보통 한 1주일에 한번씩 sup을 이용해 소스의 기본 카피를 최신으로 유지합니다. 이 기본 소스 트리를 로컬 CVS 저장소로 임포트합니다. 그리고 나서 저장소에서 소스를 체크아웃해서 current를 만듭니다.
이 방식을 사용하는 이유가 세가지 있습니다.
이 방식의 유일한 단점은 3개의 독립적인 소스 트리 카피를 유지하기 때문에 실제 current를 빌드할 때 사용되는 공간을 빼고도 약 150MB의 디스크 용량을 사용한다는 점입니다.
소스를 추적하고 빌드하는 것은 다음의 6단계로 구성됩니다:
아무 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
./build.sh -T /usr/tools -O /usr/obj .
빌드과정이 성공적으로 끝나고 실행파일들을 만들어 냈다면 현재 소스에 태그를 붙이는 편이 좋습니다. 나중에 어떤 이유로 소스트리에 문제가 발생한 경우에, 한번의 CVS 명령만으로 잘 동작하는 소스 트리로 돌아갈 수 있습니다. 태그를 붙이는 것은 다음의 명령을 이용합니다:
$ cvs tag successful-build-build date
#!/usr/pkg/bin/perl # # Script to SUP NetBSD-current, import it into CVS and merge it with # any local changes. # # NOTES: # This script does no error handling so is not really suitable for # non-interactive use. # # This script has only been test with cvs-1.10.1 and cvs-1.9.18. # $SRCROOT="/usr/src/netbsd"; $IMPORTROOT="/misc/import"; $CVSROOT="/misc/cvsrep"; #run the sup into a perl stream system "/usr/sbin/sup -zsv" ; # This may need to change for none # current systems # now import the new files into CVS chdir $IMPORTROOT or die "Could not cd to $IMPORTROOT\n"; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime; $date = localtime; $shortdate = sprintf "%02d%02d%04d",$mday,$mon+1,1900+$year; system "/usr/local/bin/cvs -d$CVSROOT import -I ! -m\"SUP Import $date\" netbsd netbsd current-$shortdate "; # make the working directory the local NetBSD Tree chdir $SRCROOT or die "Could not change to $SRCROOT directory\n"; # Now do the import. $lastimport = `cat /usr/src/netbsd/.tag`; # `s are backquotes $lastimport =~ s/\n//; # strip off any trailing newline in the string system "/usr/local/bin/cvs update -j $lastimport -j current-$shortdate "; # Now write the current file into tag save file open TAG,">$SRCROOT/.tag" or die "Could not open new tag file"; print TAG "current-$shortdate"; close TAG;
이 스크립트는 작성자가 익숙하게 다루는 펄로 작성되었습니다. 똑같은 일을 하는 쉘 스크립트를 작성하는 것은 그리 어렵지 않습니다.
커멘트나 제안사항이 있으면 (이 문서를 담당하고 있는) Mike Pumford mpumford@black-star.demon.co.uk나 www@NetBSD.org로 보내주십시오.
아래에서 간략히 살펴볼 방법을 통해 NetBSD CVS 저장소(RCS, v 파일, 체크 아웃 파일) 를 얻을 수 있습니다. 이걸로 자신만의 anoncvs 서버를 만들수도 있고, 하드 디스크로 체크아웃할 수도 있습니다. 저장소에 저장된 과거 정보를 빨리 접근할 때 편리합니다.
전체 저장소를 가져오는 방법에는 다음이 있습니다:
그리고나서 "sup /path/to/supfile anoncvs"를 실행하여 파일을 가져오십시오.anoncvs release=all host=sup.NetBSD.org hostbase=/ftp/pub base=/usr prefix=/usr backup use-rel-suffix compress
/usr/share/examples/supfiles에 예제 sup 파일이 있습니다. 그리고 SUP 미러 리스트에서 가장 가까운 서버를 확인하십시오!
FTP 미러 리스트를 확인해보십시오!
rsync 미러 리스트를 확인해보십시오!rsync -v -a rsync://rsync.NetBSD.org/anoncvs/
*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 미러 리스트를 확인해 보십시오!
# cd /usr/pkgsrc/sysutils # cvs update -dP etcupdate
# cd /usr/pkgsrc/sysutils/etcupdate # make install clean
만약 /home/jdoe/netbsd/src와 같이 다른 장소에 NetBSD 소스가 있다면 어떻게 해야하냐구요? 걱정하지 마십시오. -s srcdir 옵션으로 소스트리가 있는 위치를 etcupdate에 알려주면 잘 동작합니다:# etcupdate
# etcupdate -s /home/jdoe/netbsd/src/etc
# mkdir /tmp/temproot # cd /tmp/temproot # tar xpzf /some/where/etc.tgz # etcupdate -b /tmp/temproot
# fsck -p # mount -vt nonfs # cd /dev # ./MAKEDEV wscons
./build.sh tools를 하고 -u 옵션을 사용하거나
/etc/mk.conf에 TOOLDIR을 사용하더라도,
nbmake는 build.sh를 사용할 때마다 매번 빌드됩니다.
이것은 정상입니다. 이 이유는 ./build.sh의 rebuildmake
함수에서 찾을 수 있습니다:
따라서 nbmake를 매번 빌드하고 싶지 않다면,# 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. #
-T tooldir
옵션을 사용하거나 환경 변수 TOOLDIR을 설정해야 합니다.
|
|