MERGEMASTER(8)

명칭
mergemaster - 업그레이드중의 설정 파일 그 외의 merge

서식
mergemaster [-scrvahipC] [-m /path/to/sources] [-t /path/to/temp/root] [-d] [-u N] [-w N] [-D /path]

해설
mergemaster 유틸리티는, 여러가지 설정이나 FreeBSD 에 관련한 파일을 업데이트 하는 작업을 보조하기 위해서 만들어진 Bourne 셸 스크립트입니다. 이 작업을 시작하기 전에 /etc 디렉토리를 백업 해 두는 것을 강하고 권합니다.

이 스크립트는 /usr/src/etc/Makefile (을)를 사용해 / (으)로부터 아래의 가짜의 루트 환경을 작성해, 거기에 여러가지 파일을 격납합니다. [-m] 명령행 옵션으로 다른 소스 디렉토리를 지정하는 것이나, [-D] 명령행 옵션으로 다른 행선지 디렉토리를 지정할 수도 있습니다. 그리고 그 환경안의 각각의 파일을, 인스톨 되고 있는 것과 비교합니다. 스크립트가 새로운 파일로 변경점을 찾아냈을 경우나, 새로운 파일에 대응하는 인스톨 되고 있는 파일이 없는 경우에는, 그것을 처리하기 위한 4 개의 선택사항을 나타냅니다. 새로운 파일을 그대로 인스톨 하는, 새로운 파일은 지우는, 신구의 파일을 sdiff(1) (을)를 사용해 적절히 merge 하는, 다음에 손으로 merge 하기 위해서 파일을 가짜의 루트 환경에 남겨 두는, 의 어느쪽이든을 선택할 수 있습니다.

디폴트에서는, /var/tmp/temproot 에 가짜의 루트를 만들어, cvs(1) 버젼 캐릭터 라인 %Id/%FreeBSD 가 있는 파일에 대해서는 그것을 비교해, 만약 같으면 가짜의 파일을 삭제합니다. $Id 캐릭터 라인이 없을 때나, 어느 일치하지 않는 경우에는, 파일 그 자체를 비교합니다. $Id 캐릭터 라인을 무시해 모든 파일을 비교하도록(듯이) 지정할 수도 있습니다.

mergemaster 유틸리티는 umask 를 조사해, 022 이외이면 경고를 냅니다. 대부분의 설정 파일은 world read 퍼미션을 주는 것이 강제당하고 있는 것은 아닙니다만, 그렇게 하지 않으면 문제가 될지도 모릅니다. 만약 022 이외의 umask 를 선택해, 나중에 어떠한 트러블이 생겼을 경우, 그 원인이 이것일지도 모릅니다. /etc/master.passwd (은)는 특례로서 취급합니다. 이 파일내지 merge 한 파일을 인스톨 하는 것을 선택하면(자), 이 파일의 퍼미션은 보안상의 이유로부터 항상 600 (rw-------)이 됩니다. 이 파일의 업데이트판을 인스톨 한 후는, pwd_mkdb(8) (을)를 -p 옵션 첨부로 실행해, 패스워드 데이타베이스의 재구축과 /etc/passwd 의 만들기 수선을 시킬 필요가 있습니다.

스크립트는, /usr/src/etc/Makefile 하지만 작성한 파일에 붙인 소유자 ID 및 그룹 ID 와 umask 에 의해 지정된 파일 퍼미션을 이용합니다. context diff 를 선택하지 않는 이상 디폴트로 unified diff 를 사용해 차분을 표시합니다.

mergemaster 유틸리티는, 비교 개시 직전과 실행 완료전에, 지정한 스크립트를 읽어들입니다. 가장 간단한 방법은, .mergemasterrc 에 두어, 스크립트에의 패스를 적절한 변수에 설정하는 것입니다. 비교전에 읽히는 스크립트는 MM_PRE_COMPARE_SCRIPT 그리고 지정해, 스크립트 완료 후에 실행하는 것은 MM_EXIT_SCRIPT 그리고 지정합니다. 이것이, 로컬에서의 수정 및 특별한 처리를 실시하는 파일을 지정하기 위한 추천 방법입니다. 이것에는, 비교하지 않고 삭제하고 싶은 파일도 포함합니다. 지정한 스크립트는, mergemaster 내부로부터 읽히기 때문에, 스크립트의 전변수가 커스텀 스크립트중에서 사용 가능합니다. /etc/mergemaster.rc 도 사용 가능합니다. 이것은, .mergemasterrc 의 전에 읽힙니다. 명령행으로 지정된 옵션이 마지막에 갱신되기 때문에, 양쪽 모두의 파일에 우선합니다.

