[IMPROVED] bootstrap.sh - Instalar herramientas base y podman
This commit is contained in:
parent
e59aec4a57
commit
b86ad06bb9
8 changed files with 1046 additions and 2 deletions
23
README.md
23
README.md
|
@ -1,3 +1,22 @@
|
||||||
# devs
|
# AMBIENTE LOCAL PARA DESARROLLADORES (MRDEVS TOOLS)
|
||||||
|
## GUÍA PARA DESARROLLADORES - REV. 30/11/2024
|
||||||
|
|
||||||
Ambiente de Desarrollo
|
### 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
|
||||||
|
|
122
bin/bootstrap.sh
Executable file
122
bin/bootstrap.sh
Executable file
|
@ -0,0 +1,122 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# bootstrap.sh
|
||||||
|
# Modified: 2024/12/01 15:27:00
|
||||||
|
# Derechos de Autor (C) [2024] [Mauro Rosero P. <mauro@roser.one>]
|
||||||
|
#
|
||||||
|
# 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 <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
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"
|
337
bin/lib/base.lib
Normal file
337
bin/lib/base.lib
Normal file
|
@ -0,0 +1,337 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Library: base.lib
|
||||||
|
# Modified: 2024/11/30 15:27:00
|
||||||
|
# Derechos de Autor (C) [2024] [Mauro Rosero P. <mauro@roser.one>]
|
||||||
|
#
|
||||||
|
# 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 <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
}
|
78
bin/lib/bootstrap.lib
Executable file
78
bin/lib/bootstrap.lib
Executable file
|
@ -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. <mauro@roser.one>]
|
||||||
|
#
|
||||||
|
# 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 <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# 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}"
|
||||||
|
|
||||||
|
}
|
378
bin/lib/console.lib
Executable file
378
bin/lib/console.lib
Executable file
|
@ -0,0 +1,378 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Library: console.lib
|
||||||
|
# Modified: 2024/12/04 12:27:00
|
||||||
|
# Derechos de Autor (C) [2024] [Mauro Rosero P. <mauro@roser.one>]
|
||||||
|
#
|
||||||
|
# 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 <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
}
|
25
bin/msg/bootstrap.es
Normal file
25
bin/msg/bootstrap.es
Normal file
|
@ -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"
|
22
bin/msg/container.es
Normal file
22
bin/msg/container.es
Normal file
|
@ -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"
|
63
bin/msg/head.es
Normal file
63
bin/msg/head.es
Normal file
|
@ -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"
|
Loading…
Reference in a new issue