在 Anolis OS 上离线安装 R

· 2536字 · 6分钟

最近需要在新的系统环境再装一遍 R,这便得了机会可以重新梳理一遍安装流程。

安装前的准备 🔗

1. 确认安装条件。 🔗

依然是离线安装,且不需要设置防火墙。

2. 确认可以执行 sudo(SuperUser DO)命令,或直接有 root 权限。 🔗

当 Linux 系统环境里缺少一些系统包时,需要使用 sudo 命令来安装。但这次的情况有些特别,我可以用 hadoop 用户使用 sudo 命令,但是只能用 model 用户来安装 R,并且 model 用户不能使用 sudo 命令。

3. 统一规划安装目录。 🔗

这次需要在服务器的两个节点上分别安装 R,将来使用 R 的时候一个节点用不了就可以调用另一个。

4. 确认系统环境和 Linux 版本信息。 🔗

由于开源的 Linux 版本比较复杂,提前熟悉系统环境信息有利于后续查看错误信息,以及找到正确的解决办法。

登入服务器,执行cat /proc/version,得到 Linux 版本信息如下。由于 CRAN 上只提供适配 Linux 的三种版本,即 Debian、Fedora/Redhat、Ubuntu,而根据下面这串字符并不知道应该是哪一个。

Linux version 4.18.0-372.16.1.an8_6.x86_64 (mockbuild@anolis-build-01.openanolis.cn) (gcc version 8.5.0 20210514 (Anolis 8.5.0-10.0.1) (GCC)) #1 SMP Thu Jul 14 10:28:59 CST 2022

以 openanolis 为关键词可以搜索到名为 OpenAnolis(龙蜥)的开源操作系统,根据网络上的信息 Anolis OS 8与 CentOS 8完全兼容,而 CentOS 与 Red Hat Enterprise Linux(RHEL)完全二进制兼容。执行cat /etc/os-release可以得到更详细的版本信息如下。

NAME=“Anolis OS”
VERSION=“8.6”
ID=“anolis”
ID_LIKE=“rhel fedora centos”
VERSION_ID=“8.6”
PLATFORM_ID=“platform:an8”
PRETTY_NAME=“Anolis OS 8.6”
ANSI_COLOR=“0;31”
HOME_URL=“https://openanolis.cn/"

5. 检查系统有无安装 Fortran 编译器。 🔗

后续编译 R 需要用到 Fortran 编译器,没有安装的话就会报错。执行gfortran --version,如果返回的是“command not found”,那么说明没有安装,需要执行相应命令来安装。

sudo yum -y install gcc-gfortran

6. 检查一些 Linux 系统包有无安装。 🔗

当 Linux 环境中没有安装某些系统包时,稍后编译 R 时有些选项不能使用。

如果对应的系统包已经安装,执行 rpm -qa | grep 系统包名称后会返回一些包的版本信息,如果没有返回任何内容,则说明还没安装。稍后编译 R 或安装 R 包时可能会踩坑,比如 Linux 环境中没有安装 libicu-devel 时,后面在 R 中安装 stringi 包时会报错,依赖 stringi 的包都会安装失败。

rpm -qa | grep libicu-devel
rpm -qa | grep readline-devel
rpm -qa | grep libXt-devel
rpm -qa | grep zlib-devel
rpm -qa | grep bzip2-devel
rpm -qa | grep lzma xz-devel
rpm -qa | grep pcre2-devel 
rpm -qa | grep libcurl-devel

rpm -qa | grep libsodium

根据执行返回的结果,这次的系统环境里面已经装了 zlib-devel、prec2-devel,剩下的都需要重新安装。

sudo yum install libicu-devel readline-devel libXt-devel bzip2-devel lzma xz-devel libcurl-devel libcurl-devel

如果打算用安装好的 R 绘图,那么把下面这些也都装上。

sudo yum install libpng libpng-devel libtiff libtiff-devel libjpeg-turbo libjpeg-turbo-devel cairo cairo-devel

7. 查看 GCC 版本信息。 🔗

稍后安装 xgboost 包会需要有适配的 GCC 版本,不然就会报错。查xgboost 包的信息,现在1.7.7.1版本需要的系统支持是SystemRequirements: GNU make, C++17,再查 C++17 需要的 GCC 版本是GCC 9,而当前只有 GCC 8.5,那么如果要安装当前最新版本的 xgboost 可能需要升级 GCC,但安装的时候并没报错。

8. 检查有无安装 Java 开发工具包(JDK) 🔗

如果系统环境中没有安装 JDK ,稍后安装名为 rJava 的 R 包会失败,而依赖 rJava 的 RJDBC 包也会安装失败,那就没法用 RJDBC 来连接数据库了。

通过执行java -version查看版本信息,可以知道 hadoop 用户下已安装,而 model 用户下未安装。此时有多种办法使得 model 用户可以调用 JDK。其一,在 model 用户下配置 hadoop 用户下的 java 环境变量。其二,下载一个.tar.gz的 JDK 压缩包,传到 model 用户上去安装(PS 这次直接从别的环境拷贝过来),大致步骤如下。

