JavaScript is required to for searching.
탐색 링크 건너뛰기
인쇄 보기 종료
이미지 패키징 시스템 매뉴얼 페이지     Oracle Solaris 11 Information Library (한국어)
search filter icon
search icon

문서 정보

머리말

사용자 명령

packagemanager(1)

pkg(1)

pkgdepend(1)

pkgdiff(1)

pkgfmt(1)

pkglint(1)

pkgmerge(1)

pkgmogrify(1)

pkgrecv(1)

pkgrepo(1)

pkgsend(1)

pkgsign(1)

pm-updatemanager(1)

시스템 관리 명령

표준, 환경 및 매크로

pkgmogrify

- 이미지 패키징 시스템 매니페스트 transmogrifier

개요

/usr/bin/pkgmogrify [-vi] [-I includedir ...]
    [-D macro=value ...] [-O outputfile]
    [-P printfile] [inputfile ...]

설명

pkgmogrify는 소프트웨어 빌드 및 패키지 게시를 자동화할 때 필요한 일반적인 변환 과정을 단순화하기 위해 패키지 매니페스트를 프로그래밍 방식으로 편집할 수 있도록 합니다.

pkgmogrify는 다음을 제공합니다.

옵션

다음 옵션이 지원됩니다.

-D name= value

값이 valuename을 매크로로 정의합니다. 매크로는 입력 파일에 $(macro)로 표시됩니다. 변환을 더 이상 찾을 수 없을 때까지 대체가 반복됩니다. 일반적으로 사용되는 관용구는 다음과 같습니다.

  • 행 시작 부분에 구조 관련 태그를 사용하여 다른 구조에 있는 매니페스트의 행 제거:

    $(sparc_ONLY)file ...

    SPARC 구조를 처리할 때 이 매크로가 빈 문자열로 설정됩니다. 다른 구조를 처리할 때 이 매크로가 명령줄에서 #으로 설정되므로 현재 구조에 있는 매니페스트에서 이 작업이 제거됩니다.

  • 경로 이름의 플랫폼 관련 부분(예: 실행 파일 및 라이브러리에 대한 64비트 구조 디렉토리의 이름) 지정:

    file NOHASH path=usr/bin/$(ARCH64)/cputrack ...

    이러한 매크로는 명령줄에서 적합한 값으로 설정됩니다. 미리 정의된 매크로 값은 없습니다.

-I include_directory

명령줄에 지정된 파일과 내장된 포함 지시어에 대한 검색 경로에 지정된 디렉토리를 추가합니다.

-O outputfile

지정된 파일에 매니페스트 출력을 기록합니다. 오류가 발생하거나 변환 지시어로 인해 중단 작업이 발생하는 경우 파일이 작성되지 않습니다. 기본적으로 매니페스트 출력은 stdout에 기록됩니다.

-P printfile

지정된 파일에 변환 지시어 인쇄 작업으로 인한 출력을 기록합니다. 오류가 발생하거나 변환 지시어로 인해 중단 작업이 발생하는 경우 파일이 작성되지 않습니다. 기본적으로 인쇄 출력은 stdout에 기록됩니다.

-i

파일의 포함 지시어를 무시합니다. 명령줄(또는 stdin)에 지정된 파일만 처리됩니다.

-v

변환 결과를 보여 주는 출력 매니페스트에 설명을 기록합니다. 이 정보는 디버깅에 유용합니다.

--help 또는 -?

사용법 메시지를 표시합니다.

내장된 지시어

매니페스트 파일에서 지원되는 지시어의 두 가지 유형은 포함 지시어와 변환 지시어입니다.

포함 지시어의 형식은 다음과 같습니다.

<include file>

이 지시어를 사용하면 pkgmogrify는 먼저 현재 디렉토리에서 이름이 file인 파일을 검색한 후 -I 옵션을 사용하여 지정된 디렉토리에서 해당 파일을 검색합니다. 해당 파일이 발견되면 지시어가 발생된 지점의 매니페스트에 파일 내용이 삽입됩니다. 해당 파일이 발견되지 않으면 pkgmogrify는 오류와 함께 종료됩니다.

