Giter VIP home page Giter VIP logo

multirust's Introduction

Note: multirust is not actively maintained. Migrate to rustup.rs (help).

Build Status

A simple tool for managing multiple installations of the Rust toolchain. It replaces the standard Rust toolchain with components that dynamically choose between alternate implementations based on context.

Features:

  • Manage multiple installations of the official Rust binaries.
  • Configure Rust toolchains per-directory.
  • Install and update from Rust release channels: nightly, beta, and stable.
  • Receive notifications of updates to release channels.
  • Install historical nightly toolchains from the official archives.
  • Install by specific stable version number.
  • Install additional stds for cross-compilation.
  • Install custom toolchains.
  • Isolate Cargo metadata per-installation.
  • Verify hashes of downloads.
  • Verify signatures (if GPG is available).
  • Resume partial downloads.
  • Requires only bash, curl and common unix utilities.
  • For Linux, OS X, and Windows (via MSYS2).

Migrating to rustup

If you have multirust installed and you would like to migrate to rustup.rs, follow these steps (for Linux/Mac):

  1. First, uninstall Multirust using this command:
curl -sf https://raw.githubusercontent.com/brson/multirust/master/blastoff.sh | sh -s -- --uninstall
  1. Delete the folder ~/.multirust.
  2. If the file /usr/local/lib/rustlib/uninstall.sh still exists, the uninstallation was not successful. Run sudo /usr/local/lib/rustlib/uninstall.sh to complete it.
  3. Install rustup using the instructions at rustup.rs.

Quick installation

curl -sf https://raw.githubusercontent.com/brson/multirust/master/blastoff.sh | sh

This will build and install multirust, possibly prompting you for your password via sudo. It will then download and install the stable toolchain, configuring it as the default when executing rustc, rustdoc, and cargo.

Manual build, install and configure

A manual build and install allows one to tailor multirust to meet specific needs.

The basic template is:

git clone --recursive https://github.com/brson/multirust && cd multirust
git submodule update --init
./build.sh && sudo ./install.sh

Run sudo ./install.sh --uninstall to uninstall.

Run multirust default nightly to download and install the nightly compiler and package manager and configure it as the default.

As an example customization, to install underneath your home directory in e.g. ~/my_stuff/bin/multirust, you could use:

./build.sh && ./install.sh --prefix=~/my_stuff/

(In this scenario, ./install.sh --prefix=~/my_stuff/ --uninstall to uninstall.)

Run ./build.sh && ./install.sh --help to see a list of available options.

Usage

To install Rust, run multirust update <toolchain>. See multirust help update for details and to configure what this will install.

Overriding the compiler in specific directories:

mkdir beta-project && cd beta-project
multirust override beta

Now any time the toolchain is executed in the beta-project directory or any subdirectory thereof the compiler from the beta release channel will be used.

To pin to a specific nightly:

multirust override nightly-2014-12-18

Or a specific stable release:

multirust override 1.0.0

Information about the current override can be displayed with multirust show-override. The current override can be deleted by running multirust remove-override from the directory where the override was created.

Check for updates with multirust update nightly. All three release channels can be updated at once with multirust update.

multirust run will run an arbitrary command in an environment configured for a given toolchain, so e.g. multirust run beta cargo build will run the beta cargo, regardless of the current override. This can also be used to e.g. open a beta shell like multirust run beta bash.

Commands can be abbreviated by using a prefix of the intended command, for example multirust ru (run) or multirust s-o (show-override). In the case of an ambiguous prefix, it picks the first match using the order of commands shown in multirust help.

Toolchain specification

multirust supports several ways to indicate the toolchain: 'stable', 'beta' and 'nightly' all download from the corresponding release channel. When any of these toolchain specifiers are used multirust will periodically notify you of available updates. All three channels can be optionally appended with an archive date, as in 'nightly-2014-12-18', in which case the toolchain is downloaded from the archive for that date (if available). Any other specifier is considered an explicit Rust version number, as in '0.12.0', or a custom toolchain identifier, depending on context.

Cross-compilation

multirust can install additional standard libraries for cross-compilation targets. Once you have installed a toolchain, use the multirust list-available-targets command to show which targets can be added, and multirust add-target to add a target.

Custom toolchains

Custom toolchains - those not distributed by The Rust Project - may be installed from either custom-built installer or from a local directory containing a build of Rust.

