110

Install Maker for Mac によって作成された pkg ファイルがあります。pkg 内の 1 つのファイルを置き換えたい。ただし、これはダウンロード プロセスの一部であるため、Linux システムでこれを行う必要があります。ユーザーがファイル サーバーのダウンロードを開始すると、pkg 内の 1 つのファイルを置き換える必要があります。pkgを解凍してファイルを置き換える方法はありますが、pkgに再度パックする方法はわかりません。 http://emresaglam.com/blog/1035 http://ilostmynotes.blogspot.com/2012/06/mac-os-x-pkg-bom-files-package.html

4

7 に答える 7

200

パッケージは、異なる拡張子と指定されたファイル階層を持つ単なる .xar アーカイブです。残念ながら、そのファイル階層の一部は実際のインストール可能ファイルの cpio.gz アーカイブであり、通常はそれを編集する必要があります。また、その cpio アーカイブ内のファイルに関する情報を含む Bom ファイルと、概要情報を含む PackageInfo ファイルもあります。

info ファイルの 1 つだけを編集する必要がある場合は、次のように簡単です。

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) を入手できると思います。(同じことができれば、物事はさらに簡単になりますが、それがほぼどこでも利用できるかどうかはわかりません。)

于 2012-07-02T19:23:15.533 に答える
23

abarnert の回答に触発された bash スクリプトを次に示します。このスクリプトは、名前付きのパッケージを名前付きMyPackage.pkgのサブフォルダーに展開しMyPackage_pkg、そのフォルダーを 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 (無料アプリ) を試すことができます。特定のファイルを選択的に解凍するなど、さらにオプションが必要な場合は、Pacifist (nagware) を見てください。

于 2014-05-30T09:00:50.353 に答える
4

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

pbzx <pkg> | cpio -idmu

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

于 2015-01-09T15:39:55.837 に答える
4

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

find ./Foo.app | cpio -o --format odc | gzip -c > Payload
于 2013-02-27T10:02:28.177 に答える
3

ここの私のフォークを調べてみてくださいpbzx: https://github.com/NiklasRosenstein/pbzx

XAR アーカイブにラップされていない pbzx ファイルをストリーミングできます。最近の XCode Command-Line Tools Disk Images (例: 10.12 XCode 8) でこれを経験しました。

pbzx -n Payload | cpio -i
于 2017-01-11T18:01:29.417 に答える