변환 지시어의 형식은 다음과 같습니다.

<transform matching-criteria -> operation>

이러한 지시어는 메모리에서 모든 입력을 읽을 때까지 누적된 후 발견된 순서대로 작업에 적용됩니다.

일치 조건의 형식은 다음과 같습니다.

[action-type ... ] [attribute=<value-regexp> ...]

지정된 action-types 중 하나가 일치해야 합니다. 지정된 모든 attributes가 일치해야 합니다. 사용되는 정규 표현식 구문은 Python의 구문입니다. Python 정규 표현식 구문에 대한 자세한 내용을 보려면 pydoc re 명령을 사용하거나 http://docs.python.org/dev/howto/regex.html에 있는 보다 완전한 설명서를 참조하십시오. 정규 표현식의 경우 시작 부분에서는 앵커되지만 끝 부분에서는 앵커되지 않습니다. 따라서 확장자에 따른 정규 표현식 일치 파일은 .*로 시작하고 $로 끝나야 합니다.

여러 조건은 공백으로 구분하여 지정할 수 있습니다.

사용 가능한 작업은 다음과 같습니다.

add

속성에 값을 추가합니다. 이 작업에는 두 개의 인수가 사용됩니다. 첫번째 인수는 속성 이름이며 두번째 인수는 값입니다.

default

존재하지 않을 경우 속성 값을 설정합니다. 이 작업에는 add 작업과 동일한 두 개의 인수가 사용됩니다.

delete

속성 값을 제거합니다. 이 작업에는 두 개의 인수가 사용됩니다. 첫번째 인수는 속성 이름입니다. 두번째 인수는 삭제된 속성 값과 일치시킬 정규 표현식입니다. 작업 일치에 사용되는 정규 표현식과 달리, 이 표현식은 앵커되지 않습니다.

drop

이 작업을 폐기합니다.

edit

작업의 속성을 수정합니다. 이 작업에는 세 개의 인수가 사용됩니다. 첫번째 인수는 속성 이름이며 두번째 인수는 속성 값과 일치하는 정규 표현식입니다. 세번째 인수는 정규 표현식에 의해 일치된 값의 일부분에 대해 대체되는 바꿀 문자열입니다. 작업 일치에 사용되는 정규 표현식과 달리, 이 표현식은 앵커되지 않습니다. 정규 표현식에서 그룹이 정의된 경우 바꿀 문자열에 \1, \2 등의 일반적인 정규 표현식 역참조를 사용할 수 있습니다.

emit

