RELEASE(7)

명칭
release - 릴리스 구축 기반

해설
FreeBSD (은)는, 유저가 FreeBSD operating system의 릴리스 모두를 작성할 수 있는 것 같은 완전한 구축 환경을 제공하고 있습니다. 릴리스를 구축하기 위해서 필요한 툴의 모두는, CVS 리포지터리(repository)중의 src/release 에 갖추어져 있습니다. 사실, CD-ROM 를 구울 때에 사용할 수 있는 ISO 이미지, 인스톨용 플로피, FTP 인스톨용 디렉토리의 생성을 시작으로 해, 완전한 릴리스를 명령 일발로 구축할 수 있습니다. 이 명령은, “make release” 라고 능숙한 이름을 붙일 수 있고 있습니다.

릴리스를 구축하기 전에, build(7) 의 내용에 잘 친숙해 져 둬 주세요. 또, “make world” 에 의한 소스로부터의 시스템 업그레이드의 경험도 필수입니다. 릴리스 구축 프로세스는, “make buildworld” 의 결과를 /usr/obj 에 놓아두는 것을 요구합니다. 완전한 시스템을 위한 오브젝트 파일을, 신품의 chroot(8) 환경에 인스톨 할 수 있도록(듯이) 하기 위해서, 이것이 필요합니다. 릴리스를 진행시키려면 , vn(4) (vnode 디스크) 디바이스 드라이버가 커널에 존재한다 (컴파일 끝나, 또는 모듈로서 로드의 모두 가능) 일도 필요합니다.

이 문서는, 원시 코드 관리, 품질관리 등, 릴리스 엔지니어링 프로세스에 관한 그 외의 측면은 취급하지 않습니다.

타겟
릴리스용 makefile (src/release/Makefile) (은)는, 꽤 난해합니다. 대부분의 경우, release 타겟을 생각하는 것만으로 끝난다고 생각합니다.

release
    “make installworld” (을)를 이용해, 파일 시스템의 chroot(8) 환경에 신품의 시스템을 인스톨 합니다. 지정한 버젼의 원시 코드를 체크아웃 해, “make world” (을)를 이용해, 신품의 환경에 완전한 시스템을 재구축 합니다. 그 후에, 디스트리뷰션별의 패키징(정리하고), 인스톨용 floppy disk의 구축, 릴리스 문서의 구축등의 세세한 스텝이 계속됩니다.

rerelease
    이 타겟은, 릴리스 구축 작업의 결과를 손으로 수정해, 전의 “make release” 의 중간 결과를 사용해, 최소의 스텝수로 릴리스를 재구축 하는 것을 상정한 것입니다.

floppies
    신규의 부트 플로피의 조를 작성합니다. release. 5, release. 9, release. 10 타겟을 불러, 직전의 “make release” 의 플로피 이미지를 재작성합니다. 이 타겟은, 커스텀 부트 플로피의 작성에 가장 자주(잘) 사용됩니다.

“make release” 에 의해 불려 가는 타겟은 다음과 같습니다.

release. 1
    디렉토리 ${CHROOTDIR}/R (을)를 신품으로 해, mtree(8) (을)를 이용해 시스템용의 디렉토리 계층을 구축합니다.

release. 2
    시스템을 디스트리뷰션용 디렉토리에 인스톨 합니다.

release. 3
    “crypto”, “krb4”, “krb5” 디스트리뷰션을 빌드 및 인스톨 합니다.

release. 4
    GENERIC 커널을 만들어, 인스톨 합니다.

release. 5
    crunchgen(1) (을)를 이용해, 인스톨용 플로피에 수용한다 “crunched” 바이너리를 구축합니다.

release. 6
    합성 디스트리뷰션을 구축해, 또, 작성된 디스트리뷰션 트리를 청소 다 할 수 있어로 합니다.

release. 7
    조립할 수 있었던 디스트리뷰션 트리의 tarball 를 생성합니다.

release. 8
    소스 디스트리뷰션을 작성합니다.

release. 9
    boot 플로피, MFS root 플로피를 생성합니다.

release. 10
    fixit 플로피를 생성합니다.

ftp. 1
    FTP 인스톨에 적절한 area를 ${CHROOTDIR}/R/ftp 에 정돈합니다.

cdrom. 1
    CD-ROM 이미지 구축에 적절한 area를 ${CHROOTDIR}/R/cdrom 에 정돈합니다.

