Install Maker for Macで作成されたpkgファイルがあります。 pkg内の1つのファイルを置き換えたい。しかし、これはダウンロードプロセスの一部であるため、Linuxシステムでこれを行う必要があります。ユーザーがファイルサーバーのダウンロードを開始するときは、pkg内の1つのファイルを置き換える必要があります。 pkgをアンパックしてファイルを置き換える方法はありますが、pkgに再びパックする方法がわかりません。 http://emresaglam.com/blog/1035http://ilostmynotes.blogspot.com/2012/06/mac-os-x-pkg-bom-files-package。 html
パッケージは、異なる拡張子と指定されたファイル階層を持つ.xarアーカイブです。残念ながら、そのファイル階層の一部は実際のインストール可能ファイルのcpio.gzアーカイブであり、通常はそれを編集したいものです。また、cpioアーカイブ内のファイルに関する情報を含むBomファイルと、概要情報を含むPackageInfoファイルもあります。
情報ファイルのいずれかを編集する必要があるだけであれば、それは簡単です。
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)を入手できると思います。 (もし同じことができれば、物事はさらに簡単になりますが、それがほぼどこでも利用できるかどうかはわかりません。)
abarnert の回答に触発されて、MyPackage.pkg
という名前のパッケージをMyPackage_pkg
という名前のサブフォルダーに解凍し、Finderでフォルダーを開くbashスクリプトを作成しました。 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 (無料アプリ)を試してください。特定のファイルを抽出するなど、深刻な解凍を行いたい場合は、 at Pacifist (ナグウェア)。
@shrx「pbzx」コマンドを使用して、BSD.pkg(Yosemiteインストーラの一部)を解凍することに成功しました。
pbzx <pkg> | cpio -idmu
「pbzx」コマンドは、次のリンクからダウンロードできます。
@abarnertの発言に加えて、今日、Mountain Lionのデフォルトのcpio
ユーティリティは、デフォルトごとに異なるアーカイブ形式を使用していることを確認する必要があります(どちらかは不明)。 cpio/odc形式。したがって、操作されたパッケージをインストールしようとしているときに誰かがcpio read error: bad file format
メッセージに出くわした場合は、必ず再パック手順に形式を含めてください。
find ./Foo.app | cpio -o --format odc | gzip -c > Payload
私のpbzx
の分岐点については、こちらをご覧ください。 https://github.com/NiklasRosenstein/pbzx
XARアーカイブにラップされていないpbzxファイルをストリーミングできます。最近のXCodeコマンドラインツールのディスクイメージ(例:10.12 XCode 8)でこれを経験しました。
pbzx -n Payload | cpio -i