[macos] pkg 파일의 압축을 풀고 압축하는 방법은 무엇입니까?

Mac 용 Install Maker에서 만든 pkg 파일이 있습니다. pkg에서 하나의 파일을 바꾸고 싶습니다. 그러나 이것은 다운로드 프로세스의 일부이기 때문에 Linux 시스템에서이 작업을 수행해야합니다. 사용자가 파일 다운로드를 시작할 때 서버는 pkg에서 하나의 파일을 교체해야합니다. pkg의 압축을 풀고 파일을 바꾸는 방법에 대한 해결책이 있지만 pkg에 다시 압축하는 방법을 모르겠습니다.
http://emresaglam.com/blog/1035
http://ilostmynotes.blogspot.com/2012/06/mac-os-x-pkg-bom-files-package.html



답변

패키지는 확장자가 다르고 파일 계층이 지정된 .xar 아카이브입니다. 불행히도 그 파일 계층의 일부는 실제 설치 파일의 cpio.gz 아카이브이며 일반적으로 편집하려는 것입니다. 또한 해당 cpio 아카이브 내의 파일에 대한 정보를 포함하는 Bom 파일과 요약 정보가 포함 된 PackageInfo 파일도 있습니다.

정말로 정보 파일 중 하나를 편집해야하는 경우 간단합니다.

mkdir Foo
cd Foo
xar -xf ../Foo.pkg
# edit stuff
xar -cf ../Foo-new.pkg *

그러나 설치 가능한 파일을 편집해야하는 경우 :

mkdir Foo
cd Foo
xar -xf ../Foo.pkg
cd foo.pkg
cat Payload | gunzip -dc |cpio -i
# edit Foo.app/*
rm Payload
find ./Foo.app | cpio -o | gzip -c > Payload
mkbom Foo.app Bom # or edit Bom
# edit PackageInfo
rm -rf Foo.app
cd ..
xar -cf ../Foo-new.pkg

대부분의 Linux 배포판에서 mkbom (및 lsbom)을 얻을 수 있다고 생각합니다. (동일하게 얻을 수 있다면 일이 훨씬 더 쉬워 지지만 거의 어디서나 사용할 수 있는지 확실하지 않습니다.)


답변

다음은 abarnert의 대답에서 영감을 얻은 bash 스크립트입니다.이 스크립트는 이름이 지정된 MyPackage.pkg하위 폴더에 이름이 지정된 패키지를 풀고 MyPackage_pkgFinder에서 폴더를 엽니 다.

    #!/usr/bin/env bash
    filename="$*"
    dirname="${filename/\./_}"
    pkgutil --expand "$filename" "$dirname"
    cd "$dirname"
    tar xvf Payload
    open .

용법:

    pkg-upack.sh MyPackage.pkg

경고 : 이것은 모든 경우에 작동하지 않으며 특정 파일 (예 : OSX 시스템 설치 프로그램 내의 PKG)에서 실패합니다. pkg 파일 내부를 들여다보고 내부 내용을 확인하려면 SuspiciousPackage (무료 앱)를 사용해 볼 수 있으며 , 특정 파일을 선택적으로 압축 해제하는 등 더 많은 옵션이 필요한 경우 Pacifist (nagware)를 살펴보세요 .


답변

@abarnert가 말한 것 외에도, 저는 오늘 cpioMountain Lion 의 기본 유틸리티가 이전 cpio / odc 형식을 사용할 것이라고 명시한 man 페이지에서도 기본마다 다른 아카이브 형식 (어떤 것이 확실하지 않음)을 사용하는지 알아 내야했습니다 . 따라서 cpio read error: bad file format조작 된 패키지를 설치하려고 할 때 메시지를 우연히 발견 하면 재 포장 단계에 해당 형식을 포함해야합니다.

find ./Foo.app | cpio -o --format odc | gzip -c > Payload


답변

@shrx “pbzx”명령을 사용하여 BSD.pkg (Yosemite 설치 프로그램의 일부) 압축을 해제했습니다.

pbzx <pkg> | cpio -idmu

“pbzx”명령은 다음 링크에서 다운로드 할 수 있습니다.


답변

https://github.com/NiklasRosenstein/pbzxpbzx 에서 내 포크를 살펴볼 수 있습니다 .

XAR 아카이브에 래핑되지 않은 pbzx 파일을 스트리밍 할 수 있습니다. 최근 XCode 명령 줄 도구 디스크 이미지 (예 : 10.12 XCode 8)에서이 문제를 경험했습니다.

pbzx -n Payload | cpio -i


답변