From 7353ea37269b3b963f0ca80ecb5f84d6b59de9c9 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 12 Apr 2023 23:01:26 -0400 Subject: [PATCH] Fix install on Mac OS to ensure that the /usr/local/bin exists (#2490) (#2494) * Fix install on Mac OS to ensure that the /usr/local/bin exists. * Add changelog. * Fix changelog. More DRY for install. (cherry picked from commit f9bc516c7ac7bc1f87788c8e7459a0d260c20982) Co-authored-by: Blake Rouse --- ...exists-on-Mac-OS-during-installation..yaml | 34 +++++++++++++++++++ internal/pkg/agent/install/install.go | 15 +++++--- 2 files changed, 44 insertions(+), 5 deletions(-) create mode 100644 changelog/fragments/1681311024-Ensure-local-bin-directory-exists-on-Mac-OS-during-installation..yaml diff --git a/changelog/fragments/1681311024-Ensure-local-bin-directory-exists-on-Mac-OS-during-installation..yaml b/changelog/fragments/1681311024-Ensure-local-bin-directory-exists-on-Mac-OS-during-installation..yaml new file mode 100644 index 00000000000..2e5d58c0c15 --- /dev/null +++ b/changelog/fragments/1681311024-Ensure-local-bin-directory-exists-on-Mac-OS-during-installation..yaml @@ -0,0 +1,34 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: bug-fix + +# Change summary; a 80ish characters long description of the change. +summary: Ensure local bin directory exists on Mac OS during installation. + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +description: | + During installation of the Elatic Agent on Mac OS ensure that the /usr/local/bin path exists before + creating the /usr/local/bin/elastic-agent symlink. + +# Affected component; a word indicating the component this changeset affects. +component: + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/2490 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/internal/pkg/agent/install/install.go b/internal/pkg/agent/install/install.go index 431fd1db931..f7e3a59938c 100644 --- a/internal/pkg/agent/install/install.go +++ b/internal/pkg/agent/install/install.go @@ -56,6 +56,14 @@ func Install(cfgFile string) error { // place shell wrapper, if present on platform if paths.ShellWrapperPath != "" { + pathDir := filepath.Dir(paths.ShellWrapperPath) + err = os.MkdirAll(pathDir, 0755) + if err != nil { + return errors.New( + err, + fmt.Sprintf("failed to create directory (%s) for shell wrapper (%s)", pathDir, paths.ShellWrapperPath), + errors.M("directory", pathDir)) + } // Install symlink for darwin instead of the wrapper script. // Elastic-agent should be first process that launchd starts in order to be able to grant // the Full-Disk Access (FDA) to the agent and it's child processes. @@ -78,11 +86,8 @@ func Install(cfgFile string) error { errors.M("destination", paths.ShellWrapperPath)) } } else { - err = os.MkdirAll(filepath.Dir(paths.ShellWrapperPath), 0755) - if err == nil { - //nolint: gosec // this is intended to be an executable shell script, not chaning the permissions for the linter - err = os.WriteFile(paths.ShellWrapperPath, []byte(paths.ShellWrapper), 0755) - } + //nolint: gosec // this is intended to be an executable shell script, not changing the permissions for the linter + err = os.WriteFile(paths.ShellWrapperPath, []byte(paths.ShellWrapper), 0755) if err != nil { return errors.New( err,