To install from an existing Rust build use either the --copy-local or the --link-local flags to the update command. --copy-local will copy a build of Rust to multirust's private toolchain installation directory; --link-local will create a toolchain that is a symlink to a build of Rust, convenient for those who frequently build Rust themselves:

multirust update my-rust --link-local ~/dev/rust/build/x86_64-unknown-linux-gnu/stage2

A custom-built installer can be installed with multirust update <toolchain> --installer <installer-path-or-url>, e.g. multirust update my-rust --installer rust-1.0.0-dev-x86_64-unknown-linux-gnu.tar.gz. In this case the toolchain is installed via the specified installer and can then be activated with multirust default my-rust.

Since the main Rust build does not produce an installer that includes Cargo, it may be easier to install the individual rustc and cargo installers instead of trying to produce the combined installer through rust-packaging. For this reason the --installer flag takes a comma-separated list of installers, allowing custom rustc and cargo packages to be installed with e.g.

multirust update my-rust --installer rustc-1.0.0-dev-x86_64-unknown-linux-gnu.tar.gz,cargo-nightly-x86_64-unknown-linux-gnu.tar.gz

These three options can also be supplied to the default and override commands, in which case the toolchain is also activated after installation.

Implementation Details

multirust installs a script called multirustproxy as all the tools in the Rust toolchain: rustc, cargo, and rustdoc. This script consults multirust to decide which toolchain to invoke, and decides which tool to invoke based on the name it is called as.

multirustproxy automatically applies -C rpath to all rustc invocations so that the resulting binaries 'just work' when using dynamic linking, even though the toolchains live in various places.

It keeps Cargo's metadata isolated per toolchain via the CARGO_HOME environment variable.

multirust saves settings and toolchains per user in ~/.multirust. The directory is initialized when using the multirust command to set the default channel, or when setting an override or updating for first time. The name of this directory can be controlled with the MULTIRUST_HOME environment variable.

Can you trust Rust binaries?

Although multirust verifies signatures of its downloads if GPG is available, the question of whether you can 'trust' Rust depends on quite a few factors. Although I'm not prepared to give advice on this subject, here are some of the details around how the Rust project binaries are signed and verified. You can make your own judgments.

  • Rust binaries are produced on mostly cloud infrastructure to which several people have access.
  • They are signed automatically by a master bot that has access to a secret subkey of the Rust signing key.
  • They are uploaded to s3 using a secret key on that same bot.
  • The master bot is exposed to the Internet through an ssh tunnel via which it communicates with buildbot slaves.
  • Rust binaries are served over HTTPS.
  • The Rust public key is distributed as part of multirust.
  • Rust is self-hosting, bootstrapped off of a chain of binary snapshots that extends back for several years, which are presently served over HTTPS (but have not always been), and are not cryptographically signed.

When GPG successfully verifies a signature from the Rust signing key it will almost certainly emit a warning saying the key is untrusted:

gpg: Signature made Fri 09 Jan 2015 12:07:05 AM PST using RSA key ID 7B3B09DC
gpg: Good signature from "Rust Language (Tag and Release Signing Key) <[email protected]>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 108F 6620 5EAE B0AA A8DD  5E1C 85AB 96E6 FA1B E5FE
     Subkey fingerprint: C134 66B7 E169 A085 1886  3216 5CB4 A934 7B3B 09DC

This is because the Rust signing key isn't known to be trusted by others in your 'web of trust'. It isn't strictly a problem, assuming that you trust the authors of multirust and the channel through which you installed it.

If you are so inclined you can import the Rust signing key, and if it happens to be in the same web of trust as your own trusted keys, then the warnings may go away:

gpg --keyserver hkp://keys.gnupg.net --recv-keys 7B3B09DC

At the present time the certificate chain for the Rust signing key is quite meager though so it's unlikely to help.

Limitations

  • Installation of multirust over an existing installation of Rust or vice versa will cause brokenness. Uninstall the other first. ./install.sh will detect this and error. This should be fixable in the future.
  • The rustc, cargo and rustdoc commands should be symlinks to multirustproxy but are actually copies, a limitation of the installer.
  • Concurrent writing of multirust's metadata can possibly cause minor data loss in limited circumstances.
  • Paths with semicolons in their names will cause breakage when configured with overrides.
  • Other unusual characters in paths may break overrides.
  • Overrides at the filesystem root probably don't work.

