PKG_CREATE(1)

명칭
pkg_create - 소프트웨어 배포 package 를 작성하는 프로그램

서식
pkg_create [-YNOhjvyz] [-P pkgs] [-p prefix] [-f contents] [-i iscript] [-I piscript] [-k dscript] [-K pdscript] [-r rscript] [-s srcdir] [-t template] [-X excludefile] [-D displayfile] [-m mtreefile] [-o originpath] -c comment -d description -f packlist pkg-filename pkg_create [-YNhvy] -b pkg-name [pkg-filename]

해설
이 pkg_create 명령은, package 전개/정보 프로그램에게 건네지는 package (역주: FreeBSD 의 package system 에 있어서의 패키지를 가리키는 경우에 이렇게 표기합니다) (을)를 작성합니다. package 작성을 위해서(때문에) 입력하는 설명과 명령행 인수 (은)는 본래 인간이 생성하는 것을 의도하고 있었습니다만, 그렇게 하는 일도 간단하게 할 수 있습니다. 자력으로 어떻게든 하는 일도 가능합니다만, 작성에는 front and tool를 이용하는 것이 좋을 것입니다. 그렇다고는 하지만, 입력 서식의 개략은 이 문서에 포함되어 있습니다.

옵션
이하의 명령행 옵션이 제공되고 있습니다:

-f packinglist
    파일 packinglist (으)로부터, 혹은 packinglist 하지만 - (데쉬)이면 stdin (으)로부터, package 용의 “packing list” (을)를 취득합니다.

-c  [-]desc 파일 desc (으)로부터, 혹은 선두가 - 그리고 시작되어 있으면 인수 자신으로부터, package 의 “일행 설명” (을)를 취득합니다. 이 캐릭터 라인은, package 가 제공하는 것의 버젼을 안다 단서가 되어야 합니다.

-d  [-]desc 파일 desc (으)로부터, 혹은 선두가 - 그리고 시작되어 있으면 인수 자신으로부터, package 의 긴 설명을 취득합니다.

-Y  질문에 대해서의 디폴트의 회답을 `Yes'로 합니다.

-N  질문에 대해서의 디폴트의 회답을 `No'로 합니다.

-O  `packing list Only'모드로 이행합니다. 이것은 FreeBSD Ports Collection (을)를 위한 특별한 수정이며, port 가 인스톨 될 때의 `fake pkg_add'를 실시하기 위해서(때문에) 이용됩니다. 이러한 경우에는, 조정된 최종적인 packing list 가 어떠한 것이 될까를 알 필요가 있습니다.

-v  요설인 출력으로 전환합니다.

-h  tar 가 기호 연결을 더듬도록(듯이) 합니다. 이 결과, 링크 자신은 아니고 링크처의 파일이 출력됩니다.

-i iscript
    package 의 인스톨전 수속으로서 iscript (을)를 이용합니다. 이것은 실행 가능한 프로그램 (혹은 셸 스크립트)이라면 뭐든지 상관하지 않습니다. 이것은 package 가 인스톨 될 때에 자동적으로 기동됩니다. 그 때, package 명이 제 1 인수로서 건네받습니다.

    주: -I 옵션이 지정되지 않는 경우, 본스크립트는 해당 package 의 pre-install 및 post-install 의 양쪽 모두의 스크립트로서 동작합니다. package 명과 함께 키워드 PRE-INSTALL 및 POST-INSTALL (을)를 각각 건네주는 것으로, 기능을 바꾸게 됩니다.

-I piscript
    package 의 인스톨 후수 계속으로서 piscript (을)를 이용합니다. 이것은 실행 가능한 프로그램 (혹은 셸 스크립트)이라면 뭐든지 상관하지 않습니다. 이것은 package 가 인스톨 될 때에 자동적으로 기동됩니다. 그 때, package 명이 제 1 인수로서 건네받습니다.

-P pkgs
    초기의 package 의존 리스트로서 pkgs (을)를 이용합니다. 이것은 공백에서 단락지어진 package 의 이름이 됩니다. 또, packing list (후술의 PACKING LIST 상세 섹션을 참조) 안의 복수의 @pkgdep 지시문을 지정하는 민첩한 방법이기도 합니다. pkgs 리스트의 각 인수는 pkgname[:pkgorigin] 그렇다고 하는 서식입니다. 생략 가능한 pkgorigin 요소는, 리스트로부터의 각 의존의 기원을 나타내, pkgname (와)과 함께 @comment 지시문을 사용해 packing list 중에 기록됩니다.

-p prefix
    package 의 파일을 선택할 때에 “기준” 되는 초기 디렉토리로서 prefix (을)를 이용합니다.

