Comment upgrader R 4.0.0 sur Debian

Cet article s’adresse particulièrement à vous si vous rencontrez l’erreur suivante :

r-base : Depends: r-recommended (= 4.0.0-1~bustercran.0) but it is not going to be installed

Woah.

R 4.0.0 est sorti !

Je vais peut-être passer pour un gros geek mais c’est la première fois que je ressens autant d’excitation pour un passage de version majeure d’une quelconque technologie !

J’étais trop petit pour R 3.0.0, mais aujourd’hui R est au cœur de mon activité, j’en mange au petit-déjeuner et j’en rêve même la nuit.

(Bon ok j’exagère peut-être un poil..)

Cet article n’a pas vocation à expliquer ce qui change dans R 4.0.0.

Si ça vous intéresse, vous pouvez vous référer à cet article (en anglais) :

R 4.0.0 now available

Et aussi à l’annonce officiel de la part de la Core Team (en anglais aussi) :

R 4.0.0 is released

Dans ce court article, j’aimerais juste vous montrer comment installer R sur Debian.

Parce que j’ai galéré.

Et si je peux éviter à d’autres personnes de galérer, eh bien tant mieux !

Le point de départ

Quasiment tous mes serveurs tournent sous Debian. C’est stable. Ça juste marche, comme disent les sys admin.

Si vous installez R sous une Debian toute fraîche, vous allez avoir une vieille version : la 3.5.2. D’ailleurs c’est aussi vrai pour Ubuntu.

Pas glop.

Pour installer une version plus récente, il faut :

  • Ajouter une clé GnuPG
  • Ajouter l’adresse du repository de R

Et je vais supposer que vous avez déjà fait ça.

C’est-à-dire que quand vous ouvrez /etc/apt/sources.list sur votre serveur, vous avez la ligne suivante :

deb https://cloud.r-project.org/bin/linux/debian buster-cran35/

Sur cette ligne on peut voir que j’utilise buster, c’est-à-dire Debian 10.

Et le cran35 indique que je vais accéder aux repos pour les dernières versions de 3.x.x (c’est-à-dire la 3.6.3).

La solution naïve

D’ordinaire, pour mettre à jour un programme, on met à jour l’adresse du repo, puis on apt update et enfin on apt upgrade.

Pas cette fois.

Mais essayons.

L’adresse du nouveau repo, c’est-à-dire pour 4.0.0, est la suivante :

deb https://cloud.r-project.org/bin/linux/debian buster-cran40/

Si je la remplace dans mon fichier /etc/apt/sources.list, et qu’ensuite je fais :

$ sudo apt update
$ sudo apt upgrade

Quelques librairies vont être mises à jour. Mais pour R en tant quel tel, rien ne va se passer. À la place, on va nous dire :

The following packages have been kept back:
  r-base r-base-core r-base-dev r-cran-boot r-cran-class r-cran-cluster r-cran-foreign
  r-cran-kernsmooth r-cran-lattice r-cran-mass r-cran-matrix r-cran-mgcv r-cran-nlme r-cran-nnet
  r-cran-rpart r-cran-survival r-recommended

Qu’est-ce que ça veut dire exactement ?

En gros c’est une histoire de dépendances et de conflits non résolus.

Si on essaie de forcer la chose, en tapant :

$ sudo apt install r-base

On obtient le résultat suivant :

The following packages have unmet dependencies:
 r-base : Depends: r-recommended (= 4.0.0-1~bustercran.0) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

Pas cool.

Alors quelle est la solution ?

La solution qui marche

En fait c’est tout expliqué si vous allez sur le site de CRAN, mais il faut un peu fouiller.

Je fais référence à ces instructions d’installation.

On nous explique qu’on a bien fait de changer l’adresse du repo, ça OK.

Et ensuite on nous dit:

Please refer to the section on bullseye above for hints on how to do the reinstallation of extension packages. Of course you need to substitute “bullseye” for “buster” if this is the distribution you are working with.

Et c’est là tout le détail !

À la place d’écrire sudo apt install r-base, il faut écrire :

apt remove r-base-core
apt install -t buster-cran40 r-base

D’abord on désinstalle R, et ensuite on le réinstalle avec ce paramètre supplémentaire.

Et là, ça marche !

Voili voiloù.

Bon R !

Mis à jour :

Commentaires

Laisser un commentaire

Les champs obligatoires sont marqués *

Chargement...

Les commentaires sont validés manuellement. La page va se rafraîchir après envoi.