#! 进入有 JDK 压缩包的目录下,然后解压
cd /xxxx/model/java/
tar -zxvf jdk-8u162-linux-x64.tar.gz

#! 切换根目录,
cd ~

#! 查看所有文件名有无.bashrc 和 .bash_profile
ls -a

:'
#编辑 .bash_profile
#修改文件:vi
#文件中插入内容:按I键
#复制快捷键:ctrl + insert
#粘贴快捷键:shift + insert
#保存并退出: 按下Esc键 +  :wq
#不保存退出: 按下Esc键 + :q!
'
vi .bash_profile

:'
#!参考 hadoop 用户下该文件的内容
把 JAVA_HOME 替换成 model 用户下的 java 安装目录
'
JAVA_HOME=/xxxx/model/java/jdk1.8.0_162
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$JAVA_HOME/bin

export CLASSPATH=$JAVA_HOME/lib
export LD_LIBRARY_PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib

#!改完并保存后,使修改生效
source .bash_profile

#! 检查是否安装成功
java -version

安装 R 🔗

进入https://cran.r-project.org/,单击左侧“R Sources”,下载 R-4.3.3.tar.gz,然后进入编译和安装的步骤。

#! 切换到压缩包所在目录
cd /xxxx/model/R/

#! 解压,完成后会生成一个新的 R-4.3.3文件夹,里面就是解压后的文件
tar -zxvf R-4.3.3.tar.gz

#! 切换到 R-4.3.3文件夹下面
cd R-4.3.3/

#! 编译,指定安装目录
./configure --enable-memory-profiling --prefix='/xxxx/model/R/R-4.3.3/' --enable-R-shlib=yes --with-readline=yes  --with-libpng=yes --with-x=yes --with-blas --with-tcltk --with-pcre1

#! 编译源代码
make

#! 安装编译好的程序
make install

编译命令中用到的选项有这些作用。

  • --enable-memory-profiling:启用内存分析(memory profiling)选项。
  • --prefix=DIR:设置安装目录。
  • --enable-R-shlib:编译共享库。
  • --with-readline:使用 readline 库,这可以提供命令行编辑功能。
  • --with-libpng:使用 libpng 库,这可以支持 PNG 图像。
  • --with-x:使用 X11,这可以支持图形设备。
  • --with-blas:使用 BLAS 库,这可以提供基本线性代数子程序。
  • --with-tcltk:使用 Tcl/Tk 库,这可以支持 Tcl/Tk 图形用户界面。
  • --with-pcre1:使用 PCRE1 库,这可以提供 Perl 兼容的正则表达式支持。

执行编译(configure)命令后,可以看到如下内容。和以往相比,大部分坑终于都躺平了。

R is now configured for x86_64-pc-linux-gnu

  Source directory:            .
  Installation directory:      /xxxx/model/R/R-4.3.3

  C compiler:                  gcc  -g -O2
  Fortran fixed-form compiler: gfortran  -g -O2

  Default C++ compiler:        g++ -std=gnu++17  -g -O2
  C++11 compiler:              g++ -std=gnu++11  -g -O2
  C++14 compiler:              g++ -std=gnu++14  -g -O2
  C++17 compiler:              g++ -std=gnu++17  -g -O2
  C++20 compiler:                 
  C++23 compiler:                 
  Fortran free-form compiler:  gfortran  -g -O2
  Obj-C compiler:               

  Interfaces supported:        X11
  External libraries:          pcre2, readline, curl
  Additional capabilities:     PNG, JPEG, TIFF, NLS, cairo, ICU
  Options enabled:             shared R library, shared BLAS, R profiling, memory profiling

  Capabilities skipped:        
  Options not enabled:         

  Recommended packages:        yes

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

安装 plumber 包 🔗

安装 R 包的方法参照以前的笔记

这次安装 plumber 包报错需要先安装 sodium 包,而安装 sodium 又报错系统环境中缺少 libsodium。

  • 首先安装 libsodium,由于需要使用 sudo 命令,使用 hadoop 用户来安装。

进入https://download.libsodium.org/libsodium/releases/,下载 lATEST.tar.gz,传到服务器上去。

#! 进入指定目录
cd /home/hadoop/softs/

#! 解压压缩包
tar -zvxf LATEST.tar.gz

#! 进入解压后的新目录
cd libsodium-stable/

#! 指定编译选项
./configure --prefix='/usr'

#! 编译
make && make check

#! 安装
sudo make install

#! 配置动态链接库
sudo ldconfig

#! 模糊匹配 libsodium,如果出现相关版本信息表示安装成功
sudo ldconfig -v | grep libsodium
  • 接着安装 sodium 这个 R 包,这里切换到 model 用户来继续。
#! 切换到 R 程序所在目录
cd /xxxx/model/R/R-4.3.3/bin/

#! 调用 R 程序安装
./R CMD INSTALL -l /xxxx/model/R/R-4.3.3/lib64/R/library /xxxx/model/R/source/sodium_1.3.1.tar.gz
  • 最后再次安装 plumber 这个 R 包。
#! 进入 install_Rpkg.R 所在目录
cd /xxxx/model/R/R_scripts/

#! 安装
../R-4.3.3/bin/Rscript install_Rpkg.R plumber
R