iso. 1
    CD-ROM 릴리스 area로부터 ISO 이미지를 2 개 구축합니다 (인스톨용과 “live” 파일 시스템의 2 개). 디폴트에서는 무효가 되어 있습니다. 이하의 MAKE_ISOS (을)를 참조해 주세요.

doc. 1
    FreeBSD 다큐멘테이션 프로젝트의 소스 문서 (SGML, XML)를 릴리스에 포함하는 HTML / 텍스트 문서로 변환하기 위해서(때문에) 필요한 툴 모두를 구축합니다. 또, 현재 존재하는 유저 도큐멘테이션도 구축, 인스톨 합니다. 이것에는, Handbook, FAQ, article 등이 포함됩니다.

doc. 2
    릴리스 문서를 구축합니다. 이것에는, 릴리스 노트, 하드웨어 가이드, 인스톨 작업 설명서 (installation instructions)(이)가 포함됩니다.

환경 변수
지정해야 하는 환경 변수는 이하대로입니다.

CHROOTDIR
    chroot(8) 환경으로서 전릴리스 구축에 사용하는 디렉토리. i386 아키텍쳐의 경우, 이것이 존재하는 파일 시스템에는 적어도 2.3GB 의 빈area가 필요합니다.

BUILDNAME
    구축하는 릴리스의 이름. 이 이름은, sys/conf/newvers.sh 중(안)에서 RELEASE 의 값을 설정하는데 사용합니다. 이 값은 uname(1) 의 출력을 변경합니다.

CVSROOT
    FreeBSD CVS 리포지터리(repository)의 위치입니다. 이 패스명은, 열매 시스템 루트로부터 참조되어 chroot(8) 된 디렉토리 트리의 루트로부터의 참조에서는 없습니다.

RELEASETAG
    구축하는 릴리스에 상당하는 CVS 태그. 미정도리의 경우, CVS 트리의 HEAD ( “-CURRENT snapshot” )(으)로부터 구축됩니다.

옵션의 변수는 다음과 같습니다.

CVSCMDARGS
    cvs(1) 의 명령 checkout (와)과 update 에의 추가의 인수입니다. 예를 들면, 이 변수를 “-D '01/01/2002 00:00:00 GMT'” (으)로 설정해 “make release” 또는 “make rerelease” 그러자(면), cvs(1) (은)는 각각 2002 년 1 월 1 일 00:00:00 GMT 의 소스를 체크아웃 또는 업데이트 하는 듯 cvs(1) 에 지시합니다.

LOCAL_PATCHES
    /usr/src 에 대한 패치 파일. 이 패치는, 릴리스 구축을 개시하기 전에, chroot(8) 환경에서 적용됩니다.

PATCH_FLAGS
    패치 파일 LOCAL_PATCHES (을)를 적용할 때에 이용한다 patch(1) 명령에 건네주는 인수.

LOCAL_SCRIPT
    chroot(8) 환경에서, 로컬 패치 적용 직후에 실행되는 스크립트.

MAKE_ISOS
    이것을 정의했을 경우, CD-ROM 스테이지의 디렉토리의 내용으로부터, 브타불 ISO CD-ROM 이미지를 생성합니다.

NODOC
    “YES” (와)과 설정했을 경우, FreeBSD 다큐멘테이션 프로젝트의 SGML 베이스의 문서를 생성하지 않습니다. 그렇지만, src/share/doc 에 있는 최소의 다큐멘테이션 세트로부터 “doc” 디스트리뷰션이 여전히 작성됩니다.

NOPORTS
    “YES” (와)과 설정했을 경우, Ports Collection 는 릴리스로부터 생략 됩니다.

NOPORTREADMES
    이것을 정의했을 경우, Ports Collection 의 각 port 에 대한 readme 파일을 작성하지 않습니다. 디폴트의 동작은, “make release” 하지만 “make readmes” (을)를 ${CHROOTDIR}/usr/ports (으)로부터 실행한다고 하는 것이어, 막대한 시간을 비 것이 됩니다.

RELEASEDISTFILES
    ports 용으로서 릴리스 구축에 필요하다 디스트리뷰션 파일이 존재하는 디렉토리입니다. 이것에 의해, 저속인 링크 경유로 distfiles 를 다운로드할 때에 소비되는 막대한 시간을 절약할 수가 있습니다.

