-->

如何解包和包装PKG文件?如何解包和包装PKG文件?(How to unpack and pack

2019-06-14 12:11发布

我必须为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


文章来源: How to unpack and pack pkg file?