Компилирование клиента Dash Core#

Хотя Dash предлагает стабильные бинарные сборки на website и на GitHub, а также сборки для разработчиков с использованием GitLab CI, многие пользователи также будут заинтересованы в самостоятельной сборке бинарных файлов Dash. С выходом Dash Core 0.13.0 этот процесс значительно упростился, и пользователи, не нуждающиеся в детерминированных сборках, обычно могут следовать общим указаниям по сборке, доступным на GitHub, для компиляции или кросс-компиляции Dash для любой платформы.

Инструкции, как собрать Dash Core 0.12.3 или выше доступны здесь или на предыдущей версии этой страницы.

Gitian#

Gitian - это процесс детерминированной компиляции, который используется для получения исполнительных файлов Dash Core. Он обеспечивает уверенность, что исполнительные файлы были получены из источника на GitHub, а также что при компиляции в конечный исполнительный файл были статично встроены стабильные проверенные зависимости. Многие разработчики пишут исходный код с использованием особых дескрипторов («рецептов»), криптографически подписывают результат и выгружают соответствующую подпись. Эти результаты сравниваются и только при полном совпадении версия принимается и выкладывается на dash.org.

Процесс сборки#

Примечание

Данная установка была протестирована на чистой версии Ubuntu 20.04. Для обеспечения максимальной совместимости используйте эту версию.

Начните с входа в систему под именем пользователя «root». Создайте нового пользователя с помощью следующей команды, заменив <username> на выбранное вами имя пользователя:

adduser <username>

Вам будет предложено задать пароль. Введите и подтвердите новый пароль (отличный от пароля root) и сохраните его в надежном месте. Также появится запрос на ввод информации о пользователе, но его можно оставить пустым. В качестве альтернативы можно использовать существующего пользователя в уже используемых системах (например, в существующей системе разработки).

Создайте в системе группу docker. Эта группа будет использоваться процессами Docker, а также позволит пользователям, не являющимся root, выполнять команды Docker, используемые в процессе сборки:

groupadd docker

Добавьте пользователя в группы sudo и docker, чтобы он мог выполнять команды от имени root и запускать команды docker:

usermod -aG sudo,docker <username>

Установить предварительные требования#

Не выходя из системы с правами root, обновите систему из репозитория пакетов Ubuntu:

apt update
apt upgrade -y

Install apt-cacher-ng:

apt install -y apt-cacher-ng

Примечание

Выберите Нет на вопрос ``Разрешить HTTP-туннели через Apt-Cacher NG?

Примечание: возможно, потребуется открыть порт 3142, если в системе включен межсетевой экран (например, ufw allow 3142/tcp).

После установки этих обновлений перезагрузите систему, войдите в систему под именем <username> и клонируйте необходимые репозитории:

git clone https://github.com/dashpay/dash
git clone https://github.com/devrandom/gitian-builder
git clone https://github.com/dashpay/dash-detached-sigs
git clone https://github.com/dashpay/gitian.sigs

Загрузите SDK для Mac OSX:

mkdir gitian-builder/inputs
wget -q -O gitian-builder/inputs/MacOSX10.11.sdk.tar.gz https://bitcoincore.org/depends-sources/sdks/MacOSX10.11.sdk.tar.gz

Подготовить gitian#

Выполнять этот шаг необходимо только при начальной настройке машины. Проверьте метку, связанную с версией Dash Core, которую вы планируете собрать:

# <version> = Dash Core tag to build
# Example: git checkout v0.17.0.0
cd dash
git checkout <version>
cd ..

Запустите процедуру настройки gitian-build для подготовки среды:

# <signer> = The name associated with your PGP key
# <version> = Dash Core tag to build (exclude the leading "v")
# Example: ./dash/contrib/gitian-build.py --setup alice 0.17.0.3
./dash/contrib/gitian-build.py --setup <signer> <version>

Примечание

