Сборка дистрибутива дистрибутива (.pkg) со скриптом postflight без аутентификации - PullRequest
2 голосов
/ 17 февраля 2011

Я использую новую функцию домена PackageMaker (представленную для Mac OS 10.5), чтобы указать домашний каталог пользователя. Я создал файл .pmdoc в PackageMaker.app, и все работает отлично, пока я не добавлю свой скрипт после установки. Затем, внезапно, мой пакет хочет получить root-права, а раньше этого не делал. Я попытался построить из командной строки, используя packagemaker --doc mypackage.pmdoc --info Dist/PackageInfo, предоставив измененный файл PackageInfo, который явно указывает auth="none", но это не работает. Когда я изучаю выходной пакет, извлекая его с помощью xar -xf package.pkg, кажется, что аутентификация указана в package.pkg/Distribution, XML-файле, который packagemaker генерирует для себя.

Из-за разочарования в графическом интерфейсе я переключился на использование только packagemaker в командной строке. Однако теперь мои пакеты не отображают файлы моего пользовательского интерфейса (хотя они включены в архив .pkg) и все еще требуют аутентификации root. В сгенерированном файле Distribution нарушается строка (note 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

Как я могу настроить свой пакет так, чтобы он запускал скрипт postinstall без требования аутентификации root? Есть ли какой-то способ, которым я не могу указать и файл PackageInfo, и файл XML установочного сценария распространения через командную строку?

1 Ответ

1 голос
/ 02 ноября 2011

В итоге я переместил файлы на место в макете дистрибутива, затем я использовал следующий сценарий, чтобы сначала создать традиционный плоский пакет, затем развернуть его, скопировать в настройках, которые допускают установку для каждого пользователя, а затем использовать другой процесс.сжать его на месте, без обработки, обратно в 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!"
...