Cluster Software Installation and Updates

В настоящее время пользователям необходимо самостоятельно собирать программное обеспечение кластера solana из репозитория git и обновлять его вручную, что чревато ошибками и неудобно.

В этом документе предлагается простая в использовании программа установки и обновления программного обеспечения, которую можно использовать для развертывания готовых двоичных файлов для поддерживаемых платформ. Пользователи могут выбрать использование двоичных файлов, предоставленных Solana или любым другим сторонним поставщиком. Развертывание обновлений управляется с помощью встроенной программы манифеста обновлений.

Мотивирующие примеры

Получите и запустите готовый установщик с помощью загрузочного скрипта curl/shell

Самый простой способ установки для поддерживаемых платформ:

$ curl -sSf https://raw.githubusercontent.com/solana-labs/solana/v1.0.0/install/solana-install-init.sh | sh

Этот скрипт проверит github на наличие последней версии с тегами, загрузит и запустит оттуда двоичный файл solana-install-init.

Если во время установки необходимо указать дополнительные аргументы, используется следующий синтаксис оболочки:

$ init_args=.... # arguments for `solana-install-init ...`
$ curl -sSf https://raw.githubusercontent.com/solana-labs/solana/v1.0.0/install/solana-install-init.sh | sh -s - ${init_args}

Получите и запустите предварительно созданный установщик из выпуска Github.

Имея общеизвестный URL-адрес выпуска, можно получить готовый двоичный файл для поддерживаемых платформ:

$ curl -o solana-install-init https://github.com/solana-labs/solana/releases/download/v1.0.0/solana-install-init-x86_64-apple-darwin
$ chmod +x ./solana-install-init
$ ./solana-install-init --help

Соберите и запустите установщик из исходников

Если предварительно собранный двоичный файл недоступен для данной платформы, всегда можно собрать установщик из исходного кода:

$ git clone https://github.com/solana-labs/solana.git
$ cd solana/install
$ cargo run -- --help

Разверните новое обновление в кластере

Имея tar-архив релиза solana \ (созданный с помощью ci/publish-tarball.sh`), который уже был загружен по общедоступному URL-адресу, следующие команды развернут обновление:

$ solana-keygen new -o update-manifest.json  # <-- only generated once, the public key is shared with users
$ solana-install deploy http://example.com/path/to/solana-release.tar.bz2 update-manifest.json

Запустите узел проверки, который автоматически обновляется

$ solana-install init --pubkey 92DMonmBYXwEMHJ99c9ceRSpAmk9v6i3RdvDdXaVcrfj  # <-- pubkey is obtained from whoever is deploying the updates
$ export PATH=~/.local/share/solana-install/bin:$PATH
$ solana-keygen ...  # <-- runs the latest solana-keygen
$ solana-install run solana-validator ...  # <-- runs a validator, restarting it as necesary when an update is applied

Манифест обновления в сети

Манифест обновления используется для объявления о развертывании архивов новых выпусков в кластере solana. Манифест обновления сохраняется с помощью программы config, и каждая учетная запись манифеста обновления описывает логический канал обновления для данной целевой тройки (например, x86_64-apple-darwin). Открытый ключ учетной записи известен между организацией, развертывающей новые обновления, и пользователями, использующими эти обновления.

Сам архив обновлений размещен в другом месте, вне сети, и его можно получить по указанному download_url.

use solana_sdk::signature::Signature;

/// Information required to download and apply a given update
pub struct UpdateManifest {
    pub timestamp_secs: u64, // When the release was deployed in seconds since UNIX EPOCH
    pub download_url: String, // Download URL to the release tar.bz2
    pub download_sha256: String, // SHA256 digest of the release tar.bz2 file
}

/// Data of an Update Manifest program Account.
#[derive(Serialize, Deserialize, Default, Debug, PartialEq)]
pub struct SignedUpdateManifest {
    pub manifest: UpdateManifest,
    pub manifest_signature: Signature,
}

Обратите внимание, что само поле manifest содержит соответствующую подпись (manifest_signature) для защиты от атак "человек посередине" между инструментом solana-install и RPC API кластера solana.

Чтобы защититься от атак с откатом, solana-install откажется устанавливать обновление с более старым значением timestamp_secs, чем то, что установлено в данный момент.

Выпуск содержимого архива

Ожидается, что архив выпуска будет представлять собой файл tar, сжатый с помощью bzip2, со следующей внутренней структурой:

Инструмент установки solana

Инструмент solana-install используется пользователем для установки и обновления программного обеспечения своего кластера.

Он управляет следующими файлами и каталогами в домашнем каталоге пользователя:

Интерфейс командной строки

solana-install 0.16.0
The solana cluster software installer

USAGE:
    solana-install [OPTIONS] <SUBCOMMAND>

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

OPTIONS:
    -c, --config <PATH>    Configuration file to use [default: .../Library/Preferences/solana/install.yml]

SUBCOMMANDS:
    deploy    deploys a new update
    help      Prints this message or the help of the given subcommand(s)
    info      displays information about the current installation
    init      initializes a new installation
    run       Runs a program while periodically checking and applying software updates
    update    checks for an update, and if available downloads and applies it
solana-install-init
initializes a new installation

USAGE:
    solana-install init [OPTIONS]

FLAGS:
    -h, --help    Prints help information

OPTIONS:
    -d, --data_dir <PATH>    Directory to store install data [default: .../Library/Application Support/solana]
    -u, --url <URL>          JSON RPC URL for the solana cluster [default: http://api.devnet.solana.com]
    -p, --pubkey <PUBKEY>    Public key of the update manifest [default: 9XX329sPuskWhH4DQh6k16c87dHKhXLBZTL3Gxmve8Gp]
solana-install info
displays information about the current installation

USAGE:
    solana-install info [FLAGS]

FLAGS:
    -h, --help     Prints help information
    -l, --local    only display local information, don't check the cluster for new updates
solana-install deploy
deploys a new update

USAGE:
    solana-install deploy <download_url> <update_manifest_keypair>

FLAGS:
    -h, --help    Prints help information

ARGS:
    <download_url>               URL to the solana release archive
    <update_manifest_keypair>    Keypair file for the update manifest (/path/to/keypair.json)
solana-install update
checks for an update, and if available downloads and applies it

USAGE:
    solana-install update

FLAGS:
    -h, --help    Prints help information
solana-install run
Runs a program while periodically checking and applying software updates

USAGE:
    solana-install run <program_name> [program_arguments]...

FLAGS:
    -h, --help    Prints help information

ARGS:
    <program_name>            program to run
    <program_arguments>...    arguments to supply to the program

The program will be restarted upon a successful software update