Установка RoninDojo на x86
Cover

Установка RoninDojo на x86

2 февраля 2024 г.
Автор выражает благодарность Estudio Bitcoin, и лично Albercoin и Arkad, за их работу по установке RoninDojo на x86.
С теорией CoinJoin в Whirlpool, а также практическим иcпользованием Dojo, можно ознакомиться здесь. Установка “ванильного” Dojo описана в официальной документации Samourai и в руководстве от 𝕂𝕐ℂ𝟛.

Отличия Dojo и RoninDojo #

В состав классического Dojo-сервера входят:

  • Bitcoin Core.
  • Обозреватель блокчейна BTC RPC Explorer.
  • Индексатор блокчейна Fulcrum (совместим с ElectrumX) или Addrindexrs.
  • Панель управления Dojo Maintenance Tool (DMT).
  • Whirlpool CLI.
  • Поддержка Testnet (в RoninDojo отсутствует).

В RoninDojo добавлены:

  • Индексатор блокчейна Electrum Rust Server (electrs). Таким образом, пользователь может выбирать из трех вариантов.
  • Опционально устанавливаемый обозреватель блокчейна Mempool.
  • Веб-интерфейс Ronin UI.
  • Whirlpool GUI непосредственно в веб-интерфейсе.
  • Консольная панель управления Ronin CLI.
  • Whirlpool Stats Tool (WST).
  • Boltzmann Calculator.
  • Резервное копирование блокчейна на отдельный диск после IBD.

В данном руководстве будет описана ручная установка всех компонентов в операционной системе на базе Debian. Я использовал Ubuntu 22.04. Данный способ позволит:

  • Использовать любое оборудование, соответствующее минимальным требованиям. Два SSD-диска являются рекомендуемой конфигурацией, но совсем не обязательной.
  • Выбирать базовую операционную систему.
  • Настроить необходимые компоненты до установки системы:
    • Выбрать индексатор (Electrs, Fulcrum или Addrindexrs).
    • Установить обозреватель Mempool.
    • Включить Auth47 для аутентификации в DMT с помощью PayNym.
    • Сконфигурировать мосты для Tor.
    • Включить поддержку Testnet.
Если вы только изучаете возможности кошелька Samourai, то я рекомендую попробовать все возможности именно в Testnet. Для этого вам достаточно виртуальной машины и 100 ГБ выделенного пространства.

Системные требования #

  • 64-разрядный компьютер с процессором Intel/AMD. Рекомендуется Intel Core i5 6500 или аналогичный.
  • Минимум 8 ГБ оперативной памяти.
  • SSD-накопитель объемом 1 ТБ, настоятельно рекомендуется 2 ТБ. Так же хорошей практикой будет использование небольшого по объему SSD от 100 ГБ для функционирования операционной системы, в то время, как данные блокчейна будут находиться на отдельном большом диске.
  • Рекомендуется подключаемый HDD/SSD-накопитель объемом 1 ТБ для создания резервной копии данных блокчейна из Bitcoin Core.

Установка операционной системы #

Вам необходимо установить базовую операционную систему. Я использовал серверную версию Ubuntu 22.04. Скачать ее можно на официально сайте Ubuntu. Подробную инструкцию по установке можно найти здесь.

В процессе установки необходимо выключить опцию “Set up this disk as an LVM group”.

Если вы используете два SSD, то выберите диск меньшего размера.

Не забудьте включить опцию “Install OpenSSH server”.

После успешной установки зайдите на ваш сервер из локальной сети с помощью SSH-клиента, используя имя пользователя, заданное при установке, внутренний IP-адрес вашей машины для RoninDojo и порт 22. Узнать адрес в вашей сети можно с помощью команды на сервере:

hostname -I

Мой внутренний IP-адрес 10.0.2.15, соответственно адрес подсети в моем случае 10.0.2.0/24, по аналогии определите свой и запишите.

Определение конфигурации #

