Rlogo Sammlung

Hier sind bisher nur einige wenige Informationen zum Einsatz von R unter FreeBSD zu finden. Die Sammlung soll jedoch im Laufe der Zeit vermehrt werden.

Installieren von R unter FreeBSD 12.0-CURRENT

Für die normale Verwendung von R reicht es meist völlig aus, das Programm über den Port math/R zu instal­lieren. Dieser Weg ist dem Standardanwender zu empfehlen, da er sich dann nicht um Abhängigkeiten von anderen Programmen kümmern muss. Empfohlen wird lediglich, die Option LIBR zu setzen, um auch eine dynamisch gelinkte Version von R zur Verfügung zu haben.

Im Folgenden wird gezeigt, wie entgegen der Empfehlung aus den Originalquellen (ohne Port) installiert werden kann. Auf diese Weise kann z.B. auch die Entwicklerversion oder jede andere verfügbare Version verwendet werden (siehe Abschnitt B). Da es für diese Vorgehensweise keinen Port gibt, sollten verschiedene Helferprogramme dann im System schon vorher installiert sein, um alle Funktionalitäten unter R nutzen zu können (siehe Abschnitt A).

A. FreeBSD für die Verwendung von R vorbereiten

Viele der auch für R notwendigen Ports werden unter FreeBSD zusammen mit anderen Programmen (z.B. Open­Office) installiert. Soweit notwendige Ports noch nicht installiert sind, muss dies nachgeholt werden. Im FreeBSD Handbuch kann nachgelesen werden, wie dabei grundsätzlich vorzugehen ist.

Die für R wichtigsten Ports werden hier kurz erläutert:

A.1 Compiler gcc 6.4.0 mit gfortran

Das FreeBSD-System (12.0-CURRENT) selbst arbeitet mit dem neuen Compiler clang, dieser bringt jedoch nicht den für R benötigten Fortran-Compiler gfortran mit. Dieser muss entweder als Package oder als Port hinzugefügt werden. Bei dieser Gelegenheit kann gleich ein aktuellerer Compiler verwendet werden. Ich bevorzuge die Installation aus dem Portssystem:

# cd /usr/ports/lang/gcc48
# make clean && make install

Nur wenn R nicht aus den Ports installiert wurde, ist es zusätzlich notwendig, während der Aktualisierung von R und seiner Pakete in /etc/make.conf folgende Compiler-Optionen zu aktivieren, damit nicht nur der gfortran Version 6.4.0 verwendet wird, sondern auch der dazugehörige Compiler Version 6.4.0:

CC= gcc6
CXX= g++6
CPP= cpp6

Bitte nicht vergessen, diese Optionen in /etc/make.conf hinterher wieder zu deaktivieren (auskommentieren), damit das System und FreeBSD-Ports fehlerfrei gebaut werden können. Diese benötigen teilweise noch die Version 4.2 des System Compilers.
Vielleicht hat jemand einen Vorschlag, wie das eleganter gelöst werden kann? (Mail-Adresse am Seitenende)

A.2 tcl/tk Scriptsprache

Sollte diese Skriptsprache, erreichbar über die Teilprogramme tcl und tk, noch nicht vorhanden sein, läßt sie sich schnell nachinstallieren. Die zugehörigen Ports sind unter lang/tcl85 und x11-toolkits/tk85 zu finden.

# cd /usr/ports/lang/tcl85
# make clean install
# cd /usr/ports/x11-toolkits/tk85
# make clean install

A.3 TeXLive

Über den Meta-Port TeXLive (print/texlive-full) werden zahlreiche Tools installiert, die unter anderem die Dokumentation des R-Systems zusammenbauen. Darauf sollte keinesfalls verzichtet werden.

A.4 cairo

Wenn R während der Installation cairo (vector graphics library) vorfindet, können bei graphischen Ausgaben wesentlich höhere Qualitäten erreicht werden. Unter FreeBSD findet sich dieser Port unter graphics/cairo.

A.5 Java Laufzeitumgebung

