Как извлечь содержимое из файла "Payload" в пакете обновления Apple MacOS?
Я извлекаю пакет обновления 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 для файла полезной нагрузки, я получаю сообщение:
file macOSUpd10.12.1.pkg/Payload
macOSUpd10.12.1.pkg/Payload: data
Видя начальные биты файла Payload, используя xxd
команда, я вижу, что тип файла выглядит 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
файл. Я перепробовал все методы, предложенные в ссылке1 и ссылке2, в том числе метод, предложенный в этой ссылке, все еще безуспешно. Похоже, обновления Apple до Mavericks были чистыми пакетами xar и tar. С Mavericks и выше Apple изменил формат файла с tar на pbzx(lzma).
Пожалуйста, предложите простой способ командной строки для извлечения содержимого Payload
файл, как я должен использовать в моей настройке автоматизации.
2 ответа
Существует недокументированная опция pkgutil
, --expand-full
, который использует тот же синтаксис, что и pkgutil --expand
,
pkgutil --expand-full [pkg] [dir]
Это полностью "разархивирует" файл pkg или mpkg.
Начиная с OSX 10.10, Payload
в .pkg
файлы закодированы как pbzx
(который в свою очередь lzma сжат). Он больше не может быть извлечен с помощью gunzip
, Проверьте инструмент pbzx (форк оригинала, который не позволит вам извлечь полезные данные напрямую, а только передав .pkg
файл напрямую).
Вместо
tar -xvf macOSUpd10.12.1.pkg/Payload
ты можешь написать
pbzx -n macOSUpd10.12.1.pkg/Payload | cpio -i