Probleme bei der Installation von Paketen in R unter GNU/Linux

R
Lehre
Installation
Pakete
Autor:in

Johannes Titz

Veröffentlichungsdatum

20. April 2023

In unseren R-Kursen kommt es hin und wieder mal vor, dass Studierende Probleme bei der Installation von Paketen haben. Meist unter GNU/Linux, da dort die Systemabhängigkeiten schwer zu handlen sind. Es gibt so viele Linux-Distributionen, dass die Abhängigkeiten nicht automatisch gemanagt werden können. Wie sehen typische Fehler aus? Gerade kam über OPAL ein gutes Beispiel, bei dem eine Studentin versucht hat DescTools zu installieren. Dies ist mit folgender Meldung gescheitert:

> install.packages("DescTools")
Installing package into ‘/afs/tu-chemnitz.de/home/urz/f/fasic/R/x86_64-pc-linux-gnu-library/4.0’
(as ‘lib’ is unspecified)
also installing the dependencies ‘curl’, ‘httr’

versuche URL 'https://cloud.r-project.org/src/contrib/curl_5.0.0.tar.gz'
Content type 'application/x-gzip' length 682047 bytes (666 KB)
==================================================
  downloaded 666 KB

versuche URL 'https://cloud.r-project.org/src/contrib/httr_1.4.5.tar.gz'
Content type 'application/x-gzip' length 160874 bytes (157 KB)
==================================================
  downloaded 157 KB

versuche URL 'https://cloud.r-project.org/src/contrib/DescTools_0.99.48.tar.gz'
Content type 'application/x-gzip' length 2635756 bytes (2.5 MB)
==================================================
  downloaded 2.5 MB

* installing *source* package ‘curl’ ...
** Paket ‘curl’ erfolgreich entpackt und MD5 Summen überprüft
** using staged installation
Package libcurl was not found in the pkg-config search path.
Perhaps you should add the directory containing `libcurl.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libcurl' found
Package libcurl was not found in the pkg-config search path.
Perhaps you should add the directory containing `libcurl.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libcurl' found
Using PKG_CFLAGS=
  Using PKG_LIBS=-lcurl
--------------------------- [ANTICONF] --------------------------------
  Configuration failed because libcurl was not found. Try installing:
  * deb: libcurl4-openssl-dev (Debian, Ubuntu, etc)
* rpm: libcurl-devel (Fedora, CentOS, RHEL)
If libcurl is already installed, check that 'pkg-config' is in your
PATH and PKG_CONFIG_PATH contains a libcurl.pc file. If pkg-config
is unavailable you can set INCLUDE_DIR and LIB_DIR manually via:
  R CMD INSTALL --configure-vars='INCLUDE_DIR=... LIB_DIR=...'
-------------------------- [ERROR MESSAGE] ---------------------------
  :1:10: fatal error: curl/curl.h: Datei oder Verzeichnis nicht gefunden
compilation terminated.
--------------------------------------------------------------------
  ERROR: configuration failed for package ‘curl’
* removing ‘/afs/tu-chemnitz.de/home/urz/f/fasic/R/x86_64-pc-linux-gnu-library/4.0/curl’
Warning in install.packages :
  installation of package ‘curl’ had non-zero exit status
ERROR: dependency ‘curl’ is not available for package ‘httr’
* removing ‘/afs/tu-chemnitz.de/home/urz/f/fasic/R/x86_64-pc-linux-gnu-library/4.0/httr’
Warning in install.packages :
  installation of package ‘httr’ had non-zero exit status
ERROR: dependency ‘httr’ is not available for package ‘DescTools’
* removing ‘/afs/tu-chemnitz.de/home/urz/f/fasic/R/x86_64-pc-linux-gnu-library/4.0/DescTools’
Warning in install.packages :
  installation of package ‘DescTools’ had non-zero exit status

The downloaded source packages are in
‘/tmp/RtmpJh9T8H/downloaded_packages’

Sehr kryptisch oder? Auf jeden Fall, aber wenn man genauer hinschaut, sieht man wo das Problem ist:

Configuration failed because libcurl was not found. Try installing:
  * deb: libcurl4-openssl-dev (Debian, Ubuntu, etc)
  * rpm: libcurl-devel (Fedora, CentOS, RHEL)

Es fehlt also eine Systempaket, nämlich libcurl. Unter Debian und Derivaten heißt das Paket libcurl4-openssl-dev, also installiert man es wahrscheinlich so:

apt-get install libcurl4-openssl-dev

Unter anderen Systemen kann das Paket anders heißen und ist dann entsprechend mit dem Paket-Manager zu installieren. Für Fedora und Co libcurl-devel.

So lassen sich meistens die Installationsprobleme beheben. Wie immer gilt: genau die Fehlermeldung lesen, meist verrät sie einem was zu tun ist.

Und ohne root-Rechte?

Man kann natürlich auch einfach die notwendigen Pakete lokal installieren und dann die $PATH-Variable ergänzen (dazu ggf. mehr bei einem neuen Blogeintrag). Bei uns im URZ ist es aber kein Problem anzufragen, dass System-Pakete nachinstalliert werden. Damit man nicht ständig die Leute belästigt, sollte man vorab herausfinden, ob es noch weitere Abhängigkeiten gibt. Das geht am einfachsten mit dem Paket remotes:

remotes::system_requirements("ubuntu-18.04", package = "DescTools")
[1] "apt-get install -y libssl-dev"          
[2] "apt-get install -y zlib1g-dev"          
[3] "apt-get install -y libcurl4-openssl-dev"

Wir haben hier einfach mal Ubuntu als System eingegeben, da sich dies mit Debian überschneiden sollte. Jetzt einfach eine Mail ans URZ mit den Paketen und dann sollte es demnächst kein Problem mehr sein DescTools zu installieren.