我必须为Mac安装设备创建一个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
Answer 1:
Packages就是所有.xar档案有不同的延伸和指定的文件层次结构。 不幸的是,文件层次的部分是实际可安装的cpio.gz归档,通常这是你要修改的内容。 还有还有,包括对cpio归档文件里面的信息,包括汇总信息的PackageInfo文件BOM的文件。
如果你真的只需要编辑信息文件中的一个,这是简单的:
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)。 (如果你能得到同上,这让事情变得更简单,但我不知道这是几乎无处不用。)
Answer 2:
从答案的启发abarnert ,我做了一个bash脚本,将解压一个名为包MyPackage.pkg
到子文件夹命名为MyPackage_pkg
,然后在Finder中打开文件夹。 删除最后一个行,如果你不想在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 (免费应用程序),如果你想要做一些严重的拆包,包括提取特定的文件,然后看看和平主义者 (扰件)。
Answer 3:
除了什么@abarnert说,我今天不得不找出默认cpio
在山狮工具使用默认的每一个不同的压缩格式(不知道哪个),甚至与人页面,说明它会使用旧的cpio / ODC格式。 所以,如果有人绊倒在cpio read error: bad file format
信息,而要安装他/她的操纵包,一定要包括在重新包装工序的格式为:
find ./Foo.app | cpio -o --format odc | gzip -c > Payload
Answer 4:
@shrx我已经成功使用“pbzx”命令解开BSD.pkg(优胜美地安装程序的一部分)。
pbzx <pkg> | cpio -idmu
该“pbzx”命令可从以下网址下载:
- pbzx流分析器
Answer 5:
你可能想看看我的叉子pbzx
这里: https://github.com/NiklasRosenstein/pbzx
它可以让你流pbzx未包裹在XAR档案文件。 我最近XCode的命令行工具磁盘映像(如10.12的XCode 8)经历过这个。
pbzx -n Payload | cpio -i