Установка ноды Solana Mainnet + SolanaForge
Гайд НЕ АКТУАЛЬНЫЙ Я УШЕЛ В НОВЫЙ ПУЛ
https://teletype.in/@solanamb/projectx
1) Подкладываем ключи на сервер.
mainnet-validator-keypair.json
vote-account-keypair.json
sudo apt-get update
sudo apt-get upgrade
sh -c "$(curl -sSfL https://release.solana.com/v1.17.27/install)"
export PATH="$HOME/.local/share/solana/install/active_release/bin:$PATH"
solana config set --url https://api.mainnet-beta.solana.com
solana config set --keypair $HOME/mainnet-validator-keypair.json
bash <(curl -s https://raw.githubusercontent.com/DOUBLE-TOP/guides/main/solana/tune.sh)
4) Проверяем, должен отобразиться ваш баланс
solana balance
5) Создаем сервис для запуска ноды
cat > /etc/systemd/system/solana.service<<EOF [Unit] Description=Solana MB node After=network.target syslog.target StartLimitIntervalSec=0 [Service] User=$USER Type=simple Restart=always RestartSec=1 LimitNOFILE=1024000 Environment="SOLANA_METRICS_CONFIG=host=https://metrics.solana.com:8086,db=mainnet-beta,u=mainnet-beta_write,p=password" ExecStart=$HOME/.local/share/solana/install/active_release/bin/solana-validator \\ --entrypoint entrypoint.mainnet-beta.solana.com:8001 \\ --entrypoint entrypoint2.mainnet-beta.solana.com:8001 \\ --entrypoint entrypoint3.mainnet-beta.solana.com:8001 \\ --entrypoint entrypoint4.mainnet-beta.solana.com:8001 \\ --entrypoint entrypoint5.mainnet-beta.solana.com:8001 \\ --known-validator 7Np41oeYqPefeNQEHSv1UDhYrehxin3NStELsSKCT4K2 \\ --known-validator GdnSyH3YtwcxFvQrVVJMm1JhTS4QVX7MFsX56uJLUfiZ \\ --known-validator DE1bawNcRJB9rVm3buyMVfr8mBEoyyu73NBovf2oXJsJ \\ --known-validator CakcnaRDHka2gXyfbEd2d3xsvkJkqsLw2akB3zsN1D2S \\ --expected-genesis-hash 5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d \\ --only-known-rpc \\ --wal-recovery-mode skip_any_corrupted_record \\ --identity $HOME/mainnet-validator-keypair.json \\ --vote-account $HOME/vote-account-keypair.json \\ --ledger $HOME/ledger \\ --limit-ledger-size 50000000 \\ --dynamic-port-range 8000-8020 \\ --log $HOME/solana.log \\ --full-snapshot-interval-slots 2500 \\ --incremental-snapshot-interval-slots 500 \\ --accounts-hash-interval-slots 500 \\ --maximum-full-snapshots-to-retain 1 \\ --maximum-incremental-snapshots-to-retain 2 \\ --maximum-local-snapshot-age 2500 \\ --full-rpc-api \\ --private-rpc \\ --no-snapshot-fetch \\ --use-snapshot-archives-at-startup when-newest \\ --rpc-port 8899 ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID [Install] WantedBy=multi-user.target EOF
sudo systemctl daemon-reload
sudo systemctl enable solana
6) Скачиваем спеп через Snapshot Finder
sudo apt-get update \ && sudo apt-get install python3-venv git -y \ && git clone https://github.com/c29r3/solana-snapshot-finder.git \ && cd solana-snapshot-finder \ && python3 -m venv venv \ && source ./venv/bin/activate \ && pip3 install -r requirements.txt && cd $HOME
source $HOME/solana-snapshot-finder/venv/bin/activate
python3 $HOME/solana-snapshot-finder/snapshot-finder.py --snapshot_path $HOME/ledger
ждем окончания загрузки снепа и его распаковки примерно 10+- минут
sudo systemctl restart solana
cat > logrotate.sol <<EOF $HOME/solana.log { rotate 3 daily missingok compress compresscmd /usr/bin/bzip2 compressext .bz2 postrotate systemctl kill -s USR1 solana.service endscript } EOF
sudo cp logrotate.sol /etc/logrotate.d/sol
Проверяем ноду командами и ждем пока она догонит.
solana-validator monitor
solana catchup --our-localhost --follow --log
curl -s https://gist.githubusercontent.com/razumv/1500a0497c03936db4ca36e36794e5ab/raw/abc3986cb5fb720a9c54312e5adbc0a2ff404e22/monitoring_solana.sh > monitoring_solana.sh && chmod +x monitoring_solana.sh && ./monitoring_solana.sh
Когда нода догонит можно приступать к установки SolanaForge
SolanaForge
SolanaForge
ВАЖНО!!! Нужно выбрать окно между блоками и приступать.
nano start.sh
Это откроет редактор nano
с новым файлом start.sh
. Скопируйте и вставьте в этот файл следующий скрипт. Не забудьте заменить FORGE_TAG
и FORGE_BRANCH
на актуальные значения для вашего случая:
#!/bin/bash FORGE_TAG="v1.17.28-forge" FORGE_BRANCH="v1.17.28-forge" # check ver FORGE_VER=$(~/.local/share/solana/install/releases/${FORGE_TAG}/bin/solana --version) echo $FORGE_VER if [ -z "$FORGE_VER" ]; then curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y source $HOME/.cargo/env rustup component add rustfmt rustup update sudo apt-get update -y sudo apt-get install libssl-dev libudev-dev pkg-config zlib1g-dev llvm clang cmake make libprotobuf-dev protobuf-compiler -y # clone repo cd ~/ && rm -rf ~/solana-forge && mkdir ~/solana-forge cd ~/solana-forge/ #git clone https://github.com/solana-forge/solana.git --branch ${FORGE_TAG} --single-branch git clone https://github.com/solana-forge/forge-solana.git solana cd ~/solana-forge/solana git reset --hard git pull origin ${FORGE_BRANCH} git switch -c ${FORGE_BRANCH} git fetch git checkout tags/${FORGE_TAG} git submodule update --init --recursive CI_COMMIT=$(git rev-parse HEAD) scripts/cargo-install-all.sh --validator-only ~/.local/share/solana/install/releases/"${FORGE_TAG}" ln -sfn ~/.local/share/solana/install/releases/"${FORGE_TAG}" ~/.local/share/solana/install/releases/forge ~/.local/share/solana/install/releases/forge/bin/solana-validator --version else echo "$FORGE_TAG already installed" fi
После вставки и изменения скрипта сохраните файл и выйдите из редактора nano
(Ctrl+O, Enter, Ctrl+X).
2) Делаем скрипт исполняемым и запускаем его
chmod +x start.sh
./start.sh
Во время компиляции Возможны WARN - это нормально!
3) Делаем с ноды пинг ближайших серверов Forge
ping ДОМЕН
Обновлённый список серверов pbs-url (не забываем использовать порт :6775)
jp.solanaforge.xyz [66.42.35.12]
au.solanaforge.xyz [45.77.232.79]
sw.solanaforge.xyz [70.34.220.34]
usa.solanaforge.xyz [45.32.139.172]
ny.solanaforge.xyz [45.77.220.225]
amsterdam.solanaforge.xyz [95.179.137.96]
eu.solanaforge.xyz [95.179.248.85]
ru.solanaforge.xyz [158.160.17.129]
singapore.solanaforge.xyz [149.28.131.30]
4) Регистрируемся в ЛК http://app.solanaforge.xyz/register/yStHB1TQREIsB99o
Добавляем свой Identity, кошелёк для выплат.
Копируем uuid (его нужно будет вставить в новый сервисник)
4) Создаем фордж сервисник. ВАЖНО!!! Прописать в нем
--pbs-uuid НАШ UUID из пункта 4
--pbs-url http://ИЗ_ПУНКТА_3:6775 (пример на скрине)
cat > /etc/systemd/system/forge.service<<EOF [Unit] Description=Solana MB node After=network.target syslog.target StartLimitIntervalSec=0 [Service] User=$USER Type=simple Restart=always RestartSec=1 LimitNOFILE=1024000 Environment="SOLANA_METRICS_CONFIG=host=https://metrics.solana.com:8086,db=mainnet-beta,u=mainnet-beta_write,p=password" Environment="PATH=/bin:/usr/bin:/root/.local/share/solana/install/releases/forge/bin" ExecStart=/root/.local/share/solana/install/releases/forge/bin/solana-validator \\ --entrypoint entrypoint.mainnet-beta.solana.com:8001 \\ --entrypoint entrypoint2.mainnet-beta.solana.com:8001 \\ --entrypoint entrypoint3.mainnet-beta.solana.com:8001 \\ --entrypoint entrypoint4.mainnet-beta.solana.com:8001 \\ --entrypoint entrypoint5.mainnet-beta.solana.com:8001 \\ --known-validator 7Np41oeYqPefeNQEHSv1UDhYrehxin3NStELsSKCT4K2 \\ --known-validator GdnSyH3YtwcxFvQrVVJMm1JhTS4QVX7MFsX56uJLUfiZ \\ --known-validator DE1bawNcRJB9rVm3buyMVfr8mBEoyyu73NBovf2oXJsJ \\ --known-validator CakcnaRDHka2gXyfbEd2d3xsvkJkqsLw2akB3zsN1D2S \\ --expected-genesis-hash 5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d \\ --only-known-rpc \\ --wal-recovery-mode skip_any_corrupted_record \\ --identity $HOME/mainnet-validator-keypair.json \\ --vote-account $HOME/vote-account-keypair.json \\ --ledger $HOME/ledger \\ --limit-ledger-size 50000000 \\ --dynamic-port-range 8000-8020 \\ --log $HOME/solana.log \\ --full-snapshot-interval-slots 25000 \\ --incremental-snapshot-interval-slots 5000 \\ --accounts-hash-interval-slots 5000 \\ --maximum-full-snapshots-to-retain 1 \\ --maximum-incremental-snapshots-to-retain 2 \\ --maximum-local-snapshot-age 6500 \\ --full-rpc-api \\ --private-rpc \\ --no-snapshot-fetch \\ --use-snapshot-archives-at-startup when-newest \\ --pbs-uuid *********************************** \\ --pbs-url http://eu.solanaforge.xyz:6775 \\ --rpc-port 8899 ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID [Install] WantedBy=multi-user.target EOF
sudo systemctl daemon-reload
Проверяем правильно ли лягли сервисники
cat /etc/systemd/system/solana.service
cat /etc/systemd/system/forge.service
sudo systemctl enable forge.service
5) Выбираем момент между блоками и стартуем через окно рестарта
solana-validator wait-for-restart-window && sudo systemctl stop solana && systemctl disable solana && systemctl start forge && solana-validator monitor
curl -s http://localhost:8899 -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1, "method":"getVersion"}'
7) Теперь нужно закомментировать install в скрипте, что-бы в случае обновления пакетов- сервис forge не рестартовался
nano start.sh
ставим # перед sudo как на скрине
После вставки и изменения скрипта сохраните файл и выйдите из редактора nano
(Ctrl+O, Enter, Ctrl+X).
Переключение между solana и forge
1) C Forge - Solana
solana-validator wait-for-restart-window && sudo systemctl stop forge && systemctl disable forge && sudo systemctl enable solana && systemctl start solana && solana-validator monitor
2) С Solana - Forge
solana-validator wait-for-restart-window && sudo systemctl stop solana && systemctl disable solana && sudo systemctl enable forge && systemctl start forge && solana-validator monitor
solana catchup --our-localhost --follow --log
Если лежит solana.service в корне, то перезапускать так:
solana-validator wait-for-restart-window && sudo systemctl stop forge && systemctl disable forge && sudo ln -sf $HOME/solana.service /etc/systemd/system && sudo systemctl enable solana && systemctl start solana && solana-validator monitor
Обнова Forge
nano start.sh
1) Меняем в скрипте актуальный релиз версии Forge
./start.sh
solana-validator wait-for-restart-window && sudo systemctl restart forge && solana-validator monitor
curl -s http://localhost:8899 -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1, "method":"getVersion"}'
cat > logrotate.sol <<EOF $HOME/solana.log { rotate 3 daily missingok compress compresscmd /usr/bin/bzip2 compressext .bz2 postrotate systemctl kill -s USR1 forge.service endscript } EOF
sudo cp logrotate.sol /etc/logrotate.d/sol
sudo logrotate -f /etc/logrotate.d/sol
tail -f solana.log
Установка JITO + Forge
Регистрируемся в ЛК http://app.solanaforge.xyz/register/yStHB1TQREIsB99o
Добавляем свой Identity, кошелёк для выплат.
1) Запускаем скрипт установки JITO клиента
curl https://sh.rustup.rs -sSf | sh source $HOME/.cargo/env rustup component add rustfmt rustup update sudo apt-get update sudo apt-get install libssl-dev libudev-dev pkg-config zlib1g-dev llvm clang cmake make libprotobuf-dev protobuf-compiler
TAG="v1.17.31-jito" cd ~/ && rm -rf ~/solana-forge && mkdir ~/solana-forge cd ~/solana-forge/ git clone https://github.com/solana-forge/jito-solana/ solana cd solana git fetch git checkout tags/${TAG} git submodule update --init --recursive CI_COMMIT=$(git rev-parse HEAD) scripts/cargo-install-all.sh --validator-only ~/.local/share/solana/install/releases/"${TAG}" ln -sfn ~/.local/share/solana/install/releases/"${TAG}" ~/.local/share/solana/install/releases/forge ~/.local/share/solana/install/releases/forge/bin/solana-validator --version
cat > /etc/systemd/system/forge.service<<EOF [Unit] Description=Solana MB node After=network.target syslog.target StartLimitIntervalSec=0 [Service] User=$USER Type=simple Restart=always RestartSec=1 LimitNOFILE=1024000 Environment="SOLANA_METRICS_CONFIG=host=https://metrics.solana.com:8086,db=mainnet-beta,u=mainnet-beta_write,p=password" Environment="PATH=/bin:/usr/bin:/root/.local/share/solana/install/releases/forge/bin" ExecStart=/root/.local/share/solana/install/releases/forge/bin/solana-validator \\ --entrypoint entrypoint.mainnet-beta.solana.com:8001 \\ --entrypoint entrypoint2.mainnet-beta.solana.com:8001 \\ --entrypoint entrypoint3.mainnet-beta.solana.com:8001 \\ --entrypoint entrypoint4.mainnet-beta.solana.com:8001 \\ --entrypoint entrypoint5.mainnet-beta.solana.com:8001 \\ --known-validator 7Np41oeYqPefeNQEHSv1UDhYrehxin3NStELsSKCT4K2 \\ --known-validator GdnSyH3YtwcxFvQrVVJMm1JhTS4QVX7MFsX56uJLUfiZ \\ --known-validator DE1bawNcRJB9rVm3buyMVfr8mBEoyyu73NBovf2oXJsJ \\ --known-validator CakcnaRDHka2gXyfbEd2d3xsvkJkqsLw2akB3zsN1D2S \\ --expected-genesis-hash 5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d \\ --only-known-rpc \\ --wal-recovery-mode skip_any_corrupted_record \\ --identity $HOME/mainnet-validator-keypair.json \\ --vote-account $HOME/vote-account-keypair.json \\ --ledger $HOME/ledger \\ --limit-ledger-size 50000000 \\ --dynamic-port-range 8000-8020 \\ --log $HOME/solana.log \\ --full-snapshot-interval-slots 25000 \\ --incremental-snapshot-interval-slots 5000 \\ --accounts-hash-interval-slots 5000 \\ --maximum-full-snapshots-to-retain 1 \\ --maximum-incremental-snapshots-to-retain 2 \\ --maximum-local-snapshot-age 6500 \\ --full-rpc-api \\ --private-rpc \\ --no-snapshot-fetch \\ --use-snapshot-archives-at-startup when-newest \\ --tip-payment-program-pubkey T1pyyaTNZsKv2WcRAB8oVnk93mLJw2XzjtVYqCsaHqt \\ --tip-distribution-program-pubkey 4R3gSG8BpU4t19KYj8CfnbtRpnT8gtk4dvTHxVRwc2r7 \\ --merkle-root-upload-authority GZctHpWXmsZC1YHACTGGcHhYxjdRqQvTpYkb9LMvxDib \\ --commission-bps 10000 \\ --relayer-url http://ams.solanaforge.xyz:11226 \\ --block-engine-url https://frankfurt.mainnet.block-engine.jito.wtf \\ --shred-receiver-address 145.40.93.84:1002 \\ --rpc-port 8899 ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID [Install] WantedBy=multi-user.target EOF
sudo systemctl daemon-reload
Проверяем правильно ли лег сервисник
cat /etc/systemd/system/forge.service
solana-validator wait-for-restart-window && sudo systemctl restart forge && solana-validator monitor