CTM_MAIL(1)

명칭
ctm_smail, ctm_dequeue, ctm_rmail - 메일 (을) 통한 ctm 델타의 송수신

서식
ctm_smail [-l log] [-m maxmsgsize] [-c maxctmsize] [-q queue-dir] ctm-delta mail-alias ctm_dequeue [-l log] [-n numchunks] queue-dir ctm_rmail [-Dfuv] [-l log] [-p piecedir] [-d deltadir] [-b basedir] [file ...]

해설
ctm_smail, ctm_dequeue, ctm_rmail 하 ctm(1) 명령와 조합해, 소스 트리에의 변경을 전자 메일로 배포하기 위해서 사용됩니다. ctm_smail 유틸리티에는 압축했다 ctm(1) 의 델타와 그것을 보내는 메일링리스트를 줍니다. 그러자(면) 델타를 송신할 수 있는 크기에 분리해, 메일 메세지로서 encode 한 것을 메일링리스트에 보냅니다 (메일의 부하를 분산시키기 위해서(때문에) 큐에 넣도록(듯이) 선택할 수 있습니다). 각 수신자는 ctm_rmail (을)를 사용 (수동 또는 자동으로) 델타의 디코드와 재조립을 실시해, 그것을 소스 트리에 적용하기 위해서 ctm (을)를 호출하도록(듯이)도 지정할 수 있습니다. 현재, 몇개의 소스 트리가, 몇개의 사이트에 의해 배포되고 있습니다. 그 중에는 freefall.FreeBSD.org 하지만 배포하고 있다 FreeBSD-current 의 소스와 CVS 의 트리도 있습니다.

ctm_smail 의 명령행의 인수에는 이하가 있습니다:

-l log
    stderr 에 출력하는 대신에, (명령행의 에러 이외의) 에러 진단과 정보 메세지 에 타임 스탬프를 붙인 것이 파일 log 에 기입해집니다.

-m maxmsgsize
    ctm_smail 하지만 송신할 수 있는 메일 메세지의 최대 사이즈를 제한합니다. 메일 헤더와 그 외의 세세한 것을 이 제한으로 넣지 않기 때문에 대략의 값이 됩니다. 지정되지 않으면 디폴트는, 메일의 한계라고 소문되는 64k 에 대해서 헤더를 위한 1535 바이트를 남긴 64000 바이트입니다.

-c maxctmsize
    송신되는 델타의 최대 사이즈를 제한합니다. 이 제한보다 큰 델타는 사죄 메일을 메일링리스트에 내보냅니다. 이것은 대폭적인 변경으로 유저의 메일 박스를 압박해 버리는 것을 피하기 (위해)때문입니다. 이것은 encode 하기 전의 사이즈이므로 주의해 주세요. encode 되면(자) 메일 헤더를 붙이기 전으로 사이즈는 4/3 배가 됩니다. 지정되지 않으면 무제한하게 됩니다.

-q queue-dir
    델타의 파편을 메일 하는 대신에, 다음에 ctm_dequeue (을)를 사용해 메일 되도록(듯이) 지정된 디렉토리에 격납합니다. 이 기능에 의해, 거대한 델타를 수시간 또는 몇일에도 걸쳐 분산시켜, 네트워크의 밴드폭이 좁기도 하고 메일의 spool area가 작다 수신자에게로의 임펙트를 누르는 것이 가능합니다.

ctm-delta (은)는 송신되는 델타로, mail-alias (은)는 델타를 송신하는 메일링리스트입니다. 메일 메세지는 sendmail(8) (을)를 사용해 송신됩니다.

ctm_dequeue 의 명령행의 인수에는 이하가 있습니다:

-l log
    stderr 에 출력하는 대신에, (명령행의 에러 이외의) 에러 진단과 정보 메세지 에 타임 스탬프를 붙인 것이 파일 log 에 기입해집니다.

-n numchunks
    1 회의 ctm_dequeue 의 실행으로 송신하는 메일 메세지의 수를 제한합니다. 디폴트에서는, ctm_dequeue (은)는 1 회의 실행으로 1 개의 메일 메세지를 송신합니다.

queuedir 하 ctm_smail 하지만 격납한 메일 메세지가 있는 디렉토리입니다. numchunks 개까지의 메일 메세지가 실행 마다 송신됩니다. 수신자의 메일링리스트는, 고인 파일에 벌써 encode 되고 있습니다.

ctm_smail 하지만 큐에 엔트리를 추가하고 있는 한중간이나, 복수의 ctm_smail (을)를 병행에 실행하고 있는 한중간이라도 ctm_dequeue (을)를 안전하게 실행할 수 있습니다만, 배포되는 각 트리 마다 독립했다 큐의 디렉토리를 사용해야 합니다. 이것은 엔트리가 알파벳순서에 처리되므로, 델타의 작성 시각이 아니고, 델타명에 따라 1 개의 트리가 다른 물건보다 전에 처리되어 불공평하게 되기 때문입니다.

ctm_rmail 의 명령행의 인수에는 이하가 있습니다:

-l log
    stderr 에 출력하는 대신에, (명령행의 에러 이외의) 에러 진단과 정보 메세지 에 타임 스탬프를 붙인 것이 파일 log 에 기입해집니다.

-p piecedir
    델타의 파편을 이 디렉토리에 모읍니다. 각각의 파편은 1 개의 메일 메세지에 대응합니다. 파편은 완전한 델타가 완성되면(자) 삭제됩니다. 만약 이 플래그가 지정되지 않으면 입력 파일은 읽혀지지 않습니다만, -b 플래그가 지정되어 있으면 완성하고 있는 델타는 ctm (을)를 사용해 적용될지도 모릅니다.

-d deltadir
    이 디렉토리내의 완성한 델타를 모읍니다. 델타는, 모든 파편이 갖추어져 있을 때에 1 개(살) 이상의 파편으로부터 조립할 수 있습니다.

-b basedir
    완성하고 있는 델타를 이 소스 트리에 적용합니다. 이 플래그가 지정되어 있지 않은 경우, 델타는 격납됩니다만 적용은 되지 않습니다. 유저는 수동, 또는 ctm_rmail (을)를 -p 플래그 없음으로 사용해 델타를 적용할 수 있습니다. 만약 델타가 basedir 의 .ctm_status 파일과 매치 하지 않는 경우 (혹은 .ctm_status 하지만 존재하지 않는 경우)에는, 델타는 적용되지 않습니다.

-D  ctm 에 의한 적용이 성공한 다음에 델타를 삭제합니다. ctm (은)는 델타의 풀 세트로부터 파일의 소그룹을 회복하는 기능을 가지므로, 이 플래그를 피해 (그리고 모든 델타를 취해) 두는 것이 좋을 것입니다.

-f  fork 해 ctm 에서의 델타의 적용을 백그라운드에서 실행합니다. 이것은 sendmail (으)로부터 ctm_rmail (을)를 자동적으로 호출하는 경우에 유효합니다. 왜냐하면 ctm (은)는 종료까지, 매우 긴 시간을 필요로 해, 거기에 따라 다른 사람의 메일을 늦추는 원인이 되어, 이론적으로는 리모트측의 sendmail 의 타임 아웃에 의한 메일의 불필요한 재발송신이나, MH 의 slocal (와)과 같은 메일 필터에 의한다 ctm_rmail 의 강제 종료를 일으킬 가능성이 있기 때문입니다. 방대한 수의 백그라운드의 ctm 프로세스로 머신에 부하가 걸릴 걱정은 없습니다. 동시에 2 개(살) 이상의 ctm 하지만 기동되지 않게 락을 하고 있기 때문입니다.

-u  완성한 델타를 적용할 때에 -u 플래그를 ctm 명령에 건네줍니다. 이것에 의해 작성, 변경된 파일의 변경 시각이 CTM 델타의 작성 시각에 세트 됩니다.

-v  완성한 델타를 적용할 때에 -v 플래그를 ctm 명령에 건네줍니다. 이것에 의해 보다 많은 정보 출력을 얻을 수 있습니다. 모든 ctm (으)로부터의 출력은 ctm_rmail 의 로그 파일에 기록됩니다.

인수의 파일 (만약 없으면 표준 입력 )(이)가 델타의 파편으로서 스캔 됩니다. 1 개의 파일로부터 복수의 델타의 파편을 읽을 수가 있으므로, 메일 드롭 전체를 1 회의 명령로 스캔 해 처리할 수 있습니다.

ctm_rmail (을)를 병행에 (다른 입력 파일로) 여러 차례 기동해도 안전합니다. sendmail 하지만 메일을 비동기에게 배송했을 때에 이러한 일이 일어날 수 있습니다. 이것은 처리를 순서 대로에 유지하기 위해서(때문에) 락을 하고 있기 때문입니다.

