- Añadida información sobre características adicionales del instalador - Detallada la solicitud de permisos de administrador - Clarificado el uso de interfaz gráfica y línea de comandos - Documentada la obtención automática de la última versión desde GitHub - Mencionada la limpieza de archivos de configuración residuales 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
298 lines
9.7 KiB
Bash
Executable file
298 lines
9.7 KiB
Bash
Executable file
#!/bin/bash
|
|
#Script : update.sh
|
|
#Apps : MRDEVS TOOLS
|
|
#Description : Actualiza pre-requisitos para MRDEVS TOOLS
|
|
#Author : Mauro Rosero Pérez
|
|
#Company Email : mauro@rosero.one
|
|
#Personal Email : mauro.rosero@gmail.com
|
|
#Created : 2024/12/09 10:27:00
|
|
#Modified : 2025/03/30 16:30:00
|
|
#Version : 1.3.0
|
|
#Use Notes :
|
|
#==============================================================================
|
|
# Derechos de Autor [2025] [Mauro Rosero P. <mauro@rosero.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/>.
|
|
|
|
# Configuración inicial
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
|
|
if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then
|
|
DEVSPATH=$(cat "$SCRIPT_DIR/config/devspath.dat")
|
|
else
|
|
DEVSPATH="devs"
|
|
fi
|
|
|
|
BIN_HOME="$HOME/$DEVSPATH"
|
|
BIN_BASE="bin"
|
|
BIN_LIBS="lib"
|
|
BIN_MESG="msg"
|
|
BIN_CFGS="config"
|
|
VERSION=$(cat "$SCRIPT_DIR/$BIN_CFGS/version")
|
|
|
|
# LOAD BASE BASH LIBRARY
|
|
source $SCRIPT_DIR/$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"
|
|
|
|
}
|
|
|
|
# Load messages
|
|
load_bootstrap_msg $SCRIPT_DIR $BIN_MESG $BIN_LANG
|
|
|
|
# Display Headers
|
|
display_devstools_header "- $bomsg_001"
|
|
|
|
# Run update devs environment
|
|
if [ "$PWD" == "$BIN_HOME" ]
|
|
then
|
|
git pull
|
|
else
|
|
cd $BIN_HOME
|
|
git pull
|
|
fi
|
|
|
|
# Load bootstrap library for update functions
|
|
source $SCRIPT_DIR/$BIN_LIBS/bootstrap.lib
|
|
|
|
# Update sistema operativo y repositorios primero (no requiere privilegios de root)
|
|
echo -e "\n${head_info}: Actualizando repositorios locales primero..."
|
|
|
|
# Función para actualizar Python y pip (requiere privilegios de superusuario)
|
|
update_python_and_pip() {
|
|
local BIN_PATH=$1
|
|
local LIBRARY=$2
|
|
local MESSAGES=$3
|
|
local UPDATE_LANG=$4
|
|
|
|
# No necesitamos cargar bootstrap.lib, ya que tenemos las funciones definidas internamente
|
|
|
|
# Definiciones internas para no depender de fuentes externas
|
|
function python3_update() {
|
|
echo "Actualizando Python..."
|
|
|
|
if [ "$(uname)" == "Darwin" ]; then
|
|
# En macOS, actualizamos Python a través de Homebrew
|
|
brew upgrade python
|
|
elif [ -f /etc/debian_version ] || [ -f /etc/os-release ]; then
|
|
# En sistemas Debian y derivados
|
|
apt update
|
|
apt install --only-upgrade -y python3-full
|
|
elif [ -f /etc/redhat-release ]; then
|
|
# En sistemas Red Hat
|
|
dnf upgrade -y python3
|
|
elif [ -f /etc/arch-release ]; then
|
|
# En Arch Linux
|
|
pacman -Syu --noconfirm python
|
|
elif [ -f /etc/rc.conf ]; then
|
|
# En BSD
|
|
pkg upgrade -y python3
|
|
else
|
|
echo "Sistema operativo no soportado"
|
|
return 1
|
|
fi
|
|
|
|
echo "Python actualizado correctamente."
|
|
return 0
|
|
}
|
|
|
|
function pip_update() {
|
|
echo "Actualizando pip..."
|
|
|
|
# Actualizar pip usando el método adecuado según el sistema operativo
|
|
if [ "$(uname)" == "Darwin" ]; then
|
|
# En macOS, actualizamos pip a través de Homebrew
|
|
brew upgrade python-pip
|
|
elif [ -f /etc/debian_version ] || [ -f /etc/os-release ]; then
|
|
# En sistemas Debian y derivados
|
|
apt update
|
|
apt install --only-upgrade -y python3-pip
|
|
# También actualizar usando el propio pip
|
|
python3 -m pip install --upgrade pip
|
|
elif [ -f /etc/redhat-release ]; then
|
|
# En sistemas Red Hat
|
|
dnf upgrade -y python3-pip
|
|
# También actualizar usando el propio pip
|
|
python3 -m pip install --upgrade pip
|
|
elif [ -f /etc/arch-release ]; then
|
|
# En Arch Linux
|
|
pacman -Syu --noconfirm python-pip
|
|
elif [ -f /etc/rc.conf ]; then
|
|
# En BSD
|
|
pkg upgrade -y python3-pip
|
|
# También actualizar usando el propio pip
|
|
python3 -m pip install --upgrade pip
|
|
else
|
|
echo "Sistema operativo no soportado"
|
|
return 1
|
|
fi
|
|
|
|
echo "Pip actualizado correctamente."
|
|
return 0
|
|
}
|
|
|
|
echo -e "\n${head_info}: Actualizando Python y pip..."
|
|
|
|
# Update Python - asegurándonos de que python3-full esté instalado
|
|
command_installed python3-full
|
|
PYTHON_FULL_INSTALLED=$?
|
|
|
|
command_installed python3
|
|
PYTHON_BASIC_INSTALLED=$?
|
|
|
|
if [ $PYTHON_FULL_INSTALLED -eq 0 ]; then
|
|
# Si python3-full está instalado, actualízalo
|
|
python3_update
|
|
elif [ $PYTHON_BASIC_INSTALLED -eq 0 ]; then
|
|
# Si solo python3 básico está instalado, instala la versión completa
|
|
echo -e "\n${head_info}: Actualizando a la versión completa de Python..."
|
|
if [ -f /etc/debian_version ] || [ -f /etc/os-release ]; then
|
|
apt update
|
|
apt install -y python3-full
|
|
else
|
|
python3_update
|
|
fi
|
|
else
|
|
echo -e "\n${head_error}: Python3 no está instalado. Ejecute bin/bootstrap.sh primero."
|
|
fi
|
|
|
|
# Update pip separately
|
|
command_installed pip3
|
|
if [ $? -eq 0 ]; then
|
|
pip_update
|
|
else
|
|
echo -e "\n${head_error}: pip3 no está instalado. Ejecute bin/bootstrap.sh primero."
|
|
echo -e "Esta dependencia es necesaria para varias herramientas del sistema."
|
|
fi
|
|
|
|
# Update pipx separately
|
|
command_installed pipx
|
|
if [ $? -eq 0 ]; then
|
|
# Función interna para actualizar pipx
|
|
function pipx_update_internal() {
|
|
echo "Actualizando pipx..."
|
|
|
|
if [ "$(uname)" == "Darwin" ]; then
|
|
# En macOS, actualizamos pipx a través de Homebrew
|
|
brew upgrade pipx
|
|
else
|
|
# En otros sistemas, actualizamos pipx a través de pip
|
|
python3 -m pip install --user --upgrade pipx
|
|
fi
|
|
|
|
echo "pipx actualizado correctamente."
|
|
}
|
|
|
|
pipx_update_internal
|
|
else
|
|
echo -e "\n${head_error}: pipx no está instalado. Ejecute bin/bootstrap.sh primero."
|
|
fi
|
|
|
|
echo -e "\n${head_info}: Actualización de Python, pip y pipx completada."
|
|
}
|
|
|
|
# Verificar si Python, pip o pipx están instalados y si se necesitan actualizar
|
|
command_installed python3
|
|
PYTHON_INSTALLED=$?
|
|
|
|
command_installed pip3
|
|
PIP_INSTALLED=$?
|
|
|
|
command_installed pipx
|
|
PIPX_INSTALLED=$?
|
|
|
|
# Si cualquiera de ellos está instalado, necesitamos actualizar con privilegios de superusuario
|
|
if [ $PYTHON_INSTALLED -eq 0 ] || [ $PIP_INSTALLED -eq 0 ] || [ $PIPX_INSTALLED -eq 0 ]; then
|
|
# Ejecutar la actualización de Python, pip y pipx con sudo
|
|
echo -e "\n${head_info}: Se necesitan privilegios de administrador para actualizar Python, pip y pipx..."
|
|
|
|
# Exportar todas las funciones necesarias para que estén disponibles en el subproceso sudo
|
|
# Esto incluye command_installed y otras funciones de base.lib que se necesitan
|
|
sudo bash -c "$(declare -f command_installed; declare -f update_python_and_pip); update_python_and_pip $SCRIPT_DIR $BIN_LIBS $BIN_MESG $BIN_LANG"
|
|
if [ $? -ne 0 ]; then
|
|
echo -e "\n${head_error}: No se pudo actualizar Python, pip y pipx. Verifique sus privilegios."
|
|
fi
|
|
else
|
|
echo -e "\n${head_info}: No se detectaron Python, pip ni pipx instalados. No hay actualizaciones que realizar."
|
|
echo -e "Para instalar estas dependencias, ejecute bin/bootstrap.sh primero."
|
|
fi
|
|
|
|
# Actualizar herramientas adicionales si están instaladas
|
|
update_additional_tools() {
|
|
local BIN_PATH=$1
|
|
local LIBRARY=$2
|
|
local MESSAGES=$3
|
|
local UPDATE_LANG=$4
|
|
|
|
# Cargar biblioteca bootstrap para acceder a las funciones de instalación
|
|
source "$BIN_PATH/$LIBRARY/bootstrap.lib"
|
|
|
|
# Actualizar oathtool si está instalado
|
|
command_installed oathtool
|
|
if [ $? -eq 0 ]; then
|
|
echo -e "\n${head_info}: Actualizando oathtool..."
|
|
oathtool_install
|
|
echo -e "${head_info}: oathtool actualizado correctamente."
|
|
fi
|
|
|
|
# Actualizar zbar si está instalado
|
|
command_installed zbar-tools
|
|
if [ $? -eq 0 ]; then
|
|
echo -e "\n${head_info}: Actualizando zbar..."
|
|
zbar_install
|
|
echo -e "${head_info}: zbar actualizado correctamente."
|
|
fi
|
|
|
|
# Actualizar redis-cli si está instalado
|
|
command_installed redis-cli
|
|
if [ $? -eq 0 ]; then
|
|
echo -e "\n${head_info}: Actualizando redis-cli..."
|
|
if [ -f /etc/debian_version ] || [ -f /etc/os-release ]; then
|
|
# Para sistemas basados en Debian
|
|
apt update
|
|
apt install --only-upgrade -y redis-tools
|
|
elif [ -f /etc/redhat-release ]; then
|
|
# Para sistemas basados en Red Hat
|
|
dnf upgrade -y redis
|
|
elif [ -f /etc/arch-release ]; then
|
|
# Para Arch Linux
|
|
pacman -Syu --noconfirm redis
|
|
elif [ "$(uname)" == "Darwin" ]; then
|
|
# Para macOS con Homebrew
|
|
brew upgrade redis
|
|
else
|
|
echo -e "${head_error}: Sistema operativo no soportado para actualizar redis-cli"
|
|
fi
|
|
echo -e "${head_info}: redis-cli actualizado correctamente."
|
|
fi
|
|
}
|
|
|
|
# Actualizar herramientas adicionales con sudo si están instaladas
|
|
echo -e "\n${head_info}: Verificando herramientas adicionales..."
|
|
sudo bash -c "$(declare -f command_installed; declare -f update_additional_tools); update_additional_tools $SCRIPT_DIR $BIN_LIBS $BIN_MESG $BIN_LANG"
|
|
|
|
echo -e "\n${head_info}: Proceso de actualización completado."
|
|
|