RELEASENOUPDATE
    “make rerelease” 시에 이 변수의 값을 설정했을 경우, “cvs update” 에 의한 원시 코드 갱신을 행하지 않습니다.

TARGET_ARCH
    타겟이 되는 머신 프로세서 아키텍쳐. 이 환경 변수는 “uname -p” 의 출력과 같은 것입니다. 다른 아키텍쳐용으로 크로스 빌드 하려면 이 환경 변수를 설정해 주세요

TARGET
    타겟이 되는 하드웨어 플랫폼. 이 환경 변수는 “uname -m” 의 출력과 같은 것입니다. 타겟 아키텍쳐를 크로스 빌드 하는데 필요한 변수입니다. 예를 들면, PC98 머신용으로 크로스 빌드를 실시하려면 TARGET_ARCH=i386 (와)과 TARGET=pc98 하지만 필요합니다.

관련 파일
/etc/make.conf
/usr/doc/Makefile
/usr/doc/share/mk/doc.project.mk
/usr/ports/Mk/bsd.port.mk
/usr/ports/Mk/bsd.sites.mk
/usr/share/examples/etc/make.conf
/usr/src/Makefile
/usr/src/Makefile.inc1
/usr/src/release/Makefile
/usr/src/release/${arch}/drivers.conf
/usr/src/release/${arch}/boot_crunch.conf
/usr/src/release/${arch}/fixit_crunch.conf

사용예
이하의 명령열은 FreeBSD 4.5 release 를 구축할 때에 사용한 것입니다.

    cd /usr
    cvs co -rRELENG_4_5_0_RELEASE src
    cd src
    make buildworld
    cd release
    make release CHROOTDIR=/local3/release BUILDNAME=4. 5-RELEASE \
      CVSROOT=/host/cvs/usr/home/ncvs RELEASETAG=RELENG_4_5_0_RELEASE

이러한 명령을 실행하면(자), FTP 디스트리뷰션용과 CD-ROM 디스트리뷰션용으로서 사용할 수 있는 완전한 시스템이 디렉토리 /local3/release/R (으)로 할 수 있습니다.

다음의 명령열은, 로컬로 수정한 소스 트리의 “-CURRENT snapshot” (을)를 구축하기 위해서 사용할 수 있습니다.

    cd /usr/src
    cvs diff -u > /path/to/local.patch
    make buildworld
    cd release
    make release CHROOTDIR=/local3/release BUILDNAME=5. 0-CURRENT \
      CVSROOT=/host/cvs/usr/home/ncvs LOCAL_PATCHES=/path/to/local.patch

관련 항목
cc(1), crunchgen(1), cvs(1), install(1), make(1), patch(1), uname(1), vn(4), drivers.conf(5), make.conf(5), build(7), ports(7), chroot(8), mtree(8) FreeBSD Release Engineering, http://www.FreeBSD.org/doc/en_US.ISO8859-1/articles/releng/. FreeBSD Release Engineering of Third Party Packages, http://www.FreeBSD.org/doc/en_US.ISO8859-1/articles/releng-packages/. FreeBSD Developers' Handbook, http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/developers-handbook/.

역사
FreeBSD 1. x 그럼, 대조표를 손으로 체크하면서, Rod Grimes 에 의해 컴파일 되어 릴리스가 작성되었습니다. 불완전함은 접어둔다고 해도, 이 대조표에는, 파일 시스템을 사용할 수 있도록(듯이)하기 위한 자잘한 요구가 대량으로 포함되어 있어 그 실행은 고문으로 밖에 좋게가 없는 것이었습니다.

FreeBSD 2.0 릴리스 엔지니어링을 계속하는 가운데, src/release/Makefile (을)를 고쳐, 격리된 무균 환경에서 릴리스를 구축할 때의 지루한 작업의 대부분을 자동적으로 행할 수 있도록(듯이) 하는 것에, 현저한 노력이 지불해졌습니다.

복수의 브랜치(branch)에 걸치는 1000 회 가까이의 개판을 거쳐, src/release/Makefile 의 cvs(1) 로그에는, 릴리스 엔지니어들이 경험한 고난의 얼마간인지를 나타낸다 생생한 역사의 기록이 새겨져 있습니다.

저자
src/release/Makefile (은)는, 원래는 -nosplit Rod Grimes, Jordan Hubbard, Poul-Henning Kamp 하지만 썼습니다. 이 메뉴얼 페이지는, Murray Stokely <murray@FreeBSD.org> 하지만 썼습니다.