[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>
This commit is contained in:
Mauro Rosero P. 2025-03-12 09:27:23 -05:00
parent 2a1ef713cc
commit 5cab3913d8
Signed by: mrosero
GPG key ID: 83BD2A5F674B7E26
2 changed files with 51 additions and 54 deletions

View file

@ -55,7 +55,8 @@ function is_root() {
} }
# Escalar privilegios a superusuario si es necesario # Escalar privilegios a superusuario si es necesario
function escalate_privileges() { # Esta función no ejecuta el script con sudo, solo verifica si tenemos privilegios
function check_root_privileges() {
if ! is_root; then if ! is_root; then
echo -e "\n${head_info}: Se requieren privilegios de administrador para esta operación." echo -e "\n${head_info}: Se requieren privilegios de administrador para esta operación."
@ -66,22 +67,10 @@ function escalate_privileges() {
return 1 return 1
fi fi
# Intentar escalar privilegios con sudo # Informar que se necesita ejecutar con sudo
echo -e "${head_info}: Ingrese su contraseña si se solicita." echo -e "${head_error}: Este script debe ejecutarse con sudo."
echo -e "${head_info}: Por favor, ejecute: sudo $0"
# Verificar que sudo funciona return 1
sudo -n true 2>/dev/null
if [ $? -ne 0 ]; then
# Sudo requiere contraseña, informar al usuario
echo -e "${head_info}: Elevando privilegios con sudo..."
fi
# Ejecutar el script actual con sudo
sudo "$0" "$@"
EXIT_CODE=$?
# Salir con el código devuelto por el comando sudo
exit $EXIT_CODE
fi fi
# Ya es root, no necesita hacer nada # Ya es root, no necesita hacer nada

View file

@ -61,51 +61,59 @@ fi
# Load bootstrap library for update functions # Load bootstrap library for update functions
source $BIN_HOME/$BIN_LIBS/bootstrap.lib source $BIN_HOME/$BIN_LIBS/bootstrap.lib
# Verificar si se necesita ser superusuario para actualizar Python y pip # Update sistema operativo y repositorios primero (no requiere privilegios de root)
UPDATE_PACKAGES=false echo -e "\n${head_info}: Actualizando repositorios locales primero..."
# Verificar si Python está instalado y necesitamos actualizarlo # Función para actualizar Python y pip (requiere privilegios de superusuario)
command_installed python3 update_python_and_pip() {
if [ $? -eq 0 ]; then local BIN_PATH=$1
UPDATE_PACKAGES=true local LIBRARY=$2
fi local MESSAGES=$3
local UPDATE_LANG=$4
# Verificar si pip está instalado y necesitamos actualizarlo # Cargar biblioteca bootstrap
command_installed pip3 source $BIN_PATH/$LIBRARY/bootstrap.lib
if [ $? -eq 0 ]; then
UPDATE_PACKAGES=true
fi
# Si necesitamos actualizar paquetes, verificar privilegios echo -e "\n${head_info}: Actualizando Python y pip..."
if [ "$UPDATE_PACKAGES" = true ]; then
# Escalar privilegios para actualizar Python y pip
escalate_privileges "$@"
# Si llegamos aquí, es porque ya somos superusuario # Update Python
if ! is_root; then command_installed python3
echo -e "\n${head_error}: No se pudieron obtener privilegios de administrador." if [ $? -eq 0 ]; then
echo -e "Las actualizaciones de Python y pip no se realizarán."
fi
fi
# Update Python and pip separately
echo -e "\n${head_info}: Verificando actualizaciones de Python y pip..."
# Update Python
command_installed python3
if [ $? -eq 0 ]; then
python3_update python3_update
else else
echo -e "\n${head_error}: Python3 no está instalado. Ejecute bin/bootstrap.sh primero." echo -e "\n${head_error}: Python3 no está instalado. Ejecute bin/bootstrap.sh primero."
fi fi
# Update pip separately # Update pip separately
command_installed pip3 command_installed pip3
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
pip_update pip_update
else else
echo -e "\n${head_error}: pip3 no está instalado. Ejecute bin/bootstrap.sh primero." 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." 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 fi
echo -e "\n${head_info}: Proceso de actualización completado." echo -e "\n${head_info}: Proceso de actualización completado."