From 15a9a0e6457d976a34157c954a39cc38e3d84192 Mon Sep 17 00:00:00 2001 From: ycdtosa <ycdtosa@users.noreply.github.com> Date: Wed, 2 Apr 2025 13:27:16 +0200 Subject: [PATCH] Improve kickstart so it can add the netdata user/group on Synology DSM (#20024) * attempt to create user/group using synology CLI tools. * Update functions.sh fix spellcheck warning * Update functions.sh improve support for Synology command synogroup so it can add user to group keeping former members * fix bug closing if too soon * remove redundant test * fix shellcheck warning * use run to run synogroup * add DSM support to remove user/group * silence shellcheck warning: this needs to be expanded. * fix: the variable has to be expanded. * fix: parameter has to be expanded. silence shellcheck warning * Update packaging/installer/functions.sh --------- Co-authored-by: Ilya Mashchenko <ilya@netdata.cloud> --- packaging/installer/functions.sh | 19 ++++++++++++++++ packaging/installer/netdata-uninstaller.sh | 26 ++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/packaging/installer/functions.sh b/packaging/installer/functions.sh index d611343a2b..9989e3b426 100644 --- a/packaging/installer/functions.sh +++ b/packaging/installer/functions.sh @@ -1065,6 +1065,8 @@ portable_add_user() { run dscl . create /Users/"${username}" IsHidden 1 return 0 fi + elif command -v synouser 1> /dev/null 2>&1; then + run synouser -add "${username}" "" "netdata agent" 0 "" 0 && return 0 fi warning "Failed to add ${username} user account!" @@ -1092,6 +1094,8 @@ portable_add_group() { run addgroup "${groupname}" && return 0 elif command -v dseditgroup 1> /dev/null 2>&1; then dseditgroup -o create "${groupname}" && return 0 + elif command -v synogroup 1> /dev/null 2>&1; then + run synogroup --add "${groupname}" && return 0 fi warning >&2 "Failed to add ${groupname} user group !" @@ -1127,6 +1131,21 @@ portable_add_user_to_group() { run addgroup "${username}" "${groupname}" && return 0 elif command -v dseditgroup 1> /dev/null 2>&1; then dseditgroup -u "${username}" "${groupname}" && return 0 + elif command -v synogroup 1> /dev/null 2>&1; then + # Get current members of the group + current_members_list=$(synogroup --get "${groupname}" | grep '^[0-9]') + current_members=$(echo "${current_members_list}" | grep -oP '\[\K[^\]]+' | tr '\n' ' ' | sed 's/ $//') + + # Append username to the list + if [ -n "$current_members" ]; then + new_members="${current_members} ${username}" + else + new_members="${username}" + fi + + # Set the member list + # shellcheck disable=SC2086 + run synogroup --member "${groupname}" ${new_members} && return 0 fi warning >&2 "Failed to add user ${username} to group ${groupname}!" diff --git a/packaging/installer/netdata-uninstaller.sh b/packaging/installer/netdata-uninstaller.sh index 43ffb7406f..47cd78bca6 100755 --- a/packaging/installer/netdata-uninstaller.sh +++ b/packaging/installer/netdata-uninstaller.sh @@ -452,6 +452,16 @@ portable_del_group() { fi fi + # DMS ( Synology ) + if command -v synogroup 1> /dev/null 2>&1; then + if get_group "${groupname}" > /dev/null 2>&1; then + run synogroup --del "${groupname}" && return 0 + else + info "Could not find group ${groupname}, nothing to do" + return 0 + fi; + fi + error "Group ${groupname} was not automatically removed, you might have to remove it manually" return 1 } @@ -515,6 +525,11 @@ portable_del_user() { run sysadminctl -deleteUser "${username}" && return 0 fi + # DMS ( Synology ) + if command -v synouser 1> /dev/null 2>&1; then + run synouser --del "${username}" && return 0 + fi + error "User ${username} could not be deleted from system, you might have to remove it manually" return 1 } @@ -555,6 +570,17 @@ portable_del_user_from_group() { run dseditgroup -o delete -u "${username}" "${groupname}" && return 0 fi + # DSM ( Synology ) + if command -v synogroup 1> /dev/null 2>&1; then + # Get current members of the group removing username + current_members_list=$(synogroup --get "${groupname}" | grep -v "\[${username}\]" | grep '^[0-9]' ) + current_members=$(echo "${current_members_list}" | grep -oP '\[\K[^\]]+' | tr '\n' ' ' | sed 's/ $//') + + # Set the new list of members + # shellcheck disable=SC2086 + run synogroup --member "${groupname}" ${current_members} && return 0 + fi + error "Failed to delete user ${username} from group ${groupname} !" return 1 }