web-dev-qa-db-ja.com

pkgファイルを解凍してパックするにはどうすればよいですか?

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

85
dream2work

パッケージは、異なる拡張子と指定されたファイル階層を持つ.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)を入手できると思います。 (もし同じことができれば、物事はさらに簡単になりますが、それがほぼどこでも利用できるかどうかはわかりません。)

167
abarnert

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 (ナグウェア)。

17
ccpizza

@shrx「pbzx」コマンドを使用して、BSD.pkg(Yosemiteインストーラの一部)を解凍することに成功しました。

pbzx <pkg> | cpio -idmu

「pbzx」コマンドは、次のリンクからダウンロードできます。

3
h6ah4i

@abarnertの発言に加えて、今日、Mountain Lionのデフォルトのcpioユーティリティは、デフォルトごとに異なるアーカイブ形式を使用していることを確認する必要があります(どちらかは不明)。 cpio/odc形式。したがって、操作されたパッケージをインストールしようとしているときに誰かがcpio read error: bad file formatメッセージに出くわした場合は、必ず再パック手順に形式を含めてください。

find ./Foo.app | cpio -o --format odc | gzip -c > Payload
3
Malte Rohde

私のpbzxの分岐点については、こちらをご覧ください。 https://github.com/NiklasRosenstein/pbzx

XARアーカイブにラップされていないpbzxファイルをストリーミングできます。最近のXCodeコマンドラインツールのディスクイメージ(例:10.12 XCode 8)でこれを経験しました。

pbzx -n Payload | cpio -i
2
Niklas R