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."