Java ist zwar nicht zwingend notwendig, um produktiv mit R arbeiten zu können. Es empfiehlt sich aber, diese plattformunabhängige Sprache mit einzubinden. Die Installation eines nativen, selbstgebauten Java (nicht Linux-emuliertes Java) gestaltet sich unter FreeBSD leider immer noch etwas umständlich.
Zum Übersetzen eines nativen Java wird nämlich eine läuffähige Javainstallation für den Bootstrapingcode benötigt. Dafür empfiehlt es sich, zunächst die Diablo-Java-Version aus den Ports zu installieren (java/diablo-jdk16).
Bevor die native Java-Version überhaupt installiert werden kann, müssen über einen Browser mehrere Dateien von der Java-Homepage herunter geladen und unter /usr/ports/distfiles/ gespeichert werden. Der Port java/jdk16 gibt genauere Hinweise, wie dabei zu verfahren ist. Wenn alle Dateien vorliegen, kann der Build­prozess gestartet werden. Sobald die native Version installiert ist, kann die Diablo-Version wieder entfernt werden (z.B. pkg_delete diablo-jdk).

B. Installation von R

Sobald alle wichtigen Helferlein (siehe oben) vorhanden sind, kann es losgehen. Die Installation von R kann entweder über einen Port (math/R) durchgeführt werden oder vollständig manuell, was sich nur wenig aufwändiger gestaltet.

Die Portsversion von R wird zwar gut gepflegt, ist aber nicht immer auf dem aktuellen Stand. Zu stärkeren Verzögerungen bei Updates kann es z.B. kommen, wenn FreeBSD selbst gerade ein Versionsupdate erfährt.

Im Folgenden wird hoffentlich ausführlich genug die manuelle Installation von R unter FreeBSD beschrieben:

B.1 R Quelldateien besorgen

Es empfiehlt sich schon aus Gründen der Aktualilität und Sicherheit, die gepackte Quelldatei zur Installation von R aus den Sourcen grundsätzlich nur von einem offiziellen Server (Mirror) aus dem CRAN (The Comprehensive R Archive Network) zu besorgen. Für die hier beschriebene Art der Installation muss ein Dateiarchiv herunter geladen werden, das etwa diesem Namensschema folgt:

R-3.2.3.tar.gz

In dem Beispiel handelt es sich um die R Version 2.15.3, deren Dateien und Verzeichnisse in einem tar-Archiv abgelegt sind, welches zusätzlich mit gzip komprimiert wurde.

B.2 Entpacken der R Quelldateien

Für mich hat es sich bewährt, auch die Dateien des R Systems unter /usr/local/ zu installieren, so wie es für Drittprogramme unter FreeBSD üblich ist.

# cd /usr/local
# tar xvzfo Pfad_zu_Quellarchiv/R-3.2.3.tar.gz

Nun liegt der gesamte Verzeichnisbaum der Quelldateien ausgepackt unter /usr/local/R-3.2.3.

B.3 Bauen und Installieren des R Systems

# cd /usr/local/R-3.2.3
# ./configure
# make && make install

Das R System ist in die zuständigen Verzeichnisse unter FreeBSD eingebaut worden. Die meisten Dateien und Verzeichnisse sind unter /usr/local/lib/R zu finden. Die ausgepackten, für die Installation verwendeten Quelldateien können nun gelöscht werden, da sie nicht mehr benötigt werden.

# cd ..
# rm -R R-3.2.3

B.4 Nacharbeiten

Unter /usr/local/lib/R/etc/ findet sich die Datei repositories. In dieser können einzelne Repositories (d.h. Adressen mit Paket-Archiven für R) an- und abgeschaltet werden und ihr Verhalten bei der Paketinstallation fein­gesteuert werden. Ich setze nach einer Neuinstallation oder einem Upgrade des R Systems die Default-Werte in einem Editor auf true, um auch für exotische, installierte Pakete vorhandene Updates angeboten zu bekommen.

B.5 Die Installation und das Update von R Packages

Schon bei der Installation des R Systems werden zahlreiche R Packages mitinstalliert. Diese Packages und weitere, die bei Bedarf nachinstalliert werden können, finden sich nach der Installation grundsätzlich unter /usr/local/lib/R/library/.

Installation spezieller Packages in R unter FreeBSD 12.0-CURRENT

Einige wenige Packages können in R unter FreeBSD nicht direkt installiert werden, da es dabei zu verschiedenen Abbrüchen kommen kann. Das liegt meistens daran, dass die Konfiguration im Package nicht ausreichend tolerant nach Libraries und Headers sucht, die aus FreeBSD zusätzlich eingebunden werden sollen.

