diff --git a/readme.md b/readme.md index 736eedb..5c32038 100644 --- a/readme.md +++ b/readme.md @@ -255,6 +255,7 @@ Handle project workflows in a unified way: * venv * create * activate +* query package * relay environment module name #### Python diff --git a/spcd/bootstrap.sh b/spcd/bootstrap.sh index c80c600..70a3673 100644 --- a/spcd/bootstrap.sh +++ b/spcd/bootstrap.sh @@ -27,9 +27,10 @@ _SPCD_BANNER_VERTICAL="│" _spcd_banner_add() { if [ -n "${1}" ]; then - local text=" ${1} " - local length=${#text} - local filler="$(_spcd_fill "${length}" "${_SPCD_BANNER_HORIZONTAL}")" + local text length filler + text=" ${1} " + length=${#text} + filler="$(_spcd_fill "${length}" "${_SPCD_BANNER_HORIZONTAL}")" if [ -n "${__SPCD_BANNER_MIDDLE}" ]; then _spcd_banner_split else @@ -299,10 +300,10 @@ spcd_split() { spcd_step() { if [ -n "${1}" ]; then [ -n "${__SPCD_STEP_LEVEL}" ] || __SPCD_STEP_LEVEL=1 - spcd_step__prefix="__SPCD_STEP_${__SPCD_STEP_LEVEL}" - spcd_step__index="${spcd_step__prefix}_INDEX" - eval "${spcd_step__index}=\$((${spcd_step__index} + 1))" - eval "${spcd_step__prefix}_LABEL=\"${1}\"" + local prefix="__SPCD_STEP_${__SPCD_STEP_LEVEL}" + local index="${prefix}_INDEX" + eval "${index}=\$((${index} + 1))" + eval "${prefix}_LABEL=\"${1}\"" _spcd_banner_render fi } @@ -334,12 +335,14 @@ spcd_txt_get() { spcd_txt_locale() { # LANGUAGE + local name + local value if [ -n "${1}" ]; then - spcd_step__locale__value="${1}" + value="${1}" else - spcd_step__locale__value="${_SPCD_TXT_LOCALE_DEFAULT}" + value="${_SPCD_TXT_LOCALE_DEFAULT}" fi - spcd_step__locale__value="${spcd_step__locale__value}.${_SPCD_TXT_CHARSET}" + value="${value}.${_SPCD_TXT_CHARSET}" set -- \ "LANG" \ "LC_CTYPE" \ @@ -354,8 +357,8 @@ spcd_txt_locale() { "LC_TELEPHONE" \ "LC_MEASUREMENT" \ "LC_IDENTIFICATION" - for spcd_step__locale__name in "${@}"; do - export "${spcd_step__locale__name}=${spcd_step__locale__value}" + for name in "${@}"; do + export "${name}=${value}" done } @@ -408,11 +411,14 @@ spcd_step__environment_defaults_print() { "URL_PYTHON" \ "URL_ROCKY" \ "URL_UBUNTU" - for spcd_step_edp__item in "${@}"; do - spcd_step_edp__name="SPCD_${spcd_step_edp__item}" - eval "spcd_step_edp__value=\"\${${spcd_step_edp__name}}\"" - if [ -n "${spcd_step_edp__value}" ]; then - spcd_os_printenv "${spcd_step_edp__name}" + local item + local name + local value + for item in "${@}"; do + name="SPCD_${item}" + eval "value=\"\${${name}}\"" + if [ -n "${value}" ]; then + spcd_os_printenv "${name}" fi done } @@ -750,8 +756,7 @@ ${SPCD_PYTHON_VENV}/lib/${SPCD_PYTHON_COMMAND}/site-packages" spcd_step__environment_list_workspace() { spcd_step "List workspace" - spcd_lwd__path="$(realpath .)" - spcd_os_ls "${spcd_lwd__path}" + spcd_os_ls "$(realpath .)" } # ╭──────┬───────────╮ @@ -771,11 +776,12 @@ spcd_clean_cache() { spcd_git_clone() { if [ -n "${1}" ]; then - spcd_gc__name="$(basename "${1}")" - spcd_gc__path="${SPCD_DL}/${spcd_gc__name}" - spcd_gc__url="$(spcd_git_url "${1}")" - git clone "${spcd_gc__url}" "${spcd_gc__path}" - echo "${spcd_gc__path}" + local name path url + name="$(basename "${1}")" + path="${SPCD_DL}/${name}" + url="$(spcd_git_url "${1}")" + git clone "${url}" "${path}" + echo "${path}" fi } @@ -813,22 +819,23 @@ spcd_install_package() { } spcd_python_ln() { - spcd_python_ln__command="${1}" - if [ -n "${spcd_python_ln__command}" ]; then - echo "→ ${SPCD_PYTHON_ALIAS} → ${spcd_python_ln__command}" - ln -f -s "${spcd_python_ln__command}" \ + local command="${1}" + if [ -n "${command}" ]; then + echo "→ ${SPCD_PYTHON_ALIAS} → ${command}" + ln -f -s "${command}" \ "/usr/bin/${SPCD_PYTHON_ALIAS}" fi } spcd_python_pip() { if [ -n "${1}" ]; then - spcd_pp__name="$(basename "${1}")" - spcd_pp__path="$(spcd_git_clone "${1}")" - spcd_pp__path="${spcd_pp__path}/${spcd_pp__name}" - spcd_pp__target="${SPCD_PYTHON_VENV_PACKAGES}" - cp --recursive "${spcd_pp__path}" "${spcd_pp__target}" - echo "${spcd_pp__target}/${spcd_pp__name}" + local name path target + name="$(basename "${1}")" + path="$(spcd_git_clone "${1}")" + path="${path}/${name}" + target="${SPCD_PYTHON_VENV_PACKAGES}" + cp --recursive "${path}" "${target}" + echo "${target}/${name}" fi } @@ -849,15 +856,16 @@ spcd_query_package() { spcd_step__dns() { spcd_step "DNS" + local index value text while true; do - spcd_sdr__index=$((spcd_sdr__index + 1)) - eval "spcd_sdr__value=\"\${SPCD_DNS_${spcd_sdr__index}}\"" - [ -n "${spcd_sdr__value}" ] || break - spcd_sdr__text="${spcd_sdr__text}\ -nameserver ${spcd_sdr__value} + index=$((index + 1)) + eval "value=\"\${SPCD_DNS_${index}}\"" + [ -n "${value}" ] || break + text="${text}\ +nameserver ${value} " done - spcd_os_write "/etc/resolv.conf" "${spcd_sdr__text}" + spcd_os_write "/etc/resolv.conf" "${text}" } # ╭──────┬──────────╮ @@ -866,6 +874,7 @@ nameserver ${spcd_sdr__value} spcd_step__packages_set_repositories() { spcd_step "Set repositories" + local file case "${SPCD_OS_ID}" in "${SPCD_OS_ALMA}") case "${SPCD_OS_VERSION}" in @@ -897,8 +906,8 @@ spcd_step__packages_set_repositories() { ;; *) ;; esac - for spcd_spr__file in "${@}"; do - spcd_os_sed "/etc/yum.repos.d/almalinux${spcd_spr__file}.repo" \ + for file in "${@}"; do + spcd_os_sed "/etc/yum.repos.d/almalinux${file}.repo" \ "|^mirrorlist|#mirrorlist|" \ "|https://repo.almalinux.org|${SPCD_URL_ALMA}|" \ "|^# baseurl|baseurl|" @@ -928,14 +937,14 @@ deb ${SPCD_URL_DEBIAN}-security ${SPCD_OS_VERSION}-security main "-updates-testing" \ "-updates" \ "" - for spcd_spr__file in "${@}"; do - spcd_os_sed "/etc/yum.repos.d/fedora${spcd_spr__file}.repo" \ + for file in "${@}"; do + spcd_os_sed "/etc/yum.repos.d/fedora${file}.repo" \ "|^metalink|#metalink|" "\ |http://download.example/pub/fedora/linux|${SPCD_URL_FEDORA}|" \ "|^#baseurl|baseurl|" done spcd_os_sed "/etc/yum.repos.d/fedora-cisco-openh264.repo" \ - "|^enabled=1|#enabled=0|" + "|^enabled=1|enabled=0|" ;; "${SPCD_OS_OPENSUSE}") set -- \ @@ -952,12 +961,12 @@ deb ${SPCD_URL_DEBIAN}-security ${SPCD_OS_VERSION}-security main "source" \ "update-non-oss" \ "update" - for spcd_spr__file in "${@}"; do - spcd_os_sed "/etc/zypp/repos.d/repo-${spcd_spr__file}.repo" \ + for file in "${@}"; do + spcd_os_sed "/etc/zypp/repos.d/repo-${file}.repo" \ "|http://download.opensuse.org|${SPCD_URL_OPENSUSE}|" done spcd_os_sed "/etc/zypp/repos.d/repo-openh264.repo" \ - "|^enabled=1|#enabled=0|" + "|^enabled=1|enabled=0|" ;; "${SPCD_OS_ROCKY}") case "${SPCD_OS_VERSION}" in @@ -986,8 +995,8 @@ deb ${SPCD_URL_DEBIAN}-security ${SPCD_OS_VERSION}-security main ;; *) ;; esac - for spcd_spr__file in "${@}"; do - spcd_os_sed "/etc/yum.repos.d/${spcd_spr__file}.repo" \ + for file in "${@}"; do + spcd_os_sed "/etc/yum.repos.d/${file}.repo" \ "|^mirrorlist|#mirrorlist|" \ "|http://dl.rockylinux.org|${SPCD_URL_ROCKY}|" \ "|^#baseurl|baseurl|" @@ -1045,28 +1054,29 @@ Dir::Etc::SourceParts \"\"; spcd_step__packages_trust_https() { spcd_step "Trust HTTPS" + local path text if [ -n "${SPCD_CA_1}" ] || [ "${SPCD_PM}" = "${SPCD_PM_APT}" ]; then - spcd_pth__path="$(spcd_https_path)" - if [ -n "${spcd_pth__path}" ]; then - spcd_os_mkdir "$(dirname "${spcd_pth__path}")" + path="$(spcd_https_path)" + if [ -n "${path}" ]; then + spcd_os_mkdir "$(dirname "${path}")" case "${SPCD_PM}" in - "${SPCD_PM_APK}") spcd_pth__text="\ + "${SPCD_PM_APK}") text="\ --no-verify " ;; - "${SPCD_PM_APT}") spcd_pth__text="\ + "${SPCD_PM_APT}") text="\ Acquire::https::Verify-Peer False; " ;; - "${SPCD_PM_DNF}") spcd_pth__text="\ + "${SPCD_PM_DNF}") text="\ sslverify=False " ;; - "${SPCD_PM_PACMAN}") spcd_pth__text="\ + "${SPCD_PM_PACMAN}") text="\ SSLVerify = No " ;; "${SPCD_PM_ZYPPER}") ;; *) ;; esac - [ -n "${spcd_pth__text}" ] && - spcd_os_write "${spcd_pth__path}" "${spcd_pth__text}" + [ -n "${text}" ] && + spcd_os_write "${path}" "${text}" fi fi } @@ -1102,30 +1112,31 @@ spcd_step__ca_install_package() { spcd_step__ca_write_certificates() { spcd_step "Write certificates" + local root index text path case "${SPCD_OS_ID}" in "${SPCD_OS_ALMA}" | "${SPCD_OS_FEDORA}" | "${SPCD_OS_ROCKY}") - spcd_wcc__root="/etc/pki/ca-trust/source/anchors" + root="/etc/pki/ca-trust/source/anchors" ;; "${SPCD_OS_ALPINE}" | "${SPCD_OS_DEBIAN}" | "${SPCD_OS_UBUNTU}") - spcd_wcc__root="/usr/local/share/ca-certificates" + root="/usr/local/share/ca-certificates" ;; "${SPCD_OS_ARCH}") - spcd_wcc__root="/etc/ca-certificates/trust-source/anchors" + root="/etc/ca-certificates/trust-source/anchors" ;; "${SPCD_OS_OPENSUSE}") - spcd_wcc__root="/etc/pki/trust/anchors" + root="/etc/pki/trust/anchors" ;; *) ;; esac - spcd_os_mkdir "${spcd_wcc__root}" + spcd_os_mkdir "${root}" while true; do - spcd_wcc__index=$((spcd_wcc__index + 1)) - eval "spcd_wcc__text=\"\${SPCD_CA_${spcd_wcc__index}}\"" - [ -n "${spcd_wcc__text}" ] || break - spcd_wcc__path="${spcd_wcc__root}/${spcd_wcc__index}.crt" + index=$((index + 1)) + eval "text=\"\${SPCD_CA_${index}}\"" + [ -n "${text}" ] || break + path="${root}/${index}.crt" spcd_split - spcd_os_write "${spcd_wcc__path}" "${spcd_wcc__text}" - spcd_openssl_x509 "${spcd_wcc__path}" + spcd_os_write "${path}" "${text}" + spcd_openssl_x509 "${path}" done } @@ -1154,9 +1165,10 @@ spcd_step__ca_update_certificates() { spcd_step__packages_verify_https() { spcd_step "Verify HTTPS" - spcd_pvh__path="$(spcd_https_path)" - if [ -n "${spcd_pvh__path}" ]; then - spcd_os_rm "${spcd_pvh__path}" + local path + path="$(spcd_https_path)" + if [ -n "${path}" ]; then + spcd_os_rm "${path}" fi } @@ -1168,21 +1180,20 @@ spcd_step__packages_install_locales() { case "${SPCD_PM}" in "${SPCD_PM_APK}") spcd_install_package "musl-locales" ;; "${SPCD_PM_APT}") - unset spcd_step__pil__text - for spcd_step__pil__locale in "${@}"; do - spcd_step__pil__text="${spcd_step__pil__text}\ -${spcd_step__pil__locale}.${_SPCD_TXT_CHARSET} ${_SPCD_TXT_CHARSET} + local locale text + for locale in "${@}"; do + text="${text}\ +${locale}.${_SPCD_TXT_CHARSET} ${_SPCD_TXT_CHARSET} " done - spcd_os_write "/etc/locale.gen" "${spcd_step__pil__text}" + spcd_os_write "/etc/locale.gen" "${text}" spcd_install_package "locales" ;; "${SPCD_PM_DNF}") - for spcd_step__pil__locale in "${@}"; do - spcd_step__pil__lang="$( - echo "${spcd_step__pil__locale}" | cut -d _ -f 1 - )" - spcd_install_package "glibc-langpack-${spcd_step__pil__lang}" + local locale language + for locale in "${@}"; do + language="$(echo "${locale}" | cut -d _ -f 1)" + spcd_install_package "glibc-langpack-${language}" done ;; "${SPCD_PM_PACMAN}") spcd_install_package "glibc-locales" ;; @@ -1247,31 +1258,33 @@ index-url = ${SPCD_URL_PYTHON}/simple spcd_step__python_modules() { spcd_step_in "Modules" - spcd_ipm__target="${SPCD_PYTHON_VENV_PACKAGES}" + local target path script check + target="${SPCD_PYTHON_VENV_PACKAGES}" spcd_step "List" - spcd_os_ls "${spcd_ipm__target}" + spcd_os_ls "${target}" spcd_step "Main" - spcd_ipm__path="$(spcd_python_pip "${SPCD_GIT_SPCD}")" + path="$(spcd_python_pip "${SPCD_GIT_SPCD}")" # check matching of file and variable spcd_step "Check" - spcd_ipm__script="${spcd_ipm__path}/bootstrap.sh" - ls -l "${spcd_ipm__script}" - spcd_ipm__check="${spcd_ipm__script}.${SPCD_CMD_SUM}" - "${SPCD_CMD_SUM}" "${spcd_ipm__script}" >"${spcd_ipm__check}" - printf "%s" "${SPCD}" >"${spcd_ipm__script}" - ls -l "${spcd_ipm__script}" - dos2unix "${spcd_ipm__script}" - ls -l "${spcd_ipm__script}" - "${SPCD_CMD_SUM}" -c "${spcd_ipm__check}" || spcd_error_ci "SPCD" + script="${path}/bootstrap.sh" + ls -l "${script}" + check="${script}.${SPCD_CMD_SUM}" + "${SPCD_CMD_SUM}" "${script}" >"${check}" + printf "%s" "${SPCD}" >"${script}" + ls -l "${script}" + dos2unix "${script}" + ls -l "${script}" + "${SPCD_CMD_SUM}" -c "${check}" || spcd_error_ci "SPCD" spcd_step "Root" spcd_python_pip "${SPCD_GIT_RWX}" spcd_step "List" - spcd_os_ls "${spcd_ipm__target}" + spcd_os_ls "${target}" spcd_step_out } spcd_step__install_packages() { spcd_step_in "OS packages" + local file # epel spcd_step "EPEL" case "${SPCD_OS_ID}" in @@ -1292,16 +1305,16 @@ spcd_step__install_packages() { ;; *) ;; esac - for spcd_spr__file in "${@}"; do - spcd_os_sed "/etc/yum.repos.d/epel${spcd_spr__file}.repo" \ + for file in "${@}"; do + spcd_os_sed "/etc/yum.repos.d/epel${file}.repo" \ "|^metalink|#metalink|" \ "|https://download.example/pub/epel|${SPCD_URL_EPEL}|" \ "|^#baseurl|baseurl|" done - spcd_spr__file="/etc/yum.repos.d/epel-cisco-openh264.repo" + file="/etc/yum.repos.d/epel-cisco-openh264.repo" if [ -f "${spcd_spr__file}" ]; then - spcd_os_sed "${spcd_spr__file}" \ - "|^enabled=1|#enabled=0|" + spcd_os_sed "${file}" \ + "|^enabled=1|enabled=0|" fi ;; *) ;; @@ -1352,48 +1365,42 @@ spcd_step__install_packages() { spcd_step__python_write_module() { spcd_step "Write module" - for spcd_wpm__variable in \ + local variable value text index root + for variable in \ OS_ID OS_VERSION \ PROJECT_ROOT PROJECT_PATH PROJECT_NAME \ PYTHON_VENV_BINARIES PYTHON_VENV_PACKAGES \ OPEN DOWN VERT SPLT __UP SHUT; do - spcd_wpm__value="$(spcd_os_printenv "SPCD_${spcd_wpm__variable}")" - spcd_wpm__text="${spcd_wpm__text}${spcd_wpm__value} + value="$(spcd_os_printenv "SPCD_${variable}")" + text="${text}${value} " done - spcd_wpm__index=$((__SPCD_STEP_1_INDEX + 1)) - for spcd_wpm__root in \ + index=$((__SPCD_STEP_1_INDEX + 1)) + for root in \ "${SPCD_PYTHON_PACKAGES}" "${SPCD_PYTHON_VENV_PACKAGES}"; do - spcd_os_write "${spcd_wpm__root}/env.py" "${spcd_wpm__text} -SPCD_STEP = ${spcd_wpm__index} + spcd_os_write "${root}/env.py" "${text} +SPCD_STEP = ${index} " done } spcd_step__python_switch() { spcd_step "Switch" - spcd_stp__name="$(basename "${SPCD_GIT_SPCD}")" - spcd_stp__path="$(realpath "${0}")" + local name path + name="$(basename "${SPCD_GIT_SPCD}")" + path="$(realpath "${0}")" echo "\ -${spcd_stp__path} +${path} ↓ -${SPCD_PYTHON_ALIAS} / ${spcd_stp__name}" - "${SPCD_PYTHON_ALIAS}" -m "${spcd_stp__name}" +${SPCD_PYTHON_ALIAS} / ${name}" + "${SPCD_PYTHON_ALIAS}" -m "${name}" } # ╭──────╮ # │ main │ # ╰──────╯ -spcd_test_local() { - local local_variable="KO!" - non_local_variable="OK" -} - spcd_main() { - spcd_test_local - echo "local_variable = \"${local_variable}\"" - echo "non_local_variable = \"${non_local_variable}\"" # environment spcd_txt_locale #