-k dscript
    package 의 언인스톨 수속으로서 dscript (을)를 이용합니다. 이것은 실행 가능한 프로그램 (혹은 셸 스크립트)이라면 뭐든지 상관하지 않습니다. 이것은 package 가 언인스톨될 때에 자동적으로 기동됩니다. 그 때, package 명이 제 1 인수로서 건네받습니다.

    주: -K 옵션이 지정되지 않는 경우, 본스크립트는 해당 package 의 de-install 및 post-deinstall 의 양쪽 모두의 스크립트로서 동작합니다. package 명과 함께 키워드 DEINSTALL 및 POST-DEINSTALL (을)를 각각 건네주는 것으로, 기능을 바꾸게 됩니다.

-K pdscript
    package 의 언인스톨 후수 계속으로서 pdscript (을)를 이용합니다. 이것은 실행 가능한 프로그램 (혹은 셸 스크립트)이라면 뭐든지 상관하지 않습니다. 이것은 package 가 언인스톨될 때에 자동적으로 기동됩니다. 그 때, package 명이 제 1 인수로서 건네받습니다.

-r rscript
    package 의 “requirements” 수속으로서 rscript (을)를 이용합니다. 이것은 실행 가능한 프로그램 (혹은 셸 스크립트)이라면 뭐든지 상관하지 않습니다. 이것은 인스톨시, 언인스톨시에 자동적으로 기동되어 인스톨, 언인스톨을 계속해야할 것인가 제발을 결정하는데 이용됩니다. 인스톨과 언인스톨을 구별하기 위해서, 키워드 INSTALL (와)과 DEINSTALL 하지만 각각, package 명과 함께 건네받습니다.

-s srcdir
    package 작성중에 srcdir (은)는, @cwd 의 값에 우선합니다.

