web-dev-qa-db-ja.com

Apple macOSアップデートパッケージの「ペイロード」ファイルからコンテンツを抽出する方法は?

MacOSシエラ更新パッケージを抽出しています-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

ペイロードファイルの内容を抽出できません。たとえば、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コマンドを使用してペイロードファイルの初期ビットを確認すると、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 で提案されているメソッドもまだ成功していません。 Apple Mavericks以前のアップデートは純粋なxarおよびtarパッケージでした。Mavericks以降では、Appleはファイル形式をtarからpbzx(lzma)に変更しました)。

自動化セットアップで使用する必要があるため、Payloadファイルの内容を抽出する簡単なコマンドライン方法を提案してください。

18
ap1982

pkgutil--expand-fullには、文書化されていないオプションがあり、pkgutil --expandと同じ構文を使用します。

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

これにより、pkgまたはmpkgファイルが完全に「アーカイブ解除」されます。

40
Geoff Nixon

OSX 10.10以降、.pkgファイルのPayloadpbzxとしてエンコードされます(lzma圧縮されています)。 gunzipを使用して抽出することはできなくなりました。 pbzxツール を確認してください(ペイロードを直接抽出することはできず、.pkgファイルを直接渡すことによってのみ可能です original のフォーク)。

の代わりに

tar -xvf macOSUpd10.12.1.pkg/Payload 

あなたは書ける

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