옵션은 이하와 같습니다:

-s  모든 파일의 대에 대해 diff 를 취해, 엄밀한 비교를 합니다. 이 비교는, CVS $Id 이외에 대해, 1 행씩 실행됩니다.

-c  unified diff 대신에 context diff 를 이용합니다.

-r  가짜의 루트 환경을 신규에 만드는 것을 하지 않고 , 이전 청소한 디렉토리에서 재실행합니다. 이 옵션은 다른 모든 옵션과 함께 사용할 수 있습니다.

-v  처리에 대해보다 장황하게 출력합니다. 당신이 처음 mergemaster (을)를 실행할 때에는, 아마 이 옵션을 붙여야 하는 것이지요. 한층 더 이 옵션은, 인스톨 되고 있는 (분)편의 /etc 밖에 없는 파일의 일람을 제공합니다.

-a  자동 실행. 이 옵션은 인스톨 되고 있는 것과 어긋나는 모든 파일을, 손으로 처리하기 위해서 가짜의 디렉토리에 남겨 둡니다. 만약 벌써 temproot 디렉토리가 있는 경우에는, 이전에는 없었던 디렉토리에 새롭게 만듭니다. 이 옵션은 장황 플래그를 해제합니다만, 다른 모든 옵션과 함께 사용할 수 있습니다. -a 옵션을 사용하면(자), -w 옵션은 무의미하게 됩니다.

-h  사용법과 헬프 정보를 표시합니다.

-i  행선지 디렉토리에 존재하지 않는 파일은, 자동적으로 인스톨 합니다.

-p  세계 구축전 모드. {build|install}world 에 불가결한 파일만 비교합니다. 이것에는 /etc/make.conf 도 포함됩니다.

-C  표준의 mergemaster 의 실행의 뒤에, rc.conf[.local] 의 옵션과 디폴트의 것을 비교합니다.

-m /path/to/sources
    make(1) (을)를 실행하는 디렉토리의 패스를 지정합니다. (바꿔 말하면(자) 소스의 장소입니다. -s 가 이미 사용되고 있으므로)

-t /path/to/temp/root
    가짜의 루트 환경을 디폴트의 /var/tmp/temproot 대신에 /path/to/temp/root 에 만듭니다.

-d  가짜의 루트 디렉토리의 이름에, 일자와 시간을 더합니다. -t 옵션을 지정해 있을 때 일자도 더하고 싶으면, 이 옵션은 -t 의 뒤에 둘 필요가 있습니다.

-u N
    umask 를 숫자로 지정합니다. 디폴트는 022 입니다.

-w N
    sdiff(1) 명령에 화면폭을 자리수로 지정합니다. 디폴트는 80 입니다.

-D /path
    파일을 인스톨 하는, 행선지 디렉토리를 지정합니다.

환경 변수
mergemaster 유틸리티는, PAGER 환경 변수가 세트 되고 있으면 그것을 사용해, 아니면 more(1) (을)를 사용합니다. 만약 PAGER 에, 풀 패스가 아니고, PATH 의 범위에 없는 프로그램을 지정해 있는 경우에는, mergemaster (은)는 선택사항과 함께 어떻게 속행하는지를 재촉 합니다. MM_PRE_COMPARE_SCRIPT (와)과 MM_EXIT_SCRIPT 의 변수는, 전술과 같이 사용합니다. 스크립트 내부에서 사용하는 다른 변수는, 다음에 상술하도록(듯이), .mergemasterrc 그리고 지정 가능합니다.

사용예
대체로의 경우, 당신이 할 필요가 있는 것은, prompt로 mergemaster (와)과 치는 것에서만, 나머지는 스크립트가 당신에 대신해 모든 작업을 합니다.

context diff 를 사용해, 한편 mergemaster 하지만 처리가 진행되는 것에 따라, 보다 많은 설명을 하도록(듯이) 하려면:

    # mergemaster -cv

mergemaster 하지만 가짜의 루트 환경을 /usr/tmp/root 에 만들도록(듯이) 지정하려면:

    # mergemaster -t /usr/tmp/root

