Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rustup installation fails on raspberry pi 4 (raspbian) #3342

Closed
pistoni opened this issue May 1, 2023 · 17 comments
Closed

Rustup installation fails on raspberry pi 4 (raspbian) #3342

pistoni opened this issue May 1, 2023 · 17 comments
Assignees

Comments

@pistoni
Copy link

pistoni commented May 1, 2023

Problem

I need the latest version ot rustc to install the last release of home assistant, but it seems that the executables for a wrong architecture were downloaded using rustup default installation.

As a result I get

error: command failed: 'rustc': No such file or directory (os error 2)

Help or suggestions?

Thanks, Massimo

Steps

Steps followed:


(homeassistant) homeassistant@raspix:/srv/homeassistant $ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
info: downloading installer
warning: it looks like you have an existing installation of Rust at:
warning: /usr/bin
warning: It is recommended that rustup be the primary Rust installation.
warning: Otherwise you may have confusion unless you are careful with your PATH
warning: If you are sure that you want both rustup and your already installed Rust
warning: then please reply y' or yes' or set RUSTUP_INIT_SKIP_PATH_CHECK to yes
warning: or pass `-y' to ignore all ignorable checks.
error: cannot install while Rust is installed

Continue? (y/N) y

Welcome to Rust!

This will download and install the official compiler for the Rust
programming language, and its package manager, Cargo.

Rustup metadata and toolchains will be installed into the Rustup
home directory, located at:

/home/homeassistant/.rustup

This can be modified with the RUSTUP_HOME environment variable.

The Cargo home directory is located at:

/home/homeassistant/.cargo

This can be modified with the CARGO_HOME environment variable.

The cargo, rustc, rustup and other commands will be added to
Cargo's bin directory, located at:

/home/homeassistant/.cargo/bin

This path will then be added to your PATH environment variable by
modifying the profile files located at:

/home/homeassistant/.profile
/home/homeassistant/.bashrc

You can uninstall at any time with rustup self uninstall and
these changes will be reverted.

Current installation options:

default host triple: aarch64-unknown-linux-gnu
default toolchain: stable (default)
profile: default
modify PATH variable: yes

  1. Proceed with installation (default)
  2. Customize installation
  3. Cancel installation

2

I'm going to ask you the value of each of these installation options.
You may simply press the Enter key to leave unchanged.

Default host triple? [aarch64-unknown-linux-gnu]

Default toolchain? (stable/beta/nightly/none) [stable]

Profile (which tools and data to install)? (minimal/default/complete) [default]

Modify PATH variable? (Y/n)

Current installation options:

default host triple: aarch64-unknown-linux-gnu
default toolchain: stable
profile: default
modify PATH variable: yes

  1. Proceed with installation (default)
  2. Customize installation
  3. Cancel installation

1

info: profile set to 'default'
info: setting default host triple to aarch64-unknown-linux-gnu
info: syncing channel updates for 'stable-aarch64-unknown-linux-gnu'
info: latest update on 2023-04-20, rust version 1.69.0 (84c898d65 2023-04-16)
info: downloading component 'cargo'
5.8 MiB / 5.8 MiB (100 %) 3.0 MiB/s in 2s ETA: 0s
info: downloading component 'clippy'
info: downloading component 'rust-docs'
13.4 MiB / 13.4 MiB (100 %) 3.0 MiB/s in 5s ETA: 0s
info: downloading component 'rust-std'
33.2 MiB / 33.2 MiB (100 %) 3.0 MiB/s in 12s ETA: 0s
info: downloading component 'rustc'
73.4 MiB / 73.4 MiB (100 %) 2.7 MiB/s in 27s ETA: 0s
info: downloading component 'rustfmt'
info: installing component 'cargo'
5.8 MiB / 5.8 MiB (100 %) 5.6 MiB/s in 1s ETA: 0s
info: installing component 'clippy'
info: installing component 'rust-docs'
13.4 MiB / 13.4 MiB (100 %) 1.4 MiB/s in 7s ETA: 0s
info: installing component 'rust-std'
33.2 MiB / 33.2 MiB (100 %) 4.9 MiB/s in 7s ETA: 0s
info: installing component 'rustc'
73.4 MiB / 73.4 MiB (100 %) 5.3 MiB/s in 13s ETA: 0s
info: installing component 'rustfmt'
info: default toolchain set to 'stable-aarch64-unknown-linux-gnu'

stable-aarch64-unknown-linux-gnu installed - (error reading rustc version)

Rust is installed now. Great!

To get started you may need to restart your current shell.
This would reload your PATH environment variable to include
Cargo's bin directory ($HOME/.cargo/bin).

To configure your current shell, run:
source "$HOME/.cargo/env"
(homeassistant) homeassistant@raspix:/srv/homeassistant $ source "$HOME/.cargo/env"
(homeassistant) homeassistant@raspix:/srv/homeassistant $ rustup --version
rustup 1.26.0 (5af9b94 2023-04-05)
info: This is the version for the rustup toolchain manager, not the rustc compiler.
info: The currently active rustc version is (error reading rustc version)
(homeassistant) homeassistant@raspix:/srv/homeassistant $ rustc --version
error: command failed: 'rustc': No such file or directory (os error 2)
(homeassistant) homeassistant@raspix:/srv/homeassistant $

Possible Solution(s)

No response

Notes

No response

Rustup version

1.26.0

Installed toolchains

all
@pistoni pistoni added the bug label May 1, 2023
@pistoni
Copy link
Author

pistoni commented May 1, 2023

SOLVED using another architecture
arm-unknown-linux-gnueabihf

Thanks , bye

@adicarlo
Copy link

adicarlo commented May 5, 2023

Still a bug though. In fact I see 2 bugs here:

  • rustup is guessing the wrong host triple on this OS
  • rustup is not clever enough to notice when it installs the wrong toolchain, leading to confusing messages when end-user attempts to run rustc or cargo

@rickburn
Copy link

rickburn commented May 7, 2023

Still a bug though. In fact I see 2 bugs here:

  • rustup is guessing the wrong host triple on this OS
  • rustup is not clever enough to notice when it installs the wrong toolchain, leading to confusing messages when end-user attempts to run rustc or cargo

Yes this! Cost me days of grief hunting the issue down.

@zachrihall
Copy link

Any update on how to fix this? I've been trying for weeks now

@smarkin-repository
Copy link

I had the same issue.

I think. it's not an issue of rustup. For some reason, raspberry OS shows that it has aarch64, but should arm.
You can try to follow commands.

lscpu | grep Arch
Architecture:                    aarch64

or

uname -a
Linux locahost 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr  3 17:24:16 BST 2023 aarch64 GNU/Linux

You will see aarch64 GNU/Linux.

OS: Linux (Unknown) aarch64
Host: Raspberry Pi 4 Model B Rev 1.1
Kernel: 6.1.21-v8+

@rbtcollins
Copy link
Contributor

This seems to be relevant. https://forums.raspberrypi.com/viewtopic.php?t=349291

One data point that would be useful is the output of grep default ~/.rustup/settings.toml.

What needs to happen is someone checks two things:

  1. that the shell script installs a sensible binary of rustup-init (it seems it does)
  2. that the autodetection in the rust code itself selects an appropriate default host triple

If someone working on that gets stuck, we're happy to provide advice, but ultimately someone with access to the breaking environment needs to scratch this itch.

@Learningbuck
Copy link

Was this fixed? I found that root did not have Bash as default.
echo $0
bash

source $HOME/.cargo/env
export PATH="$HOME/.cargo/bin:$PATH"
rustc --version
cargo --version

root@home:/mnt/data # bash
[root@home /mnt/data]# source $HOME/.cargo/env
[root@home /mnt/data]# export PATH="$HOME/.cargo/bin:$PATH"
[root@home /mnt/data]# rustc --version
rustc 1.72.0 (5680fa18f 2023-08-23)
[root@home /mnt/data]# cargo --version
cargo 1.72.0 (103a7ff2e 2023-08-15)
[root@home /mnt/data]#

Woo!

@rami3l
Copy link
Member

rami3l commented Oct 5, 2023

Duplicate of #3307.

@rami3l rami3l closed this as completed Oct 5, 2023
@djc djc reopened this Oct 5, 2023
@djc djc closed this as not planned Won't fix, can't repro, duplicate, stale Oct 5, 2023
@samskiter
Copy link

samskiter commented Nov 7, 2023

SOLVED using another architecture arm-unknown-linux-gnueabihf

Thanks , bye

First time user of Rust here - trying to install python cryptography so that I can install python certbot so that I can enable ssl for my mqtt server - so I'm thoroughly in a yak-shaving hole here.

This wasn't the most useful message just landing into this issue with no context...

I think it translates to:

rustup toolchain install stable-arm-unknown-linux-gnueabihf
rustup default stable-arm-unknown-linux-gnueabihf

@bw-itis-archival
Copy link

bw-itis-archival commented Nov 9, 2023

@samskiter Or alternatively the following worked for me:
When running the installer from sh.rustup.rs, choose the option "2) Customize installation", and then when prompted for "Default host triple", enter "arm-unknown-linux-gnueabihf". Then accept the defaults for everything else - this will get you back to the numbered install options, this time the triple will be filled out with the custom value and you can choose "1) Proceed with installation (default)" to install. So effectively after you've entered the triple, just keep hitting enter until it installs.

This might be slightly preferable since you don't have to install the incorrect architecture first, which might save time/trouble.

I'm very happy to test this out if there's a fix, for me it happens on a pretty standard install of 64bit raspberry pi OS on a RPi4:

Linux {HOSTNAME} 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr  3 17:24:16 BST 2023 aarch64 GNU/Linux

I've had the default install work fine on 32-bit pi before, so this might just be on 64 bit, which I guess not that many people will be running at the moment?

@rami3l
Copy link
Member

rami3l commented Nov 10, 2023

@bmwebster The script on master should have addressed the problem, would you mind giving it a try? Thanks!

@bw-itis-archival
Copy link

bw-itis-archival commented Nov 16, 2023

@rami3l I tried the following on the Pi I had trouble with before:

  1. Uninstall with rustup self uninstall (this was necessary because otherwise the rustup script very sensibly detects the existing installation and keeps the same triple, which seems to work fine)
  2. Reinstall with curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh and default options - this installed for aarch64-unknown-linux-gnu as before.
  3. rustc fails with error: command failed: 'rustc': No such file or directory (os error 2)
  4. Uninstall with rustup self uninstall
  5. Installed again with curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/rust-lang/rustup/master/rustup-init.sh | sh - hopefully this is the correct script on master?

This still showed aarch64-unknown-linux-gnu as the default triple, I proceeded with installation but unfortunately this still gives the same error.

@rami3l rami3l reopened this Nov 17, 2023
@rami3l rami3l self-assigned this Nov 17, 2023
@Skgland
Copy link
Contributor

Skgland commented Dec 11, 2023

I am currently facing the same problem on a Raspberry Pi 5

The workaround #3342 (comment) by @bmwebster appears to work for me

@Learningbuck
Copy link

Learningbuck commented Dec 11, 2023 via email

@rami3l
Copy link
Member

rami3l commented Dec 20, 2023

@rami3l I tried the following on the Pi I had trouble with before:

  1. Uninstall with rustup self uninstall (this was necessary because otherwise the rustup script very sensibly detects the existing installation and keeps the same triple, which seems to work fine)
  2. Reinstall with curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh and default options - this installed for aarch64-unknown-linux-gnu as before.
  3. rustc fails with error: command failed: 'rustc': No such file or directory (os error 2)
  4. Uninstall with rustup self uninstall
  5. Installed again with curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/rust-lang/rustup/master/rustup-init.sh | sh - hopefully this is the correct script on master?

This still showed aarch64-unknown-linux-gnu as the default triple, I proceeded with installation but unfortunately this still gives the same error.

@bmwebster Sorry, I got this wrong myself in #3342 (comment).
The actual case is that having the right script on master is not enough, because the changes that came with the patch #3307 is in rustup itself (not the script) and this change is currently merged but not yet shipped.

Fortunately, we will cut a rustup release real soon (#3501) which should include a fix for this issue. If you'd like to have a try right now, however, you might need to build rustup from master.

Closing again as a duplicate of #3307.

@rami3l rami3l closed this as not planned Won't fix, can't repro, duplicate, stale Dec 20, 2023
@rami3l
Copy link
Member

rami3l commented Feb 18, 2024

@pistoni @Skgland @bmwebster @samskiter We have deployed an early version of 1.27 and would like to know if this new version works for you out of the box.

To test, simply run the installation with the RUSTUP_UPDATE_ROOT=https://dev-static.rust-lang.org/rustup env variable set.

@bw-itis-archival
Copy link

@rami3l Thanks for the update - this now works for me, running as:

export RUSTUP_UPDATE_ROOT=https://dev-static.rust-lang.org/rustup
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

I get default host triple: armv7-unknown-linux-gnueabihf and the installation seems to work fine.

Thanks for your help!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests