CentOS8编译安装R及RStudio Server

CentOS8离线安装R及RStudio Server

由于 CentOS8 的 EPEL 软件源中只有低版本的 R,因此通过编译安装的方式安装更新版本的 R。

查看当前系统

1
2
cat /etc/redhat-release
hostnamectl
1
2
3
4
5
6
7
8
9
10
11
12
CentOS Linux release 8.3.2011

Static hostname: VM-8-7-centos
Icon name: computer-vm
Chassis: vm
Machine ID: ba26570f96344079bdb623d67ff332ec
Boot ID: b512b0e3522c492cbae54ecf13b3c81b
Virtualization: kvm
Operating System: CentOS Linux 8
CPE OS Name: cpe:/o:centos:centos:8
Kernel: Linux 4.18.0-193.28.1.el8_2.x86_64
Architecture: x86-64

这里使用的是腾讯云的轻量应用服务器。

然后检查一下系统中是否有 R 命令,避免冲突。

下载并解压R安装包

1
2
wget https://mirrors.tuna.tsinghua.edu.cn/CRAN/src/base/R-4/R-4.0.3.tar.gz
tar -xzvf R-4.0.3.tar.gz

书写这篇博文时,R-4.0.4 出了个大BUG,东亚文字在 R Console 里全部都用 Unicode 打印,这与 iswprint 的更改有关。尽管之后发布了“补丁”安装包(实际上应该是恢复了错误函数的全量安装包)和 R-4.0.5,但稳妥起见,还是博主自己正常使用的 R-4.0.3。

R version 4.0.4 Patched (2021-03-05 r80086) https://cran.r-project.org/bin/windows/base/rpatched.html

创建安装目录

1
2
mkdir /home/root/soft/R
mkdir ./R/R-4.0.3

使用 /home/root/soft 存放安装的软件,其下的 ./R 目录存放各个版本的 R。

检查安装环境

1
./configure --prefix=/home/root/soft/R/R-4.0.3 --enable-R-shlib

注意,这里的 --perfix 参数应该填写 R 安装的目录。

Error 1: Fortran compiler

1
yum install gcc-gfortran -y

gcc-gfortran 安装完成后再次运行配置命令。

Error 2: headers/libs (with readline)

1
yum install readline-devel -y

readline-devel 安装完成后再次运行配置命令。

Error 3: X11 headers/libs (with x)

1
yum install libXt-devel -y

libXt-devel 安装完成后再次运行配置命令。

Error 4: libcurl >= 7.28.0

1
yum install curl curl-devel -y

这里遇到了奇怪的问题:我的 CentOS8 已经安装了最新版本的 libcurl-devel,但是 R 的配置检查还是提示该错误。经过反复尝试发现,重新安装可以解决,但是问题发生的原因不明。

libcurl-devel 安装完成后再次运行配置命令,结果显示配置检查成功。

这里需要注意,由于在安装 Python3.7.9 时,安装了 development tools (dnf groupinstall 'development tools'),因此提前安装好了许多依赖项。

最后的问题

配置检查最后报出三个 WARNING:

1
2
3
configure: WARNING: you cannot build info or HTML versions of the R manuals
configure: WARNING: you cannot build PDF versions of the R manuals
configure: WARNING: you cannot build PDF versions of vignettes and help pages

第一个 WARNING 时缺少 textinfo;后两个 WARNING 是因为没有安装 latex 环境,但是 textlive 太难用了,不如安装好 R 后,通过 tinytex 包安装 tinytex 环境。

Attention!

由于使用 R 免不了要画好看的图,因此还需要提前安装一些包来支持图片输出,避免之后需要停止 Rstudio Server 再安装的窘境。

1
yum install libpng libpng-devel libtiff libtiff-devel libjpeg-turbo libjpeg-turbo-devel libX11-devel

在 R 中可以通过命令 capabilities() 查看支持情况。

可以使用 homebrew 套件管理器进行安装,详见Installing R with Homebrew with all the capabilities | Luis Puerto

安装好 R 后,还需要手动安装 png 程序包:

1
install.packages(“png”)

然后进行新的配置检查:

1
./configure --prefix=/home/root/soft/R/R-4.0.3 --enable-R-profiling --enable-memory-profiling --enable-R-shlib --enable-BLAS-shlib --with-x --with-libpng --with-libtiff --with-jpeglib --with-lapack --with-ICU --with-blas --with-cairo

编译安装

1
make & make install

漫长的等待……:tea::tea::tea:

还有奇怪的错误

1
conftest.c:1:10: fatal error: jni.h: No such file or directory

怀疑和 java 有关。

缺失与 Java 有关,手动安装 JDK 1.8 即可解决。

添加环境变量

1
2
3
4
5
6
vim /etc/profile
########## 写入 ##########
R_HOME=/home/software/R
PATH=$PATH:$R_HOME/bin
########## 写入 ##########
source /etc/profile

然后就可以欢快地和 R 玩耍啦

还有个 RStudio Server 没装呢:

安装 RStudio Server

1
yum install rstudio-server-rhel-1.4.1106-x86_64.rpm

这里建议下载好 rpm 包后再上传到云主机进行安装,因为实在是太慢了,而且使用云主机下载不太稳定。

配置 RStudio Server

接着就是设置 rstudio-server 服务的自启动:

1
2
systemctl restart rstudio-server
systemctl enable rstudio-server

此时可以访问 http://<IP>:8787 看看效果:laughing:

无法访问啊?我可是添加了防火墙策略的。让我看看~

1
rstudio-server status

查看 RStudio Server 启动情况:

1
2
3
4
● rstudio-server.service - RStudio Server
Loaded: loaded (/usr/lib/systemd/system/rstudio-server.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Tue 2021-04-27 23:47:16 CST; 2min 37s ago
Main PID: 300945 (code=exited, status=1/FAILURE)

查询资料可以知道,开启 rstudio-server 服务后,除了要打开 8787 端口,还需要配置 rserver.conf。向该文件写入如下内容:

1
rsession-which-r=/home/root/soft/R/R-4.0.3/bin/R

此时可以访问 http://<IP>:8787,成功进入登录界面!:laughing:

但是,无法登录,原因如下:

1
User root could not be authenticated because could not be authenticated because they did not meet the minimum required user id (1000)

所以还得创建一个用户来使用 RStudio Server 服务,应该有一部分是出于安全性考量。

创建一个名为 rsuser 的用户,然后设置密码。用户名的意思是 user of rstudio server:

1
2
adduser rsuser
passwd rsuser

成功登录!

后记

到此为止了吗?不!对于我这种 Linux 小白来说,在 Linux 下安装程序包也是一件心力交瘁(激动人心)的事。

建议使用 root 用户,在 R Console 中安装经常用到的 packages,这样能够使得同一 RStudio Server 实例上的其他用户也可以使用,减少安装次数。

tidyverse

安装时会遇到 stringiicudt 数据包无法下载的问题,这是我国网络国情,可以通过手动下载数据包,上传至服务器后再安装:

1
install.packages("stringi", configure.vars="ICUDT_DIR=/home/root/soft")

然后再安装 tidyverse

1
install.packages("tidyverse")

又是一段漫长的过程……:tea::tea::tea:毕竟对于每个程序包都要进行编译,我的云服务器也只是 1 核 2 G。:sob:

发现 rvestxml2 无法安装,根据报错信息找到解决方法:

1
2
3
4
5
6
7
8
9
10
11
------------------------- ANTICONF ERROR ---------------------------
Configuration failed because libxml-2.0 was not found. Try installing:
* deb: libxml2-dev (Debian, Ubuntu, etc)
* rpm: libxml2-devel (Fedora, CentOS, RHEL)
* csw: libxml2_dev (Solaris)
If libxml-2.0 is already installed, check that 'pkg-config' is in your
PATH and PKG_CONFIG_PATH contains a libxml-2.0.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: configuration failed for package ‘xml2’
1
yum install -y libxml2-devel

然后 tidyverse 就可以成功安装啦!

rgdal

首先开启 powertools 仓库,然后安装 gdal-devel, gdal, proj-devel

1
yum config-manager --set-enabled powertools
1
2
yum install gdal gdal-devel
yum install proj-devel

最后才能够编译安装 rgdal

1
install.packages("rgdal")

tinytex

1
2
install.packages("tinytex")
tinytex::install_tinytex()

依旧是漫长的等待……:sleeping_bed::sleeping_bed::sleeping_bed:睡觉去了,希望明早起来能够安装好(2021-04-28)

早上起来发现它安装好啦,但是还得生成一次文档才能够下载好需要的 Latex 包。

RcppEigen

编译安装这个包很恶心。。。1 核 2 G 的服务器硬生生给编译卡死了,还报出 hundreds of WARNINGS。所以我在另一台 CentOS8 上进行编译安装,然后把编译好的二进制文件拷贝到服务器上,放在R Packages 的安装目录里,这才安装完成。

之所以会安装 RcppEigen,是因为它是 ggpubr 的依赖包。