Files
SODEW/sodew-bash-main/libs/commands/system.sh
T
2026-08-12 10:59:38 +02:00

222 lines
6.0 KiB
Bash

systemLabel="[System]"
# Runs the full system installation flow.
function cmdInstallFull() {
systemApt || return 1
systemIpset || return 1
systemIptables || return 1
cmdK3sInstall || return 1
cmdK3sNamespaceAdd || return 1
cmdMariadbInstall || return 1
cmdRedisInstall || return 1
cmdOpenlitespeedInstall || return 1
cmdPostfixInstall || return 1
cmdWorkerInstall || return 1
cmdMetricInstall || return 1
}
# Displays numbered cron job list and stores selected job + current crontab in namerefs.
# Known jobs (cronJobs[]): green if installed, gray if missing.
# Unknown kube.sh jobs found in crontab: yellow, numbered after known jobs.
# $1 (varname): nameref for selected job string
# $2 (listvar): nameref for current crontab lines
function cmdCronSelect() {
local -n __cronJob="$1"
local -n __cronList="$2"
printRow
local error
run __cronList error systemCronList || { printDanger "Error retrieving the CRON job list: $error"; return 1; }
local -a shownJobs
local i job fontColor
for ((i=0; i<${#cronJobs[@]}; i++)); do
job="${cronJobs[$i]}"
shownJobs+=("$job")
grep -Fxq -- "$job" <<< "$__cronList" && fontColor="$fontGreen" || fontColor="$fontGray"
printf "%2d: %s\n" "$((i+1))" "$fontColor$job$fontReset"
done
while IFS= read -r job; do
[[ -z "$job" ]] && continue
grep -Fxq -- "$job" <(printf '%s\n' "${cronJobs[@]}") && continue
grep -Fq -- "$appPath/kube.sh" <<< "$job" || continue
shownJobs+=("$job")
printf "%2d: %s\n" "${#shownJobs[@]}" "$fontYellow$job$fontReset"
done <<< "$__cronList"
printRow
local input item
read -r -p "Specify the job number: " input
printRow
[[ -z "$input" ]] && input=0
[[ "$input" =~ ^[0-9]+$ ]] || { printDanger "Invalid job number"; return 1; }
item=$((10#$input - 1))
(( item < 0 || item >= ${#shownJobs[@]} )) && { printDanger "Unknown job number"; return 1; }
__cronJob="${shownJobs[$item]}"
}
# Interactively selects and adds a managed cron job to root crontab.
function cmdCronAdd() {
local selected jobList
cmdCronSelect selected jobList || { printRow; return 1; }
grep -Fxq -- "$selected" <(printf '%s\n' "${cronJobs[@]}") || {
printDanger "Cannot add unmanaged job"
printRow
return 1
}
if grep -Fxq -- "$selected" <<< "$jobList"; then
printSuccess "Job already exists in cron"
printRow
return 0
fi
local tmp
tmp=$(mktemp) || { printRow; return 1; }
{ printf '%s\n' "$jobList"; printf '%s\n' "$selected"; } > "$tmp"
if crontab -u root "$tmp"; then
printSuccess "Successfully added job to cron"
else
rm -f "$tmp"
printDanger "Failed to add job to cron"
printRow
return 1
fi
rm -f "$tmp"
printRow
}
# Interactively selects and removes a managed cron job from root crontab.
function cmdCronRemove() {
local selected jobList
cmdCronSelect selected jobList || { printRow; return 1; }
if ! grep -Fxq -- "$selected" <<< "$jobList"; then
printSuccess "Job not found in cron"
printRow
return 0
fi
local tmp
tmp=$(mktemp) || { printRow; return 1; }
grep -Fxv -- "$selected" <<< "$jobList" > "$tmp"
if crontab -u root "$tmp"; then
printSuccess "Successfully removed job from cron"
else
rm -f "$tmp"
printDanger "Failed to remove job from cron"
printRow
return 1
fi
rm -f "$tmp"
printRow
}
# Shows managed cron jobs; installed entries in green, missing in gray, unknown in yellow.
function cmdCronList() {
local jobList error
run jobList error systemCronList || { printDanger "systemCronList: $error"; return 1; }
local i job fontColor
printRow
for ((i=0; i<${#cronJobs[@]}; i++)); do
grep -Fxq -- "${cronJobs[$i]}" <<< "$jobList" && fontColor="$fontGreen" || fontColor="$fontGray"
printf "%3d: %s\n" "$((i+1))" "$fontColor${cronJobs[$i]}$fontReset"
done
while IFS= read -r job; do
[[ -z "$job" ]] && continue
grep -Fxq -- "$job" <(printf '%s\n' "${cronJobs[@]}") && continue
grep -Fq -- "$appPath/kube.sh" <<< "$job" || continue
((i++))
printf "%3d: %s\n" "$i" "$fontYellow$job$fontReset"
done <<< "$jobList"
printRow
}
# Lists users in the SFTP access group.
function cmdSftpUserList() {
local output error
printRow
if ! run output error sftpUserList "$@"; then
printDanger "$error"
else
printText "$output"
fi
printRow
}
# Enables SFTP access for a domain user.
function cmdSftpAccessEnable() {
local error
printRow
if ! runError error sftpAccessEnable "$@"; then
printDotText "SFTP access enable" "$labelFail"
printDanger "$error"
else
printDotText "SFTP access enable" "$labelDone"
fi
printRow
}
# Disables SFTP access for a domain user by removing them from the SFTP group.
function cmdSftpAccessDisable() {
local error
printRow
if ! runError error sftpAccessDisable "$@"; then
printDotText "SFTP access enable" "$labelFail"
printDanger "$error"
else
printDotText "SFTP access enable" "$labelDone"
fi
printRow
}
# Sets the SFTP password for a domain user from site config.
function cmdSftpPasswordSet() {
local error
printRow
if ! runError error sftpPasswordSet "$@"; then
printDotText "SFTP password set" "$labelFail"
printDanger "$error"
else
printDotText "SFTP password set" "$labelDone"
fi
printRow
}
# [WARNING] Patches sshd_config to enable SFTP via internal-sftp with group-based chroot.
function cmdSftpAddingSupport() {
local error
printRow
if ! runError error sftpAddingSupport; then
printDotText "SFTP adding support" "$labelFail"
printDanger "$error"
else
printDotText "SFTP adding support" "$labelDone"
fi
printRow
}