From 77c0ac8cdf81e2e103f6c3afd30d6f83c5c7564b Mon Sep 17 00:00:00 2001 From: Rezart Qelibari Date: Wed, 6 Apr 2022 16:43:04 +0200 Subject: [PATCH] Split prerequisites check into three stages --- modules/01-system-settings.sh | 14 ++++++--- modules/02-create-filevault-user.sh | 26 +++++++++++----- modules/03-install-brew.sh | 8 ++--- modules/04-install-brew-apps.sh | 9 ++---- modules/lib.sh | 48 +++++++++++++++++++++++++---- 5 files changed, 75 insertions(+), 30 deletions(-) diff --git a/modules/01-system-settings.sh b/modules/01-system-settings.sh index fe191c5..48a626d 100755 --- a/modules/01-system-settings.sh +++ b/modules/01-system-settings.sh @@ -1,9 +1,15 @@ #!/usr/bin/env zsh # vi: ft=zsh -function checkPrerequisites() { - local -A cmds=( - [docopts]='(with -f option supported)' +function getQuestionsPrerequisites() { + cmds=( + [systemsetup]='' + ) + requireRootPrivileges +} + +function getExecPrerequisites() { + cmds=( [osascript]='' [scutil]='' [systemsetup]='' @@ -12,8 +18,6 @@ function checkPrerequisites() { [defaults]='' [launchctl]='' ) - test "`id -u`" -eq 0 || { lop -- -e 'This module requires root access. Please run as root.'; return 11 } - checkCommands } function getQuestions() { diff --git a/modules/02-create-filevault-user.sh b/modules/02-create-filevault-user.sh index 84d5176..c3af1e2 100755 --- a/modules/02-create-filevault-user.sh +++ b/modules/02-create-filevault-user.sh @@ -187,20 +187,30 @@ function configure_system() { allowOnlyFileVaultUserToUnlock "${filevault_username}" } -function checkPrerequisites() { - local -A cmds=( - [docopts]='(with -f option supported)' +function getHelpPrerequisites() { + cmds=( [tr]='' - [cut]='' + [scutil]='' + ) + addDocoptsToCmds +} + +function getQuestionsPrerequisites() { + cmds=( + [find]='' [dscl]='' + [sysadminctl]='' + ) +} + +function getExecPrerequisites() { + cmds=( + [cut]='' [fdesetup]='' [base64]='' [dsimport]='' - [sysadminctl]='' - [scutil]='' ) - test "`id -u`" -eq 0 || { lop -- -e 'This module requires root access. Please run as root.'; return 11 } - checkCommands + requireRootPrivileges } function getQuestions() { diff --git a/modules/03-install-brew.sh b/modules/03-install-brew.sh index 0030b1b..f3625b1 100755 --- a/modules/03-install-brew.sh +++ b/modules/03-install-brew.sh @@ -246,9 +246,8 @@ function configure_system() { popd -q } -function checkPrerequisites() { - local -A cmds=( - [docopts]='(with -f option supported)' +function getExecPrerequisites() { + cmds=( [dscl]='' [dseditgroup]='' [chown]='' @@ -259,8 +258,7 @@ function checkPrerequisites() { [awk]='' [sysadminctl]='' ) - test "`id -u`" -eq 0 || { lop -- -e 'This module requires root access. Please run as root.'; return 11 } - checkCommands + requireRootPrivileges } function getDefaultHomebrewUsername() { diff --git a/modules/04-install-brew-apps.sh b/modules/04-install-brew-apps.sh index da35e9d..3f6eaf0 100755 --- a/modules/04-install-brew-apps.sh +++ b/modules/04-install-brew-apps.sh @@ -94,14 +94,11 @@ function configure_system() { popd -q } -function checkPrerequisites() { - local -A cmds=( - [docopts]='(with -f option supported)' - ) - local -A execCmds=( +function getExecPrerequisites() { + cmds=( [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 } diff --git a/modules/lib.sh b/modules/lib.sh index b7c6a68..102cc8b 100644 --- a/modules/lib.sh +++ b/modules/lib.sh @@ -29,17 +29,46 @@ function getModuleAnswerByKeyRegEx() { function checkCommands() { local cmd - local varName=$1 - for cmd in ${(Pk)varName}; do + for cmd in ${(k)cmds}; do if ! which "${cmd}" >&! /dev/null; then 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." return 11 fi 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() { local questions=() getQuestions @@ -52,11 +81,18 @@ function module_main() { local cmdName=${1:t} shift autoloadZShLib || return - checkPrerequisites cmds || return + checkHelpPrerequisites || return configureLogging eval "`getUsage $cmdName | docopts -f -V - -h - : "$@"`" - [ $# -lt 1 ] && return + checkQuestionsPrerequisites || return [ "${show_questions}" = true ] && { showQuestions; return } - checkPrerequisites execCmds || return + checkExecPrerequisites || return configure_system } + +function { + local name + for name in getQuestionsPrerequisites getExecPrerequisites getQuestions getUsage; do + whence ${name} >&! /dev/null || function $_() {} + done +}