파일 포맷
이하는 실제의 (매우 작다) 델타의 파편의 중요 부분입니다:

    From: owner-src-cur
    To: src-cur
    Subject: ctm-mail src-cur. 0003.gz 1/4
    CTM_MAIL BEGIN src-cur. 0003.gz 1 4
    H4sIAAAAAAACA3VU72/bNhD9bP0VByQoEiyRSZEUSQP9kKTeYCR2gDTdsGFAwB/HRogtG5K8NCj6
    v4+UZSdtUQh6Rz0eee/xaF/dzx8up3/MFlDkBNrGnbttAwyo1pxoRgoiBNX/QJ5d3c9/X8DcPGGo
    lggkPiXngE4W1gUjKPJCYyk5MZRbIqmNW/ASglIFcdwIzTUxaAqhnCPcBqloKEkJVNDMF0Azk+Bo
    dDzzk0Ods/+A5gXv9YyJHjMCtJwQNeESNma7hOmXDRxn
    CTM_MAIL END 61065

메세지의 Subject는 항상 “ctm-mail” 그리고 시작 델타의 이름, 몇개째의 파편인가, 그리고 전부 몇개(살)의 파편이 있는지가 계속됩니다. 데이터는 “CTM_MAIL BEGIN” (와)과 “CTM_MAIL END” 그렇다고 하는 행으로 둘러싸여 있어 Subject행의 정보의 복제, 더해 단순한 체크 섬이 붙습니다.

델타가 maxctmsize (을)를 넘으면(자), 대신에 이하와 같은 메세지가 보내집니다:

    From: owner-src-cur
    To: src-cur
    Subject: ctm-notice src-cur. 0999.gz
    src-cur. 0999.gz is 792843 bytes.   The limit is 300000 bytes.
    이 델타는 ftpmail 인가, 또는 대학의 의좋은 사이로부터 얻을 수 있습니다.

이것으로 이제(벌써) 당신의 것입니다!

사용예
src-cur 의 32 번째의 델타를 src-guys (으)로서 sendmail 에 등록되어 있는 훌륭한 코드 해커의 그룹에, 메일의 사이즈를 대략 60000 바이트에 제한해 보내기 위해서(때문에)는 이하와 같이 할 수 있습니다:

    ctm_smail -m 60000 /wherever/it/is/src-cur. 0032.gz src-guys

메일 박스의 각 ctm-mail 메세지를 디코드해, 그것들을 완전한 델타에 조립하고 그리고 완성된 델타나 그 정도에 널려 있는 델타는 모두, 이하와 같이 적용 할 수 있습니다:

    ctm_rmail -p ~/pieces -d ~/deltas -b /usr/ctm-src-cur $MAIL

( ctm_rmail (은)는 메세지를 삭제하지 않기 때문에 주의해 주세요. 삭제에는 어떤 메일 리더라도 사용할 수 있습니다. )

receiver-dude (이)라는 이름의 자동적으로 디코드와 델타의 조립을 실시하지만, 그러한 적용은 실시하지 않는 것 같은 메일 에일리어스는, 이하의 행을 /etc/mail/aliases 파일에 넣는 일로 작성 가능합니다 ( /ctm/tmp (와)과 /ctm/deltas 디렉토리 그리고 /ctm/log 파일이 daemon 유저인가 wheel 그룹에서 기입해 가능한 일을 가정하고 있습니다) :

    receiver-dude: "|ctm_rmail -p /ctm/tmp -d /ctm/deltas -l /ctm/log"
    owner-receiver-dude: real_dude@wherever.you.like

2 행 째는, 실패했을 경우에 그것을 통상의 메일 박스인가, 또는 어딘가 좋아하는 곳에 전송 하기 위해서 있습니다.

모아진 전델타를 적용해, 적용한 것을 삭제하려면 이하와 같이 합니다:

    ctm_rmail -D -d /ctm/deltas -b /ctm/src-cur -l /ctm/apply.log

유연성을 최대한 살리기 위해서(때문에)는, 이 procmail 스크립트로부터의 인용의 이용을 생각해 봐 주세요:

    PATH=$HOME/bin:$PATH
    :0 w
    * ^Subject: ctm-mail cvs-cur
    | ctm_incoming

이하의 셸 스크립트 ~/bin/ctm_incoming (와)과 함께 사용합니다:

    #!  /bin/sh
    PATH="$HOME/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin"
    export PATH
    cd $HOME/ctm && ctm_rmail -f -p pieces -d deltas -l log -b /ctm

이것은 전부의 ctm 델타를 ~/ctm/deltas 에 두어, 그것들을 /ctm 안의 트리에 적용해, 실패한 것은, 모두 당신의 통상의 메일 박스에 떨어뜨립니다. ctm_incoming 에서의 PATH 의 조작은, 이 샘플을 취해 왔다 ( FreeBSD (이)가 아니다) 머신으로 ctm_rmail (으)로부터 ctm 의 실행을 가능하게하기 위한의 것입니다.

