How to Install Rust on Debian Without Sudo
Note
Since I have written this post rustup has evolved and now it does not require sudo. Please see the latest documentation.
Rust has been around for a while but I have just recently found the opportunity to study it. It has some unique and powerful ideas and I intend to experiment further. This post summarizes the steps I have followed to install Rust toolchain on my Debian Stretch machine without admin rights[1].
Step 0: Temporarily Disabling Sudo
Official Rust documentation suggests installing official installer rustup by running the command below:
curl https://sh.rustup.rs -sSf | sh
This would install the toolchain system-wide, writing to directories like /usr/local. I wanted a user-space install. To ensure sudo is not used I aliased the command like below:
sudo whoami # => root
alias sudo=''
sudo whoami # => muhuk
unalias sudo
sudo whoami # => root
This does not prevent any script to execute /usr/bin/sudo but it is good enough to quell my paranoia.
Step 1: Install Rust Toolchain
I copied rustup.sh file to my ~/bin and made it executable. Then I created a base directory for Rust:
cp ~/Downloads/rustup.sh ~/bin
chmod +x ~/bin/rustup.sh
mkdir -p ~/lib/rust
With this we are ready to run the installer:
$ rustup.sh --help
Usage: rustup.sh [--verbose]
Options:
--channel=(stable|beta|nightly) Install from channel (default stable)
--date=<YYYY-MM-DD> Install from archives
--revision=<version-number> Install a specific release
--spec=<toolchain-spec> Install from toolchain spec
--prefix=<path> Install to a specific location (default /usr/local)
--uninstall Uninstall instead of install
--with-target=<triple> Also install the standard library for the given target
--add-target=<triple> Updates an existing installation with a new target
--list-available-targets Lists targets available to an existing installation
--disable-ldconfig Do not run ldconfig on Linux
--disable-sudo Do not run installer under sudo
--save Save downloads for future reuse
--yes, -y Disable the interactive mode
--help, -h Display usage information
I have used the following command to install[2]:
rustup.sh --disable-sudo --prefix=/home/muhuk/lib/rust
This will download and install Rust compiler and Cargo package manager. It run successfully but since I did not specify --disable-ldconfig there was a warning about that. Following commands should fix this issue:
sudo bash -c 'echo "/home/muhuk/lib/rust/lib" > /etc/ld.so.conf.d/rust.conf'
sudo ldconfig
# Below command would only produce any output if
# you have already compiled something with Rust:
sudo ldconfig -p | grep rust
Step 2: Add Rust Binaries to PATH
Rust base directory has these subdirectories:
$ ls -1 ~/lib/rust
bin
etc
lib
share
Adding export PATH=~/lib/rust/bin:$PATH to ~/.profile would make Rust compiler and Cargo available through the PATH:
$ tail -n1 ~/.profile
export PATH=~/lib/rust/bin:$PATH
Step 3: Verify Installation
Run following commands to verify everything works:
cargo new cargo-test
cd cargo-test
cargo check
cargo build
cargo test
Output of cargo test should look something like below:
$ cargo test
Finished dev [unoptimized + debuginfo] target(s) in 0.0 secs
Running target/debug/deps/cargo_test-9badc6b245845605
running 1 test
test tests::it_works ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Doc-tests cargo-test
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
More Rust posts will follow.
[1] | For the most part. I still needed admin rights for ldconfig. |
[2] | Needless to say you should replace muhuk with your own user name. |
If you have any questions, suggestions or corrections feel free to drop me a line.