Получаем имя вашего сетевого интерфейса. Запишите его, например “eno1”.

ip -o -4 route show to default | awk '{print $5}'

Введите следующую команду и запишите название раздела диска (из столбца “NAME”), в котором находится корень “/” файловой системы (столбец “MOUNTPOINTS”). Добавьте “/dev/” перед именем раздела - у меня это “/dev/sda2”.

lsblk

Если вы используете два SSD, то определите из вывода предыдущей команды имя диска, который будет использоваться под данные блокчейна. Его объем будет 1 или 2 ТБ. В примере ниже системный раздел - это /dev/sdb2, а большой диск - это /dev/sda.

Форматируем большой диск. Замените значение /dev/sda на свое. Не забудьте про “1” в конце третьей команды.

sudo wipefs -a --force /dev/sda
sudo sgdisk -Zo -n 1 -t 1:8300 /dev/sda
sudo mkfs.ext4 -q -F -L "main" /dev/sda1
lsblk

Теперь у меня появился большой раздел /dev/sda1, единственный на этом диске. Запишите название своего раздела для данных блокчейна.

Монтируем раздел в системе. Замените /dev/sda1 на ваше значение.

sudo tee "/etc/systemd/system/mnt-usb.mount" <<EOF
[Unit]
Description=Mount primary storage /dev/sda1

[Mount]
What=/dev/disk/by-uuid/$(lsblk -no UUID /dev/sda1)
Where=/mnt/usb
Type=$(blkid -o value -s TYPE /dev/sda1)
Options=defaults

[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl start mnt-usb.mount
sudo systemctl enable mnt-usb.mount

Подключите внешний HDD/SSD, который вы планируете использовать для бэкапа данных блокчейна. Этот шаг можно пропустить. Подключите диск и снова выполните команду:

lsblk

Вы увидите только что подключенный диск в таблице. Запишите название диска для резервной копии, добавив “/dev/” в начале и “1” в конце, в моем случае - /dev/sdb1.

Предварительный этап #

Добавим пользователя ronindojo в нашу систему, зададим пароль и выполним вход от нового пользователя.

sudo useradd -s /bin/bash -d /home/ronindojo -m -G sudo ronindojo
sudo passwd ronindojo
sudo su
echo "ronindojo    ALL=(ALL) ALL" >> /etc/sudoers
su - ronindojo

Устанавливаем необходимые программы.

sudo apt update && sudo apt upgrade
sudo apt install bash-completion nano tor obfs4proxy net-tools apt-transport-https gnupg-agent unzip git openjdk-11-jdk fail2ban net-tools htop unzip ufw rsync jq python3-pip gcc dialog bpytop less plymouth-label --no-install-recommends
pip3 install pipenv

Устанавливаем Docker.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin --no-install-recommends
sudo curl -L https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-linux-x86_64 -o /usr/bin/docker-compose
sudo chmod +x /usr/bin/docker-compose
sudo systemctl stop docker
sudo systemctl stop docker.socket
sudo systemctl stop containerd
sudo mkdir -p /mnt/usb
sudo mv /var/lib/docker/ /mnt/usb/
sudo tee "/etc/docker/daemon.json" << EOF
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "data-root": "/mnt/usb/docker"
}
EOF
sudo systemctl start docker
sudo usermod -a -G docker ronindojo

Устанавливаем NodeJS.

curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash
sudo apt install nodejs
exit

Установка Samourai Dojo #

su - ronindojo
git clone https://code.samourai.io/ronindojo/samourai-dojo -b master ~/dojo
cd ~/dojo/docker/my-dojo/

Генерируем случайный пароль.

tr -dc 'a-zA-Z0-9' </dev/urandom | head -c'32'
nano conf/docker-bitcoind.conf.tpl

Вставьте пароль после BITCOIND_RPC_PASSWORD=

Сохранить файл и выйти из редактора можно последовательным нажатием клавиш Ctrl+X, y, Enter.

