pkgbuild
と を使用してインストーラーを作成してproductbuild
います。何か問題が発生した場合に備えて、ユーザーからインストール ログを収集できるようにしたいと考えています。それらのログが、インストールされている他のすべてのものと混ざっていなければいいのですが。
デフォルトでは、すべてのログが に移動するように見えます/var/logs/install.log
。アプリのインストーラー ログのこの場所を変更する方法はありますか?
pkgbuild
と を使用してインストーラーを作成してproductbuild
います。何か問題が発生した場合に備えて、ユーザーからインストール ログを収集できるようにしたいと考えています。それらのログが、インストールされている他のすべてのものと混ざっていなければいいのですが。
デフォルトでは、すべてのログが に移動するように見えます/var/logs/install.log
。アプリのインストーラー ログのこの場所を変更する方法はありますか?
postinstall スクリプトの最後に次の関数を追加することで、これを解決しました。現在のインストールに関連する install.log の最初の行を検出し、その行から install.log の最後までのすべてを別のファイルにコピーします。
1 つの注意点: 複数のインストールが同時に行われている場合、他のインストールからログが混在する可能性があります。
function export_log {
NOW=`date "+%Y-%m-%d-%H-%M-%S"`
LOG_NAME="install_log_$NOW.log"
# Interactive install logs start with a line "<AppName> x.x.x Installation Log". Silent install logs start with a line
# "Product archive /path/to/pkg/folder".
# Must include something like \d in this expression and the pkg filename, that won't match this line itself when it's printed in the log
STARTING_LINE_OF_LAST_INSTALL=`egrep '(<AppName> \d+\.\d+\.\d+ Installation Log)|(Product archive.*path/to/pkg/folder/\d+.\d+\.\d+/)' /var/log/install.log | tail -n 1`
# Copy the rest of the log from that line on, up to 10000 lines.
fgrep --after-context=10000 "$STARTING_LINE_OF_LAST_INSTALL" /var/log/install.log > "$LOGGING_DIR/$LOG_NAME"
}
.pkg
MAC OS Xにフラット ファイル形式 ( ) でアプリをインストールするには、次の 2 つの方法があります。
Installer.app
(El Capitan では /System/Library/CoreServices/Installer.app にあります) は、ログを変更するオプションがないように見える GUI インストーラー メソッドですが、ログの表示オプションがあります ( Command+L
)
installer
-dumplog
ファイルにリダイレクトできる標準出力にログをダンプするために使用できるコマンドラインです。
-dumplog Detailed log information is always sent to syslog using the LOG_INSTALL facility (and will wind up in /var/log/install.log). -dumplog additionally writes this log to standard error output.
指示
installer -dumplog -pkg InstallMe.pkg -target / > install.log 2>&1