在天河二号上配置 Rust 运行环境

受朋友委托,需要帮忙在“天河二号”超级计算机上配置 Rust 编程语言运行环境,并配置安装 rust-overlaps

阅读须知

本文将不涉及:

通过 Rust 独立包安装适合 天河二号的 Rust 运行环境

  1. ssh 远程登录到天河二号1
    $ ssh -i${YOUR_CERTIFICATE_ID} -P${SSH_PORT} ${YOUR_USERNAME}@server.ip.in.vpn
    
  2. 获取超算的服务器平台架构:
    [you@tainhe2-H ~]$ uname -r
    
  3. 了解平台架构后,获取对应平台的Rust 独立安装包, 并上传至超算。此处以x86_64架构为例:
    $ scp -i${YOUR_CERTIFICATE_ID} -P${SSH_PORT} rust-1.44.0-x86_64-unknown-linux-gnu.tar.gz you@server.ip.in.vpn:~
    
  4. 解压安装压缩包:
    [you@tainhe2-H ~]$ tar -zxvf rust-1.44.0-x86_64-unknown-linux-gnu.tar.gz
    
  5. 切换到解压缩目录,并执行安装命令:
    [you@tainhe2-H ~]$ cd rust-1.44.0-x86_64-unknown-linux-gnu
    [you@tainhe2-H rust-1.44.0-x86_64-unknown-linux-gnu]$ ./install.sh --prefix=~/rust --disable-ldconfig --verbose
    
    此命令会将 Rust 安装在 ~/rust 文件夹中,rust 的 可执行文件将会放在 ~/rust/bin文件夹中。
  6. 编辑~/.bashrc, 增加下面这一行配置:
    export PATH=$HOME/rust/bin:$PATH
    
  7. 使~/.bashrc生效:
    [you@tainhe2-H ~]$ source ~/.bashrc
    
  8. 检查 Rust 是否成功安装:
    [you@tainhe2-H ~]$ cargo --version
    cargo 1.44.0 (05d080faa 2020-05-06)
    

离线安装 rust-overlaps

  1. 在本地联网环境拷贝源代码:
    git clone https://github.com/sirkibsirkib/rust-overlaps.git
    
  2. 修复源码的 Cargo.tomlversion2:
    version = "1.1.0"
    
  3. 在代码仓库目录下执行 cargo vendor,获取依赖的源码3
    rust-overlaps$ cargo vendor --respect-source-config
    
    下载好的依赖将会存放到 vendor文件夹中。
  4. rust-overlaps 文件夹中添加 .cargo/config 文件,以便在超算的离线环境中使用本地缓存好的依赖源码进行编译:
    [source.crates-io]
    replace-with = "vendored-sources"
    
    [source.vendored-sources]
    directory = "vendor"
    
  5. 将源码文件夹打包成 .zip 包,然后上传到超算:
    $ scp -i${YOUR_CERTIFICATE_ID} -P${SSH_PORT} rust-overlaps.zip you@server.ip.in.vpn:~
    
  6. 在超算中解压:
    [you@tainhe2-H ~]$ unzip rust-overlaps.zip
    
  7. 离线安装3:
    [you@tainhe2-H ~]$ cd rust-overlaps
    [you@tainhe2-H rust-overlaps]$ cargo install --path . --offline
    
  8. 检查是否安装成功:
    [you@tainhe2-H ~]$ rust-overlaps --version
    ASPOPsolver 1.0
    

小结

当我看到 rust-overlaps 已经超过三年没有更新之后,我就觉得很可能不能够成功编译——但是 Rust 从来没有让我失望 —— 在本文中,我们使用的是最新稳定版的 Rust 1.44, 然而编译一个三年的旧库一次就可以编译成功了。同样,得益于 Rust 以 crate 为单位的并行与增量编译,让编译命令中断后可以继续执行而不需从头编译。这个故事告诉我们,充分吸收现代学术成果的工具比起偏旧的工具对于效率提高有重要影响!

1

ssh登陆前还需登录VPN环境,账号密码为管理员提供的账号密码。

2

Rust仓库的版本号遵循语义化版本,因此必须为x.y.z的形式。更多参见sirkibsirkib/rust-overlaps#2

3

cargo编译中断,可以重新运行命令继续安装,直到安装完成。