feat(ansible): build agave-validator from source
This commit is contained in:
@@ -157,14 +157,101 @@
|
||||
path: "{{ solana_validator_bin }}"
|
||||
register: solana_validator_bin_stat
|
||||
|
||||
- name: Install Agave build dependencies (Debian/Ubuntu) when validator missing
|
||||
ansible.builtin.apt:
|
||||
name:
|
||||
- build-essential
|
||||
- pkg-config
|
||||
- libssl-dev
|
||||
- clang
|
||||
- cmake
|
||||
- protobuf-compiler
|
||||
- libudev-dev
|
||||
- zlib1g-dev
|
||||
state: present
|
||||
update_cache: true
|
||||
when:
|
||||
- ansible_facts.os_family == "Debian"
|
||||
- not solana_validator_bin_stat.stat.exists
|
||||
|
||||
- name: Ensure Agave source parent directory exists
|
||||
ansible.builtin.file:
|
||||
path: "{{ agave_src_dir | dirname }}"
|
||||
state: directory
|
||||
owner: "{{ solana_user }}"
|
||||
group: "{{ solana_group }}"
|
||||
mode: "0755"
|
||||
when: not solana_validator_bin_stat.stat.exists
|
||||
|
||||
- name: Install rustup (Agave build) for solana user when validator missing
|
||||
ansible.builtin.shell: |
|
||||
set -euo pipefail
|
||||
curl -sSfL https://sh.rustup.rs | sh -s -- -y --default-toolchain "{{ agave_rust_toolchain }}"
|
||||
become_user: "{{ solana_user }}"
|
||||
environment:
|
||||
HOME: "{{ solana_home }}"
|
||||
args:
|
||||
executable: /bin/bash
|
||||
creates: "{{ solana_home }}/.cargo/bin/cargo"
|
||||
when: not solana_validator_bin_stat.stat.exists
|
||||
|
||||
- name: Ensure Rust toolchain is installed for solana user when validator missing
|
||||
ansible.builtin.shell: |
|
||||
set -euo pipefail
|
||||
export PATH="{{ solana_home }}/.cargo/bin:$PATH"
|
||||
rustup toolchain install "{{ agave_rust_toolchain }}"
|
||||
become_user: "{{ solana_user }}"
|
||||
environment:
|
||||
HOME: "{{ solana_home }}"
|
||||
args:
|
||||
executable: /bin/bash
|
||||
when: not solana_validator_bin_stat.stat.exists
|
||||
|
||||
- name: Clone Agave sources when validator missing
|
||||
ansible.builtin.git:
|
||||
repo: "{{ agave_repo_url }}"
|
||||
dest: "{{ agave_src_dir }}"
|
||||
version: "{{ agave_version_tag }}"
|
||||
depth: 1
|
||||
update: true
|
||||
become_user: "{{ solana_user }}"
|
||||
environment:
|
||||
HOME: "{{ solana_home }}"
|
||||
when: not solana_validator_bin_stat.stat.exists
|
||||
|
||||
- name: Build agave-validator from sources when validator missing
|
||||
ansible.builtin.shell: |
|
||||
set -euo pipefail
|
||||
export PATH="{{ solana_home }}/.cargo/bin:$PATH"
|
||||
cd "{{ agave_src_dir }}"
|
||||
cargo +{{ agave_rust_toolchain }} build --release -p agave-validator
|
||||
become_user: "{{ solana_user }}"
|
||||
environment:
|
||||
HOME: "{{ solana_home }}"
|
||||
args:
|
||||
executable: /bin/bash
|
||||
creates: "{{ agave_src_dir }}/target/release/agave-validator"
|
||||
when: not solana_validator_bin_stat.stat.exists
|
||||
|
||||
- name: Install agave-validator to /opt/solana/bin when built
|
||||
ansible.builtin.copy:
|
||||
remote_src: true
|
||||
src: "{{ agave_src_dir }}/target/release/agave-validator"
|
||||
dest: "{{ solana_validator_bin }}"
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0755"
|
||||
when: not solana_validator_bin_stat.stat.exists
|
||||
|
||||
- name: Re-check validator binary after source build
|
||||
ansible.builtin.stat:
|
||||
path: "{{ solana_validator_bin }}"
|
||||
register: solana_validator_bin_stat
|
||||
|
||||
- name: Ensure identity key exists
|
||||
ansible.builtin.shell: |
|
||||
set -euo pipefail
|
||||
KEYGEN="{{ solana_keygen_primary_bin }}"
|
||||
if [ ! -x "$KEYGEN" ]; then
|
||||
KEYGEN="{{ solana_keygen_fallback_bin }}"
|
||||
fi
|
||||
"$KEYGEN" new --no-passphrase -o "{{ solana_identity_path }}"
|
||||
"{{ solana_keygen_bin }}" new --no-passphrase -o "{{ solana_identity_path }}"
|
||||
become_user: "{{ solana_user }}"
|
||||
environment:
|
||||
HOME: "{{ solana_home }}"
|
||||
|
||||
Reference in New Issue
Block a user