This commit solves an issue where the environment handed to
`/usr/sbin/installer` is not the same as the environment used by the
graphical PKG installer.
This is evident in some post-install scripts, e. g. the
`component-10.pkg/Scripts/postinstall` script in the `dymo-label`
cask. The code says:
```
USER_ID=`id -u ${USER}`
launchctl bootstrap gui/$USER_ID /Library/LaunchAgents/com.dymo.dls.webservice.plist
```
The graphical installer will export e. g. `USER=alice`, and
everything works as intended.
However, `brew cask install` does not override `sudo`’s default,
which is `USER=ROOT`. This violates the assumptions in the script.
This commit fixes the issue by configuring `sudo` to override the
following environment variables with the proper user name:
- `LOGNAME`
- `USER`
- `USERNAME`
The pkg stanza has an option called `allow_untrusted`, which is
supposed to cause `/usr/sbin/installer` to be called with the
`-allowUntrusted` switch.
PR #3141 seems to have renamed the `pkg_install_opts` field to
`options`. At the same time, it introduces an `options` parameter for
the `run_installer` method, which shadows the `options` getter
method, causing the `allow_untrusted` option to be silently ignored.
The issue affects just the `pkg` stanza because `Hbc::Artifact::Pkg`
is the only artifact class that has an `options` method.
This commit removes the shadowing by renaming the field to
`stanza_options`; in one case, it uses `_options` for a parameter
name (instead of the more canonical `_`) for the sake of clarity.
Homebrew's actually ended up using a fair few gems. While we want to
avoid Bundler at runtime (and this PR still does that, in fact uses
Bundler even less at runtime than it did before) writing our own version
to use at build-time seems redundant.
installer command accepts -applyChoiceChangesXML option to change
customize options on the GUI installer from the commandline.
(`man installer` for more detailed information)
The introduced option `choice` enables the choice changes to be supplied
via pkg stanza without tricks in preflight code.