cClaude.rocks ☕ Le blog

[Nouvelles technologies, sciences et coups de gueule…]

Menu

La version 7.4 de la suite bureautique LibreOffice vient de sortir. Si vous utiliser la version disponible dans les dépôts de Linux Mint (et probablement de tout Linux dérivé d’Ubuntu) c’est la version 7.3.6.2 qui vous est proposé.

Attention la procédure décrite est réservé aux machines à base de processeurs x86 64 bits (Intel ou AMD), les URLs utilisées ne sont pas valides pour une machine à base de processeur ARM (même 64 bits).

Procédure

Je vous conseille de commencer par mettre à jour votre système, avant l’installation de LibreOffice, et manière très facultative de désinstaller l’ancienne version.

  • Télécharger les fichiers contenant l’installation de :
    • LibreOffice,
    • le pack correspondant à votre langue,
    • et l’aide intégrée à votre langue ;
  • Extraire les fichiers tar.gz ;
  • Supprimer la version précédente ;
  • Installer les fichiers .deb ;
  • Nettoyage final.

Script d’installation

On trouve plein de vidéos sur le net qui montre cette procédure, mais c’est moins pratique qu’un script qui fait le travail pour vous.

Voici donc une version d’un script permettant de faire l’installation initiale ou la mise à jour de LibreOffice avec la dernière version en ligne.

  • libreoffice-install.sh
    #!/bin/bash
    #
    # libreoffice-install:libreoffice-install.sh
    #
    set -u
    set -o pipefail
    
    function usage {
      cat <<EOF
    Install LibreOffice from DEB files.
    
    Usage:
    
      $( basename "$0" ) [--help]
      $( basename "$0" ) [--download-dir DIR] [--version VER] [--lang LANG] [--no-langage-pack] [--keep-other-versions]
    
    Actions:
    
      -h,   --help      Display this message and exit.
    
    Options:
    
      -D DIR,   --download-dir DIR
                        Set custom download directory, otherwise use $( xdg-user-dir DOWNLOAD )
      -V VER,   --version VER
                        Set custom version number, otherwise use available version
      -L LANG,  --lang LANG
                        Set custom version number, default value is 'fr'
                --no-langage-pack
                        Skip language pack installation
      -K,       --keep-other-versions
                        Don't remove other versions
    
    EOF
    }
    
    #
    # P_param : get parameter value, if not exist call usage and return error.
    #
    # Usage:
    #   param_xxx="$( P_param "$@" )" && shift || return $?
    #
    # Require:
    #   - param variable with current parameter name
    #   - usage function (use to display usage)
    #
    function P_param {
      if [ "$#" -gt 0 ] ; then
        echo "$1"
      else
        echofatal "Value required for '${param}'"
        usage >&2
        return 1
      fi
    }
    
    function echofatal {
      echo '*** [FATAL]: ' "$@" >&2
    }
    
    function echowarn {
      echo '* [WARN]: ' "$@" >&2
    }
    
    function echoinfo {
      echo '* [INFO]: ' "$@" >&2
    }
    
    function __do_download__ {
      local -r __url__="$1"
    
      echoinfo "${FUNCNAME[0]}( '${__url__}' )"
    
      local __file__=
      __file__="$( basename "${__url__}" )"
      local -r __file__
    
      if [ -f "${__file__}" ] ; then
        echowarn "File already there: '${__file__}'"
        return 0
      fi
    
    # wget "${__url__}" --output-file="${__file__}" >&2 || return $?
      curl --location "${__url__}" --output "${__file__}" >&2 || return $?
    }
    
    function libreoffice_download {
      echoinfo "${FUNCNAME[0]}()"
    
      if [ "$( arch )" != 'x86_64' ] ; then
        echofatal "Wrong hardware. Can't install LibreOffice."
        arch >&2
        return 1
      fi
    
      mkdir -vp "${__lo_download_dir__}" >&2 || return $?
      pushd "${__lo_download_dir__}" >/dev/null || return $?
    
      __do_download__ "https://download.documentfoundation.org/libreoffice/stable/${__lo_version__}/deb/x86_64/LibreOffice_${__lo_version__}_Linux_x86-64_deb.tar.gz" || return $?
    
      if [ -n "${__lo_lang__}" ] ; then
        __do_download__ "https://download.documentfoundation.org/libreoffice/stable/${__lo_version__}/deb/x86_64/LibreOffice_${__lo_version__}_Linux_x86-64_deb_langpack_${__lo_lang__}.tar.gz" || return $?
        __do_download__ "https://download.documentfoundation.org/libreoffice/stable/${__lo_version__}/deb/x86_64/LibreOffice_${__lo_version__}_Linux_x86-64_deb_helppack_${__lo_lang__}.tar.gz" || return $?
      fi
    
      popd  >/dev/null || return $?
    }
    
    function libreoffice_extract {
      echoinfo "${FUNCNAME[0]}()"
    
      tar -zxf "${__lo_download_dir__}/LibreOffice_${__lo_version__}_Linux_x86-64_deb.tar.gz" --directory "${__lo_download_dir__}/" || return $?
    
      if [ -n "${__lo_lang__}" ] ; then
        tar -zxf "${__lo_download_dir__}/LibreOffice_${__lo_version__}_Linux_x86-64_deb_langpack_${__lo_lang__}.tar.gz" --directory "${__lo_download_dir__}/" || return $?
        tar -zxf "${__lo_download_dir__}/LibreOffice_${__lo_version__}_Linux_x86-64_deb_helppack_${__lo_lang__}.tar.gz" --directory "${__lo_download_dir__}/" || return $?
      fi
    
      ls -la --color "${__lo_download_dir__}/"
    }
    
    function libreoffice_uninstall {
      echoinfo "${FUNCNAME[0]}()"
    
      sudo apt update || return $?
    
      if [ "${__do_cleanup__}" = 'true' ] ; then
        sudo apt upgrade -y || return $?
        sudo apt autoremove -y || return $?
      fi
      sudo apt purge 'libreoffice*' -y || true
    }
    
    function libreoffice_install {
      echoinfo "${FUNCNAME[0]}()"
    
      pushd "${__lo_download_dir__}/LibreOffice_${__lo_version__}"*'_Linux_x86-64_deb/DEBS' >/dev/null || return $?
      (
        sudo dpkg -i ./*.deb
      ) || return $?
      popd  >/dev/null || return $?
    
      pushd "${__lo_download_dir__}/LibreOffice_${__lo_version__}"*"_Linux_x86-64_deb_langpack_${__lo_lang__}/DEBS" >/dev/null || return $?
      (
        sudo dpkg -i ./*.deb
      ) || return $?
      popd  >/dev/null || return $?
    
      pushd "${__lo_download_dir__}/LibreOffice_${__lo_version__}"*"_Linux_x86-64_deb_helppack_${__lo_lang__}/DEBS" >/dev/null || return $?
      (
        sudo dpkg -i ./*.deb
      ) || return $?
      popd  >/dev/null || return $?
    }
    
    function get_last_versions {
      echoinfo "${FUNCNAME[0]}()"
    
      curl -L 'https://www.libreoffice.org/download/' |
        grep 'https://download.documentfoundation.org/libreoffice/stable/' |
        sed -E 's,.*"https://download\.documentfoundation\.org/libreoffice/stable/([^/]+)/.*,\1,g' || true
    }
    
    function get_last_version {
      # TODO: let user choose ?
      get_last_versions | sort --reverse | head -n 1
    }
    
    function main_libreoffice_install {
      local -r __download_dir__="$1"
      local -r __lo_version__="$2"
      local -r __lo_lang__="$3" # If defined but empty, don't install langage pack
      local -r __do_cleanup__="$4"
      local -r __lo_download_dir__="${__download_dir__}/LibreOffice_${__lo_version__}"
    
      libreoffice_download  || return $?
      libreoffice_extract   || return $?
      libreoffice_uninstall || return $?
      libreoffice_install   || return $?
    }
    
    function main {
      local param_download_dir=
      local param_lo_version=
      local param_lo_lang='fr'      # default language is french
      local param_no_lang='false'   # if true don't install langage pack
      local param_lo_cleanup='true'
    
      param_download_dir="$( xdg-user-dir DOWNLOAD )" || return $?
    
      while [ "$#" -gt 0 ] ; do
        param="$1"
        shift
    
        case "${param}" in
          '-h'|'--help')
            usage
            return 0
            ;;
    
          '-D'|'--download-dir')
            param_download_dir="$( P_param "$@" )" && shift || return $?
            ;;
    
          '-V'|'--version')
            param_lo_version="$( P_param "$@" )" && shift || return $?
            ;;
    
          '-L'|'--lang')
            param_lo_lang="$( P_param "$@" )" && shift || return $?
            ;;
    
          '--no-langage-pack')
            param_no_lang='true'
            ;;
    
          '-K'|'--keep-other-versions')
            param_lo_cleanup='false'
            ;;
    
          *)
            echofatal "Unknown option: '${param}'"
            usage >&2
            return 1
            ;;
        esac
      done
    
      if [ -z "${param_lo_version}" ] ; then
        param_lo_version="$( get_last_version )" || return $?
      fi
      if [ "${param_no_lang}" = 'true' ] ; then
        param_lo_lang='' # Don't install langage pack
      fi
    
      main_libreoffice_install "${param_download_dir}" "${param_lo_version}" "${param_lo_lang}" "${param_lo_cleanup}" || return $?
    
      echoinfo "$( basename "${BASH_SOURCE[0]}" ) - Done."
    }
    
    main "$@" || exit $?
    


    Le dépôt

    Comme vous le constaté ce script assez basique à ce jour et il a vocation à évoluer voici pourquoi je vous propose ce dépôt où les prochaines versions seront publiées.



    Références

    ᦿ


ℹ 2006 - 2022 | 🏠 Accueil du domaine | 🏡 Accueil du blog