in plugin/step/install/darwin/pkg/pkg.go [88:132]
func (s *Step) Execute() error {
// If this is a DMG, go down the rabbit hole. Mount it and
// then set downloadPath to its mount point.
if s.IsDMG {
s.logger.WriteEvent(go2chef.NewEvent("INSTALL_PKG_DMG_MOUNT", s.Name(), "mounting DMG"))
dmg, err := s.findDMG()
if err != nil {
return err
}
if err := s.mountDMG(filepath.Join(s.downloadPath, dmg)); err != nil {
return err
}
// unmount and emit events
defer func() {
if err := s.unmountDMG(); err != nil {
s.logger.WriteEvent(go2chef.NewEvent("INSTALL_PKG_DMG_UNMOUNT_FAILED", s.Name(), "unmounting DMG failed!"))
}
s.logger.WriteEvent(go2chef.NewEvent("INSTALL_PKG_DMG_UNMOUNT", s.Name(), "unmounting DMG"))
}()
}
pkg, err := s.findPKG()
if err != nil {
return err
}
instCtx, cancel := context.WithTimeout(context.Background(), time.Duration(s.InstallerTimeoutSeconds)*time.Second)
defer cancel()
cmd := exec.CommandContext(instCtx, "installer", "-verbose", "-pkg", filepath.Join(s.downloadPath, pkg), "-target", "/")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := cmd.Run(); err != nil {
// preserve exit error
xerr := err
if exit, ok := xerr.(*exec.ExitError); ok {
s.logger.Errorf("pkg installer exited with code %d", exit.ExitCode())
}
return xerr
}
return nil
}