nano conf/docker-indexer.conf.tpl

Здесь можно заменить electrs (по умолчанию) на fulcrum или addrindexrs после INDEXER_TYPE=. Fulcrum гораздо дольше синхронизируется, чем Electrs, и рекомендован для “тяжелых” кошельков с большим количеством транзакций. Addrindexrs поддерживает только Samourai Wallet, в то время как два других можно использовать для подключения таких кошельков, как Electrum и Sparrow Wallet.

tr -dc 'a-zA-Z0-9' </dev/urandom | head -c'32'
tr -dc 'a-zA-Z0-9' </dev/urandom | head -c'32'
nano conf/docker-mempool.conf.tpl

Установка обозревателя Mempool включается опцией MEMPOOL_INSTALL=on. Пароли необходимо вставить после MEMPOOL_MYSQL_PASS= и MEMPOOL_MYSQL_ROOT_PASSWORD=.

tr -dc 'a-zA-Z0-9' </dev/urandom | head -c'32'
tr -dc 'a-zA-Z0-9' </dev/urandom | head -c'32'
nano conf/docker-mysql.conf.tpl

Добавьте сгенерированные пароли после MYSQL_ROOT_PASSWORD= и MYSQL_PASSWORD=.

tr -dc 'a-zA-Z0-9' </dev/urandom | head -c'32'
tr -dc 'a-zA-Z0-9' </dev/urandom | head -c'32'
tr -dc 'a-zA-Z0-9' </dev/urandom | head -c'32'
nano conf/docker-node.conf.tpl

Вставьте пароли следом за NODE_API_KEY=, NODE_ADMIN_KEY= и NODE_JWT_SECRET=. Опционально добавьте ваш платежный код BIP47 (PM8T…) после NODE_PAYMENT_CODE=. Включив эту возможность, вы сможете аутентифицироваться в Dojo Maintenance Tool при помощи опции “Authenticate using PayNym” из меню Tools в кошельке Samourai, просто отсканировав QR-код на экране логина.

nano conf/docker-tor.conf.tpl

Если у вас есть проблемы с подключением к Tor, установите TOR_USE_BRIDGES=on и пропишите мосты следующим образом: TOR_BRIDGE_1=“obfs4 … iat-mode=0”.

Только для Testnet

nano conf/docker-common.conf.tpl

Укажите COMMON_BTC_NETWORK=testnet.

nano nginx/testnet.conf

Добавьте следующие строки в раздел # Site Configuration:

    # Proxy WebSocket connections first
    location /v2/inv {
        proxy_pass http://websocket;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
    }
    # PushTX server is separate, so proxy first
    location /v2/pushtx/ {
        proxy_pass http://node:8081/;
    }
    # Tracker server is separate, so proxy first
    location /v2/tracker/ {
        proxy_pass http://node:8082/;
    }
    # Proxy all other v2 requests to the accounts server
    location /v2/ {
        proxy_pass http://node:8080/;
    }
./dojo.sh install

Дождитесь окончания установки Dojo. Она занимает от 10 до 30 минут, в зависимости от производительности вашего компьютера и сетевого подключения.

При возникновении ошибок, обычно связанных с сетевым соединением, вы можете остановить скрипт установки с помощью нескольких нажатий сочетания Ctrl+C и повторить последнюю команду. Если установка все же не удается, то вам придется настроить VPN на вашем маршрутизаторе. К сожалению данная процедура выходит за рамки данного руководства.

RoninOS #

RoninOS - это по сути скрипт, изменяющий базовую операционную систему для правильного функционирования RoninDojo. Так как он написан для определенной ОС и конкретной конфигурации оборудования, я произвел все необходимые изменения вручную.

cd
git clone https://code.samourai.io/ronindojo/RoninOS

Установка и настройка службы Tor #

