2

我正在使用 PackageMaker 的新域功能(为 Mac OS 10.5 引入)来定位用户主目录。我在 PackageMaker.app 中创建了一个 .pmdoc 文件,并且在添加我的安装后脚本之前一切正常。然后,突然间,我的包需要 root 授权,而以前不需要。packagemaker --doc mypackage.pmdoc --info Dist/PackageInfo我尝试使用提供明确指定的调整过的 PackageInfo 文件从命令行构建auth="none",但这不起作用。当我通过使用 提取输出包来调查输出包时xar -xf package.pkg,身份验证似乎是在为自己生成package.pkg/Distribution的 XML 文件中指定的。packagemaker

由于对 GUI 的失望,我已切换到仅packagemaker在命令行上使用。但是,现在我的包不显示我的用户界面文件(尽管它们包含在 .pkg 存档中),并且仍然需要 root 身份验证。生成文件中的违规行Distribution是(注意 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 install-script 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 回答