天天看點

在天河二号上配置 Rust 運作環境

閱讀須知

本文将不涉及:

  • 如何申請天河二号計算資源
  • 如何分布式運作程式

通過 Rust 獨立包安裝适合 天河二号的 Rust 運作環境

  1. ssh 遠端登入到天河二号^1:
$ ssh -i${YOUR_CERTIFICATE_ID} -P${SSH_PORT} ${YOUR_USERNAME}@server.ip.in.vpn      
  1. 擷取超算的伺服器平台架構:
[you@tainhe2-H ~]$ uname -r      
  1. 了解平台架構後,擷取對應平台的Rust 獨立安裝包, 并上傳至超算。此處以​

    ​x8_64​

    ​架構為例:
$ scp -i${YOUR_CERTIFICATE_ID} -P${SSH_PORT} rust-1.44.0-x86_64-unknown-linux-gnu.tar.gz [email protected]:~      
  1. 解壓安裝壓縮包:
[you@tainhe2-H ~]$ tar -zxvf rust-1.44.0-x86_64-unknown-linux-gnu.tar.gz      
  1. 切換到解壓縮目錄,并執行安裝指令:
[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      
  1. 此指令會将 Rust 安裝在​

    ​~/rust​

    ​​ 檔案夾中,rust 的 可執行檔案将會放在​

    ​~/rust/bin​

    ​檔案夾中。
  2. 編輯​

    ​~/.bashrc​

    ​, 增加下面這一行配置:
export PATH=$HOME/rust/bin:$PATH      
  1. 使​

    ​~/.bashrc​

    ​生效:
[you@tainhe2-H ~]$ source ~/.bashrc      
  1. 檢查 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      
  1. 修複源碼的​

    ​Cargo.toml​

    ​​ 的​

    ​version​

    ​^2:
version = "1.1.0"      
  1. 在代碼倉庫目錄下執行​

    ​cargo vendor​

    ​,擷取依賴的源碼^3:
rust-overlaps$ cargo vendor --respect-source-config      
  1. 下載下傳好的依賴将會存放到​

    ​vendor​

    ​檔案夾中。
  2. 在​

    ​rust-overlaps​

    ​​ 檔案夾中添加​

    ​.cargo/config​

    ​ 檔案,以便在超算的離線環境中使用本地緩存好的依賴源碼進行編譯:
[source.crates-io]
replace-with = "vendored-sources"


[source.vendored-sources]
directory = "vendor"      
  1. 将源碼檔案夾打包成​

    ​.zip​

    ​ 包,然後上傳到超算:
$ scp -i${YOUR_CERTIFICATE_ID} -P${SSH_PORT} rust-overlaps.zip [email protected]:~      
  1. 在超算中解壓:
[you@tainhe2-H ~]$ unzip rust-overlaps.zip      
  1. 離線安裝^3:
[you@tainhe2-H ~]$ cd rust-overlaps
[you@tainhe2-H rust-overlaps]$ cargo install --path . --offline      
  1. 檢查是否安裝成功:
[you@tainhe2-H ~]$ rust-overlaps --version
ASPOPsolver 1.0      

小結

當我看到 ​

​rust-overlaps​

​​ 已經超過三年沒有更新之後,我就覺得很可能不能夠成功編譯——但是 Rust 從來沒有讓我失望 —— 在本文中,我們使用的是最新穩定版的 ​

​Rust 1.44​

​, 然而編譯一個三年的舊庫一次就可以編譯成功了。同樣,得益于 Rust 以 crate 為機關的并行與增量編譯,讓編譯指令中斷後可以繼續執行而不需從頭編譯。這個故事告訴我們,充分吸收現代學術成果的工具比起偏舊的工具對于效率提高有重要影響!

繼續閱讀