diff --git a/bin/vscode_install.sh b/bin/vscode_install.sh new file mode 100755 index 0000000..cc2f77d --- /dev/null +++ b/bin/vscode_install.sh @@ -0,0 +1,472 @@ +#!/bin/bash +#Script : vscode_install.sh +#Apps : MRDEVS TOOLS +#Description : Instala Visual Studio Code con soporte multiplataforma +#Author : Cortana Rosero One +#Generated : Created by Claude Code (claude-3-7-sonnet-20250219) +#Created : 2025/04/04 10:00:00 +#Modified : 2025/04/04 10:00:00 +#Version : 1.3.1 +#Use Notes : Ejecutar sin parámetros para instalación interactiva +# -u para desinstalar +#============================================================================== +# Derechos de Autor 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)" +BIN_BASE="bin" +BIN_LIBS="lib" +BIN_MESG="msg" +BIN_LANG="head.es" +BIN_CFGS="config" + +# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto +if [ -f "$SCRIPT_DIR/$BIN_CFGS/devspath.dat" ]; then + DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat") +else + DEVSPATH="devs" +fi + +# Cargar bibliotecas comunes +if [ -f "$SCRIPT_DIR/$BIN_LIBS/base.lib" ]; then + source "$SCRIPT_DIR/$BIN_LIBS/base.lib" +else + echo "Error: No se encontró la biblioteca base.lib" + exit 1 +fi + +# Cargar mensajes en español +if [ -f "$SCRIPT_DIR/$BIN_MESG/$BIN_LANG" ]; then + source "$SCRIPT_DIR/$BIN_MESG/$BIN_LANG" +else + echo "Error: No se encontraron los archivos de mensajes" + exit 1 +fi + +# Verificar si se está solicitando la desinstalación +UNINSTALL=0 +if [ "$1" = "-u" ]; then + UNINSTALL=1 +fi + +# Función para detectar el sistema operativo +detect_os() { + if [ -f /etc/os-release ]; then + . /etc/os-release + OS=$NAME + VER=$VERSION_ID + elif [ -f /etc/lsb-release ]; then + . /etc/lsb-release + OS=$DISTRIB_ID + VER=$DISTRIB_RELEASE + elif [ -f /etc/debian_version ]; then + OS="Debian" + VER=$(cat /etc/debian_version) + elif [ -f /etc/redhat-release ]; then + OS=$(cat /etc/redhat-release | cut -d ' ' -f 1) + VER=$(cat /etc/redhat-release | grep -oE '[0-9]+\.[0-9]+') + elif [ "$(uname)" == "Darwin" ]; then + OS="macOS" + VER=$(sw_vers -productVersion) + elif [ "$(uname)" == "FreeBSD" ]; then + OS="FreeBSD" + VER=$(uname -r) + else + OS="Unknown" + VER="Unknown" + fi + + echo "$OS" +} + +# Función para instalar VSCode en sistemas basados en Debian/Ubuntu +install_vscode_debian() { + echo -e "\n${head_info}: Instalando paquetes necesarios..." + sudo apt update + sudo apt install -y wget gpg apt-transport-https + + echo -e "\n${head_info}: Descargando e instalando la clave GPG de Microsoft..." + wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg + sudo install -D -o root -g root -m 644 microsoft.gpg /etc/apt/keyrings/microsoft.gpg + rm microsoft.gpg + + echo -e "\n${head_info}: Configurando el repositorio de VSCode..." + echo "deb [arch=amd64,arm64,armhf signed-by=/etc/apt/keyrings/microsoft.gpg] https://packages.microsoft.com/repos/code stable main" | \ + sudo tee /etc/apt/sources.list.d/vscode.list + + echo -e "\n${head_info}: Actualizando repositorios e instalando Visual Studio Code..." + sudo apt update + sudo apt install -y code + + if command -v code &>/dev/null; then + echo -e "\n${head_success}: Visual Studio Code ha sido instalado correctamente." + echo -e "${head_info}: Versión instalada: $(code --version | head -n 1)" + return 0 + else + echo -e "\n${head_error}: No se pudo instalar Visual Studio Code." + return 1 + fi +} + +# Función para desinstalar VSCode en sistemas basados en Debian/Ubuntu +uninstall_vscode_debian() { + echo -e "\n${head_info}: Desinstalando Visual Studio Code..." + sudo apt remove --purge -y code + sudo rm -f /etc/apt/sources.list.d/vscode.list + sudo rm -f /etc/apt/keyrings/microsoft.gpg + sudo apt update + + if ! command -v code &>/dev/null; then + echo -e "\n${head_success}: Visual Studio Code ha sido desinstalado correctamente." + return 0 + else + echo -e "\n${head_error}: No se pudo desinstalar completamente Visual Studio Code." + return 1 + fi +} + +# Función para instalar VSCode en sistemas basados en Red Hat (Fedora, RHEL, etc.) +install_vscode_redhat() { + echo -e "\n${head_info}: Instalando paquetes necesarios..." + sudo dnf check-update + sudo dnf install -y dnf-plugins-core + + echo -e "\n${head_info}: Configurando el repositorio de VSCode..." + sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc + sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo' + + echo -e "\n${head_info}: Instalando Visual Studio Code..." + sudo dnf install -y code + + if command -v code &>/dev/null; then + echo -e "\n${head_success}: Visual Studio Code ha sido instalado correctamente." + echo -e "${head_info}: Versión instalada: $(code --version | head -n 1)" + return 0 + else + echo -e "\n${head_error}: No se pudo instalar Visual Studio Code." + return 1 + fi +} + +# Función para desinstalar VSCode en sistemas basados en Red Hat +uninstall_vscode_redhat() { + echo -e "\n${head_info}: Desinstalando Visual Studio Code..." + sudo dnf remove -y code + sudo rm -f /etc/yum.repos.d/vscode.repo + + if ! command -v code &>/dev/null; then + echo -e "\n${head_success}: Visual Studio Code ha sido desinstalado correctamente." + return 0 + else + echo -e "\n${head_error}: No se pudo desinstalar completamente Visual Studio Code." + return 1 + fi +} + +# Función para instalar VSCode en Arch Linux +install_vscode_arch() { + echo -e "\n${head_info}: Actualizando repositorios..." + sudo pacman -Sy + + # Verificar si yay está instalado + if command -v yay &>/dev/null; then + echo -e "\n${head_info}: Instalando Visual Studio Code usando yay..." + yay -S --noconfirm visual-studio-code-bin + else + echo -e "\n${head_info}: Instalando Visual Studio Code desde los repositorios oficiales..." + # Intentar instalar el paquete oficial si está disponible + if pacman -Si code &>/dev/null; then + sudo pacman -S --noconfirm code + else + # Si no está disponible, intentar con el AUR + echo -e "\n${head_info}: El paquete no está en los repositorios oficiales. Intentando con git..." + sudo pacman -S --noconfirm git base-devel + + # Directorio temporal para la compilación + BUILD_DIR=$(mktemp -d) + cd "$BUILD_DIR" + + # Clonar el paquete del AUR y compilarlo + git clone https://aur.archlinux.org/visual-studio-code-bin.git + cd visual-studio-code-bin + makepkg -si --noconfirm + + # Limpiar + cd + rm -rf "$BUILD_DIR" + fi + fi + + if command -v code &>/dev/null; then + echo -e "\n${head_success}: Visual Studio Code ha sido instalado correctamente." + echo -e "${head_info}: Versión instalada: $(code --version | head -n 1)" + return 0 + else + echo -e "\n${head_error}: No se pudo instalar Visual Studio Code." + return 1 + fi +} + +# Función para desinstalar VSCode en Arch Linux +uninstall_vscode_arch() { + echo -e "\n${head_info}: Desinstalando Visual Studio Code..." + + # Intentar desinstalar desde diferentes paquetes posibles + if pacman -Qi visual-studio-code-bin &>/dev/null; then + sudo pacman -R --noconfirm visual-studio-code-bin + elif pacman -Qi code &>/dev/null; then + sudo pacman -R --noconfirm code + elif pacman -Qi visual-studio-code &>/dev/null; then + sudo pacman -R --noconfirm visual-studio-code + fi + + if ! command -v code &>/dev/null; then + echo -e "\n${head_success}: Visual Studio Code ha sido desinstalado correctamente." + return 0 + else + echo -e "\n${head_error}: No se pudo desinstalar completamente Visual Studio Code." + return 1 + fi +} + +# Función para instalar VSCode en macOS +install_vscode_macos() { + echo -e "\n${head_info}: Verificando si Homebrew está instalado..." + + if ! command -v brew &>/dev/null; then + echo -e "\n${head_info}: Instalando Homebrew..." + /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + fi + + echo -e "\n${head_info}: Instalando Visual Studio Code mediante Homebrew..." + brew install --cask visual-studio-code + + if [ -d "/Applications/Visual Studio Code.app" ]; then + echo -e "\n${head_success}: Visual Studio Code ha sido instalado correctamente." + return 0 + else + echo -e "\n${head_error}: No se pudo instalar Visual Studio Code." + return 1 + fi +} + +# Función para desinstalar VSCode en macOS +uninstall_vscode_macos() { + echo -e "\n${head_info}: Desinstalando Visual Studio Code..." + + if command -v brew &>/dev/null; then + brew uninstall --cask visual-studio-code + fi + + if [ -d "/Applications/Visual Studio Code.app" ]; then + rm -rf "/Applications/Visual Studio Code.app" + fi + + if [ ! -d "/Applications/Visual Studio Code.app" ]; then + echo -e "\n${head_success}: Visual Studio Code ha sido desinstalado correctamente." + return 0 + else + echo -e "\n${head_error}: No se pudo desinstalar completamente Visual Studio Code." + return 1 + fi +} + +# Función para instalar VSCode en FreeBSD +install_vscode_freebsd() { + echo -e "\n${head_info}: Actualizando repositorios..." + sudo pkg update + + echo -e "\n${head_info}: Instalando Visual Studio Code..." + sudo pkg install -y vscode + + if command -v code &>/dev/null; then + echo -e "\n${head_success}: Visual Studio Code ha sido instalado correctamente." + echo -e "${head_info}: Versión instalada: $(code --version | head -n 1)" + return 0 + else + echo -e "\n${head_error}: No se pudo instalar Visual Studio Code." + return 1 + fi +} + +# Función para desinstalar VSCode en FreeBSD +uninstall_vscode_freebsd() { + echo -e "\n${head_info}: Desinstalando Visual Studio Code..." + sudo pkg remove -y vscode + + if ! command -v code &>/dev/null; then + echo -e "\n${head_success}: Visual Studio Code ha sido desinstalado correctamente." + return 0 + else + echo -e "\n${head_error}: No se pudo desinstalar completamente Visual Studio Code." + return 1 + fi +} + +# Función principal para instalar VSCode +install_vscode() { + local os=$(detect_os) + local result=0 + + echo -e "\n${head_info}: Sistema operativo detectado: ${os}" + + # Instalar según el sistema operativo + case "$os" in + *"Ubuntu"*|*"Debian"*|*"Linux Mint"*|*"Pop!_OS"*|*"elementary OS"*) + install_vscode_debian + result=$? + ;; + *"Fedora"*|*"Red Hat"*|*"CentOS"*|*"Rocky"*|*"AlmaLinux"*|*"Oracle Linux"*) + install_vscode_redhat + result=$? + ;; + *"Arch"*|*"Manjaro"*|*"EndeavourOS"*|*"Garuda"*) + install_vscode_arch + result=$? + ;; + *"macOS"*) + install_vscode_macos + result=$? + ;; + *"FreeBSD"*) + install_vscode_freebsd + result=$? + ;; + *) + echo -e "\n${head_error}: ${os_nofound}" + return 1 + ;; + esac + + # Si la instalación fue exitosa, mostrar información adicional + if [ $result -eq 0 ]; then + echo -e "\n${head_info}: Visual Studio Code ha sido instalado correctamente." + echo -e "${head_info}: Para iniciar VSCode, ejecute: code" + fi + + return $result +} + +# Función principal para desinstalar VSCode +uninstall_vscode() { + local os=$(detect_os) + local result=0 + + echo -e "\n${head_info}: Sistema operativo detectado: ${os}" + + # Mostrar diálogo de confirmación + if command -v dialog &>/dev/null; then + dialog --title "${npm_031}" --yesno "${npm_032}" 8 60 + if [ $? -ne 0 ]; then + echo -e "\n${head_info}: ${npm_008}" + return 0 + fi + else + read -p "${npm_032} (s/n): " CONFIRM + if [[ ! "$CONFIRM" =~ ^[Ss]$ ]]; then + echo -e "\n${head_info}: ${npm_008}" + return 0 + fi + fi + + # Desinstalar según el sistema operativo + case "$os" in + *"Ubuntu"*|*"Debian"*|*"Linux Mint"*|*"Pop!_OS"*|*"elementary OS"*) + uninstall_vscode_debian + result=$? + ;; + *"Fedora"*|*"Red Hat"*|*"CentOS"*|*"Rocky"*|*"AlmaLinux"*|*"Oracle Linux"*) + uninstall_vscode_redhat + result=$? + ;; + *"Arch"*|*"Manjaro"*|*"EndeavourOS"*|*"Garuda"*) + uninstall_vscode_arch + result=$? + ;; + *"macOS"*) + uninstall_vscode_macos + result=$? + ;; + *"FreeBSD"*) + uninstall_vscode_freebsd + result=$? + ;; + *) + echo -e "\n${head_error}: ${os_nofound}" + return 1 + ;; + esac + + # Si la desinstalación fue exitosa, mostrar mensaje + if [ $result -eq 0 ]; then + echo -e "\n${head_success}: Visual Studio Code ha sido desinstalado correctamente." + fi + + return $result +} + +# Mostrar encabezado +echo -e "\n=== ${npm_018} ===" + +# Verificar si VSCode ya está instalado +if command -v code &>/dev/null; then + CODE_VERSION=$(code --version | head -n 1) + echo -e "\n${npm_019}" + echo "Visual Studio Code: $CODE_VERSION" + + # Si se solicita desinstalación + if [ $UNINSTALL -eq 1 ]; then + uninstall_vscode + else + # Si ya está instalado y no se solicita desinstalación, preguntar qué hacer + if command -v dialog &>/dev/null; then + dialog --title "${npm_031}" --yesno "Visual Studio Code ya está instalado (versión $CODE_VERSION).\n¿Desea reinstalarlo?" 8 60 + REINSTALL=$? + if [ $REINSTALL -eq 0 ]; then + uninstall_vscode && install_vscode + fi + else + read -p "Visual Studio Code ya está instalado (versión $CODE_VERSION). ¿Desea reinstalarlo? (s/n): " REINSTALL + if [[ "$REINSTALL" =~ ^[Ss]$ ]]; then + uninstall_vscode && install_vscode + fi + fi + fi +else + # Si no está instalado + if [ $UNINSTALL -eq 1 ]; then + echo -e "\n${head_info}: Visual Studio Code no está instalado. Nada que hacer." + else + # Mostrar diálogo de confirmación para instalar + if command -v dialog &>/dev/null; then + dialog --title "${npm_031}" --yesno "${npm_033}" 8 60 + if [ $? -eq 0 ]; then + install_vscode + else + echo -e "\n${head_info}: ${npm_008}" + fi + else + read -p "${npm_033} (s/n): " CONFIRM + if [[ "$CONFIRM" =~ ^[Ss]$ ]]; then + install_vscode + else + echo -e "\n${head_info}: ${npm_008}" + fi + fi + fi +fi + +echo -e "\n=== ${npm_021} ===" \ No newline at end of file