-t template
    mktemp(3) 에의 입력으로서 template (을)를 이용합니다. 이것은 디폴트에서는 /tmp/instmp.XXXXXX 그렇다고 하는 캐릭터 라인입니다만, /tmp 디렉토리의 용량이 제한되고 있는 것 같은 상황에서는 변경할 필요가 있을지도 모릅니다. mktemp(3) 하지만 일의의 ID 를 이용하기 위해서(때문에) 필요한 `X'의 캐릭터를 몇개인가 남겨 둔다 일을 잊지 말아 주세요.

-X excludefile
    최종적으로 package 를 작성할 때에, excludefile (을)를 tar 에 -exclude-from 인수로서 건네줍니다. 이 옵션을 사용하는 에 해당하는 자세한 정보는, tar 의 메뉴얼 페이지 (혹은 --help 인수를 붙여 tar (을)를 실행)을 참조해 주세요.

-D displayfile
    package 를 인스톨 한 후에 파일을 (연결해 표준 출력에) 표시합니다. 「거의 free 인 소프트웨어」 등에 있어, 법적인 통지와 같은 것 등에 편리하겠지요.

-m mtreefile
    package 가 인스톨 되기 전에, mtreefile 를 입력으로서 mtree(8) (을)를 실행합니다. mtree 는 mtree -u -f mtreefile -d -e -p prefix (으)로서 기동됩니다 (다만 prefix 하 @cwd 지시문에 의해 이름이 붙여진 최초의 디렉토리의 이름).

-o originpath
    originpath (을)를, FreeBSD Ports Collection 안으로 package 가 작성된 장소로서 기록합니다. 이 서식은, MASTERCATEGORY/PORTDIR (이어)여야 합니다.

-j  package 의 tarball 를 압축하기 위해서, bzip2(1) 유틸리티를 gzip(1) 대신에 사용합니다. 최종적인 아카이브(archive)의 서식이, 인식 가능한 사픽스에 의해 pkg-filename 그리고 명시적으로 지정되어 있는 경우, 본옵션은 무효라는 점에 주의해 주세요. 현재 pkg_create (은)는, 다음의 사픽스를 인식합니다: .tbz, .tgz, .tar

-y  호환성을 위한, -j 의 동의어입니다.

-z  package 의 tarball 를 압축하기 위해서, gzip(1) 유틸리티를 사용합니다.

-b pkg-name
    pkg-name (이)라는 이름으로 로컬에 인스톨 된 package 로부터, package 파일을 작성합니다. pkg-filename 하지만 지정되지 않는 경우, 최종적인 아카이브(archive)는 커런트 디렉토리에 작성되어 pkg-name 에 대해서 신장용의 적절한 사픽스가 붙은 이름이 됩니다.

PACKING LIST 상세
“packing list” 의 서식 ( -f (을)를 참조)는 단순해, package 에 포함하는 파일명을 일행에 대해 하나씩 늘어놓은 것에 지나지 않습니다. 어디에 인스톨 될지 모르는 package 에 대해서 절대 패스를 이용하는 것은 일반적으로 나쁜 방법이므로, 어디에 인스톨 되는 것을 상정하고 있는지, 그리고 어떤 ownership 와 mode 를 수반해 인스톨 되어야 하는 것인가 (이쪽은 옵션)(을)를 지정할 방법이 준비되어 있습니다. 이것은 packing list 내에 일련의 특수 명령을 묻는 것으로 실현되고 있습니다. 이하에 간단하게 가리킵니다:
@cwd directory
    내부의 디렉토리 포인터가 directory (을)를 가리키도록(듯이) 합니다. 이후의 파일명은 이 디렉토리에의 상대 패스 이다고 보입니다. 주: @cd (은)는 이 명령의 별명입니다.
@srcdir directory
    「작성시만」의 내부 디렉토리 포인터를 directory (으)로 설정합니다. package 작성시에 @cwd 에 우선한다고 말할 수 있습니다만, 전개시에는 이것은 들어맞지 않습니다.
@exec command
    전개 처리의 일환으로서 command (을)를 실행합니다. command 하지만 이하의 캐릭터 라인을 포함하고 있었을 경우, 그 자리에서 치환됩니다. 이하의 예에서는 @cwd 하지만 /usr/local (와)과 설정되어 있어, 마지막에 전개된 파일이 bin/emacs (이었)였다고 하고 있습니다.
    %F  마지막에 전개된 파일명에 치환됩니다. 이 예에서는 bin/emacs 됩니다.
    %D  @cwd 그리고 설정된 카렌트디레크트리프레픽스에 치환됩니다. 이 예에서는 /usr/local (이)가 됩니다.
    %B  완전한 (풀 패스의) 파일명의 “basename” 에 치환됩니다. 이것은 카렌트디레크트리프레픽스에 마지막 filespec 를 더해 말미의 파일명 부분을 제외한 것입니다. 이 예에서는, /usr/local/bin (이)가 됩니다.
    %f  완전한 (풀 패스를 포함한다) 파일명의 “filename” 부분에 치환됩니다. %B (와)과 대응하고 있어, 이 예에서는 emacs 됩니다.
@unexec command
    언인스톨 처리의 일환으로서 command (을)를 실행합니다. 특별한 % 캐릭터 라인의 치환은 @exec (와)과 같습니다. 이 명령은 @exec (와)과 같이 package 를 더할 때에 실행되는 것이 아니라, package 가 삭제될 때 실행됩니다. 이것은, package 를 더할 때 만들어진 링크나 다른 부수 파일 (package 의 내용 일람에 기록되고 있는 파일은 자동적으로 삭제되므로 제외하다)를 삭제하는데 편리합니다. 언인스톨 스크립트보다 @unexec (을)를 이용하는 (분)편이 유리한 점은, 어디에 인스톨 되고 있을지 모른다 ( -p (을)를 참조) 파일의 장소를 얻는데 “특수 캐릭터 라인 치환” (을)를 이용하는 것이 가능한 일입니다.
@mode mode
    이 다음에 전개되는 모든 파일의 디폴트의 허가 속성을 mode (으)로 설정합니다. 서식은 chmod 명령로 이용되고 있는 것 것과 같습니다 (라고 하는 것보다도, 그대로 건네받고 있습니다). 인수 없음으로 이용하면(자), 디폴트의 (전개) 허가 속성에 되돌립니다.
@option option
    내부용 package 옵션을 설정합니다. 현재 두 개의 옵션만이 서포트되고 있습니다. 하나는 extract-in-place 그리고, 이것은 pkg_add 명령에 package 의 tarball 를 staging area 에 전개하지 않고 , 목적의 계층에 직접 전개하도록 지시합니다 (이것은 주로 배포물이나 다른 특수한 package 등에 이용됩니다). 또 하나는 preserve 그리고, 존재하는 파일을 다른 곳에 보존해 두도록(듯이) pkg_add 에 지시합니다 (이것들은 pkg_delete 때에 restore합니다만, 자신의 책임으로 가 주세요).
@owner user
    이 다음에 전개되는 모든 파일의 디폴트의 ownership 를 user (으)로 설정합니다. 인수 없음으로 이용하면(자), 디폴트의 (전개) ownership 에 되돌립니다.
@group group
    이 다음에 전개되는 모든 파일의 디폴트의 group ownership 를 group (으)로 설정합니다. 인수 없음으로 이용하면(자), 디폴트의 (전개) group ownership 에 되돌립니다.
@comment string
    packing list 내에 코멘트를 묻습니다. 누군가가 다음에 오인해 버릴지도 모르는 특히 귀찮은 부분을 설명하려고 한다 경우에 편리합니다.
@ignore
    특수한 목적으로 사용되는 파일등을 (위해)때문에, 전개시에 다음의 파일을 무시하는 것 (어디에도 카피하지 않는다) 같게, 내부에서 이용됩니다.
@ignore_inst
    @ignore (와)과 같습니다만, 다음의 파일을 무시하는 것은 1 평가 사이클만 늦출 수 있습니다. 이 덕분에 이 지시문을 packinglist 파일내에서 이용하는 것이 가능하게 되므로, 인스톨러가 무시하는 것 같은, 인스톨 스크립트등을 (위해)때문에의 특수한 데이터 파일을, 배포물내에 들어갈 수 있을 수가 있게 됩니다.
@name name
    package 의 이름을 설정합니다. 이것은 필수 항목이며, 통상 선두에 놓여집니다. 이 이름은 package 가 제공하는 파일의 이름과는 다를 가능성이 있어, 다음에 언인스톨할 때를 위해서(때문에) package 의 기록을 남겨 두는데 사용됩니다. 이름이 지정되지 않았던 경우에는, pkg_create (은)는 package 명으로부터 추정해, 자동적으로 설정하는 것에 주의해 주세요.
@dirrm name
    디렉토리 name 하지만 언인스톨시에 삭제되도록(듯이) 선언합니다. 디폴트에서는, package 의 인스톨시에 작성된 디렉토리는 언인스톨시에는 삭제됩니다만, 이 지시문은 명시적인 디렉토리 삭제 방법을 제공합니다. 이 지시문은 package 리스트의 최후로 이용하도록 해 주세요. 하나 이상의 @dirrm 지시문이 지정되었을 경우, 지정된 차례로 삭제됩니다. name (은)는 빈디렉토리가 아니면 삭제되지 않습니다.
@mtree name
    name (을)를, 인스톨시에 이용된다 mtree(8) 에의 입력 파일로서 선언합니다 (상술의 -m (을)를 참조). 최초로 하나만 @mtree 지시문을 지정하는 것이 추천 됩니다.
@display name
    name (을)를, 인스톨시에 표시되는 파일로서 선언합니다 (상술의 -D (을)를 참조).
@pkgdep pkgname
    package pkgname 에 의존하는 것을 선언합니다. package pkgname (은)는 이 package 가 인스톨 되기 전에 인스톨되어 있지 않으면 안되어, 또 이 package 는 package pkgname 하지만 언인스톨되기 전에 언인스톨되지 않으면 안됩니다. package 가 복수의 package 에 의존하는 경우에는, 복수의 @pkgdep 지시문이 이용됩니다.

환경 변수
환경 변수 PKG_TMPDIR 그리고, pkg_create 하지만 작업용 파일의 생성을 시도하는 디렉토리의 이름을 지정합니다. PKG_TMPDIR 하지만 설정되어 있지 않은 경우, TMPDIR 그리고 지정된 디렉토리가 사용됩니다. PKG_TMPDIR , TMPDIR 함께 설정되어 있지 않은 경우는, 편입의 디폴트 디렉토리가 사용됩니다.

관련 파일
/var/tmp
    환경 변수 PKG_TMPDIR , TMPDIR 하지만 함께 설정되어 있지 않은 경우의 작업용 디렉토리.
/tmp
    /var/tmp 하지만 존재하지 않는 경우의, 그 다음의 선택사항.
/usr/tmp
    /tmp 하지만 적절하지 않은 경우의, 마지막 선택사항.

관련 항목
pkg_add(1), pkg_delete(1), pkg_info(1), pkg_update(1), pkg_version(1), sysconf(3)

역사
pkg_create 명령은 FreeBSD 그리고 최초로 등장했습니다.

저자
Jordan Hubbard

협력자
John Kohl <jtk@rational.com>

버그
package 가 전개될 때에 하드 링크를 보존해 두기 위해서(때문에), 배포물의 파일간에서의 하드 링크는 @cwd 지시문으로 괄라고 있지 않으면 안됩니다. 게다가, 실행시의 인수의 길이의 제한 (이것은 sysconf(_SC_ARG_MAX) 에 의해 돌려주어지는 값에 의존합니다)를 위해서(때문에), 그러한 하드 링크는 단일의 tar 실행내에서 행해지지 않으면 안됩니다.

버그는 그 밖에도 있을 것입니다.