Сборка
Введение
Это руководство описывает различные способы компиляции узла PocketnetCore или его отдельных компонентов. Следуя инструкциям в этом документе, вы можете получить следующие бинарные файлы и установочные пакеты:
pocketcoind
- демон узла, который:- Запускает узел в режиме без графического интерфейса
- Управляется через конфигурационный файл
pocketcoin.conf
- Предоставляет RPC API для внешнего взаимодействия
pocketcoin-qt
- GUI клиент, который:- Включает полную функциональность демона
- Предоставляет интерфейс кошелька
- Содержит инструменты разработчика (RPC консоль, управление пирами)
- Позволяет настраивать параметры узла через графический интерфейс
pocketcoin-cli
- консольная утилита для:- Взаимодействия с узлом через RPC
- Управления кошельком
- Получения статистики
- Настройки логирования
Сборка может выполняться для отдельных компонентов или как полный пакет. Поддерживаются установочные пакеты:
NSIS
для WindowsDEB
для Debian/UbuntuDMG
для macOS
Это руководство описывает два основных подхода к сборке:
- Для разработки (с использованием CMake)
- Для релизных версий (с использованием GNU Make)
Начало работы
Системные требования
- Минимум 4 ГБ ОЗУ (рекомендуется 8 ГБ)
- 50 ГБ свободного места на диске
- Процессор с поддержкой 64-битных инструкций
- Операционная система:
- Linux (Ubuntu 22.04 или новее)
- Windows 10/11
- macOS 11 или новее
Предварительные требования
Перед началом сборки убедитесь, что у вас установлены:
- Git
- Компилятор C++ (GCC 9+ для Linux, MSVC для Windows, Clang для macOS)
- CMake 3.20 или новее (для сборки с CMake)
- Python 3.8 или новее
- Права администратора в системе для установки зависимостей
Рекомендации по разработке
- Рекомендуется использовать Docker для изоляции среды разработки
- Используйте систему контроля версий (git) для отслеживания изменений
- Для разработки предпочтительно использовать CMake и современные IDE (VSCode, CLion)
- При возникновении проблем с зависимостями проверяйте версии библиотек в
depends/
Важные замечания
- Сборка может занять значительное время (30-60 минут в зависимости от системы)
- При сборке для релиза используйте теги из основного репозитория
- Для разработки рекомендуется начинать с отладочной сборки
- Документируйте все изменения кода и обновляйте тесты при необходимости
Использование Docker контейнера
Docker предоставляет мощные инструменты для разработки и развертывания приложений, предлагая следующие преимущества:
- Изоляция среды разработки от хостовой операционной системы
- Гарантированная воспроизводимость среды на разных машинах
- Простое управление зависимостями и конфигурацией
- Быстрое переключение между разными версиями среды
- Эффективность использования ресурсов по сравнению с виртуальными машинами
- Удобное масштабирование и развертывание
Хотя использование Docker не является обязательным для сборки проекта, оно помогает избежать проблем с зависимостями во время работы. Из-за требования к минимальной версии cmake v3.20+
, версия Linux в Docker контейнере должна быть не ниже ubuntu:22.04
. Это ограничение не применяется при сборке с помощью make
.
Клонирование репозитория
Загрузите проект из официального репозитория (требуется установка git). Главная ветка подходит для работы в Main сети, но может включать коммиты, относящиеся к стадии BETA. Рекомендуется переключить репозиторий на последний тег.
apt-get update
apt-get install git
git clone https://github.com/pocketnetteam/pocketnet.core
cd pocketnet.core/
# Переключиться на последний стабильный тег
git checkout $(git describe --tags "$(git rev-list --tags --max-count=1)")
Подготовка пакетов зависимостей
Следующий этап включает подготовку среды и установку минимального набора пакетов, необходимых для начала компиляции проекта. В зависимости от целевой ОС набор дополнительных пакетов и процесс немного различаются.
Установка системных требований
Linux x64
apt-get update
apt-get install make automake cmake curl bzip2 g++-multilib pkg-config \
python3 bison
Linux arm64
# TODO : implement
Windows x64
# TODO : implement
MacOS x64 (intel)
# TODO : implement
MacOS arm64 (mX)
# TODO : implement
Сборка зависимостей
Директория depends/
содержит все необходимые пакеты для сборки, которые позволяют компилировать код для разных платформ.
cd depends/
make
cd ..
Для сборки зависимостей для другой платформы (кросс-компиляция) необходимо передать компилятору make
аргумент HOST
, указывающий целевую платформу.
host_platform="x86_64-pc-linux-gnu"
make HOST=$host_platform
Общие протестированные host_platform
для кросс-компиляции:
x86_64-pc-linux-gnu
для Linux (64-bit)x86_64-w64-mingw32
для Windows (64-bit)x86_64-apple-darwin16
для macOS (64-bit)arm64-apple-darwin
для ARM macOS (64-bit)
Конфигурация и компиляция
cmake
Совет
Этот тип сборки находится в стадии тестирования и не предназначен для использования в продакшене.
mkdir build && cd build
cmake -DCMAKE_PREFIX_PATH=$PWD/../depends/$host_platform ..
cmake --build . --config Debug -j 8
В результате будут скомпилированы следующие файлы:
└─ build/
└─ src/
└─ qt/
│ └─ pocketcoin-qt
├─ pocketcoind
├─ pocketcoin-cli
make
Основной метод для сборки исполняемых файлов и установочных пакетов.
./autogen.sh
CONFIG_SITE=$PWD/depends/$host_platform/share/config.site ./configure --prefix=/usr/local
make
В результате будут скомпилированы следующие файлы:
└─ src/
└─ qt/
│ └─ pocketcoin-qt
├─ pocketcoind
└─ pocketcoin-cli
make deploy
Финальные версии (Релизы) компилируются с помощью make
, установочные пакеты собираются с помощью make deploy
:
make deploy
В результате будут скомпилированы следующие файлы:
└─ src/
├─ pocketnetcore_X.Y.Z_linux_x64_setup.deb
└─ pocketnetcore_X.Y.Z_linux_x64.tar.gz
Совет
Версия финальных файлов определяется скриптом ./share/version.sh
и зависит от текущего GIT коммита. Для релизов используются теги в формате X.Y.Z
.
Использование VSCode
При использовании расширения CMake
вы можете управлять конфигурацией и компиляцией проекта с помощью инструментов VSCode. Для этого необходимо создать файл конфигурации .vscode/settings.json
и указать полный путь к директории зависимостей:
mkdir .vscode
touch .vscode/settings.json
Параметры управления CMake в файле .vscode/settings.json
:
{
...
"cmake.configureArgs": [
"-DCMAKE_PREFIX_PATH=/full/path/project/depends/host_platform"
],
"cmake.parallelJobs": 8,
...
}
Использование JetBrains CLion
TODO : implement