При генерации ключа с помощью GPG параметр ``signer` должен иметь значение, указанное для параметра «Real name». Подробнее о том, как сгенерировать ключ, если у вас его еще нет, см. в статье GnuPrivacyGuard Howto.

Собрать Dash Core#

Запустите gitian build для создания бинарных файлов для Linux, Mac и Windows:

# <signer> = The name associated with your PGP key
# <version> = Dash Core tag to build (exclude the leading "v")
# Example: Build binaries for all OSes, use all available cores and 16 GB RAM
#   ./dash/contrib/gitian-build.py -b -n -j $(nproc) -m 16000 alice 0.17.0.3
./dash/contrib/gitian-build.py -b -n -j $(nproc) -m <MB of RAM to use> <signer> <version>

Предупреждение

В этих инструкциях предполагается, что в системе сборки существует PGP-ключ для <signer>. Если ожидаемый ключ не будет найден, сценарий завершится неудачей на этапе подписания с сообщением:

gpg: skipped "<signer>": No secret key
gpg: signing failed: No secret key

По завершении сборки бинарные файлы будут помещены в папку dashcore-binaries. Файлы .assert и их подписи будут помещены в папку gitian.sigs/<version>/<signer>/....

Создание подписей для подписанных бинарных файлов#

Бинарные файлы для Mac и Windows подписываются Dash Core Group с использованием соответствующих процессов Apple/Microsoft. На данном этапе эта информация будет проверена и подписана на вашей машине. Соответствующие файлы .assert и их подписи будут помещены в папку gitian.sigs/1/2/... вместе с подписями для неподписанных двоичных файлов, созданными на предыдущем шаге.

# <signer> = The name associated with your PGP key
# <version> = Dash Core tag to build (exclude the leading "v")
# Example: ./dash/contrib/gitian-build.py -s -n -j $(nproc) -m 16000 -o mw alice 0.17.0.3
./dash/contrib/gitian-build.py -s -n -j $(nproc) -m <MB of RAM to use> -o mw <signer> <version>

Проверка подписей#

Репозиторий gitian.sigs содержит детерминированные результаты сборки, подписанные несколькими разработчиками Core для каждого релиза. Выполните следующую команду для проверки соответствия вашей сборки официальному релизу:

# Example: ./dash/contrib/gitian-build.py -v alice 0.17.0.3
./dash/contrib/gitian-build.py -v <signer> <version>

Вы должны получить результат, аналогичный приведенному ниже для Linux, Windows, MacOS, Signed Windows и Signed MacOS. При условии успешного выполнения предыдущих шагов вы также увидите свои собственные подписи со статусом OK.

Verifying v0.17.0.3 Linux

gpg: Signature made Sun 06 Jun 2021 12:46:44 PM EDT
gpg:                using RSA key 29590362EC878A81FD3C202B52527BEDABE87984
gpg: Good signature from "Pasta <pasta@dashboost.org>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 2959 0362 EC87 8A81 FD3C  202B 5252 7BED ABE8 7984
pasta: OK

gpg: Signature made Sun 06 Jun 2021 06:41:11 PM EDT
gpg:                using RSA key CF9A554A36B7950BB648A15DA0078C72B1777616
gpg:                issuer "xdustinfacex@gmail.com"
gpg: Good signature from "Dustinface <xdustinfacex@gmail.com>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: CF9A 554A 36B7 950B B648  A15D A007 8C72 B177 7616
dustinface: OK

gpg: Signature made Sun 06 Jun 2021 07:39:14 PM EDT
gpg:                using RSA key 3F5D48C9F00293CD365A3A9883592BD1400D58D9
gpg: Good signature from "UdjinM6 <UdjinM6@dash.org>" [unknown]
gpg:                 aka "UdjinM6 <UdjinM6@dashpay.io>" [unknown]
gpg:                 aka "UdjinM6 <UdjinM6@gmail.com>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 3F5D 48C9 F002 93CD 365A  3A98 8359 2BD1 400D 58D9
UdjinM6: OK

Загрузка подписей#

После успешной сборки двоичных файлов, их подписания и проверки подписей вы можете внести их в репозиторий gitian.sigs с помощью pull request на GitHub.

Первоначальная настройка#

Поскольку официальный репозиторий gitian.sigs имеет ограниченный доступ на запись, создайте форк этого репозитория через GitHub и добавьте свой форк в качестве удаленного репозитория:

git remote add me https://github.com/<your GitHub username>/gitian.sigs

При первом внесении подписей также поместите копию своего открытого ключа в папку gitian-keys репозитория, чтобы другие пользователи могли легко проверить вашу подпись. Открытый ключ можно экспортировать в файл с помощью следующей команды:

# <signer> = The name associated with your PGP key
# Example: gpg --output alice.pgp --armor --export alice
gpg --output <signer>.pgp --armor --export <signer>

Добавление ваших подписей#

Создайте новую ветку для версии, которая была собрана:

# Example: git checkout -b 0.17.0.3-alice
git checkout -b <version>-<signer>

Добавьте и зафиксируйте файлы *.assert и *.assert.sig, созданные в процессе сборки. Они будут расположены в следующих папках:

<version>-linux/<signer>/*
<version>-osx-signed/<signer>/*
<version>-osx-unsigned/<signer>/*
<version>-win-signed/<signer>/*
<version>-win-unsigned/<signer>/*

Запуште в свой форк репозитория gitian.sigs на GitHub:

# "me" references the name of the remote repository added during initial setup
git push me

Перейдите на GitHub и откройте pull request к ветке master репозитория upstream. Запрос будет рассмотрен разработчиками Dash Core и интегрирован, если все будет проверено. Спасибо за участие!