我有一个由Install Maker for 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
aba*_*ert 168
包只是.xar存档,具有不同的扩展名和指定的文件层次结构.不幸的是,该文件层次结构的一部分是实际可安装程序的cpio.gz存档,通常这就是您要编辑的内容.还有一个Bom文件,其中包含有关该cpio存档内文件的信息,以及一个包含摘要信息的PackageInfo文件.
如果你真的需要编辑其中一个信息文件,那很简单:
mkdir Foo
cd Foo
xar -xf ../Foo.pkg
# edit stuff
xar -cf ../Foo-new.pkg *
Run Code Online (Sandbox Code Playgroud)
但是,如果您需要编辑可安装文件:
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
Run Code Online (Sandbox Code Playgroud)
我相信你可以为大多数Linux发行版获得mkbom(和lsbom).(如果你可以得到同样的东西,这会让事情变得更容易,但我不确定这是否几乎无处不在.)
ccp*_*zza 18
受到来自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 .
Run Code Online (Sandbox Code Playgroud)
用法:
pkg-upack.sh MyPackage.pkg
Run Code Online (Sandbox Code Playgroud)
警告:这在所有情况下都不起作用,并且会因某些文件而失败,例如OSX系统安装程序中的PKG.如果您只想查看pkg文件并查看其中的内容,可以尝试使用SuspiciousPackage(免费应用程序),如果您想进行一些严格的解包,包括提取特定文件,那么请看看Pacifist(nagware).
您可能想查看我的分支pbzx:https://github.com/NiklasRosenstein/pbzx
它允许您传输未包装在 XAR 存档中的 pbzx 文件。我在最近的 XCode 命令行工具磁盘映像(例如 10.12 XCode 8)中经历过这种情况。
pbzx -n Payload | cpio -i
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
140741 次 |
| 最近记录: |