Future work

  • Check for and install updates of multirust itself.
  • Windows support.
  • Allow creation of aliases like rustc-0.12.0 (needs cargo to obey RUSTC and RUSTDOC env vars).
  • GC unused toolchains.
  • Cache installers to avoid redownloads? Maybe only useful for testing.
  • override, show-override, remove-override could take an optional path.
  • Install without docs? Saves lots of space.
  • Teach multirust to uninstall itself.
  • Handle temp file cleanup more consistently - always cleaned up on error unless requested otherwise.
  • Use wget if curl isn't available?
  • Command to check for and show available updates explicitly.
  • Figure out what to do about command line completions for cargo, etc.
  • Tests for various paths with spaces in them.
  • Make blastoff script interactive: require confirmation to start and display a notice if gpg is not installed.
  • Add a way to disable signature verification.
  • There are probably ways to cause damage by trusting the user about what is and isn't a 'custom' toolchain.
  • Refactor multirustproxy to use 'multirust run'.

License

multirust is licensed under the same terms as the Rust compiler, now and forevermore.

multirust's People

Contributors

aaparella avatar aetherknight avatar aidanhs avatar ajacmac avatar andrewtj avatar badboy avatar brson avatar cjwelborn avatar cmbrandenburg avatar crumblingstatue avatar dbanetto avatar dotdash avatar durka avatar elyzion avatar flaper87 avatar hnakamur avatar ipetkov avatar jcaudle avatar jgilchrist avatar kimrutherford avatar klieth avatar lukaskalbertodt avatar nodakai avatar pnkfelix avatar r3n4ud avatar simonsapin avatar tamird avatar tomaka avatar vi avatar zargony avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

multirust's Issues

multirust test

LadenSwallow suggested that multirust could be used to run cargo test against many toolchains at once, which is a fascinating idea and not too hard to do.

Add a way to get the path to the real rustc

@pnkfelix suggested rustc --which might just print the path to rustc so people could e.g. write rust-gdb $(rustc --which).

Not sure I like intercepting arguments to rustc like that though. Maybe multirust which rustc.

Cached downloads confuse multirust after deleting toolchain

If one installs a toolchain and then immediately removes the toolchain directory, e.g.

$ multirust default nightly-2015-04-28
multirust: installing toolchain 'nightly-2015-04-28'
...
install: installing component 'rustc'
install: installing component 'cargo'
install: installing component 'rust-docs'

    Rust is ready to roll.

multirust: default toolchain set to 'nightly-2015-04-28'
$ rm -rf .multirust/toolchains/nightly-2015-04-28/

then, (obviously) rustc won't work:

$ rustc -V
multirust: toolchain 'nightly-2015-04-28' not installed. run `multirust update nightly-2015-04-28` to install

but running those commands doesn't help:

$ multirust update nightly-2015-04-28                                                                              
multirust: installing toolchain 'nightly-2015-04-28'
rustup: gpg available. signatures will be verified
rustup: downloading manifest for 'nightly-2015-04-28'
rustup: downloading toolchain for 'nightly-2015-04-28'
rustup: 'nightly-2015-04-28' is already up to date

$ rustc -V
multirust: toolchain 'nightly-2015-04-28' not installed. run `multirust update nightly-2015-04-28` to install

I believe this is because https://github.com/rust-lang/rustup/blob/404d1429dbb6aa46daf92ebf268c24a93474e136/rustup.sh#L1082 shortcircuits if only the download/check isn't necessary, but the return value of 20 is taken to be a short-circuit of the whole installation: https://github.com/rust-lang/rustup/blob/404d1429dbb6aa46daf92ebf268c24a93474e136/rustup.sh#L604-L608

Fail nicely when a wrong toolchain is requested

