Компилирование клиента 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 и интегрирован, если все будет проверено. Спасибо за участие!