Instalacion-LibreOffice/InstaladorLibreOffice.sh

449 lines
24 KiB
Bash
Executable File

#!/bin/bash
#Autor: Marcos Ferreira da Rocha
#Email: marcos.fr.rocha@gmail.com
#Blog: alfabech.com
#¿Dónde encontrar al creador del script?, Grupo de LibreOffice en Telegram https://t.me/libreofficebr, https://t.me/libreofficebrasil
#Versión en español: Daniel A. Rodriguez <drodriguez@libreoffice.org>
#Versión: 1.5
#Fecha: Mayo 2024
exec >& >(tee -a /tmp/$(date +"%d-%m-%y"--%Hhoras:%mmin:%Sseg)-install-libreoffice.log)
export PATH="/usr/local/sbin:/usr/sbin:/sbin:/bin:/usr/games:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
#0 ## Instalamos dependencias
YUM_CMD=$(which yum)
APT_CMD=$(which apt)
PACMAN_CMD=$(which pacman)
ZYPPER_CMD=$(which zypper)
SUDO_CMD=$(which sudo)
# YUM_ZEN=$(which zenity)
# APT_ZEN=$(which zenity)
# PACMAN_ZEN=$(which zenity)
# ZYPPER_ZEN=$(which zenity)
# YUM_CURL=$(which curl)
# APT_CURL=$(which curl)
# PACMAN_CURL=$(which curl)
# ZYPPER_CURL=$(which curl)
if ! [ -e $SUDO_CMD ]; then
if [[ ! -z $APT_CMD ]]; then
apt install sudo zenity curl -y
elif [[ ! -z $YUM_CMD ]]; then
dnf install sudo zenity curl -y
elif [[ ! -z $PACMAN_CMD ]]; then
pacman -Sy sudo zenity curl
elif [[ ! -z $ZYPPER_CMD ]]; then
zypper -n install sudo zenity curl
fi
else
echo "\e[1;32m\u2713\e[1;0m\e[1;32mSudo está presente\e[1;0m"
fi
if [ -e /usr/bin/dnf ]; then
#Archivo de aviso sobre el script
wget -c wget -c https://git.cuates.net/drodriguez/Instalacion-LibreOffice/raw/branch/main/README.md -P /tmp
FILE=/tmp/aviso
# zenity --text-info --width=800 --height=600 \
dialog \
--title="Acerca de LibreOffice" \
--filename=$FILE
else
# zenity --text-info --html --width=800 --height=600 \
# --title="Acerca de LibreOffice" \
# --url=https://es.libreoffice.org/descarga/
zenity --info --width=800 --height=600 --text="
LibreOffice es ofrecido por TDF | The Document Fundation
https://www.documentfoundation.org/ \n
https://es.libreoffice.org es el portal de la Comunidad Hispana. \n
Este script descarga e instala LibreOffice directamente de los repositorios oficiales.\n
Es posible modificar lista de acuerdo con su necesidad, para ambientes corporativos\n
sugerimos la creación de un repositorio local para LibreOffice, asi como en este script.\n
The Document Foundation mantiene dos ramas de LibreOffice disponibles,\n
una para los usuarios que desean las últimas funcionalidades y otra\n
para quienes prefieran una versión sometida a más pruebas y correcciones de errores.
Invitamos a visitar la página del projeto (LibreOffice).\n
http://www.libreoffice.org/
"
fi
case $? in
0)
echo "\e[1;32m\u2713\e[1;0m\e[1;32mIniciar Instalación\e[1;0m"
#1 Definimos el repositorio estable.
estadoversion="stable"
#2 ## Escogemos la versión de LibreOffice
# vs=$(zenity --entry --title="Ingrese la versión" --text="versión:")
curl -f -L https://download.documentfoundation.org/libreoffice/stable/ | grep -oP 'href="\K[0-9.]+' > data.txt
# Carga un array con cada línea del archivo
unset list
while read -r line
do
list+=("FALSE")
list+=("$line")
done < data.txt
# Mostrar el diálogo
vs=$(zenity --list --radiolist --width=450 --height=400 --title="Escoja la versión a instalar" --text "Escoja la versión a instalar" --column "Selección" --column "Versión" "${list[@]}" --separator=":")
echo $vs
if [ $? == 0 ]; then
#3 Aqui se pode ingresar una lista de servidoes prefereridos para descargar LibreOffice,
#con la posibilidad de ingresar un servidor local, ideal para ambientes empresariales
#En este caso utilicé el servidor de mi red con IP 192.168.0.193/tdf
servidor=$(zenity --list --radiolist --width=450 --height=400 \
--title="Escoja el servidor espejo" \
--text="Selecione el servidor para realizar la descarga de los paquetes de LibreOffice" \
--column="Selección" --column="Enlace" --column="Institución" \
TRUE http://tdf.c3sl.ufpr.br "UFPR - BR" \
FALSE https://mirror.clarkson.edu/tdf/ "Clarkson - EEUU" \
FALSE https://mirror1.cs-georgetown.net/tdf/ "Georgetown - EEUU" \
FALSE https://ftp.osuosl.org/pub/tdf/ "Open Source Lab - EEUU" \
FALSE https://mirror.cedia.org.ec/tdf/ "CEDIA - EC" \
FALSE http://linorg.usp.br/LibreOffice "USP - BR" \
FALSE https://ftp.unicamp.br/pub/libreoffice/ "UNICAMP - BR" \
FALSE http://mirror.pop-sc.rnp.br/mirror/tdf "Pop-SC - BR" \
FALSE 192.168.0.187/tdf "Servidor Local" )
if [ $? == 0 ]; then
#4 Verificando el gestor de paquetes"
if [ -e "/bin/rpm" ]; then
gestorPaquetes=rpm
directorio=RPMS
else
gestorPaquetes=deb
directorio=DEBS
fi
#5 Verificando arquitetura del sistema"
if [ `getconf LONG_BIT` = "64" ]
then
plataforma=x86_64
plataforma2=x86-64
else
plataforma=x86
plataforma2=x86
fi
#6 Selección del idioma local
idioma=$(zenity --list --radiolist --width=450 --height=500 \
--title="Seleccione el idioma local" \
--column="Selección" --column="Cod. Idioma" --column="Idioma" \
TRUE es "Spanish" \
FALSE am "Amharic - አማርኛ" \
FALSE ar "Arabic - العربية " \
FALSE ast "Asturian" \
FALSE bg "Bulgarian (Bulsgaria) " \
FALSE bn-IN "Bengali, India" \
FALSE bn "Bengali" \
FALSE bo "Tibetan Standard - བོད་ཡིག" \
FALSE bs "Bosnian (Bosnia and Herzegovina)" \
FALSE ca "Catalan" \
FALSE cs "Czech" \
FALSE da "Danish" \
FALSE de "German" \
FALSE dz "Dzgkha" \
FALSE el "Greek" \
FALSE en-US "English United Stats" \
FALSE en-GB "English (United Kingdom)" \
FALSE en-ZA "English (South Africa)" \
FALSE eo "Esperanto" \
FALSE et "Estian" \
FALSE eu "Basque" \
FALSE fi "Finnish" \
FALSE fr "French" \
FALSE gl "Galician" \
FALSE gu "Gujarati" \
FALSE he "Hebrew" \
FALSE hi "Hindi" \
FALSE hr "Croatian" \
FALSE hu "Hungarian" \
FALSE id "Indesian" \
FALSE is "Icelandic" \
FALSE it "Italian" \
FALSE ja "Japanese" \
FALSE ka "Georgian" \
FALSE km "Khmer" \
FALSE ko "Korean" \
FALSE lo "Lao" \
FALSE lt "Lithuanian" \
FALSE lv "Latvian" \
FALSE mk "FYRO Macedian" \
FALSE nb "Norwegian (Bokm?l)" \
FALSE ne "Nepali" \
FALSE nl "Dutch" \
FALSE nn "Norwegian Nynorsk" \
FALSE om "Oromo" \
FALSE pl "Polish" \
FALSE pt "Portuguese" \
FALSE pt-BR "Portuguese (Brazil)" \
FALSE ro "Romanian" \
FALSE ru "Russian" \
FALSE si "Sinhala; Sinhalese" \
FALSE sid "Sidamo" \
FALSE sk "Slovak" \
FALSE sl "Slovenian" \
FALSE sq "Albanian" \
FALSE sv "Swedish" \
FALSE ta "Tamil" \
FALSE tg "Tajik" \
FALSE tr "Turkish" \
FALSE ug "Uyghur" \
FALSE uk "Ukrainian" \
FALSE vi "Vietnamese (Vietnam)" \
FALSE zh-CN "Chinese Simplified" \
FALSE zh-TW "Chinese Traditial" )
status=$?
if [ $status = 0 ]
then
while true
do
resp=$(zenity --password --text "Ingrese su contraseña" --title "Autenticación")
#6.1 Toma la contraseña de la IU
clave=$(echo "$resp" | cut -f1 -d'|')
(
echo "1" ; sleep 1
echo "# Creando directorios" ; sleep 1
#6.2 # Pasa la contraseña
echo $clave | sudo -S -u root zenity --info --width=300 --height=60 --text "Iniciando instalación \nGuarde los trabajos abiertos en LibreOffice y haga clic en Aceptar"
if ! [ -e /usr/bin/notify-send ]; then
if [[ ! -z $APT_CMD ]]; then
apt install libnotify-bin -y
elif [[ ! -z $YUM_CMD ]]; then
dnf install libnotify -y
elif [[ ! -z $PACMAN_CMD ]]; then
pacman -Sy libnotify
elif [[ ! -z $ZYPPER_CMD ]]; then
zypper -n install notify-send
else
echo "\e[1;31m\u2717\e[1;0m\e[1;31mGestor no encontrado\e[1;0m"
fi
else
echo "\e[1;32m\u2713\e[1;0m\e[1;32mnotify-send ya instalado\e[1;0m"
fi
echo "5" ; sleep 1
echo "# Creando directorios" ; sleep 1
#6.3 # Creando directorio para bajar los paquetes de acuerdo con versión, gestor, arquitectura
mkdir -p "/home/"$USER"/Descargas/libreoffice/"$estadoversion"/"$vs"/"$gestorPaquetes"/"$plataforma""
destino="/home/"$USER"/Descargas/libreoffice/"$estadoversion"/"$vs"/"$gestorPaquetes"/"$plataforma""
#7 #Descargando LibreOffice
##notify-send -i libreoffice -t 50000 'LibreOffice '$vs'' 'Descargando paquetes'
echo "10" ; sleep 1
echo "# Descargando el paquete principal" ; sleep 1
wget -c "$servidor"/libreoffice/"$estadoversion"/"$vs"/"$gestorPaquetes"/"$plataforma"/LibreOffice_"$vs"_Linux_"$plataforma2"_"$gestorPaquetes".tar.gz -P "$destino"
echo "20" ; sleep 1
echo "# Descargando el paquete de ayuda" ; sleep 1
wget -c "$servidor"/libreoffice/"$estadoversion"/"$vs"/"$gestorPaquetes"/"$plataforma"/LibreOffice_"$vs"_Linux_"$plataforma2"_"$gestorPaquetes"_helppack_"$idioma".tar.gz -P "$destino"
#8 # Verificando si hay necesidad de descarga el paquete de idioma, si se trata de inglés no es necesario.
if ! [ "$idioma" = "en-US" ]
then
echo "30" ; sleep 1
echo "\e[1;32m\u2713\e[1;0m\e[1;32mDescargando el paquete de idioma\e[1;0m" ; sleep 1
wget -c "$servidor"/libreoffice/"$estadoversion"/"$vs"/"$gestorPaquetes"/"$plataforma"/LibreOffice_"$vs"_Linux_"$plataforma2"_"$gestorPaquetes"_langpack_"$idioma".tar.gz -P "$destino"
else
exit 1
fi
echo "40" ; sleep 1
echo "\e[1;32m\u2713\e[1;0m\e[1;32mQuitando versión anterior\e[1;0m" ; sleep 1
#9 #Verificando si el paquete principal LibreOffice fue bajado para dar continuidad al proceso, en caso afirmativo se realiza un test del gestor de paquetes para desinstalar la versión anterior de LibreOffice.
##notify-send -i libreoffice -t 50000 'LibreOffice '$vs'' 'Removiendo versión anterior '$comparar-version-instalada'. !'
if [ -e "$destino"/LibreOffice_"$vs"_Linux_"$plataforma2"_"$gestorPaquetes".tar.gz ]
then
if [[ ! -z $APT_CMD ]]; then
sudo -S apt remove libreoffice* -y
elif [[ ! -z $YUM_CMD ]]; then
sudo -S dnf remove libreoffice* -y
elif [[ ! -z $PACMAN_CMD ]]; then
sudo -S pacman -Rn libreoffice*
elif [[ ! -z $ZYPPER_CMD ]]; then
sudo -S zypper -n remove libreoffice*
else
echo "\e[1;32m\u2713\e[1;0m\e[1;32mLibreOffice no encontrado, continuar instalación\e[1;0m"
fi
#10 # Descomprimimos los paquetes de LibreOffice
##notify-send -i libreoffice -t 50000 'LibreOffice '$vs'' 'Extrayendo paquetes'
echo "50" ; sleep 1
echo "\e[1;32m\u2713\e[1;0m\e[1;32mDescompactando el paquete principal\e[1;0m" ; sleep 1
tar -xzf "$destino"/LibreOffice_"$vs"_Linux_"$plataforma2"_"$gestorPaquetes".tar.gz -C /tmp
#11 # Verificando la necesidad de instalar paquete de idioma
if ! [ "$idioma" = "en-US" ]
then
echo "60" ; sleep 1
echo "\e[1;32m\u2713\e[1;0m\e[1;32mDescompactando el paquete de idioma\e[1;0m" ; sleep 1
tar -xzf "$destino"/LibreOffice_"$vs"_Linux_"$plataforma2"_"$gestorPaquetes"_langpack_"$idioma".tar.gz -C /tmp
else
exit 1
fi
#12 # Paquete de ayuda
echo "70" ; sleep 1
echo "\e[1;32m\u2713\e[1;0m\e[1;32mDescompactando el paquete de ayuda\e[1;0m" ; sleep 1
tar -xzf "$destino"/LibreOffice_"$vs"_Linux_"$plataforma2"_"$gestorPaquetes"_helppack_"$idioma".tar.gz -C /tmp
# Aqui se instala el paquete principal de LibreOffice
#13 #PAQUETE PRINCIPAL
##notify-send -i libreoffice -t 50000 'LibreOffice '$vs'' 'Instalando paquete principal'
tar -tzf "$destino"/LibreOffice_"$vs"_Linux_"$plataforma2"_"$gestorPaquetes".tar.gz | cut -d '_' -f2 | uniq > /tmp/subversion
valorsubversion=$(</tmp/subversion)
echo "75" ; sleep 1
echo "\e[1;32m\u2713\e[1;0m\e[1;32mInstalando el paquete principal\e[1;0m" ; sleep 1
if [ -e $APT_CMD ]; then
sudo -S apt install /tmp/LibreOffice_"$valorsubversion"_Linux_"$plataforma2"_"$gestorPaquetes"/"$directorio"/*
else
sudo -S dnf install /tmp/LibreOffice_"$valorsubversion"_Linux_"$plataforma2"_"$gestorPaquetes"/"$directorio"/*
fi
#14 ##Instalación del PAQUETE DE IDIOMA
##notify-send -i libreoffice -t 50000 'LibreOffice '$vs'' 'Instalando paquetes de idioma'
if ! [ "$idioma" = "en-US" ]
then
tar -tzf "$destino"/LibreOffice_"$vs"_Linux_"$plataforma2"_"$gestorPaquetes".tar.gz | cut -d '_' -f2 | uniq > /tmp/subversion
valorsubversion=$(</tmp/subversion)
echo "80" ; sleep 1
echo "\e[1;32m\u2713\e[1;0m\e[1;32mInstalando el paquete de idioma\e[1;0m" ; sleep 1
if [ -e $APT_CMD ]; then
sudo -S apt install /tmp/LibreOffice_"$valorsubversion"_Linux_"$plataforma2"_"$gestorPaquetes"_langpack_"$idioma"/"$directorio"/*
else
sudo -S dnf install /tmp/LibreOffice_"$valorsubversion"_Linux_"$plataforma2"_"$gestorPaquetes"_langpack_"$idioma"/"$directorio"/*
fi
else
exit 1
fi
#14 ##PAQUETE DE AYUDA
echo "90" ; sleep 1
echo "\e[1;32m\u2713\e[1;0m\e[1;32mInstalando el paquete de ayuda\e[1;0m" ; sleep 1
##notify-send -i libreoffice -t 50000 'LibreOffice '$vs'' 'Instalando paquetes de ayuda!'
tar -tzf "$destino"/LibreOffice_"$vs"_Linux_"$plataforma2"_"$gestorPaquetes".tar.gz | cut -d '_' -f2 | uniq > /tmp/subversion
valorsubversion=$(</tmp/subversion)
rm subversion
if [ -e $APT_CMD ]; then
sudo -S apt install /tmp/LibreOffice_"$valorsubversion"_Linux_"$plataforma2"_"$gestorPaquetes"_helppack_"$idioma"/"$directorio"/*
else
sudo -S dnf install /tmp/LibreOffice_"$valorsubversion"_Linux_"$plataforma2"_"$gestorPaquetes"_helppack_"$idioma"/"$directorio"/*
fi
else
exit 1
fi
#15 # Tratando los archivos utilizados, de momento enviando a un subdirectorio de descargas
echo "100" ; sleep 1
echo "\e[1;32m\u2713\e[1;0m\e[1;32mInstalación finalizada\e[1;0m" ; sleep 1
if [ -n "$(ls -A /opt/libreoffic* )" ]
then
notify-send -i libreoffice -t 50000 'LibreOffice '$vs'' 'Instalación concluída'
else
notify-send -i libreoffice -t 50000 'LibreOffice '$vs'' 'No instalado'
fi
1 2>/dev/null && exit
) |
zenity --progress --width=250 --height=100 \
--title="Descarga del programa" \
--text="Iniciando..." \
--percentage=0
if [ "$?" = -1 ] ; then
zenity --error \
--text="Instalación cancelada."
fi
zenity --question --default-cancel --no-wrap --text 'LibreOffice ha sido instalado \nHaga clic en Aceptar para activar el monitor de atualización. \n O Salir si no quiere hacerlo' --ok-label="Aceptar" --cancel-label="Salir"
# Salir si se presionó cancelar.
(( $? == 1 || $? != 1 )) &&
#Opción desactivada debido a la implementación del actualizador automático en el núcleo de LO
# zenity --question --text="Instalar el Monitor de Actualización" --ok-label="Si" --cancel-label="No"
# if [ $? = 0 ] ; then
# if ! [ -e /usr/bin/monitor-libreoffice.sh ]; then
# sudo -S wget https://git.cuates.net/drodriguez/Instalacion-LibreOffice/raw/branch/main/monitor-libreoffice.sh -P /usr/bin/
# sudo -S chmod +x /usr/bin/monitor-libreoffice.sh
# crontab -l | grep -q 'bash /usr/bin/monitor-libreoffice.sh' && echo '0' > /tmp/CRON || echo '1' > /tmp/CRON
# if [[ $(cat /tmp/CRON) == "1" ]]; then
# (crontab -l ; echo "20 * * * * export DISPLAY=:0 && bash /usr/bin/monitor-libreoffice.sh") | crontab - ; exit 0
# else
# echo "Ya configurado" ; exit 0
# fi
# exit 0
# (( $? )) && exit
# else
# exit 0
# fi
# else
# exit 0
# fi
exit 0
done
exit 0
else
exit 0
fi
else
exit 0
fi
else
exit 0
fi
;;
1)
echo "\e[1;31m\u2717\e[1;0m\e[1;31mInstalación Cancelada\e[1;0m"
;;
-1)
echo "\e[1;32m\u2713\e[1;0m\e[1;32mAlgo inesperado ha ocurrido\e[1;0m"
;;
esac