phantom ~ $ multirust update default
multirust: installing toolchain 'default'
multirust: gpg available. disabling https (avoids rust#21293)
multirust: interpreting toolchain spec as explicit version
multirust: downloading rust installer from 'http://static-rust-lang-org.s3-website-us-west-1.amazonaws.com/dist/rust-default-x86_64-unknown-linux-gnu.tar.gz'
multirust: downloading 'http://static-rust-lang-org.s3-website-us-west-1.amazonaws.com/dist/rust-default-x86_64-unknown-linux-gnu.tar.gz.sha256' to '/home/flaper87/.multirust/tmp/tmp-8059-1'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: (22) The requested URL returned error: 404 Not Found
multirust: couldn't download checksum file 'http://static-rust-lang-org.s3-website-us-west-1.amazonaws.com/dist/rust-default-x86_64-unknown-linux-gnu.tar.gz.sha256'

I mistakenly did the above and multirust currently just fails to download the sha and exits. We should probably check nicely if the toolchain exists (probably execute a HEAD call to the sha url before downloading) and report an error if it doesn't.

Can not reinstall a toolchain after removing it

To reproduce:

multirust update beta
multirust remove-toolchain beta
multirust update beta

Expected result: the last command downloads and installs Rust beta

Actual result: the last command does nothing. Its output includes rustup: 'beta' is already up to date.

Work around: remove the $MULTIRUST_HOME/update-hashes/beta file. remove-toolchain should do this.

No easy way to show the active toolchain

show-override says 'no override' if there is no override, so to see what the current toolchain is you have to run both show-override and show-default. There should be a simple single command to show this information.

Multirust doesn't work with Cargo's tests

After installing multirust, I executed make test in cargo's repository.
But nearly all tests fail because multirust prints:

multirust: no default toolchain configured. run `multirust help default`
multirustproxy: `multirust check-updates-override` failed

Even after runnning multirust default nightly, I still get these errors.

Note that running rustc anywhere on my filesystem works (including /path/to/cargo/target/x86_64-unknown-linux-gnu/cit/..., which is where cargo puts his temporary files during the tests), so I have no idea where this problem comes from.

first run of `multirust update` produces errors

I installed multirust (using @spastorino's hopefully-soon-to-be-merged Homebrew formula) and ran multirust update straightaway. This happened for all three channels:

multirust: nightly revision:

rustc 1.2.0-nightly (b77d60adb 2015-05-29) (built 2015-05-29)
Process didn't exit successfully: `rustc -vV` (exit code: 1)
--- stderr
multirust: no default toolchain configured
/usr/local/bin/rustc: line 107: return: can only `return' from a function or sourced script
multirustproxy: assert_nz toolchain is empty

Running multirust default stable and then multirust update again seems to be the solution.

Why duplicate Cargo caches?

From README.md:

Isolate Cargo metadata per-installation.

How is this beneficial? It means that Cargo’s download cache is duplicated, wasting bandwidth and disk space.

Store override in the project directory?

I think I put overrides in ~/.multirust to keep the list of overrides known in a central place and avoid leaving files all over the file system. It's been pointed out though that if this information were stored in the project directory it could be checked into git.

Override for a specific branch

If I'm working on a project that has a release branch which is supposed to be compiled with stable rustc, and a master branch which is supposed to be compiled with nightly, multirust should allow me to set version overrides depending on the current branch. Example:

$ multirust default stable
$ multirust override nightly
$ git checkout release
$ multirust override --branch stable

Now everything outside of this repo and the release branch of this repo uses the stable channel, and all other branches of this repo use the nightly channel.

Command to run with arbitrary toolchain

Instead of switching overrides sometimes one wants to just see how a single command behaves under some toolchain. Something like multirust run <toolchain> [args].

Add to homebrew

To make maintenance hands-off I might just have the homebrew recipe defer to blastoff.sh

building cargo atop multirust fails, dyn link problems (Mac OS X)

building cargo atop multirust on Mac OS X fails during build-script-build invocations

error: aborting due to 6 previous errors
failed to run custom build command for `time v0.1.23`
Process didn't exit successfully: `/Users/pnkfelix/Dev/Mozilla/cargo-dbgopt.git/target/debug/build/time-6a09e66e4b5c9d32/build-script-build` (signal: 5)
--- stderr
dyld: Library not loaded: x86_64-apple-darwin/stage2/lib/rustlib/x86_64-apple-darwin/lib/libstd-4e7c5e5c.dylib
  Referenced from: /Users/pnkfelix/Dev/Mozilla/cargo-dbgopt.git/target/debug/build/time-6a09e66e4b5c9d32/build-script-build
  Reason: image not found

I do not know whether this is a cargo bug or a multirust one, to be honest, but it seemed troubling that the attempts to resolve libstd were not going through the DYLD_LIBRARY_PATH and instead seemed to be going through ... what I think is an embedded rpath ?

(It is also weird that it seems like is using this path x86_64-apple-darwin/stage2/lib/rustlib/x86_64-apple-darwin/lib/libstd-4e7c5e5c.dylib which looks like it must be coming from a local rust build, even though I am attempting to use multirust solely with the beta and nightly channels ... perhaps that is a clue to something more deeply wrong in my setup...)

Override not setup properly (possibly due to mount/symlinks)

I ran multirust override beta in a directory and the beta was installed. Running multirust list-overrides showed the current directory (let's say /foo) as overriden. However, running rustc --version showed rustc was still the nightly version. I ran the override command again and this time rustc --version showed the proper version, but now multirust list-overrides shows two overrides, /foo and /mnt/foo. In my setup, /foo is a symlink to /mnt/foo.

multirust update --quiet

I’d like to use multirust update in a cron job, where it should not emit any output. My current work around is sh -c 'multirust update > /dev/null' 2>&1 | grep -v stable, but a --quiet command-line parameter would be nice.

multirust is too eager to show update notifications under cargo

This is silly:

   Compiling rustc-serialize v0.2.7
   Compiling tar v0.1.7
   Compiling regex v0.1.10
   Compiling glob v0.1.6
multirust: a new version of 'nightly' is available. run `multirust update nightly` to install it
multirust: a new version of 'nightly' is available. run `multirust update nightly` to install it
multirust: a new version of 'nightly' is available. run `multirust update nightly` to install it
multirust: a new version of 'nightly' is available. run `multirust update nightly` to install it
   Compiling matches v0.1.2
multirust: a new version of 'nightly' is available. run `multirust update nightly` to install it
   Compiling gcc v0.1.4
multirust: a new version of 'nightly' is available. run `multirust update nightly` to install it
   Compiling pkg-config v0.1.4
multirust: a new version of 'nightly' is available. run `multirust update nightly` to install it
   Compiling semver v0.1.12
multirust: a new version of 'nightly' is available. run `multirust update nightly` to install it
   Compiling miniz-sys v0.1.1
multirust: a new version of 'nightly' is available. run `multirust update nightly` to install it
   Compiling time v0.1.12
multirust: a new version of 'nightly' is available. run `multirust update nightly` to install it
   Compiling libz-sys v0.1.0
multirust: a new version of 'nightly' is available. run `multirust update nightly` to install it
   Compiling curl-sys v0.1.3
   Compiling openssl-sys v0.2.15
multirust: a new version of 'nightly' is available. run `multirust update nightly` to install it
multirust: a new version of 'nightly' is available. run `multirust update nightly` to install it
   Compiling libssh2-sys v0.1.2
multirust: a new version of 'nightly' is available. run `multirust update nightly` to install it
   Compiling libgit2-sys v0.1.7
multirust: a new version of 'nightly' is available. run `multirust update nightly` to install it
   Compiling log v0.1.9
multirust: a new version of 'nightly' is available. run `multirust update nightly` to install it
multirust: a new version of 'nightly' is available. run `multirust update nightly` to install it
multirust: a new version of 'nightly' is available. run `multirust update nightly` to install it
multirust: a new version of 'nightly' is available. run `multirust update nightly` to install it
multirust: a new version of 'nightly' is available. run `multirust update nightly` to install it
   Compiling term v0.1.8
multirust: a new version of 'nightly' is available. run `multirust update nightly` to install it
multirust: a new version of 'nightly' is available. run `multirust update nightly` to install it
lib.rs:1:12: 1:23 warning: feature has been added to Rust, directive not necessary

Man pages aren't available by default

At least after I installed multirust I can't seem to open the compiler's man page with man rustc. Instead I have to use an incantation like man -l multirust ctl toolchain-sysroot nightly/share/man/man1/rustc.1

Ideally I shouldn't be forced to update $MANPATH whenever I switch between toolchains.

cat tries to load non-existent file when comparing sums

Saw this in output

multirust: downloading checksums for rust installer from 'http://static-rust-lang-org.s3-website-us-west-1.amazonaws.com/dist/rust-nightly-x86_64-unknown-linux-gnu.tar.gz'
multirust: downloading 'http://static-rust-lang-org.s3-website-us-west-1.amazonaws.com/dist/rust-nightly-x86_64-unknown-linux-gnu.tar.gz.sha256' to '/tmp/tmp.zbssz1cYk0/multirust-home/tmp/tmp-18486-6'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   111  100   111    0     0   2286      0 --:--:-- --:--:-- --:--:--  2312
cat: /tmp/tmp.zbssz1cYk0/multirust-home/channel-sums/nightly.sha256: No such file or directory
multirust: downloading rust installer from 'http://static-rust-lang-org.s3-website-us-west-1.amazonaws.com/dist/rust-nightly-x86_64-unknown-linux-gnu.tar.gz'

rust-lldb not found

/usr/local/bin/rust-lldb: line 118: /home/flaper87/.multirust/toolchains/1.0.0-alpha/bin/rust-lldb: No such file or directory
$ lldb --version
lldb version 3.5.0 ( revision )
$ multirust show-override
multirust: override directory: /home/flaper87/workspace/personal/multirust
multirust: override toolchain: 1.0.0-alpha
multirust: override location: /home/flaper87/.multirust/toolchains/1.0.0-alpha

rustc 1.0.0-alpha (44a287e6e 2015-01-08 17:03:40 -0800)
cargo 0.0.1-pre-nightly (23ed197 2015-01-06 02:37:42 +0000)

Update message breaks usage with cargo

When a new version is available, multirust outputs a message that confuses cargo's dylib prefix/suffix discovery. Maybe multirust should output messages to stderr or entirely skip the message if --print is used with rustc.

$ cargo test --verbose
multirust: a new version of 'nightly' is available. run `multirust update nightly` to install it
thread '<main>' panicked at 'rustc --print-file-name output has changed', src/cargo/ops/cargo_rustc/context.rs:110

multirust update all

Updates all currently installed toolchains, e.g. nightly and beta all in one go.

Alternatively, have multirust update nightly beta ... work.

Installation errors if current directory contains a space

When running ./build.sh in a directory containing a space, I get the following output:

$ ./build.sh                                                                                                                                                    [22:29:38]
/Users/andrew/Desktop/space test/multirust/src/rust-installer/gen-install-script.sh: line 213: cd: /Users/andrew/Desktop/space: No such file or directory
cat: /rust-installer-version: No such file or directory
cat: /install-template.sh: No such file or directory

To be clear, the steps to replicate are:

mkdir "~/Desktop/space test"
cd ~/Desktop/space\ test
git clone --recursive https://github.com/brson/multirust && cd multirust
git submodule update --init
./build.sh

This may be a low priority edge-case, but I thought I'd bring it up anyways. Thanks!

`multirust update` always errors on stable

multirust update (without a toolchain specified) currently fails every time on stable, probably because that doesn’t exist yet. But this should resolve itself next month, I’m fine with ignoring it until then.

show-override fails weirdly if no cargo is installed

101 brian@brianX1:~/dev/rust/build⟫ multirust show-override
multirust: override directory: /home/brian/dev/rust
multirust: override toolchain: rust1-stage2
multirust: override location: /home/brian/.multirust/toolchains/rust1-stage2

rustc 1.0.0-nightly (e326aa197 2015-04-09) (built 2015-04-09)
/usr/local/bin/multirust: 1279: /usr/local/bin/multirust: /home/brian/.multirust/toolchains/rust1-stage2/bin/cargo: not found

--link-local copies rather than links

$ multirust override rust-stage2 --link-local build/x86_64-unknown-linux-gnu/stage2 --verbose
multirust: checking metadata version
multirust: got metadata version 1
multirust: cmd: override
multirust: toolchain: rust-stage2
multirust: option_name: --link-local
multirust: option_value: build/x86_64-unknown-linux-gnu/stage2
multirust: looking for installed toolchain 'rust-stage2'
multirust: removing existing toolchain before the update
multirust: removing directory '/home/huon/.multirust/toolchains/rust-stage2'
multirust: toolchain 'rust-stage2' uninstalled
multirust: copying from /home/huon/rust/build/x86_64-unknown-linux-gnu/stage2
multirust: override toolchain for '/home/huon/rust' set to 'rust-stage2'

And there's no links inside the rust-stage2 toolchain directory (and it isn't a link itself), i.e. find /home/huon/.multirust/toolchains/rust-stage2 -type l returns nothing.

Windows support.

I know it doesnt support windows yet, but will this eliminate the need to delete rust manually then download another rust installer? or will this fix it? also when will Windows support become available?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.