sudo useradd -c "tor" tor
sudo cp ~/RoninOS/overlays/RoninOS/example.tor.service /usr/lib/systemd/system/tor.service
sudo systemctl stop tor@default.service
sudo rm -rf /usr/lib/systemd/system/tor@*
sudo mkdir /mnt/usb/tor/
sudo chown -R tor:tor /mnt/usb/tor/
sudo nano /etc/tor/torrc

Вставляем следующие строки в конец файла и добавляем мосты. Обратите внимание, что в отличие от настроек Tor в Samourai Dojo, мосты здесь прописываются без кавычек:

ClientTransportPlugin obfs4 exec /usr/bin/obfs4proxy
UseBridges 1
Bridge obfs4 ... iat-mode=0
Bridge obfs4 ... iat-mode=0
Bridge obfs4 ... iat-mode=0
#Hidden Service Ronin UI
User tor
DataDirectory /mnt/usb/tor
HiddenServiceDir /mnt/usb/tor/hidden_service_ronin_backend/
HiddenServiceVersion 3
HiddenServicePort 80 127.0.0.1:8470
sudo systemctl daemon-reload
sudo systemctl restart tor
sudo journalctl -f -u tor

Дождитесь сообщений в логе Tor “Bootstrapped 100% (done)”, после чего его можно закрыть с помощью Ctrl+C.

Настройка plymouth #

После этого при загрузке системы будет отображаться логотип RoninDojo, мелочь, а приятно.

sudo mkdir -p /etc/plymouth
sudo cp ~/RoninOS/overlays/RoninOS/etc/plymouth/plymouthd.conf /etc/plymouth/
sudo cp -r ~/RoninOS/overlays/RoninOS/usr/share/plymouth/themes/ronindojo/ /usr/share/plymouth/themes/
sudo nano /etc/default/grub

Преобразуйте строку GRUB_CMDLINE_LINUX_DEFAULT следующим образом:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
sudo update-alternatives --install /usr/share/plymouth/themes/default.plymouth default.plymouth /usr/share/plymouth/themes/ronindojo 120
sudo update-grub
sudo update-initramfs -u

Настройка межсетевого экрана #

sudo ufw default deny incoming
sudo ufw default allow outgoing

В следующих командах используйте ваш адрес подсети, который мы определили в конце установки операционной системы.

sudo ufw allow from 10.0.2.0/24 to any port "80"
sudo ufw allow from 10.0.2.0/24 to any port "22"
sudo ufw allow from 10.0.2.0/24 to any port "50002"
sudo ufw enable

Настройка дисков #

mkdir -p ~/.config/RoninDojo/data/
touch ~/.config/RoninDojo/data/system-install

В следующей команде используйте свое имя основного раздела системы или имя раздела для данных блокчейна, если вы используете конфигурацию с двумя SSD, который вы записали при определении конфигурации. Напоминаю, что у меня один диск и основной раздел /dev/sda2.

echo "blockdata_storage_partition=/dev/sda2" > ~/.config/RoninDojo/data/blockdata_storage_partition

В следующей команде используйте свое имя раздела для резервной копии блокчейна, если вы собираетесь использовать эту функцию. У меня - /dev/sdb1.

echo "backup_storage_partition=/dev/sdb1" > ~/.config/RoninDojo/data/backup_storage_partition

Ronin UI и Ronin CLI #

Ronin UI - это великолепный веб-интерфейс для мониторинга и администрирования вашего узла со встроенным интерфейсом Whirlpool GUI. Используя его, вам не нужно делать сопряжение с помощью приложения Whirlpool GUI на другом компьютере.

Ronin CLI - консольный интерфейс, доступный по SSH или непосредственно на сервере, с расширенными функциями управления вашей нодой, параметрами безопасности, а так же дополнительными утилитами.

