ensure-rust: rework global install
I think the secondary "rustup default" was intended to make sure the Zuul user sets up to use the installed rust toolchain (I32f9b285904a7036f9a80ada8a49fa9cf31b5163) but actually results in a re-download of components and another local installation. This isn't really the intention, and also doubles the time spent installing. From the linked comment, it seems like we're not doing our global install correctly; even putting it in /usr doesn't avoid the need for RUST_HOME to be set. Take it's suggestion and install out-of-the-way in /opt, use a small /usr/local/bin wrapper to call with correct env vars set and then setup the installed global binary names to be called via that. Change-Id: I28ef747b809a17664305bfd9754022251390647b
This commit is contained in:
parent
3668acc723
commit
67ae84ce39
@ -7,7 +7,8 @@ Install the Rust toolchain
|
|||||||
.. zuul:rolevar:: ensure_rust_rustup
|
.. zuul:rolevar:: ensure_rust_rustup
|
||||||
:default: True
|
:default: True
|
||||||
|
|
||||||
Install Rust via the ``rustup`` installer.
|
Install Rust via the ``rustup`` installer. This installs the toolchain
|
||||||
|
globally (for all users).
|
||||||
|
|
||||||
.. zuul:rolevar:: ensure_rust_rustup_toolchain
|
.. zuul:rolevar:: ensure_rust_rustup_toolchain
|
||||||
:default: stable
|
:default: stable
|
||||||
@ -15,11 +16,11 @@ Install the Rust toolchain
|
|||||||
The Rust toolchain to install with ``rustup``.
|
The Rust toolchain to install with ``rustup``.
|
||||||
|
|
||||||
.. zuul:rolevar:: ensure_rust_rustup_path
|
.. zuul:rolevar:: ensure_rust_rustup_path
|
||||||
:default: /usr
|
:default: /opt/rust
|
||||||
|
|
||||||
Where to install Rust/Cargo with ``rustup``. ``/usr`` provides the
|
Where to install Rust/Cargo with ``rustup``. Wrappers will
|
||||||
tools globally. This may conflict with distribution Rust packages
|
be installed in ``/usr/local/bin/`` to make them available for
|
||||||
if installed.
|
all users.
|
||||||
|
|
||||||
.. zuul:rolevar:: ensure_rust_packages
|
.. zuul:rolevar:: ensure_rust_packages
|
||||||
:default: False
|
:default: False
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
ensure_rust_rustup: true
|
ensure_rust_rustup: true
|
||||||
ensure_rust_packages: false
|
ensure_rust_packages: false
|
||||||
ensure_rust_rustup_toolchain: stable
|
ensure_rust_rustup_toolchain: stable
|
||||||
ensure_rust_rustup_path: /usr
|
ensure_rust_rustup_path: /opt/rust
|
||||||
|
@ -9,5 +9,19 @@
|
|||||||
executable: /bin/bash
|
executable: /bin/bash
|
||||||
become: yes
|
become: yes
|
||||||
|
|
||||||
- name: Use as selected Rust toolchain
|
# Install wrappers that set env vars for global usage. See
|
||||||
command: rustup default {{ ensure_rust_rustup_toolchain }}
|
# https://github.com/rust-lang/rustup/issues/1085#issuecomment-296604244
|
||||||
|
|
||||||
|
- name: Install wrapper helper script
|
||||||
|
template:
|
||||||
|
src: rust-wrap-setup.sh.j2
|
||||||
|
dest: /usr/local/bin/rust-wrap-setup
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: 0755
|
||||||
|
become: yes
|
||||||
|
|
||||||
|
- name: Run wrapper installation
|
||||||
|
shell: |
|
||||||
|
/usr/local/bin/rust-wrap-setup
|
||||||
|
become: yes
|
||||||
|
16
roles/ensure-rust/templates/rust-wrap-setup.sh.j2
Normal file
16
roles/ensure-rust/templates/rust-wrap-setup.sh.j2
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
cat <<'EOF' > /usr/local/bin/rust-wrap
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
RUSTUP_HOME={{ ensure_rust_rustup_path }} exec {{ ensure_rust_rustup_path }}/bin/${0##*/} "$@"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
chmod 0755 /usr/local/bin/rust-wrap
|
||||||
|
|
||||||
|
for f in {{ ensure_rust_rustup_path }}/bin/*
|
||||||
|
do
|
||||||
|
name=$(basename ${f})
|
||||||
|
echo "Install link for ${name}"
|
||||||
|
ln -f /usr/local/bin/rust-wrap /usr/local/bin/${name}
|
||||||
|
done
|
Loading…
Reference in New Issue
Block a user