Browse Source

Fix issues with permissions when installing from source on macOS (#17198)

Ilya Mashchenko 11 months ago
parent
commit
175515ce49
2 changed files with 14 additions and 1 deletions
  1. 12 1
      packaging/installer/functions.sh
  2. 2 0
      system/install-service.sh.in

+ 12 - 1
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!"

+ 2 - 0
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