mkdir ~/Ronin-UI
sudo mkdir -p /usr/share/nginx/logs/
sudo bash -c "cat /mnt/usb/tor/hidden_service_ronin_backend/hostname > /home/ronindojo/.config/RoninDojo/data/ronin-ui-tor-hostname"
git clone https://code.samourai.io/ronindojo/RoninDojo -b master
sudo ln -sf /home/ronindojo/RoninDojo/ronin /usr/local/bin/ronin
cp ~/RoninDojo/user.conf.example ~/.config/RoninDojo/user.conf
nano ~/.bashrc

Добавляем в конец файла две строки:

/home/ronindojo/RoninDojo/Scripts/.logo
ronin
source ~/.bashrc

Поздравляю, вы оказались в интерфейсе Ronin CLI.

Перейдите в меню:

Ronin UI > Re-install

По окончании установки нажмите любую клавишу и выйдите из Ronin UI:

Go Back > Exit RoninDojo

Попасть снова в Ronin CLI можно с помощью команды:

ronin

Кроме того, вы будете автоматически перенаправлены в Ronin CLI при логине под пользователем ronindojo.

Ronin UI теперь доступен из вашей локальной сети, в которой находится машина с RoninDojo, через веб-браузер по адресу http://ronindojo.local или по IP-адресу сервера, в моем случае http://10.0.2.15.

Пароль для входа - это ваш пароль пользователя ronindojo.

Патчи для Ronin CLI #

Установка завершена, но требуется немного исправить скрипты Ronin CLI для корректной работы.

В следующей команде используйте имя вашего сетевого интерфейса, которое мы определили ранее. У меня - enp0s3.

sed -i 's/eth0/enp0s3/g' ~/RoninDojo/Scripts/Menu/menu-system-monitoring.sh
sed -i 's/findmnt \"\${install_dir}\"/findmnt -n -o SOURCE --target \"\${install_dir}\"/g' ~/RoninDojo/Scripts/functions.sh
sed -i 's/findmnt \"\${install_dir}\"/findmnt -n -o SOURCE --target \"\${install_dir}\"/g' ~/RoninDojo/Scripts/Install/install-dojo.sh

Только для Testnet

sed -i 's/_data/_data\/testnet3/g' ~/RoninDojo/Scripts/Install/install-send-block-data.sh
sed -i 's/_data/_data\/testnet3/g' ~/RoninDojo/Scripts/Install/install-receive-block-data.sh
sed -i 's/ludwig.py --rpc/ludwig.py --testnet --rpc/g' ~/RoninDojo/Scripts/Menu/menu-boltzmann.sh

Инструменты RoninDojo #

Резервное копирование блокчейна #

Я рекомендую протестировать эту процедуру до полного скачивания блокчейна, так как неправильная настройка дисков может привести к потере данных, и все придется начинать с нуля. Произведите тест, когда в веб-интерфейсе появятся доли процентов синхронизации Bitcoin Core.

Подключите внешний диск для резервной копии. В Ronin CLI перейдите в меню:

System > Disk Storage > Format & Mount New Backup Drive

После форматирования диска, перейдите из основного меню:

Dojo > Next Page > Send Block Data to Backup

После копирования, восстановите бэкап из меню:

Dojo > Next Page > Receive Block Data from Backup

Установка WST и калькулятора Больцмана #

Руководство по использованию Whirlpool Stats Tool (WST).

Руководство по калькулятору Больцмана.

Для установки и использования этих утилит просто выберите соответствующий пункт из меню:

Samourai Toolkit
Утилита WST недоступна для Testnet.

Whirlpool #

Дождитесь полной синхронизации Bitcoin Core, Dojo и Indexer.

Перейдите в меню “Pairing” и выполните сопряжение Samourai Wallet с Samourai Dojo. Подключиться к Dojo можно только при новой установке кошелька.

Нажмите “Pair now” в разделе “Samourai Dojo”, отсканируйте QR-код сопряжения Dojo в вашем Samourai Wallet.

Перейдите в меню настроек кошелька:

Транзакции > Связать с Whirlpool GUI

Перенесите полученный код сопряжения с Whirlpool GUI на компьютер.

