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>
ycdtosa committed
Apr 2, 2025 at 13:27 UTC
15a9a0e6457d976a34157c954a39cc38e3d84192
2 files changed
+45
packaging/installer/functions.sh
+19
@@ -1065,6 +1065,8 @@ portable_add_user() {
1065
run dscl . create /Users/"${username}" IsHidden 1
1066
return 0
1067
fi
1068
+ elif command -v synouser 1> /dev/null 2>&1; then
1069
+ run synouser -add "${username}" "" "netdata agent" 0 "" 0 && return 0
1070
fi
1071
1072
warning "Failed to add ${username} user account!"
@@ -1092,6 +1094,8 @@ portable_add_group() {
1094
run addgroup "${groupname}" && return 0
1095
elif command -v dseditgroup 1> /dev/null 2>&1; then
1096
dseditgroup -o create "${groupname}" && return 0
1097
+ elif command -v synogroup 1> /dev/null 2>&1; then
1098
+ run synogroup --add "${groupname}" && return 0
1099
fi
1100
1101
warning >&2 "Failed to add ${groupname} user group !"
@@ -1127,6 +1131,21 @@ portable_add_user_to_group() {
1131
run addgroup "${username}" "${groupname}" && return 0
1132
elif command -v dseditgroup 1> /dev/null 2>&1; then
1133
dseditgroup -u "${username}" "${groupname}" && return 0
1134
+ elif command -v synogroup 1> /dev/null 2>&1; then
1135
+ # Get current members of the group
1136
+ current_members_list=$(synogroup --get "${groupname}" | grep '^[0-9]')
1137
+ current_members=$(echo "${current_members_list}" | grep -oP '\[\K[^\]]+' | tr '\n' ' ' | sed 's/ $//')
1138
+
1139
+ # Append username to the list
1140
+ if [ -n "$current_members" ]; then
1141
+ new_members="${current_members} ${username}"
1142
+ else
1143
+ new_members="${username}"
1144
+ fi
1145
+
1146
+ # Set the member list
1147
+ # shellcheck disable=SC2086
1148
+ run synogroup --member "${groupname}" ${new_members} && return 0
1149
fi
1150
1151
warning >&2 "Failed to add user ${username} to group ${groupname}!"
packaging/installer/netdata-uninstaller.sh
+26
@@ -452,6 +452,16 @@ portable_del_group() {
452
fi
453
fi
454
455
+ # DMS ( Synology )
456
+ if command -v synogroup 1> /dev/null 2>&1; then
457
+ if get_group "${groupname}" > /dev/null 2>&1; then
458
+ run synogroup --del "${groupname}" && return 0
459
+ else
460
+ info "Could not find group ${groupname}, nothing to do"
461
+ return 0
462
+ fi;
463
+ fi
464
+
465
error "Group ${groupname} was not automatically removed, you might have to remove it manually"
466
return 1
467
}
@@ -515,6 +525,11 @@ portable_del_user() {
525
run sysadminctl -deleteUser "${username}" && return 0
526
fi
527
528
+ # DMS ( Synology )
529
+ if command -v synouser 1> /dev/null 2>&1; then
530
+ run synouser --del "${username}" && return 0
531
+ fi
532
+
533
error "User ${username} could not be deleted from system, you might have to remove it manually"
534
return 1
535
}
@@ -555,6 +570,17 @@ portable_del_user_from_group() {
570
run dseditgroup -o delete -u "${username}" "${groupname}" && return 0
571
fi
572
573
+ # DSM ( Synology )
574
+ if command -v synogroup 1> /dev/null 2>&1; then
575
+ # Get current members of the group removing username
576
+ current_members_list=$(synogroup --get "${groupname}" | grep -v "\[${username}\]" | grep '^[0-9]' )
577
+ current_members=$(echo "${current_members_list}" | grep -oP '\[\K[^\]]+' | tr '\n' ' ' | sed 's/ $//')
578
+
579
+ # Set the new list of members
580
+ # shellcheck disable=SC2086
581
+ run synogroup --member "${groupname}" ${current_members} && return 0
582
+ fi
583
+
584
error "Failed to delete user ${username} from group ${groupname} !"
585
return 1
586
}