最近需要在新的系统环境再装一遍 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