C.1 Packages, die "GNU make" anstatt des "BSD make" benötigen

Es gibt immer noch eine Anzahl Packages, die mit der BSD-Version von make nicht fehlerfrei bauen. In diesen Fällen hilft es, vorübergehend die Umgebungsvariable MAKE auf gmake zu setzen. Das kann etweder in jedem Einzelfall auf Shell-Ebene oder allgemeiner über ein kleines ausführbares Script gelöst werden, in dem nur die Bezeichnung des betroffenen Packages mit Versionsnummer aktualisiert werden muss.

#!/bin/tcsh
setenv MAKE gmake
R CMD INSTALL Packagename_Versionsnummer.tar.gz
unsetenv MAKE

Derartige Scripte verwende ich zurzeit für folgende Packages: Cairo, GDD und png.

C.2 Packages, für die angepasste Konfigurationen notwendig sind

Für mehrere Packages es zur Installation notwendig, zusätzliche Konfigurationsparameter anzugeben. Das kann in der Regel über einzeilige Aufrufe erfolgen:

Package ReadImages
# R CMD INSTALL --configure-args='--with-fftw-include=/usr/local/include \
--with-jpeg-include=/usr/local/include' ReadImages_0.1.3.3.tar.gz

Package rimage
# R CMD INSTALL --configure-args='--with-fftw-include=/usr/local/include \
--with-jpeg-include=/usr/local/include' rimage_0.5-8.2.tar.gz

C.3 Package RNetCDF

Das Package RNetCDF benötigt zur Umrechnung verschiedener Einheiten das FreeBSD Package science/udunits, welches vorher installiert werden muss. Da RNetCDF eine ältere Version erwartet, muss zunächst unter Root-Rechten noch folgender Link gesetzt werden. Erst danach kann RNetCDF erfolgreich installiert werden:

ln -s /usr/local/lib/libudunits2.so /usr/local/lib/libudunits.so

C.4 Packages qtbase und qtpaint

Das Package qtbase gehört zu denjenigen, für die unter FreeBSD mehrere zusätzliche Schritte durchzuführen sind. Für mich hat es sich bewährt, die Sourcen zunächst über GIT zu holen:

# git clone http://github.com/ggobi/qtbase.git

Um das R Package unter FreeBSD übersetzen zu können, muss daraufhin die enthaltene Datei src/Makefile.common entweder manuell oder per Patchfile gepatcht werden. Die folgende Datei zeigt die Art der Veränderung und wird mit patch < qtbase-patchfile verwendet (notwendige Tabulatorsteuerzeichen sind hier nicht korrekt dargestellt):

--- qtbase/src/Makefile.common~ 2013-05-08 16:22:05.000000000 +0200
+++ qtbase/src/Makefile.common 2013-05-08 16:48:26.000000000 +0200
@@ -15,7 +15,7 @@
 MODULE_LINKER_FLAGS = ${SHLIB_CXXLD_ARGS} ${LDFLAGS}

 CMAKE_ARGS += -DR_CXX="${CXX_BIN}" \
-             -DCMAKE_CXX_FLAGS="${CXX_ARGS}" \
+             -DCMAKE_CXX_FLAGS="${CXX_ARGS} -fPIC" \
              -DCMAKE_SHARED_LINKER_FLAGS="${SHARED_LINKER_FLAGS}"

all:

Außerdem ist es notwendig, zwei Umgebungsvariablen zu setzen und den Pfad zum OpenGL Header anzugeben, damit R CMD INSTALL funktioniert:

# setenv MAKE gmake
# setenv RHOME /usr/local/lib/R
# R CMD INSTALL --configure-args='--extra-cflags=-I/usr/local/include/GL' qtbase
# unsetenv RHOME
# unsetenv MAKE

Das Package qtpaint benötigt keinen Patch, kann aber ebenfalls mit GIT geholt und anschließend wie qtbase gebaut und installiert werden:

# git clone http://github.com/ggobi/qtpaint.git
# setenv MAKE gmake
# setenv RHOME /usr/local/lib/R
# R CMD INSTALL --configure-args='--extra-cflags=-I/usr/local/include/GL' qtpaint
# unsetenv RHOME
# unsetenv MAKE