Aggiornare LibreOffice su Fedora

office

Piccolo script scritto di fretta per avere sotto mano la versione fresh di Libreoffice su Fedora invece che quella pacchettizzata. Un giorno ci ritornerò come ho fatto con “Gestione TOTP in bash

#!/bin/bash
#download.documentfoundation.org

usage() {
cat<<EOF
Usa come: ./libreoffice-update.sh [options]
dove:
    [options]
        -u verifica l esistenza di una nuova versione
        -i <numero_version> installa la nuova versione di libreoffice
        -h stampa questa pagina di help

ESEMPI:
    VERIFICA CHE UN AGGIORNAMENTO SIA DISPONIBILE
    libreoffice-update -u

    INSTALLA L ULTIMA VERSIONE DI LIBREOFFICE
    libreoffice-update -i

    VISUALIZZA l HELP
    libreoffice-update -h
EOF
}

download_lo_suite() {
    echo -n "Inizio download LibreOffice $VERSION... "
    [[ $(aria2c https://download.documentfoundation.org/libreoffice/stable/"$VERSION"/rpm/x86_64/LibreOffice_"$VERSION"_Linux_x86-64_rpm.tar.gz | grep ERROR) ]] \
        && { echo "*** Impossibile scaricare LibreOffice $VERSION ***"; ERROR_CODE=64; return ${ERROR_CODE}; } \
        || echo "Fatto."

    echo -n "Inizio download LibreOfficeLangack $VERSION... "
    [[ $(aria2c https://download.documentfoundation.org/libreoffice/stable/"$VERSION"/rpm/x86_64/LibreOffice_"$VERSION"_Linux_x86-64_rpm_langpack_it.tar.gz | grep ERROR) ]] \
        && { echo "*** Impossibile scaricare LibreOfficelangPack $VERSION ***"; ERROR_CODE=65; return ${ERROR_CODE}; } \
        || echo "Fatto."

    echo -n "Inizio download LibreOfficeHelppack $VERSION... "
    [[ $(aria2c https://download.documentfoundation.org/libreoffice/stable/"$VERSION"/rpm/x86_64/LibreOffice_"$VERSION"_Linux_x86-64_rpm_helppack_it.tar.gz | grep ERROR) ]] \
        && { echo "*** Impossibile scaricare LibreOfficeHelppack $VERSION ***"; ERROR_CODE=66; return ${ERROR_CODE}; } \
        || echo -e "Fatto.\n"
}


decomprimi_lo_suite() {
    echo -n "Decompressione tar LibreOffice $VERSION in corso... "
    [[ $(tar -xzf LibreOffice_"$VERSION"_Linux_x86-64_rpm.tar.gz 2>/dev/null) ]] \
        && { echo "*** Impossibile decomprimere il tar di LibreOffice $VERSION ***"; ERROR_CODE=67; return ${ERROR_CODE}; } \
        || echo "Fatto."

    echo -n "Decompressione tar LibreOfficeLangpack $VERSION in corso... "
    [[ $(tar -xzf LibreOffice_"$VERSION"_Linux_x86-64_rpm_langpack_it.tar.gz  2>/dev/null) ]] \
        && { echo "*** Impossibile decomprimere il tar di LibreOfficeLangpack $VERSION ***"; ERROR_CODE=68; return ${ERROR_CODE}; } \
        || echo "Fatto."

    echo -n "Decompressione tar LibreOfficeHelppack $VERSION in corso... "
    [[ $(tar -xzf LibreOffice_"$VERSION"_Linux_x86-64_rpm_helppack_it.tar.gz 2>/dev/null) ]] \
        && { echo "*** Impossibile decomprimere il tar di LibreOfficeHelppack $VERSION ***"; ERROR_CODE=69; return ${ERROR_CODE}; } \
        || echo -e "Fatto.\n"
        
    [[ $? -gt 0 ]] && return $?
}

install_lo_suite() {
    cd $(tar -tf LibreOffice_"$VERSION"_Linux_x86-64_rpm.tar.gz|head -1) && sudo dnf -y localinstall RPMS/* && cd ..
    cd $(tar -tf LibreOffice_"$VERSION"_Linux_x86-64_rpm_langpack_it.tar.gz|head -1) && sudo dnf -y localinstall RPMS/* && cd ..
    cd $(tar -tf LibreOffice_"$VERSION"_Linux_x86-64_rpm_helppack_it.tar.gz|head -1) && sudo dnf -y localinstall RPMS/* && cd $HOME
}

is_lo_upgradeable() {
    VERSIONE_INSTALLATA=$(dnf info installed|grep -A 2 libreoffice|grep Version|head -n 1|cut -d ":" -f 2|cut -c 2-7)
    VERSIONE_ONLINE=$(curl https://it.libreoffice.org/download/download/ 2>/dev/null|grep "version="|head -n 1|cut -d "&" -f 2|cut -d "=" -f 2)
    echo "VERSIONE INSTALLATA: $VERSIONE_INSTALLATA"
    echo "VERSIONE ONLINE:     $VERSIONE_ONLINE"
    [[ ${VERSIONE_INSTALLATA} == ${VERSIONE_ONLINE} ]] \
        && echo -e "Nessun aggiornamento disponibile." \
        || echo -e "Una nuova versione è disponibile.\n"
}

cleanup() {
    rm -r /tmp/tmp.*
}

remove_old_lo_suite() {
    sudo dnf -y remove libreoffice*
}

install() {
    VERSION=$1
    cd $(mktemp -d)
    ! download_lo_suite && { cleanup; exit ${ERROR_CODE}; }
    ! decomprimi_lo_suite && { cleanup; exit ${ERROR_CODE}; }
    ! remove_old_lo_suite && { cleanup; exit ${ERROR_CODE}; }
    install_lo_suite && cleanup || exit ${ERROR_CODE}?
}

noparam() {
    clear;
    usage
    exit 0
}

main() {
    while getopts "ui:h" opt; do
        case $opt in
            u ) is_lo_upgradeable ;;
            i ) install $OPTARG ;;
            h ) clear;usage; exit;;
            * ) clear;echo -e "[ERRORE] Opzione non valida.";usage; exit 1;;
        esac
    done
    shift $(($OPTIND - 1))
}

[[ $# -eq 0 ]] && noparam || main $*

#bash #libreoffice #scripting