В разделе Whirlpool CLI нажмите “Initialize” и используйте ваш код сопряжения.

После успешного сопряжения, вам нужно нажать кнопку “Log in” и ввести парольную фразу, которую вы использовали при создании кошелька.

Наконец, вы попадаете в интерфейс Whirlpool и можете ремикшировать UTXO 24/7, пока работает ваш узел.

Обозреватели блокчейна #

Для доступа к BTC RPC Explorer перейдите в “Dashboard” и нажмите “Manage” в разделе “Dojo”.

Здесь находятся ссылки для доступа к обозревателю и Dojo Maintenance Tool (DMT) через Tor-браузер.

Ссылка для доступа к обозревателю Mempool также доступна из меню “Manage” в соответствующем разделе панели управления. Там же вы можете установить или удалить Mempool.

Dojo Maintenance Tool (DMT) #

DMT представляет собой упрощенную панель для мониторинга ноды с базовыми функциями отслеживания ваших XPUB, адресов и транзакций - аналогичными меню “Maintenance” в Ronin UI. В условиях плохого качества связи с Tor, может оказаться полезным инструментом. Если вы добавили ваш PayNym в файле docker-node.conf.tpl при установке Samourai Dojo, то вам будет доступен QR-код. Просто выберите в кошельке Samourai “Authenticate using PayNym” из меню “Tools” и отсканируйте его для доступа в DMT.

Если вы не включили функцию аутентификации с использованием PayNym (Auth47) при установке, то просто добавьте паш платежный код BIP47 после NODE_PAYMENT_CODE= в файл:

nano ~/dojo/docker/my-dojo/conf/docker-node.conf

После этого перезапустите Dojo из меню “Manage” в соответствующем разделе Ronin UI с помощью кнопки “Restart”.

Индексаторы блокчейна #

Как уже упоминалось выше, вы можете выбирать между Electrs, Fulcrum или Addrindexrs. Вы можете установить другой индексатор из “Dashboard” через меню “Manage” в разделе “Indexer”.

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

Ссылка для подключения кошельков Sparrow или Electrum к вашему индексатору через Tor находится в меню “Pair” в разделе “Electrum server”.

Прочие инструменты #

Push TX в Ronin UI позволит вам транслировать подписанную транзакцию в блокчейн с помощью вашей ноды.

Credentials в Ronin CLI выведет на экран ссылки на все сервисы вашего узла, доступные через Tor.

Настройки безопасности находятся в меню Ronin CLI:

System > Next Page

Здесь вы можете управлять настройками межсетевого экрана, SSH, изменить пароль пользователя ronindojo, а также root.

Обновление RoninDojo #

Ronin UI обновляется в один клик. При наличии обновления вы увидите в веб-интерфейсе уведомление о новой версии.

Обновление Ronin CLI #

Стандартный скрипт обновления RoninDojo может сломать систему, поэтому апгрейд производим вручную.

cd
rm -rf ~/RoninDojo/
git clone https://code.samourai.io/ronindojo/RoninDojo -b master

Применяем патчи из этого раздела.

Обновление Samourai Dojo #

cd
wget https://code.samourai.io/ronindojo/samourai-dojo/-/archive/master/samourai-dojo-master.zip
unzip samourai-dojo-master.zip -d .
cp -a samourai-dojo-master/. ~/dojo/
cd ~/dojo/docker/my-dojo/
Делаем необходимые изменения для Testnet из этого раздела.
./dojo.sh upgrade

Поддержите автора #

Поддержать автора можно, отправив немного сат в сети Лайтнинг:

LNURL1DP68GURN8GHJ7MRW9E6XJURN9UH8WETVDSKKKMN0WAHZ7MRWW4EXCUP0X9UX2VENXDJN2CTRXSUN2VE3XGCRQPNAPC6


Connect to our relay to leave a comment. Details.
Подключитесь к нашему релею, чтобы оставить комментарий. Подробнее.