From b86ad06bb9e891904aeee5b4e1fb87ee934159a4 Mon Sep 17 00:00:00 2001 From: Mauro Rosero P Date: Sun, 8 Dec 2024 00:11:04 -0500 Subject: [PATCH] [IMPROVED] bootstrap.sh - Instalar herramientas base y podman --- README.md | 23 ++- bin/bootstrap.sh | 122 ++++++++++++++ bin/lib/base.lib | 337 +++++++++++++++++++++++++++++++++++++ bin/lib/bootstrap.lib | 78 +++++++++ bin/lib/console.lib | 378 ++++++++++++++++++++++++++++++++++++++++++ bin/msg/bootstrap.es | 25 +++ bin/msg/container.es | 22 +++ bin/msg/head.es | 63 +++++++ 8 files changed, 1046 insertions(+), 2 deletions(-) create mode 100755 bin/bootstrap.sh create mode 100644 bin/lib/base.lib create mode 100755 bin/lib/bootstrap.lib create mode 100755 bin/lib/console.lib create mode 100644 bin/msg/bootstrap.es create mode 100644 bin/msg/container.es create mode 100644 bin/msg/head.es diff --git a/README.md b/README.md index 64923f9..af5a581 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,22 @@ -# devs +# AMBIENTE LOCAL PARA DESARROLLADORES (MRDEVS TOOLS) +## GUÍA PARA DESARROLLADORES - REV. 30/11/2024 -Ambiente de Desarrollo \ No newline at end of file +### REQUISITOS DE INSTALACIÓN + +(Pendiente) + +### PREPARACIÓN DE AMBIENTE LOCAL PARA DESARROLLADORES + +#### Creación del área local de trabajo para desarrolladores + +En la carpeta $HOME descargue el repositorio devs (la carpeta no debe existir): + + $ cd $HOME + $ git clone https://git.rosero.one/mrosero/devs.git + +#### Instalación de herramientas para gestión de contenedores + +A partir de este momento, la carpeta $HOME/devs será nuestra área de desarrollo donde se descargaran los diversos ambientes de desarrollo. Como primer paso instalaremos las herramientas básicas y de gestión de contenedores. Por razones de seguridad, priorizamos el uso de **podman**. + + $ cd $HOME/devs + $ bin/bootstrap.sh diff --git a/bin/bootstrap.sh b/bin/bootstrap.sh new file mode 100755 index 0000000..1e25751 --- /dev/null +++ b/bin/bootstrap.sh @@ -0,0 +1,122 @@ +#!/bin/bash +# +# bootstrap.sh +# Modified: 2024/12/01 15:27:00 +# Derechos de Autor (C) [2024] [Mauro Rosero P. ] +# +# Este programa es software libre: usted puede redistribuirlo y/o modificarlo +# bajo los términos de la Licencia Pública Affero General de GNU tal como +# lo publica la Free Software Foundation, ya sea la versión 3 de la licencia, +# o (a su elección) cualquier versión posterior. +# +# Este programa se distribuye con la esperanza de que sea útil, +# pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de +# COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la +# Licencia Pública Affero General de GNU para obtener más detalles. +# +# Debería haber recibido una copia de la Licencia Pública Affero General +# junto con este programa. Si no la recibió, consulte . + +DEVSPATH=devs +BIN_HOME=$HOME/$DEVSPATH +BIN_MESG=bin/msg +BIN_LIBS=bin/lib + +# CHECK SHELL LANGUAGE +BIN_LANG=${LANG:0:2} + +# LOAD BASE BASH LIBRARY +source $BIN_HOME/$BIN_LIBS/base.lib +#baselib_test + +load_bootstrap_msg() { + + local BIN_PATH=$1 + local MSG_PATH=$2 + local LANGUAGE=$3 + + # Load head messages + load_messages $BIN_PATH $MSG_PATH $LANGUAGE "head" + + # Load bootstrap messages + load_messages $BIN_PATH $MSG_PATH $LANGUAGE "bootstrap" + +} + +install() { + local BIN_PATH=$1 + local LIBRARY=$2 + local MESSAGES=$3 + local INSTALL_LANG=$4 + + local PYTHON_PACKAGE=python3 + local GIT_PACKAGE=git + local CURL_PACKAGE=curl + local WGET_PACKAGE=wget + local DIALOG_PACKAGE=dialog + + # Load base bash library + source $BIN_PATH/$LIBRARY/base.lib + + # Load bootstrap bash library + source $BIN_PATH/$LIBRARY/bootstrap.lib + + # Load bootstrap messages + load_bootstrap_msg $BIN_PATH $MESSAGES $INSTALL_LANG + + # Install wget from OS Packages + command_installed $WGET_PACKAGE + if [ $? -ne 0 ] + then + os_pkgs_install $WGET_PACKAGE + fi + + # Install curl from OS Packages + command_installed $CURL_PACKAGE + if [ $? -ne 0 ] + then + os_pkgs_install $CURL_PACKAGE + fi + + # Install git from OS Packages + command_installed $GIT_PACKAGE + if [ $? -ne 0 ] + then + os_pkgs_install $GIT_PACKAGE + fi + + # Install dialog from OS Packages + command_installed $DIALOG_PACKAGE + if [ $? -ne 0 ] + then + os_pkgs_install $DIALOG_PACKAGE + fi + + # Install python from OS Packages + command_installed $PYTHON_PACKAGE + if [ $? -ne 0 ] + then + python3_install + fi + + # Check for container management installed and install podman + container_mode + if [ $? -eq 255 ] + then + # Install podman + podman_install + elif [ $? -eq 1 ] + then + echo "$domsg_005" + fi + +} + +# Load messages +load_bootstrap_msg $BIN_HOME $BIN_MESG $BIN_LANG + +# Display Headers +display_devstools_header "- $bomsg_000" + +# Run install with sudo +sudo bash -c "$(declare -f load_bootstrap_msg; declare -f install); install $BIN_HOME $BIN_LIBS $BIN_MESG $BIN_LANG" diff --git a/bin/lib/base.lib b/bin/lib/base.lib new file mode 100644 index 0000000..f27ce36 --- /dev/null +++ b/bin/lib/base.lib @@ -0,0 +1,337 @@ +#!/bin/bash +# +# Library: base.lib +# Modified: 2024/11/30 15:27:00 +# Derechos de Autor (C) [2024] [Mauro Rosero P. ] +# +# Este programa es software libre: usted puede redistribuirlo y/o modificarlo +# bajo los términos de la Licencia Pública Affero General de GNU tal como +# lo publica la Free Software Foundation, ya sea la versión 3 de la licencia, +# o (a su elección) cualquier versión posterior. +# +# Este programa se distribuye con la esperanza de que sea útil, +# pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de +# COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la +# Licencia Pública Affero General de GNU para obtener más detalles. +# +# Debería haber recibido una copia de la Licencia Pública Affero General +# junto con este programa. Si no la recibió, consulte . + +DEVS_NAME=config/project.head +GIT_IGNORE=.gitignore + +DOCKER_LOCAL=dockerfile.local +DOCKER_BASE=dockerfile.base +DOCKER_SAAS=dockerfile.saas +DOCKER_BUILD=build +DOCKER_FILE=Dockerfile +DOCKER_ENTRY=entrypoint.sh + +# Test library +function baselib_test() { + echo "Base Library loaded!" + exit 1 +} + +# Load messages +function load_messages() { + local BIN_PATH=$1 + local MSG_PATH=$2 + local LANGUAGE=$3 + local MSG_FILE=$4 + + if [ -f $BIN_PATH/$MSG_PATH/$MSG_FILE.$LANGUAGE ] + then + source $BIN_PATH/$MSG_PATH/$MSG_FILE.$LANGUAGE + else + source $BIN_PATH/$MSG_PATH/$MSG_FILE.es + fi +} + +# Display developers tools header +function display_devstools_header() { + local tittle=$1 + + clear + echo "$head_000 $head_002 $tittle" + echo "============================================================" +} + +# Display text header apps +function display_text_header() { + local PROJECT=$1 + local tittle=$2 + + clear + echo "$(cat < $PROJECT/config/project.head) $tittle" + echo "============================================================" +} + +# Verify if your program or command is installed +function command_installed() { + local PROGRAM=$1 + + if command -v $PROGRAM &> /dev/null; then + return 0 + fi + + # No program or command is installed + return 1 +} + +# Install os packages +function os_pkgs_install() { + + local PACKAGE=$1 + + echo "${pkg_install_begin} ${PACKAGE}" + if [ "$(uname)" == "Darwin" ]; then + # En macOS, a través de Homebrew + /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + brew install $PACKAGE + elif [ -f /etc/debian_version ] || [ -f /etc/os-release ]; then + # En sistemas Debian y derivados, a través de apt + apt update + apt install -y $PACKAGE + elif [ -f /etc/redhat-release ]; then + # En sistemas Red Hat y derivados, a través de dnf + dnf install -y $PACKAGE + elif [ -f /etc/arch-release ]; then + # En Arch Linux, a través de pacman + pacman -Sy --noconfirm $PACKAGE + elif [ -f /etc/rc.conf ]; then + # En BSD, a través de pkg + pkg install -y $PACKAGE + else + echo "${os_nofound}" + exit 1 + fi + echo "${pkg_install_success} ${PACKAGE}" + +} + +# Update or upgrade OS Packages +function os_update() { + + if [ "$(uname)" == "Darwin" ]; then + echo "$os_update (BREW)" + brew upgrade + elif [ -f /etc/debian_version ] || [ -f /etc/os-release ]; then + echo "$os_update (APT)" + apt update && apt upgrade -y + elif [ -f /etc/redhat-release ]; then + echo "$os_update (DNF)" + dnf update -y + elif [ -f /etc/arch-release ]; then + echo "$os_update (PACMAN)" + pacman -Syu + elif [ -f /etc/rc.conf ]; then + echo "$os_update (PKG)" + pkg update && pkg upgrade + else + echo "${os_nofound}" + exit 1 + fi + +} + +# Check for container manager installed +function container_mode() { + + command_installed "podman" + if [ $? -eq 0 ] + then + return 0 + else + command_installed "docker" + if [ $? -eq 0 ] + then + return 1 + fi + fi + + # Exit with code 255 if not docker or podman installed + return 255 + +} + +# Git init repository +function git_init() { + + local REPO_PATH=$1 + local BRANCH=$2 + + git init "$REPO_PATH" -b $BRANCH + return $? + +} + +# Git add tracked files to repository +function git_add_full() { + + local REPO_PATH=$1 + + cd $REPO_PATH + if [ $? -eq 0 ]; then + git add . + return $? + else + return 255 + fi + +} + +# Git add tracked files to repository +function git_commit() { + + local REPO_PATH=$1 + local GIT_MESSAGES=$2 + + cd $REPO_PATH + if [ $? -eq 0 ]; then + git commit -m "$GIT_MESSAGES" + return $? + else + return 255 + fi + +} + +# Git new remote project repository +function git_new_project() { + + local REPO_PATH=$1 + local REMOTE_PATH=$2 + local GIT_PROJECT=$3 + local BRANCH=$4 + + local REPO_REMOTE=$(printf "$REMOTE_PATH" "${GIT_PROJECT}") + echo "$REPO_REMOTE" + + if [ -d $REPO_PATH ] + then + cd $REPO_PATH + if [ $? -eq 0 ]; then + git remote add origin $REPO_REMOTE + if [ $? -eq 0 ]; then + git checkout $BRANCH + if [ $? -eq 0 ]; then + git push --set-upstream origin $BRANCH + return $? + else + return 254 + fi + fi + fi + fi + + return 255 + +} + +# Git clone repository +function git_clone_pull() { + + local REPO_PATH=$1 + local REPO_REMOTE=$2 + local APPS=$3 + local BRANCH=$4 + + if [ ! -d $REPO_PATH/$APPS ] + then + cd $REPO_PATH + if [ $? -eq 0 ]; then + git clone $REPO_REMOTE -b $BRANCH $APPS + return $? + else + return 255 + fi + else + cd $REPO_PATH/$APPS + if [ $? -eq 0 ]; then + git pull + return $? + else + return 255 + fi + fi +} + +# Check for valid os system +function get_osname() { + + if [ "$(uname)" == "Darwin" ]; then + # En macOS, instalamos o actualizamos a través de Homebrew + os_name=$(sw_vers -productVersion | awk -F '.' '{print "macOS " $1 "." $2}') + elif [ -f /etc/debian_version ] || [ -f /etc/os-release ]; then + # En sistemas Debian y derivados, instalamos o actualizamos a través de apt + os_name=$(grep "^ID_LIKE=" /etc/os-release | cut -d= -f2) + if grep -qi "${head_ubuntu}" /etc/os-release + then + os_name="${head_ubuntu}" + fi + elif [ -f /etc/redhat-release ]; then + # En sistemas Red Hat, instalamos o actualizamos a través de dnf + os_name=$(awk '{print $1}' /etc/redhat-release) + elif [ -f /etc/arch-release ]; then + # En Arch Linux, instalamos o actualizamos a través de pacman + os_name=$(grep '^NAME=' /etc/os-release | awk -F '"' '{print $2}') + elif [ -f /etc/rc.conf ]; then + # En BSD, instalamos o actualizamos a través de pkg + os_name=$(awk '{print $2}' /etc/version | awk -F '-' '{print $1}') + else + os_name="${head_unknow}" + fi + +} + +function docker_build() { + + local CONTAINER=$1 + local BASE_IMAGE=$2 + + docker build ./build -t ${CONTAINER} --build-arg BASE_IMAGE=${BASE_IMAGE} + return $? + +} + +function podman_build() { + + local CONTAINER=$1 + local BASE_IMAGE=$2 + + local registry_path=~/.config/containers + + if [ ! -d ${registry_path} ] + then + mkdir ${registry_path} + fi + + echo 'unqualified-search-registries = ["docker.io"]' > "${registry_path}/registries.conf" + podman build ./build -t ${CONTAINER} --format docker --build-arg BASE_IMAGE=${BASE_IMAGE} + return $? + +} + +function build_container() { + + local CONTAINER=$1 + local BASE_IMAGE=$2 + + # Verificar si Docker está instalado + if command -v docker &> /dev/null + then + docker_build "$CONTAINER" "$BASE_IMAGE" + return $? + fi + + # Verificar si Podman está instalado + if command -v podman &> /dev/null + then + podman_build "$CONTAINER" "$BASE_IMAGE" + return $? + fi + + return 1 + +} diff --git a/bin/lib/bootstrap.lib b/bin/lib/bootstrap.lib new file mode 100755 index 0000000..1305100 --- /dev/null +++ b/bin/lib/bootstrap.lib @@ -0,0 +1,78 @@ +#!/bin/bash +# +# Library: $HOME/devs/bin/lib/bootstrap.lib +# Modified: 2024/11/30 15:27:00 +# Derechos de Autor (C) [2024] [Mauro Rosero P. ] +# +# Este programa es software libre: usted puede redistribuirlo y/o modificarlo +# bajo los términos de la Licencia Pública Affero General de GNU tal como +# lo publica la Free Software Foundation, ya sea la versión 3 de la licencia, +# o (a su elección) cualquier versión posterior. +# +# Este programa se distribuye con la esperanza de que sea útil, +# pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de +# COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la +# Licencia Pública Affero General de GNU para obtener más detalles. +# +# Debería haber recibido una copia de la Licencia Pública Affero General +# junto con este programa. Si no la recibió, consulte . + +# Install python3 package +function python3_install() { + + echo "${pymsg_001}" + if [ "$(uname)" == "Darwin" ]; then + # En macOS, instalamos o actualizamos Python a través de Homebrew + /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + brew install python python-pip + elif [ -f /etc/debian_version ] || [ -f /etc/os-release ]; then + # En sistemas Debian y derivados, instalamos o actualizamos Python a través de apt + apt update + apt install -y python3 python3-pip + elif [ -f /etc/redhat-release ]; then + # En sistemas Red Hat, instalamos o actualizamos Python a través de yum + dnf install -y python3 python3-pip + elif [ -f /etc/arch-release ]; then + # En Arch Linux, instalamos o actualizamos Python a través de pacman + pacman -Sy --noconfirm python + elif [ -f /etc/rc.conf ]; then + # En BSD, instalamos o actualizamos Python a través de pkg + pkg install -y python3 python3-pip + else + echo "${os_nofound}" + exit 1 + fi + echo "${pymsg_003}" + +} + +# Install podman package +function podman_install() { + + echo "${pdmsg_001}" + if [ "$(uname)" == "Darwin" ]; then + # En macOS, instalamos o actualizamos Python a través de Homebrew + /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + brew tap containers/podman + brew install podman + elif [ -f /etc/debian_version ] || [ -f /etc/os-release ]; then + # En sistemas Debian y derivados, instalamos o actualizamos Python a través de apt + apt update + apt install -y podman podman-compose + elif [ -f /etc/redhat-release ]; then + # En sistemas Red Hat, instalamos o actualizamos Python a través de dnf + dnf install -y epel-release + dnf install -y podman podman-compose + elif [ -f /etc/arch-release ]; then + # En Arch Linux, instalamos o actualizamos Python a través de pacman + pacman -Sy --noconfirm podman podman-compose fuse-overlayfs + elif [ -f /etc/rc.conf ]; then + # En BSD, instalamos o actualizamos Python a través de pkg + pkg install -y podman-suite + else + echo "${os_nofound}" + exit 1 + fi + echo "${pdmsg_003}" + +} diff --git a/bin/lib/console.lib b/bin/lib/console.lib new file mode 100755 index 0000000..d4b1c13 --- /dev/null +++ b/bin/lib/console.lib @@ -0,0 +1,378 @@ +#!/bin/bash +# +# Library: console.lib +# Modified: 2024/12/04 12:27:00 +# Derechos de Autor (C) [2024] [Mauro Rosero P. ] +# +# Este programa es software libre: usted puede redistribuirlo y/o modificarlo +# bajo los términos de la Licencia Pública Affero General de GNU tal como +# lo publica la Free Software Foundation, ya sea la versión 3 de la licencia, +# o (a su elección) cualquier versión posterior. +# +# Este programa se distribuye con la esperanza de que sea útil, +# pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de +# COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la +# Licencia Pública Affero General de GNU para obtener más detalles. +# +# Debería haber recibido una copia de la Licencia Pública Affero General +# junto con este programa. Si no la recibió, consulte . + +# Global Default Variables +CWIDTH=70 +CROWS=8 +CX=4 +CY=2 + +# Test console library +function consolelib_test() { + echo "Console Library loaded!" +} + +# Dialog Yes/No Question +function dialog_yesno() { + + local label="$1" + local rows="${2:-$CROWS}" + local width="${3:-$CWIDTH}" + + dialog --keep-window --begin ${CX} ${CY} --colors --no-shadow --backtitle "${title}" --title "${apps_title}" --yesno "\n${label}" ${rows} ${width} + result=$? + + return ${result} + +} + +# Dialog Input Box +function dialog_input_box() { + + local label="$1" + local helper="$2" + local v_default="$3" + local rows="${4:-$CROWS}" + local width="${5:-$CWIDTH}" + + exec 3>&1; + value=$(dialog --keep-window --begin ${CX} ${CY} --colors --no-shadow --backtitle "${title}" --title "${apps_title}" --inputbox "\n${label}\n${helper}" ${rows} ${width} "${v_default}" 2>&1 1>&3); + codex=$?; + exec 3>&-; + + return ${codex} + +} + +# Dialog Password Box +function dialog_input_pass(){ + + local label="$1" + local helper="$2" + local v_default="$3" + local rows="${4:-$CROWS}" + local width="${5:-$CWIDTH}" + + exec 3>&1; + value=$(dialog --keep-window --begin ${CX} ${CY} --colors --no-shadow --backtitle "${title}" --title "${apps_title}" --passwordbox "\n${label}\n${helper}" ${rows} ${width} "${v_default}" 2>&1 1>&3); + codex=$?; + exec 3>&-; + + return ${codex} + +} + +# Dialog Radio List +function dialog_input_radio() { + + local label="$1" + local helper="$2" + local options="$3" + local rows="${4:-$CROWS}" + local width="${5:-$CWIDTH}" + + # Calcular el número de elementos + local elements=$(echo "$options" | awk '{print NF/3 + 1}') + ((rows += elements)) + + exec 3>&1; + value=$(dialog --keep-window --begin ${CX} ${CY} --colors --no-shadow --backtitle "${title}" --title "${apps_title}" --radiolist "\n${label}\n${helper}" ${rows} ${width} ${elements} ${options} 2>&1 1>&3) + codex=$? + exec 3>&-; + + return ${codex} + +} + +# Dialog Menu Select +function dialog_input_menu() { + + local label="$1" + local helper="$2" + local options="$3" + local rows="${4:-$CROWS}" + local width="${5:-$CWIDTH}" + + # Calcular el número de elementos + local elements=$(echo "$options" | awk '{print NF/2 + 1}') + ((rows += elements)) + + exec 3>&1; + value=$(dialog --keep-window --begin ${CX} ${CY} --colors --no-shadow --backtitle "${title}" --title "${apps_title}" --menu "\n${label}\n${helper}" ${rows} ${width} ${elements} ${options} 2>&1 1>&3) + codex=$? + exec 3>&-; + + return ${codex} + +} + +# Dialog Select File Box Input +function dialog_input_filepath() { + + local valid_file="0" + local file_path=$1 + + while [ "$valid_file" == "0" ] + do + exec 3>&1; + result=$(dialog --begin 2 2 --title "${apps_title} - $2" --backtitle "${title}" --fselect ${file_path} 7 0 2>&1 1>&3); + exitcode=$?; + exec 3>&-; + if [ "$exitcode" == "0" ] + then + if [ -f "$result" ] + then + file_path=${result} + valid_file="1" + fi + else + valid_file="2" + fi + done + +} + +# Dialog Error Box +function dialog_error_box() { + + local msgtype="$1" + local message="$2" + + # Redirigir la salida de error al descriptor de archivo 3 + exec 3>&1; + + # Mostrar el cuadro de diálogo + dialog --backtitle "${title}" --title "${msgtype} - ${apps_title}" --msgbox "\n${message}" 8 ${CWIDTH} + #dialog --and-widget --msgbox "\n${message}" + + exec 3>&-; + +} + +# Dialog Validation for input +function dialog_validate_input() { + + local value="$2" + local label="$3" + local valid_data="$4" + + local email_regex='^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$' + local gpg_duration_regex="^[0-9]+([dmy])?$" + local domain_regex="^(([a-zA-Z]{1})|([a-zA-Z]{1}[a-zA-Z]{1})|([a-zA-Z]{1}[0-9]{1})|([0-9]{1}[a-zA-Z]{1})|([a-zA-Z0-9]+[a-zA-Z0-9-]*[a-zA-Z0-9]+))(\.([a-zA-Z]{2,})){1,}$" + + # Verificar si se proporcionó un argumento + if [ $# -ne 0 ]; then + # Convertir el argumento en un array + arr=($1) + + # Iterar sobre el array y llamar a process_element para cada elemento + for vcode in "${arr[@]}" + do + case ${vcode} in + 000) + return 0 + ;; + 001) + if [ -z "${value}" ] + then + dialog_error_box "${head_error}" "${label} ${vldt_001}" + return 1 + fi + ;; + 010) + if [[ ! "${value}" =~ ${email_regex} ]] + then + dialog_error_box "${head_error}" "${vldt_010}" + return 1 + fi + ;; + 011) + if [[ ! "${value}" =~ ${gpg_duration_regex} ]] + then + dialog_error_box "${head_error}" "${vldt_011}" + return 1 + fi + ;; + 012) + if [[ ! "${value}" =~ ${domain_regex} ]] + then + dialog_error_box "${head_error}" "${vldt_012}" + return 1 + fi + ;; + 013) + local -a elements=(${valid_data}) + for item in "${elements[@]}" + do + if [[ "$item" == "$value" ]] + then + return 0 + fi + done + dialog_error_box "${head_error}" "${vldt_013} ${valid_data}" + return 1 + ;; + 014) + local -a rangos=($valid_data) + if [ $((value)) -ge ${rangos[0]} ] && [ $((value)) -le ${rangos[0]} ] + then + return 0 + fi + dialog_error_box "${head_error}" "${vldt_014} ${rangos[0]} y ${rangos[1]}" + return 1 + ;; + esac + done + fi + + return 0 + +} + +# Dialog data input form +function dialog_form() { + + # Ciclo de captura de datos + clear + control=0 + while [ ${control} -lt ${c_end} ] + do + case ${c_mod[control]} in + 1) + dialog_input_box "[${control}] ${c_lbl[control]}" "${c_hlp[control]}" "${c_def[control]}" + if [ ${codex} -eq 0 ] + then + dialog_validate_input "${c_val[control]}" "${value}" "${c_lbl[control]}" "${c_dat[control]}" + if [ $? -eq 0 ] + then + response[control]="${value}" + ((control++)) + fi + else + case ${codex} in + 1) + if [ ${control} -gt 0 ] + then + ((control--)) + else + control=${c_end} + return 1 + fi + ;; + 255) + return 1 + control=${c_end} + ;; + esac + fi + ;; + 2) + dialog_input_pass "[${control}] ${c_lbl[control]}" "${c_hlp[control]}" + if [ ${codex} -eq 0 ] + then + response[control]="${value}" + dialog_input_pass "[${control}] ${c_lbl[control]} ${head_confirm}" "${c_hlp[control]}" + if [ ${codex} -eq 0 ] + then + if [ "${response[control]}" == "${value}" ] && [ ! -z "${response[control]}" ] + then + ((control++)) + sleep 1 + else + dialog_error_box "${head_error}" "${vldt_002}" + fi + else + if [ ${codex} -eq 255 ] + then + control=${c_end} + return 1 + fi + fi + else + case ${codex} in + 1) + if [ ${control} -gt 0 ] + then + ((control--)) + else + control=${c_end} + return 1 + fi + ;; + 255) + return 1 + control=${c_end} + ;; + esac + fi + ;; + 3) + dialog_input_radio "[${control}] ${c_lbl[control]}" "${c_hlp[control]}" "${c_opt[control]}" + if [ ${codex} -eq 0 ] + then + response[control]="${value}" + ((control++)) + else + case ${codex} in + 1) + if [ ${control} -gt 0 ] + then + ((control--)) + else + control=${c_end} + return 1 + fi + ;; + 255) + return 1 + control=${c_end} + ;; + esac + fi + ;; + 4) + dialog_input_menu "[${control}] ${c_lbl[control]}" "${c_hlp[control]}" "${c_opt[control]}" + if [ ${codex} -eq 0 ] + then + response[control]="${value}" + ((control++)) + else + case ${codex} in + 1) + if [ ${control} -gt 0 ] + then + ((control--)) + else + control=${c_end} + return 1 + fi + ;; + 255) + return 1 + control=${c_end} + ;; + esac + fi + ;; + esac + done + + return 0 + +} diff --git a/bin/msg/bootstrap.es b/bin/msg/bootstrap.es new file mode 100644 index 0000000..2b85f16 --- /dev/null +++ b/bin/msg/bootstrap.es @@ -0,0 +1,25 @@ +#!/usr/bin/env bash +#bash script : bootstrap.es +#apps : Personal Developer Utilities +#description : Bootstrap Translate Messages (es) +#author : MRP/mrp - Mauro Rosero P. +#company email : mauro@rosero.one +#personal email : mauro.rosero@gmail.com +#date : 20240201 +#version : 1.0.2 +#notes : +#============================================================================== +#============================================================================== + +bomsg_000="BOOTSTRAP" + +pymsg_001="Instalando python3" +pymsg_002="Instalando dialog" + +pymsg_003="Python3 instalado satisfactoriamente" +pymsg_004="Dialog instalado satisfactoriamente" + +pdmsg_001="Instalando Podman..." +pdmsg_003="Podman fue instalado satisfactoriamente" + +domsg_005="----> Docker previamente instalado, desinstale para poder instalar PODMAN o utilice DOCKER" diff --git a/bin/msg/container.es b/bin/msg/container.es new file mode 100644 index 0000000..393abb6 --- /dev/null +++ b/bin/msg/container.es @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +#bash script : container.es +#apps : Podman/Docker Container Developer Utilities +#description : Container Translate Messages (es) +#author : MRP/mrp - Mauro Rosero P. +#company email : mauro@rosero.one +#personal email : mauro.rosero@gmail.com +#date : 20241130 +#version : 1.0.2 +#notes : +#============================================================================== +#============================================================================== + + +comsg_003_1="Uso:" +comsg_003_2="[--help] [--version]" +comsg_004="Descripción: Este script debe estar en la carpeta raíz de su proyecto." +comsg_005="Opciones:" +comsg_006=" --help Muestra este mensaje de ayuda." +comsg_007=" --version Muestra la versión del script." + +comsg_101="BUILD CONTAINER" diff --git a/bin/msg/head.es b/bin/msg/head.es new file mode 100644 index 0000000..2f4fa1f --- /dev/null +++ b/bin/msg/head.es @@ -0,0 +1,63 @@ +#!/usr/bin/env bash +#bash script : head.es +#apps : MRosero Personal Developer Utilities +#description : Head Translate Messages (es) +#author : MRP/mrp - Mauro Rosero P. +#company email : mauro@rosero.one +#personal email : mauro.rosero@gmail.com +#date : 20240201 +#version : 1.0.2 +#notes : +#============================================================================== +#============================================================================== + +head_000="AMBIENTE DE DESARROLLO" +head_002="(MRDEVS TOOLS)" +head_001="El comando 'dialog' no está instalado. Por favor, ejecute bin/bootstrap.sh." +head_installing="Instalando" +head_info="INFO" +head_warning="ADVERTENCIA" +head_error="ERROR" +head_unknow="UNKNOW" +head_version="Versión" +head_ubuntu="ubuntu" +head_confirm="(confirmar)" +head_os_error="Operación Cancelada. No se pudo determinar el sistema operativo." +head_op_error="Operación cancelada por el operador!" +head_pause="Presiona Enter para continuar..." +head_error_unknow="Operación Cancelada. Se produjo un error desconocido!" +head_fail="Fail" +head_exit="Finalizar" +head_create="Adicionar" +head_delete="Eliminar" +head_noproject="Esta carpeta no es un proyecto de desarrollo!" +head_noenv="Aún no se han configurado los parámetros del ambiente de desarrollo (.env)" +head_nobuild="No existe carpeta build para creación de contenedores" +head_nodockerfile="No existe el archivo de configuración Dockerfile" +head_nobuilded="No se pudo completar la construcción del contenedor" +head_builded="Construcción del contenedor completada!" + +head_container="Generando contenedor" +label_email="Correo Electrónico:" + +vldt_001="no puede estar en blanco..." +vldt_002="Contraseña incorrecta! Intente nuevamente." +vldt_010="Dirección de correo electrónico es inválida!" +vldt_011="Duración de clave gpg inválida!" +vldt_012="No es un nombre de dominio DNS válido!" +vldt_013="Valor debe ser alguno de estos:" +vldt_014="Valor no está dentro del rango válido:" +os_update="Actualizando sistema operativo " +os_nofound="Sistemas operativos soportados: Ubuntu, Debian, Arch Linux, Fedora, Redhat, AlmaLinux, Rocky, Oracle Linux, FreeBSD, MacOS" + +pkg_install_begin="Instalando paquete(s):" +pkg_install_success="Instalación satisfactoria de paquete(s):" + +git_initialized="Repositorio git inicializado!" +git_notinitialized="Repositorio git no fue inicializado!" +git_setbranch="Rama git ha sido creada" +git_gitignored="Archivo .gitignore generado a partir de plantilla" +git_add_files="Archivos base del proyecto agregados!" +git_first_commited="[INIT] Proyecto inicializado" +git_end_commited="Todos los cambios al repositorio nuevo han sido aplicados!" +git_new_project_pushed="Proyecto ha sido creado/actualizado en repositorio remoto"