BUILD(7)

명칭
build - 시스템의 구축 방법에 대한 정보

해설
FreeBSD 시스템 및 어플리케이션의 원시 코드는, 다른 3 개(살)의 디렉토리에 격납되고 있습니다. 통상은, /usr/src, /usr/doc, /usr/ports 입니다. /usr/src 에는 “베이스 시스템” 의 소스가 포함되어 있습니다. 베이스 시스템이란, 시스템을 사용할 수 있다 상태에 다시 구축하는데 필요한 것으로 해 대략적으로 정의되고 있습니다. /usr/doc 에는 system document의 소스가 포함되어 있습니다. 다만, 메뉴얼 페이지는 제외합니다. /usr/ports (은)는, 써드파티의 어플리케이션을 구축해, 인스톨하기 위한 일관한 인터페이스를 제공하고 있는 트리입니다.

이것들 3 개의 디렉토리 각각 격납되고 있는 것을 구축해 인스톨 하려면 , make(1) 명령을 사용합니다. 이것들 3 개의 디렉토리, 혹은 서브 디렉토리내의 어디서에서도 make 명령을 실행하면, 그 디렉토리 부하의 서브 디렉토리내 모두로 동일한 명령을 발행한 것과 같은 효과가 있습니다. 타겟을 지정하지 않으면, make 명령을 실행했다 디렉토리내에 있는 것을 단순하게 구축합니다. 다음의 리스트는 그 외의 타겟의 명칭 및 액션을 나타냈다 물건입니다:

clean
    구축 프로세스중에서 생성된 파일을 모두 소거합니다.

install
    이 디렉토리에 대한 구축 결과를 인스톨 합니다.

update
    갱신된 소스를 /etc/make.conf 그리고 설정되어 있는 대로 취득합니다.

그 외의 /usr/src 에서의 make 타겟은 다음의 것이 있습니다:

buildworld
    커널 이외의 모든 것을 재구축 해, /etc 디렉토리내의 파일을 설정해 릴리스 합니다.

installworld
    “buildworld” 그리고 구축한 것 모든 것을 인스톨 합니다.

world
    buildworld 와 installworld 를 더한 것입니다.

buildkernel
    커널과 커넬 모듈을 재구축 합니다.

installkernel
    커널과 커넬 모듈을 인스톨 합니다.

reinstallkernel
    커널과 커넬 모듈을 재인스톨 합니다.

upgrade
    a.out 시스템 (2.2.X/3. 0)으로부터 ELF 를 이용한 새롭다 방법의 것에 업그레이드 합니다.

most
    유저 명령을 구축합니다. 프로그램 라이브러리나 인클루드 파일은 포함하지 않습니다.

installmost
    유저 명령을 인스톨 합니다. 프로그램 라이브러리나 인클루드 파일은 포함하지 않습니다.

aout-to-elf
    시스템을 a.out 형식으로부터 elf 형식에 업그레이드 합니다.

aout-to-elf-build
    시스템을 a.out 형식으로부터 elf 형식에 업그레이드 하기 위해서 필요한 것을 모두 구축합니다.

aout-to-elf-install
    aout-to-elf-build 에 의해 구축된 것을 모두 인스톨 합니다.

move-aout-libs
    elf 형식의 프로그램 라이브러리가 들어간 서브 디렉토리의 각각 존재한다 aout 서브 디렉토리에 a.out 형식의 프로그램 라이브러리를 이동합니다.

ports 의 구축 프로세스에 관한 정보에 대해서는, ports(7) (을)를 참조해 주세요.

환경 변수

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

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

NO_WERROR
    정의되고 있는 경우, 경고가 나와도 구축이 정지할 것은 없습니다. makefile 가 다른 것을 말해 와도 정지하지 않습니다.

DESTDIR
    생성한 바이너리를 인스톨 하는 디렉토리 계층을 가리킵니다.

관련 파일
/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

사용예
최신의 소스로부터 시스템을 갱신하는데는 다음과 같이 하는 것이 “좋다” (으)로 되어 있습니다:

    make buildworld
    make buildkernel KERNCONF=FOO
    make installkernel KERNCONF=FOO
    make installworld
    mergemaster

“FOO” 는, 커널을 구축할 때에 필요한 커넬 설정 파일명으로 옮겨놓을 필요가 있습니다. 이 대신에, /etc/make.conf 파일중에 있다 KERNCONF 변수를 구축하는 커널명으로 설정할 수가 있습니다. 이 경우, “buildkernel” 및 “installkernel” 명령의 “KERNCONF=FOO” 의 부분은 생략 가능합니다.

이러한 명령의 실행 후는, 시스템을 리부트할 필요가 있습니다. 리부트하지 않으면 재구축 된 프로그램이 많고 ( ps (이)나 top 등 )은, 아직 동작하고 있는 낡은 커널에서는 움직이지 않을 가능성이 있습니다.

i386 의 호스트로 Alpha 아키텍쳐용의 시스템을 크로스 빌드 하려면 , 다음의 명령 순차 순서를 사용할 수 있습니다:

    cd /usr/src
    make TARGET_ARCH=alpha buildworld
    make TARGET_ARCH=alpha DESTDIR=/clients/axp installworld

관련 항목
cc(1), install(1), make(1), make.conf(5), ports(7), release(7), mergemaster(8), reboot(8), shutdown(8)

저자
Mike W. Meyer <mwm@mired.org> 입니다.