Split prerequisites check into three stages

This commit is contained in:
Rezart Qelibari
2022-04-06 16:43:04 +02:00
parent 7f55fb66f8
commit 77c0ac8cdf
5 changed files with 75 additions and 30 deletions

View File

@@ -1,9 +1,15 @@
#!/usr/bin/env zsh #!/usr/bin/env zsh
# vi: ft=zsh # vi: ft=zsh
function checkPrerequisites() { function getQuestionsPrerequisites() {
local -A cmds=( cmds=(
[docopts]='(with -f option supported)' [systemsetup]=''
)
requireRootPrivileges
}
function getExecPrerequisites() {
cmds=(
[osascript]='' [osascript]=''
[scutil]='' [scutil]=''
[systemsetup]='' [systemsetup]=''
@@ -12,8 +18,6 @@ function checkPrerequisites() {
[defaults]='' [defaults]=''
[launchctl]='' [launchctl]=''
) )
test "`id -u`" -eq 0 || { lop -- -e 'This module requires root access. Please run as root.'; return 11 }
checkCommands
} }
function getQuestions() { function getQuestions() {

View File

@@ -187,20 +187,30 @@ function configure_system() {
allowOnlyFileVaultUserToUnlock "${filevault_username}" allowOnlyFileVaultUserToUnlock "${filevault_username}"
} }
function checkPrerequisites() { function getHelpPrerequisites() {
local -A cmds=( cmds=(
[docopts]='(with -f option supported)'
[tr]='' [tr]=''
[cut]='' [scutil]=''
)
addDocoptsToCmds
}
function getQuestionsPrerequisites() {
cmds=(
[find]=''
[dscl]='' [dscl]=''
[sysadminctl]=''
)
}
function getExecPrerequisites() {
cmds=(
[cut]=''
[fdesetup]='' [fdesetup]=''
[base64]='' [base64]=''
[dsimport]='' [dsimport]=''
[sysadminctl]=''
[scutil]=''
) )
test "`id -u`" -eq 0 || { lop -- -e 'This module requires root access. Please run as root.'; return 11 } requireRootPrivileges
checkCommands
} }
function getQuestions() { function getQuestions() {

View File

@@ -246,9 +246,8 @@ function configure_system() {
popd -q popd -q
} }
function checkPrerequisites() { function getExecPrerequisites() {
local -A cmds=( cmds=(
[docopts]='(with -f option supported)'
[dscl]='' [dscl]=''
[dseditgroup]='' [dseditgroup]=''
[chown]='' [chown]=''
@@ -259,8 +258,7 @@ function checkPrerequisites() {
[awk]='' [awk]=''
[sysadminctl]='' [sysadminctl]=''
) )
test "`id -u`" -eq 0 || { lop -- -e 'This module requires root access. Please run as root.'; return 11 } requireRootPrivileges
checkCommands
} }
function getDefaultHomebrewUsername() { function getDefaultHomebrewUsername() {

View File

@@ -94,14 +94,11 @@ function configure_system() {
popd -q popd -q
} }
function checkPrerequisites() { function getExecPrerequisites() {
local -A cmds=( cmds=(
[docopts]='(with -f option supported)'
)
local -A execCmds=(
[brew]='' [brew]=''
) )
test "`id -u`" -eq 0 || { lop -- -e 'This module requires root access. Please run as root.'; return 11 } id -nG | grep admin >&! /dev/null || { lop -- -e 'This module requires the user to be in admin group. Please run again as either root or an admin user.'; return 11 }
checkCommands checkCommands
} }

View File

@@ -29,17 +29,46 @@ function getModuleAnswerByKeyRegEx() {
function checkCommands() { function checkCommands() {
local cmd local cmd
local varName=$1 for cmd in ${(k)cmds}; do
for cmd in ${(Pk)varName}; do
if ! which "${cmd}" >&! /dev/null; then if ! which "${cmd}" >&! /dev/null; then
local comment='' local comment=''
[ -n "${${(P)varName}[$cmd]}" ] && comment=" ${${(P)varName}[$cmd]}" [ -n "${cmds[$cmd]}" ] && comment=" ${cmds[$cmd]}"
lop -- -e "This module needs ${cmd}${comment} to work." lop -- -e "This module needs ${cmd}${comment} to work."
return 11 return 11
fi fi
done done
} }
function checkHelpPrerequisites() {
local -A cmds
getHelpPrerequisites || return
checkCommands
}
function addDocoptsToCmds() {
cmds+=(docopts '(with -f option supported)')
}
function requireRootPrivileges() {
test "`id -u`" -eq 0 || { lop -- -e 'This module requires root access. Please run as root.'; return 11 }
}
whence getHelpPrerequisites >&! /dev/null || function $_() {
addDocoptsToCmds
}
function checkQuestionsPrerequisites() {
local -A cmds
getQuestionsPrerequisites || return
checkCommands
}
function checkExecPrerequisites() {
local -A cmds
getExecPrerequisites || return
checkCommands
}
function showQuestions() { function showQuestions() {
local questions=() local questions=()
getQuestions getQuestions
@@ -52,11 +81,18 @@ function module_main() {
local cmdName=${1:t} local cmdName=${1:t}
shift shift
autoloadZShLib || return autoloadZShLib || return
checkPrerequisites cmds || return checkHelpPrerequisites || return
configureLogging configureLogging
eval "`getUsage $cmdName | docopts -f -V - -h - : "$@"`" eval "`getUsage $cmdName | docopts -f -V - -h - : "$@"`"
[ $# -lt 1 ] && return checkQuestionsPrerequisites || return
[ "${show_questions}" = true ] && { showQuestions; return } [ "${show_questions}" = true ] && { showQuestions; return }
checkPrerequisites execCmds || return checkExecPrerequisites || return
configure_system configure_system
} }
function {
local name
for name in getQuestionsPrerequisites getExecPrerequisites getQuestions getUsage; do
whence ${name} >&! /dev/null || function $_() {}
done
}