#!/bin/bash # # Script: update.sh # Description: Script para update.sh # Created: 2025/03/15 18:25:00 # Modified: 2025/03/19 11:57:08 # [Author] Mauro Rosero P. # # Derechos de Autor (C) [2025] [Mauro Rosero P. ] # # 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 . # 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 "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version") # LOAD BASE BASH LIBRARY source $BIN_HOME/$BIN_BASE/$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_BASE/$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 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 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..." # 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 $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 # 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/$BIN_BASE/$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 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 $BIN_HOME/$BIN_BASE $BIN_LIBS $BIN_MESG $BIN_LANG" echo -e "\n${head_info}: Proceso de actualización completado."