보안
CTM 자신, 안전하지 않는 프로토콜입니다 - 원시 코드에 더해진 수정을 신뢰할 수 있는 곳(중)으로부터 보내진 것을 인증하지 않으므로, 통상의 전자 메일등의 신뢰할 수 없는 매체로부터 CTM 델타를 얻었을 경우에는 주의가 필요합니다. CTM 델타를 위조해, 정당한 것을 교환 또는 덧쓰기해, 악의 있는 코드를 당신의 소스 트리에 삽입하는 것은, 공격자에게 있어 비교적 간단합니다. 정당한 델타의 도착이 하등의 방법으로 방해할 수 있었을 경우, 이것을 감지할 수 있는 것은, 후의 델타가 같은 파일을 손대려고 하는 시점입니다. 이 시점에서, MD 체크 섬이 실패합니다.

이것을 회피해 안전한 것으로 하기 위해서(때문에), FreeBSD.org 가 만든 CTM 부품에는, GNU Privacy Guard 유틸리티 호환인 포맷으로 암호적으로 서명하고 있습니다. 이 유틸리티는 /usr/ports/security/gpg 및 Pretty Good Privacy v5 유틸리티 /usr/ports/security/pgp5 로부터 입수할 수 있습니다. 적절한 공개열쇠는 ctm@FreeBSD.org 를 finger 하는 것으로 얻을 수 있습니다.

이와 같이 서명된 CTM 델타는, 검지되는 일 없이 공격자가 개변할 수 없습니다. 그러므로, CTM 델타를 전자 메일로 수신하는 경우에는, GPG 또는 PGP5 를 사용해 서명을 확인하는 것을 권합니다.

환경 변수
델타를 적용한다면 ctm(1) (와)과 gunzip(1) 하지만 PATH 에 포함되지 않으면 안됩니다.

관련 파일

QUEUEDIR/*
    메일 메세지로서 encode 되어, 메일링리스트에 송신되는 것을 기다리고 있는 델타의 파편.

PIECEDIR/*
    나머지의 파편의 도착을 기다리고 있는 델타의 파편.

DELTADIR/*
    완성한 델타.

BASEDIR/.ctm_status
    이 소스 트리에 다음에 적용되어야 할 델타의 이름과 번호를 포함한 파일.

진단
ctm_smail, ctm_dequeue, ctm_rmail 유틸리티는 정상적으로 종료하면(자) 스테이터스로서 0 을, 어떠한 장해가 어늘었을 경우는 1 을 돌려줍니다. ctm_rmail 유틸리티는, 메일의 배송 프로그램으로부터 불리는 일을 상정하고 있습니다. 그리고 그 때문에 입력된 메일 메세지가 (송신자에게가 아니고, 가능한 한 당신의 통상의 메일 드롭에) 반송되어야 할 상태에 되었을 때에게만 장해를 통지하게 되어 있습니다. 좋은가 있으면, 완성한 델타를 ctm 그리고 적용할 때에 발생한 장해는 메일을 반송할수록 중요한 에러에서는 없다고 판단되어, ctm_rmail (은)는 종료 스테이터스로서 0 을 돌려준다고 하는 것입니다.

통상의 조작에서는, ctm_smail (은)는 이하와 같은 메세지로 보고합니다:

    ctm_smail: src-cur. 0250.gz 1/2 sent to src-guys

또는, 큐에 넣었다면,

    ctm_smail: src-cur. 0250.gz 1/2 queued for src-guys

ctm_dequeue 유틸리티는 이하와 같은 메세지로 보고합니다:

    ctm_dequeue: src-cur. 0250.gz 1/2 sent

ctm_rmail 유틸리티는 이하와 같은 메세지로 보고합니다:

    ctm_rmail: src-cur. 0250.gz 1/2 stored
    ctm_rmail: src-cur. 0250.gz 2/2 stored
    ctm_rmail: src-cur. 0250.gz complete

만약 입력 파일의 모두가 올바른 델타의 파편을 포함하지 않으면 ctm_rmail (은)는 이하와 같이 보고합니다:

    ctm_rmail: message contains no delta

그리고 종료 스테이터스로서 1 을 돌려줍니다. 만약 메일 필터가 믿을 수 없다면, 이것을 사용해 변덕스러운 메세지를 리디렉트 해 진짜 메일 박스에 넣을 수가 있습니다.

이러한 메세지는 stderr 인가 로그 파일에 출력됩니다. ctm(1) (으)로부터의 메세지도 이와 같이 여기에 나타납니다. 에러 메세지는 그것 자신이 설명적이어야 합니다.

관련 항목
ctm(1), ctm(5)

저자
Stephen McKay <mckay@FreeBSD.org>

일본어 번역
노쿠비관고 (h-nokubi@nmit.mt.nec.co.jp): FreeBSD 용으로 번역