매니페스트 출력 스트림으로 행을 내보냅니다. 유효한 작업 문자열, 빈 문자열(공백 행 생성) 또는 설명(#, 임의 텍스트 순)이어야 합니다.

exit

매니페스트 처리를 종료합니다. 출력되는 매니페스트가 없고 적용되는 print 작업이 없습니다. 하나의 인수를 지정할 경우 해당 인수는 정수여야 하며 종료 코드로 사용됩니다. 기본값은 0입니다. 두 개의 인수를 지정할 경우 첫번째 인수는 종료 코드이며 두번째 인수는 stderr에 인쇄될 메시지입니다.

print

-P를 사용하여 지정된 출력 파일에 메시지를 인쇄합니다.

set

속성 값을 설정합니다. 이 작업에는 add 작업과 동일한 두 개의 인수가 사용됩니다.

deletedrop을 제외한 모든 작업에는 컨텐츠가 출력 스트림으로 이동되는 인수가 사용됩니다(가능한 경우 선택적). 이러한 문자열에는 세 가지 다른 종류의 특수 토큰이 포함될 수 있습니다. 이러한 토큰은 각 작업의 고정 변환을 기반으로 하지 않는 정보가 출력에 포함될 수 있도록 허용합니다.

첫번째 종류의 대체에서는 퍼센트 기호 뒤의 괄호 안에 속성 이름을 삽입하여 작업이 현재 작업의 속성 값을 참조할 수 있도록 허용합니다. 예를 들어, %(alias)는 작업의 alias 속성을 참조합니다.

다양한 합성 속성이 존재합니다. 다음과 같은 두 개의 속성이 pkgmogrify에 대해 고유합니다.

다음과 같은 세 개의 합성 속성은 pkg(1)에서 사용되는 속성과 유사합니다.

값이 요청된 속성이 존재하지 않을 경우 pkgmogrify는 오류와 함께 종료됩니다. 오류와 함께 종료되지 않도록 하려면 속성 이름과 ;notfound=, 속성 값을 대체할 값을 차례로 지정하십시오. 예를 들어, %(alias;notfound='no alias')alias 속성 값이 존재할 경우 해당 속성 값을 인쇄하고 그렇지 않을 경우 no alias를 인쇄합니다.

값이 요청된 속성이 다중 값 속성일 경우 각 값이 공백으로 구분되어 인쇄됩니다. notfound 토큰과 마찬가지로, prefix, suffixsep 토큰을 통해서도 이 동작을 변경할 수 있습니다. prefix로 표시된 문자열은 각 값 앞에 추가되며, suffix로 표시된 문자열은 각 값 뒤에 추가되고, sep는 특정 값의 접미어와 다음 값의 접두어 사이에 배치됩니다.

작업 속성과 마찬가지로, pkgmogrify 지시어는 괄호 대신 중괄호를 사용하여 패키지 속성을 참조할 수 있습니다(%{pkg.fmri}). 변환 지시어가 적용될 때 set 작업에 속성이 정의되어 있어야 합니다. 그렇지 않으면 위에 설명된 notfound로 처리됩니다. 처리가 패키지를 기술하는 매니페스트 파일 끝에 도달하면 다음 패키지를 위해 속성이 지워집니다.

이는 패키지 속성이 작업 속성인 것처럼 패키지 속성을 참조하고 패키지 속성에 대해 일치 및 일시적인 수정 작업을 수행하는 데도 유용합니다. 따라서 이러한 경우에 합성 작업 이름 pkg를 사용할 수 있습니다(pkgmogrify의 컨텍스트에서만).

pkgmogrify가 명령줄에 지정된 매니페스트 및 pkg.fmri 패키지 속성을 정의한 매니페스트에 대한 읽기 작업을 마치면 pkgmogrify는 속성이 패키지의 속성인 이 합성 pkg 작업을 만듭니다. <transform> 지시어가 기타 작업 유형과 마찬가지로 이 작업에 대해 일치할 수 있습니다.

pkg 작업의 작업은 메모리에만 존재하고 내보낸 매니페스트에 직접적인 영향을 끼치지 않는다는 점에서 특수합니다. 예를 들어, add, default 또는 set 작업을 통해 pkg 작업에 대한 속성을 설정하려고 시도하면 set 작업이 매니페스트에 추가되지 않습니다. 단, 일치시킬 다른 <transform> 지시어에는 사용될 수 있습니다. emit a pkg 작업을 시도하면 오류가 발생합니다. 패키지 속성을 추가하려면 대신 emit a set 작업을 시도하십시오.

세번째 종류의 대체는 역참조입니다. 이 대체는 edit 작업에서 사용 가능한 것과는 다르지만 -> 왼쪽의 변환 일치에 나열되는 그룹에 대한 참조입니다. 이는 일치 조건에 표시된 순서대로 %<1>, %<2> 등으로 표시됩니다.

처리 순서는 다음과 같습니다.

  1. 입력 파일에서 행을 읽습니다.

  2. 매크로를 적용합니다.

  3. 추가 파일을 찾아 읽도록 <include ...><transform> 지시어를 처리합니다.

  4. 모든 입력 파일이 누적된 후에는 입력의 각 행이 작업으로 변환되며 모든 변환이 적용됩니다.

  5. 처리가 성공적으로 완료되면 출력이 기록됩니다.

예 1 SMF 매니페스트에 태그 추가

패키지가 라이브 시스템에 설치될 때 태그를 가져오도록 SMF(서비스 관리 기능) 매니페스트에 태그를 추가합니다.

<transform file path=(var|lib)/svc/manifest/.*\.xml -> \
    add restart_fmri svc:/system/manifest-import:default>

예 2 파일 이동

usr/sfw/bin에서 usr/bin으로 파일을 이동합니다.

<transform file -> edit path usr/sfw/bin usr/bin>

예 3 재부트 필요 지정

.conf 파일이 아닌 /kernel 아래의 파일에 reboot-needed 태그를 추가합니다. 이 예에서는 입력 파일에 표시된 순서대로 각 작업에 변환을 적용하는 방식을 활용합니다.

<transform file path=kernel/.* -> set reboot-needed true>
<transform file path=kernel/.*\.conf -> delete reboot-needed .*>

정규 표현식을 사용한 단일 변환 규칙에서도 완료할 수 있습니다.

예 4 Depend 작업으로 FMRI 속성 변환

통합에 포함되도록 패키지 속성 pkg.fmridepend 작업으로 변환합니다.

<transform set name=pkg.fmri -> \
    emit depend type=incorporate fmri=%(value)>
<transform set name=pkg.fmri -> drop>

예 5 버그 번호 목록 인쇄

따옴표가 사용되고 접두어가 붙은 버그 번호의 쉼표로 구분된 목록을 인쇄합니다.

set name=bugs value=12345 value=54321 value=13579 value=97531
<transform set name=bugs -> \
    print %(value;sep=",";prefix="bug='";suffix="'")>

예 6 속성 누락 허용

속성이 누락된 경우에도 메시지를 인쇄할 수 있도록 합니다.

<transform driver -> print Found aliases: %(alias;notfound=<none>)>

예 7 기본값 설정

기본 소유자, 그룹 및 권한 값을 설정합니다.

<transform file dir -> default owner root>
<transform file dir -> default group bin>
<transform file -> default mode 0444>
<transform dir -> default mode 0755>

예 8 오래된 것으로 표시되지 않은 패키지에 종속성 추가

오래된 것으로 표시되지 않은 패키지의 경우 패키지를 전달하는 연결에 대한 통합에 종속성을 추가합니다. 이 변환 세트는 매니페스트를 읽은 후 발생해야 합니다. 그렇지 않으면 종속성을 항상 내보냅니다. pkg 수정 작업은 영구적으로 적용되는 것이 아니므로 pkg.obsolete=false와 일치하는 속성을 정리하지 않아도 됩니다.

<transform pkg -> default pkg.obsolete false>
<transform pkg pkg.obsolete=false -> emit depend \
    fmri=consolidation/$(CONS)/$(CONS)-incorporation type=require>

예 9 오류가 있을 경우 종료 후 메시지 인쇄

매니페스트에 오래된 속성이 있을 경우 메시지와 함께 오류가 발생합니다.

<transform file dir link hardlink opensolaris.zone=.* -> \
    exit 1 The opensolaris.zone attribute is obsolete.>

예 10 적합한 로케일 페이싯 설정

고려 중인 경로 이름에 적합한 로케일 페이싯을 설정합니다.

<transform dir file link hardlink path=.*/locale/([^/]+).* -> \
    default facet.locale.%<1> true>

종료 상태

다음 종료 값이 반환됩니다.

0

모든 요소가 작동되었습니다.

1

문제가 발생했지만 예상했던 문제입니다.

2

잘못된 명령줄 옵션이 지정되었습니다.

99

예상치 않은 처리 오류입니다.

파일

/usr/share/pkg/transforms

이 디렉토리에는 페이싯, 액추에이터 및 기타 속성을 설정하기 위한 유용한 변환과 함께 파일이 포함됩니다.

속성

다음 속성에 대한 설명은 attributes(5)를 참조하십시오.

속성 유형
속성 값
Availability
package/pkg
Interface Stability
커밋되지 않음

참조

pkg(1), pkg(5)

http://hub.opensolaris.org/bin/view/Project+pkg/