#! /usr/bin/env bash CD_DNS_SERVERS=( '9.9.9.9' ) CD_REPOSITORY_NAME='cd' CD_REPOSITORY_PATH='rwx.work' CD_DNS_FILE='/etc/resolv.conf' case "${CD_OS_NAME}" in 'debian') case "${CD_OS_VERSION}" in 'bookworm') echo 'TODO' ;; *) echo 'CD_OS_VERSION' exit 2 ;; esac ;; *) echo 'CD_OS_NAME' exit 1 ;; esac [ "${CI_SERVER_URL}" ] && CD_REPOSITORY_URL="${CI_SERVER_URL}" [ "${GITHUB_SERVER_URL}" ] && CD_REPOSITORY_URL="${GITHUB_SERVER_URL}" if [ "${CD_REPOSITORY_URL}" ] ; then CD_REPOSITORY_URL+="/${CD_REPOSITORY_PATH}/${CD_REPOSITORY_NAME}" else echo '_REPOSITORY_URL' exit 3 fi CD_STEP=0 function cd_step { if [ "${1}" ] ; then ((CD_STEP++)) echo " ↕ ${CD_STEP} ↔ ${1} " fi } function cd_write { local file="${1}" local text="${2}" if [ "${file}" ] ; then echo -n "${text}" \ > "${file}" \ || exit fi } function cd_set_dns_resolving { local server local text='' cd_step "${FUNCNAME}" for server in "${CD_DNS_SERVERS[@]}" ; do text+="nameserver ${server} " done cd_write "${CD_DNS_FILE}" "${text}" } function cd_set_packages_repositories { cd_step "${FUNCNAME}" case "${CD_OS_NAME}" in 'debian') cd_write '/etc/apt/sources.list' "\ deb https://deb.debian.org/debian bookworm main deb https://deb.debian.org/debian bookworm-backports main deb https://deb.debian.org/debian bookworm-updates main deb https://deb.debian.org/debian-security bookworm-security main " ;; *) exit 1 ;; esac } function cd_set_packages_configuration { cd_step "${FUNCNAME}" case "${CD_OS_NAME}" in 'debian') export DEBIAN_FRONTEND='noninteractive' cd_write '/etc/apt/apt.conf.d/apt.conf' "\ Acquire::Check-Valid-Until True; APT::Get::Show-Versions True; APT::Install-Recommends False; APT::Install-Suggests False; Dir::Etc::SourceParts \"\"; " ;; *) exit 1 ;; esac } function cd_set_https_verification_off { cd_step "${FUNCNAME}" case "${CD_OS_NAME}" in 'debian') cd_write '/etc/apt/apt.conf.d/https' "\ Acquire::https::Verify-Peer False; " ;; *) exit 1 ;; esac } function cd_update_packages_catalog { cd_step "${FUNCNAME}" case "${CD_OS_NAME}" in 'debian') apt-get update || exit ;; *) exit 1 ;; esac } function cd_install_package { if [ "${1}" ] ; then case "${CD_OS_NAME}" in 'debian') apt-get install --yes "${1}" || exit ;; *) exit 1 ;; esac fi } function cd_install_ca { cd_step "${FUNCNAME}" case "${CD_OS_NAME}" in 'debian') cd_install_package 'ca-certificates' ;; *) exit 1 ;; esac } function cd_install_git { cd_step "${FUNCNAME}" case "${CD_OS_NAME}" in 'debian') cd_install_package 'git' ;; *) exit 1 ;; esac } function cd_install_packages_tools { cd_step "${FUNCNAME}" case "${CD_OS_NAME}" in 'debian') cd_install_package 'apt-utils' ;; *) exit 1 ;; esac } function cd_install_python { cd_step "${FUNCNAME}" case "${CD_OS_NAME}" in 'debian') cd_install_package 'python3' ;; *) exit 1 ;; esac } function cd_set_https_verification_on { cd_step "${FUNCNAME}" case "${CD_OS_NAME}" in 'debian') rm '/etc/apt/apt.conf.d/https' ;; *) exit 1 ;; esac } function cd_upgrade_packages { cd_step "${FUNCNAME}" case "${CD_OS_NAME}" in 'debian') apt-get upgrade --yes || exit ;; *) exit 1 ;; esac } function cd_clean_packages_cache { cd_step "${FUNCNAME}" case "${CD_OS_NAME}" in 'debian') apt-get clean || exit ;; *) exit 1 ;; esac } function cd_install { local directory cd_step "${FUNCNAME}" directory="$(mktemp --directory)" || exit git clone "${CD_REPOSITORY_URL}" "${directory}" || exit # TODO copy } function cd_main { cd_set_dns_resolving cd_set_packages_repositories cd_set_packages_configuration cd_set_https_verification_off cd_update_packages_catalog cd_install_packages_tools cd_install_ca cd_set_https_verification_on cd_update_packages_catalog cd_upgrade_packages cd_install_git cd_install_python cd_clean_packages_cache cd_install cd_step 'bootstrap' "${DIRECTORY}/bootstrap.sh" } cd_main