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
7 に答える
パッケージは、異なる拡張子と指定されたファイル階層を持つ単なる .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) を入手できると思います。(同じことができれば、物事はさらに簡単になりますが、それがほぼどこでも利用できるかどうかはわかりません。)
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) を見てください。
@shrx 「pbzx」コマンドを使用して、BSD.pkg (Yosemite インストーラーの一部) を解凍することに成功しました。
pbzx <pkg> | cpio -idmu
「pbzx」コマンドは、次のリンクからダウンロードできます。
@abarnert が言ったことに加えて、私は今日、cpio
Mountain Lion のデフォルト ユーティリティがデフォルトごとに異なるアーカイブ形式を使用していることを確認する必要がありました (どれかはわかりません)。そのため、誰かが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 Command-Line Tools Disk Images (例: 10.12 XCode 8) でこれを経験しました。
pbzx -n Payload | cpio -i