【问题标题】:How to extract contents from 'Payload' file in a apple macOS update package?如何从苹果 macOS 更新包中的“有效负载”文件中提取内容?
【发布时间】:2017-05-01 05:05:13
【问题描述】:

我正在提取 macOS sierra 更新包 - macOSUpd10.12.1.pkg 使用以下命令到 /tmp/macosupd 目录。

pkgutil --expand /Volumes/macOS\ Sierra\ Update/macOSUpd10.12.1.pkg /tmp/macosupd 

我可以看到以下包捆绑在元包中。

-rwxr-xr-x   1  Distribution
drwxr-xr-x   6  FirmwareUpdate.pkg
drwxr-xr-x   5  FullBundleUpdate.pkg
drwxr-xr-x  36  Resources
drwxr-xr-x   6  macOSUpd10.12.1.pkg

我无法提取 Payload 文件的内容。例如,当我尝试提取 macOSUpd10.12.1.pkg 的有效负载时,我收到以下错误消息:

用焦油:

tar -xvf macOSUpd10.12.1.pkg/Payload 
tar: Unrecognized archive format
tar: Error exit delayed from previous errors.

与 xar:

xar -xvf macOSUpd10.12.1.pkg/Payload 
Error opening xar archive: macOSUpd10.12.1.pkg/Payload

当我在有效负载文件上运行文件命令时,我收到一条消息:

file macOSUpd10.12.1.pkg/Payload 
macOSUpd10.12.1.pkg/Payload: data

通过使用xxd 命令查看Payload 文件的初始位,我可以看到文件类型类似于pbzx

xxd macOSUpd10.12.1.pkg/Payload 


00000000: 7062 7a78 0000 0000 0100 0000 0000 0000  pbzx............
00000010: 0100 0000 0000 0000 0031 0330 fd37 7a58  .........1.0.7zX
00000020: 5a00 0000 ff12 d941 04c0 f385 c401 8080  Z......A........
00000030: 8008 2101 1600 0000 506a 84e2 e3b8 13ef  ..!.....Pj......
00000040: fe5d 0018 0ddf 07a4 347c 7c50 9853 8031  .]......4||P.S.1
00000050: 2d14 f703 6903 cf69 f214 76b0 93c0 a4c9  -...i..i..v.....
00000060: 774d 6fb0 8b3a 2257 4a55 04ad 289b cc4d  wMo..:"WJU..(..M
00000070: b835 5db7 7e72 f7a8 dc15 7a9c 7755 800c  .5].~r....z.wU..
00000080: 6060 d45f e078 f84f e537 4319 2d89 f72e  ``._.x.O.7C.-...
00000090: 60c4 cdb0 6b54 9326 9321 3339 4a4f 1e75  `...kT.&.!39JO.u
000000a0: 8eb7 991d 8968 5e6f 45d4 24c9 e364 712b  .....h^oE.$..dq+
000000b0: ef4e 9abc af70 e97a e5a3 1810 7f05 54df  .N...p.z......T.
000000c0: 08d2 3060 9f8a a1e0 edb8 2b10 df23 789d  ..0`......+..#x.
000000d0: 3e52 ee3e d6f0 468a bfee 3366 d39e 28db  >R.>..F...3f..(.

请就如何提取Payload 文件的内容提出建议。我已经尝试了link1link2中建议的所有方法,包括external-link中建议的方法仍然没有成功。似乎小牛队之前的苹果更新是纯 xar 和 tar 包。在 Mavericks 及以上版本中,苹果将文件格式从 tar 更改为 pbzx(lzma)。

请建议一种简单的命令行方法来提取 Payload 文件的内容,因为我必须在我的自动化设置中使用。

【问题讨论】:

    标签: macos macos-sierra lzma software-packaging xz


    【解决方案1】:

    pkgutil--expand-full 有一个未记录的选项,它使用与 pkgutil --expand 相同的语法。

    pkgutil --expand-full [pkg] [dir]

    这将完全“取消归档” pkg 或 mpkg 文件。

    【讨论】:

    • 非常有用!谢谢。
    • 该选项已在 10.13 中消失
    • 确定存档的类型并改用适当的取消存档程序。
    • @georgexsh 不,它没有——我只是没有正确地标记需要第二个参数(提取位置)的语法。固定。
    • 在 osX 10.14 Mojave 中的工作就像一个魅力。确保目标 [dir] 不存在。 pkgutil 将创建它。
    【解决方案2】:

    从 OSX 10.10 开始,.pkg 文件中的Payload 被编码为pbzx(又被 lzma 压缩)。无法再使用gunzip 提取它。查看pbzx tooloriginal 的一个分支,它不允许您直接提取有效负载,而只能通过直接传递.pkg 文件)。

    而不是

    tar -xvf macOSUpd10.12.1.pkg/Payload 
    

    你可以写

    pbzx -n macOSUpd10.12.1.pkg/Payload | cpio -i
    

    【讨论】:

    • 感谢您的回答,它有帮助。
    • “macOSUpd10.12.1.pkg”表示提取 pkg 的文件夹的名称,对吗?乍一看我有点困惑,我认为 pbzx 能够“查看”pkg 文件并且只提取“有效负载”。
    • 我见过一些具有 CPIO 格式有效负载文件的 PKG(例如 Avast 防病毒软件)。 CPIO 是否被认为是 lzma 压缩的 pbzx?我认为 CPIO 不使用压缩。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多