From 5cab3913d8ad01808ab6b4694c9b36674aae1e78 Mon Sep 17 00:00:00 2001 From: "Mauro Rosero P." Date: Wed, 12 Mar 2025 09:27:23 -0500 Subject: [PATCH] =?UTF-8?q?[FIXED]=20Corregir=20escalamiento=20de=20privil?= =?UTF-8?q?egios=20para=20actualizaci=C3=B3n=20de=20paquetes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- bin/lib/base.lib | 23 ++++---------- bin/update.sh | 82 ++++++++++++++++++++++++++---------------------- 2 files changed, 51 insertions(+), 54 deletions(-) diff --git a/bin/lib/base.lib b/bin/lib/base.lib index 3b689cb..4eb8322 100644 --- a/bin/lib/base.lib +++ b/bin/lib/base.lib @@ -55,7 +55,8 @@ function is_root() { } # 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 echo -e "\n${head_info}: Se requieren privilegios de administrador para esta operaci贸n." @@ -66,22 +67,10 @@ function escalate_privileges() { return 1 fi - # Intentar escalar privilegios con sudo - echo -e "${head_info}: Ingrese su contrase帽a si se solicita." - - # Verificar que sudo funciona - 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 + # Informar que se necesita ejecutar con sudo + echo -e "${head_error}: Este script debe ejecutarse con sudo." + echo -e "${head_info}: Por favor, ejecute: sudo $0" + return 1 fi # Ya es root, no necesita hacer nada diff --git a/bin/update.sh b/bin/update.sh index 4d16059..82a8e1c 100755 --- a/bin/update.sh +++ b/bin/update.sh @@ -61,51 +61,59 @@ fi # Load bootstrap library for update functions source $BIN_HOME/$BIN_LIBS/bootstrap.lib -# Verificar si se necesita ser superusuario para actualizar Python y pip -UPDATE_PACKAGES=false +# Update sistema operativo y repositorios primero (no requiere privilegios de root) +echo -e "\n${head_info}: Actualizando repositorios locales primero..." -# Verificar si Python est谩 instalado y necesitamos actualizarlo -command_installed python3 -if [ $? -eq 0 ]; then - UPDATE_PACKAGES=true -fi - -# Verificar si pip est谩 instalado y necesitamos actualizarlo -command_installed pip3 -if [ $? -eq 0 ]; then - UPDATE_PACKAGES=true -fi - -# Si necesitamos actualizar paquetes, verificar privilegios -if [ "$UPDATE_PACKAGES" = true ]; then - # Escalar privilegios para actualizar Python y pip - escalate_privileges "$@" +# 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 - # Si llegamos aqu铆, es porque ya somos superusuario - if ! is_root; then - echo -e "\n${head_error}: No se pudieron obtener privilegios de administrador." - echo -e "Las actualizaciones de Python y pip no se realizar谩n." + # 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 -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." +} -# Update Python and pip separately -echo -e "\n${head_info}: Verificando actualizaciones de Python y pip..." - -# Update Python +# Verificar si Python o pip est谩n instalados y si se necesitan actualizar 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 +PYTHON_INSTALLED=$? -# Update pip separately command_installed pip3 -if [ $? -eq 0 ]; then - pip_update +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_error}: pip3 no est谩 instalado. Ejecute bin/bootstrap.sh primero." - echo -e "Esta dependencia es necesaria para varias herramientas del sistema." + 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."