2

PackageMaker の新しいドメイン機能 (Mac OS 10.5 で導入) を使用して、ユーザーのホーム ディレクトリをターゲットにしています。PackageMaker.app に .pmdoc ファイルを作成しました。ポスト インストール スクリプトを追加するまで、すべてが完全に機能します。その後、突然、私のパッケージは、以前はそうではなかったのにルート認証を必要とします。packagemaker --doc mypackage.pmdoc --info Dist/PackageInfoを明示的に指定する微調整した PackageInfo ファイルを指定して、コマンドラインからビルドしようとしましたが、うまくいきauth="none"ません。出力されたパッケージを で解凍して調べると、自分で生成するXMLファイルでxar -xf package.pkg認証が指定されているようです。package.pkg/Distributionpackagemaker

GUI に不満があるためpackagemaker、コマンド ラインでのみ使用するように切り替えました。ただし、現在、私のパッケージはユーザー インターフェイス ファイルを表示せず (それらは .pkg アーカイブに含まれています)、依然として root 認証を要求します。生成されたファイルの問題のある行は次のDistributionとおりです (notice auth="Root"):

<pkg-ref id="org.myUniqueID.pkg" installKBytes="12032" version="1.0" auth="Root">#grooveshark.pkg</pkg-ref>

これが私が実行する方法ですpackagemaker

packagemaker -r ./Grooveshark -f ./Dist/PackageInfo -s ./Dist/Scripts -e ./Dist/Resources -v --domain user --target 10.5 --no-relocate --discard-forks --no-recommend -o ./out.pkg

これは のレイアウトですDist:

Dist/Distribution         # this isn't used by packagemaker, it generates its own
Dist/PackageInfo
Dist/Resources/en.lproj/background
Dist/Resources/en.lproj/License
Dist/Resources/en.lproj/ReadMe
Dist/Resources/en.lproj/Welcome.rtfd
Dist/Resources/en.lproj/Welcome.rtfd/gsDesktopPreview-mini.png
Dist/Resources/en.lproj/Welcome.rtfd/gsDesktopPreview-searchSmall.png
Dist/Resources/en.lproj/Welcome.rtfd/TXT.rtf
Dist/Scripts/jsuuid       # specified as a postinstall in Dist/PackageInfo
Dist/Scripts/postflight

root 認証を要求せずにポストインストール スクリプトを実行するようにパッケージを構成するにはどうすればよいですか? コマンド ラインから PackageInfo ファイルと Distribution インストール スクリプト XML ファイルの両方を指定する方法がありませんか?

4

1 に答える 1

1

結局、ファイルを配布レイアウトの所定の場所に移動し、次のスクリプトを使用して、最初に従来のフラットパッケージを構築し、次にそれを展開し、ユーザーごとのインストールを可能にする設定をコピーしてから、別のプロセスを使用して圧縮しました。インプレースで、処理せずに、PKGに戻します。

#!/usr/bin/bash
# Build Package for local install using witchcraft
PROJECT="some/filesystem/location/with/your/files"
BUILDDIR="$PROJECT/Dist/build"
PKGROOT="$PROJECT/Dist/Package_Root"

INFO="$PROJECT/Dist/PackageInfo"
DIST="$PROJECT/Dist/Distribution"

RESOURCES="$PROJECT/Dist/Resources"
SCRIPTS="$PROJECT/Dist/Scripts"

# Remove .DS_Store files
find "$PKGROOT" -name ".DS_Store" | sed 's/ /\\ /' | xargs rm
# make build dir
mkdir "$BUILDDIR"

# build flat package that needs root to install
packagemaker -r "$PKGROOT" -f "$INFO" -s "$SCRIPTS" $ARGS -o "$BUILDDIR/flat.pkg"

# Build distribution that installs into home dirs by unpacking the flat pkg

echo "Building Distribution"
echo "  Copying filesystem"
cp -r "$RESOURCES" "$BUILDDIR/Resources"
cp "$DIST" "$BUILDDIR/Distribution"
echo "  extracting flat package"
pkgutil --expand "$BUILDDIR/flat.pkg" "$BUILDDIR/grooveshark.pkg/"
rm "$BUILDDIR/flat.pkg"
echo "  flattening distribution"
pkgutil --flatten "$BUILDDIR" "$PROJECT/$1.pkg"
echo "Finished!"
于 2011-11-02T17:45:14.770 に答える