110 자리수의 화면과 엄밀한 비교를 지정하려면:

    # mergemaster -sw 110

관련 파일
/etc/mergemaster.rc
$HOME/.mergemasterrc

mergemaster 유틸리티는, 이것들 파일이 있으면 읽어들입니다. 명령행 옵션은, rc 파일 옵션에 우선합니다. $HOME/.mergemasterrc (은)는, /etc/mergemaster.rc 에 우선합니다. 모든 값을 comment out 한 예를 나타냅니다:

    # mergemaster 의 옵션이, 기본값와 함께 일람 되어 있습니다
    # 이하의 옵션은 명령행이 덧쓰기합니다
    #
    # 가짜의 루트 환경을 인스톨 하는 디렉토리
    #TEMPROOT='/var/tmp/temproot'
    #
    # CVS $Id 의 검사를 생략 해 모든 파일을 비교하는 엄밀한 비교
    #STRICT=no
    #
    # 파일이 어긋났을 때에 차분을 표시하기 위한 diff 에 사용하는 플래그
    #DIFF_FLAG='-u'
    #
    # 보다 상세한 출력과 체크의 추가를 포함하는 장황 모드
    #VERBOSE=
    #
    # 시스템상에 존재하지 않는 파일은 자동적으로 인스톨 한다
    #AUTO_INSTALL=
    #
    # /etc/rc.conf[.local] 와 /etc/defaults/rc.conf 를 비교한다
    #COMP_CONFS=yes
    #
    # 'make'를 실행하는 디렉토리 (새로운 파일이 있는 장소)
    #SOURCEDIR='/usr/src/etc'
    #
    # mergemaster 가 디폴트의 파일 모드라는 비교에 사용하는 umask
    #NEW_UMASK=022
    #
    # 파일을 인스톨 하는, 행선지 디렉토리를 지정한다
    #DESTDIR=
    #
    # 이하의 옵션은 명령행으로부터 덧쓰기할 수 없습니다
    # PAGER 에 풀 패스를 포함하고 싶지 않은 인용
    #DONT_CHECK_PAGER=
    #
    # 위를 'yes'로 하면(자), 페이쟈에의 PATH 가 포함되어 있든가 확인해 주세요
    #PATH=/bin:/usr/bin:/usr/sbin
    #
    # 신구의 motd 파일을 비교하지 않는다
    #IGNORE_MOTD=yes
    #
    # 비교 개시전에 실행하는 스크립트나 스크립트 완료 후에 실행하는 스크립트
    # 의 패스를 지정한다
    #MM_PRE_COMPARE_SCRIPT=
    #MM_EXIT_SCRIPT=

관련 항목
cvs(1), diff(1), make(1), more(1), sdiff(1), pwd_mkdb(8)

/usr/src/etc/Makefile

http://www.FreeBSD.org/doc/handbook/makeworld.html, The Cutting Edge (using make world), Nik Clayton.

(역주: 일본어판은 http://www.jp.FreeBSD.org/www.FreeBSD.org/ja/handbook/makeworld.html )

진단
성공 종료, 없고 유저가 실행중에 수동으로 탈출했을 경우에는, 종료 스테이터스는 0 입니다.

이하에 드는 몇개의 이유로 실패했을 경우에는, 종료 스테이터스는 1 입니다:

명령행 옵션이 부정

가짜의 루트 환경을 작성하는데 실패

가짜의 루트에 파일을 격납하는데 실패

역사
mergemaster 스크립트는, 1998 년 3 월 13 일에 나의 웹페이지 중(안)에서 좀 더 단순한 형태로 comproot (이)라는 이름으로 최초로 공개되었습니다. 가짜의 루트 환경을 만든다고 하는 아이디어는, 위에서 참조한 Nik Clayton 의 make world tutorial 로부터 와 있습니다.

저자
이 메뉴얼 페이지와 스크립트는 Douglas Barton <DougB@FreeBSD.org> 하지만 썼습니다.

버그
현재 알고 있는 버그는 없습니다. 무엇인가 문제나, 코멘트나, 제안이 있으면 아무쪼록 저자까지 보고해 주세요. 이 프로그램에 된 개량의 몇개인가는 유저로부터의 제안에 의하는 것입니다. 고마워요.