summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIlya Mashchenko <ilya@netdata.cloud>2024-03-20 09:15:24 +0200
committerGitHub <noreply@github.com>2024-03-20 09:15:24 +0200
commit175515ce497269779d11cb236213aa18e01b862a (patch)
tree8fe777ff3ada35a4dcf9178d78251554be98c133
parentb2f1a09b05dac707a2e82c6f3cc28e5159ff7cf0 (diff)
Fix issues with permissions when installing from source on macOS (#17198)
-rw-r--r--packaging/installer/functions.sh13
-rwxr-xr-xsystem/install-service.sh.in2
2 files changed, 14 insertions, 1 deletions
diff --git a/packaging/installer/functions.sh b/packaging/installer/functions.sh
index 72f3842202..63b2f568db 100644
--- a/packaging/installer/functions.sh
+++ b/packaging/installer/functions.sh
@@ -934,6 +934,11 @@ portable_add_user() {
echo >&2 "User '${username}' already exists."
return 0
fi
+ elif command -v dscl > /dev/null 2>&1; then
+ if dscl . read /Users/"${username}" >/dev/null 2>&1; then
+ echo >&2 "User '${username}' already exists."
+ return 0
+ fi
else
if cut -d ':' -f 1 < /etc/passwd | grep "^${username}$" 1> /dev/null 2>&1; then
echo >&2 "User '${username}' already exists."
@@ -952,7 +957,13 @@ portable_add_user() {
elif command -v adduser 1> /dev/null 2>&1; then
run adduser -h "${homedir}" -s "${nologin}" -D -G "${username}" "${username}" && return 0
elif command -v sysadminctl 1> /dev/null 2>&1; then
- run sysadminctl -addUser "${username}" && return 0
+ gid=$(dscl . read /Groups/"${username}" 2>/dev/null | grep PrimaryGroupID | grep -Eo "[0-9]+")
+ if run sysadminctl -addUser "${username}" -shell /usr/bin/false -home /var/empty -GID "$gid"; then
+ # FIXME: I think the proper solution is to create a role account:
+ # -roleAccount + name starting with _ and UID in 200-400 range.
+ run dscl . create /Users/"${username}" IsHidden 1
+ return 0
+ fi
fi
warning "Failed to add ${username} user account!"
diff --git a/system/install-service.sh.in b/system/install-service.sh.in
index cdd1bf52f5..226dca5dee 100755
--- a/system/install-service.sh.in
+++ b/system/install-service.sh.in
@@ -630,6 +630,8 @@ install_darwin_service() {
exit 4
fi
+ launchctl unload /Library/LaunchDaemons/com.github.netdata.plist 2>/dev/null
+
if ! launchctl load /Library/LaunchDaemons/com.github.netdata.plist; then
error "Failed to load plist file."
exit 4