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 의 답변에 영감을 받아 이름이 지정된 패키지를 이름이 지정된 MyPackage.pkg
하위 폴더에 압축을 푼 MyPackage_pkg
다음 Finder에서 폴더를 여는 bash 스크립트를 만들었습니다 . Finder 단계를 원하지 않으면 마지막 줄을 제거하십시오.
#!/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가 말한 것 외에도, 저는 오늘 cpio
Mountain 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
참고 URL : https://stackoverflow.com/questions/11298855/how-to-unpack-and-pack-pkg-file
'Programing' 카테고리의 다른 글
bash에서 스크립트에 선언 된 변수를 나열하는 방법은 무엇입니까? (0) | 2020.09.16 |
---|---|
ASP.NET MVC의 부분보기에 매개 변수를 전달하는 방법은 무엇입니까? (0) | 2020.09.16 |
스프링 부트 @ResponseBody는 엔티티 ID를 직렬화하지 않습니다. (0) | 2020.09.16 |
저장소 패턴을 올바르게 사용하는 방법은 무엇입니까? (0) | 2020.09.15 |
부모 div를 채우기 위해 div 높이를 늘리는 방법-CSS (0) | 2020.09.15 |