devs/bin/update.sh
Mauro Rosero P. 5cab3913d8
[FIXED] Corregir escalamiento de privilegios para actualización de paquetes
- Adoptar el enfoque de bootstrap.sh para la elevación de privilegios
- Encapsular la actualización de Python y pip en una función dedicada
- Usar sudo con bash -c para pasar funciones y variables correctamente
- Mejorar mensajes y flujo de ejecución en el script update.sh

🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-12 09:27:23 -05:00

120 lines
3.6 KiB
Bash
Executable file

#!/bin/bash
#
# update.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"
}
# Load messages
load_bootstrap_msg $BIN_HOME $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 $BIN_HOME/$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
# Cargar biblioteca bootstrap
source $BIN_PATH/$LIBRARY/bootstrap.lib
echo -e "\n${head_info}: Actualizando Python y pip..."
# Update Python
command_installed python3
if [ $? -eq 0 ]; then
python3_update
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
echo -e "\n${head_info}: Actualización de Python y pip completada."
}
# Verificar si Python o pip están instalados y si se necesitan actualizar
command_installed python3
PYTHON_INSTALLED=$?
command_installed pip3
PIP_INSTALLED=$?
# Si cualquiera de ellos está instalado, necesitamos actualizar con privilegios de superusuario
if [ $PYTHON_INSTALLED -eq 0 ] || [ $PIP_INSTALLED -eq 0 ]; then
# Ejecutar la actualización de Python y pip con sudo
echo -e "\n${head_info}: Se necesitan privilegios de administrador para actualizar Python y pip..."
sudo bash -c "$(declare -f update_python_and_pip); update_python_and_pip $BIN_HOME $BIN_LIBS $BIN_MESG $BIN_LANG"
if [ $? -ne 0 ]; then
echo -e "\n${head_error}: No se pudo actualizar Python y pip. Verifique sus privilegios."
fi
else
echo -e "\n${head_info}: No se detectaron Python ni pip instalados. No hay actualizaciones que realizar."
echo -e "Para instalar estas dependencias, ejecute bin/bootstrap.sh primero."
fi
echo -e "\n${head_info}: Proceso de actualización completado."