Компилирование клиента Dash Core#
Хотя Dash предлагает стабильные бинарные сборки на сайте и на GitHub, а также сборки для разработки с помощью GitLab CI, многие пользователи также будут заинтересованы в самостоятельной сборке бинарных файлов Dash. Пользователи, которым не нужны детерминированные сборки, обычно могут следовать основным указаниям по сборке, доступным на GitHub, чтобы скомпилировать или кросс-компилировать Dash для любой платформы.
Guix#
Guix - это процесс детерминированной компиляции, который используется для получения исполнительных файлов Dash Core. Он обеспечивает уверенность, что исполнительные файлы были получены из источника на GitHub, а также что при компиляции в конечный исполнительный файл были статично встроены стабильные проверенные зависимости. Многие разработчики пишут исходный код с использованием особых дескрипторов («рецептов»), криптографически подписывают результат и выгружают соответствующую подпись. Эти результаты сравниваются и только при полном совпадении версия принимается и выкладывается на dash.org.
Инструкции по сборке Dash Core 19.0 или более старых версий с помощью gitian доступны в предыдущей версии этой страницы.
Настройка окружения#
Примечание
Данная установка была протестирована на чистой версии Ubuntu 22.04. Для обеспечения максимальной совместимости используйте эту версию.
Начните с входа в систему под именем пользователя «root». Создайте нового пользователя с помощью следующей команды, заменив <username>
на выбранное вами имя пользователя:
adduser <username>
Вам будет предложено задать пароль. Введите и подтвердите новый пароль (отличный от пароля root) и сохраните его в надежном месте. Также появится запрос на ввод информации о пользователе, но его можно оставить пустым. В качестве альтернативы можно использовать существующего пользователя в уже используемых системах (например, в существующей системе разработки).
Добавьте пользователя в группы sudo и docker, чтобы он мог выполнять команды от имени root и запускать команды docker:
usermod -aG sudo <username>
Установить предварительные требования#
Не выходя из системы с правами root, обновите систему из репозитория пакетов Ubuntu:
apt update
apt upgrade -y
Установите необходимые инструменты для сборки:
apt-get install build-essential
Подготовить guix#
Этот шаг необходимо выполнить только при начальной настройке машины. Запустите программу установки guix для подготовки среды и ответьте «Y» на все запросы:
sudo apt install guix
cd /tmp
wget https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh
chmod +x guix-install.sh
./guix-install.sh
Клонируйте репозитории#
После установки необходимых условий и подготовки guix перезагрузите систему, войдите под именем <username>
и клонируйте необходимые репозитории:
git clone https://github.com/dashpay/dash
git clone https://github.com/dashpay/guix.sigs
git clone https://github.com/dashpay/dash-detached-sigs
Загрузите macOS SDK, который необходим для создания сборок macOS:
mkdir -p ~/guix-dash/macOS-SDKs
wget -N -P ~/guix-dash https://bitcoincore.org/depends-sources/sdks/Xcode-12.2-12B45b-extracted-SDK-with-libcxx-headers.tar.gz
tar -xvzf ~/guix-dash/Xcode-12.2-12B45b-extracted-SDK-with-libcxx-headers.tar.gz --directory ~/guix-dash/macOS-SDKs/
Собрать Dash Core#
Проверьте тег, связанный с версией Dash Core, которую вы планируете собрать:
# <version> = Dash Core tag to build
# Example: git checkout v20.0.3
cd ~/dash
git checkout v20.0.3
Запустите guix-build
, чтобы создать двоичные файлы для Linux, Mac и Windows:
# Example: Build binaries for all OSes
env SDK_PATH="$HOME/guix-dash/macOS-SDKs" ./contrib/guix/guix-build
Когда сборка завершится, она поместит бинарные файлы в каталог guix-build-<version>/output/
.
Создание подписей для бинарных файлов#
Бинарные файлы для Mac и Windows подписываются Dash Core Group с использованием соответствующих процессов Apple и Microsoft. На этом этапе эта информация будет проверена и подписана вашей машиной.
Подготовьте хранилище отсоединенных сигов:
cd ~/dash-detached-sigs/
git checkout master
git pull
# Checkout the branch for the version being built
# Example: git checkout v20.0.3
git checkout v<version>
Подготовьте репозиторий guix.sigs, извлекая последние изменения:
cd ~/guix.sigs/
git checkout master
git pull
Создайте новую ветку для версии, которая была собрана:
# <signer> = The name associated with your PGP key
# <version> = Dash Core tag to build (exclude the leading "v")
# Example: git checkout -b 20.0.3-alice
git checkout -b <version>-<signer>
Неподписанные бинарники#
Чтобы создать подписи для неподписанных бинарных файлов, запустите guix-attest
:
# <signer> = The name associated with your PGP key
# Example: env GUIX_SIGS_REPO=~/guix.sigs SIGNER=alice ./contrib/guix/guix-attest
cd ~/dash
env GUIX_SIGS_REPO=~/guix.sigs SIGNER=<signer> ./contrib/guix/guix-attest
Примечание
При генерации ключа с помощью GPG параметр ``signer` должен иметь значение, указанное для параметра «Real name». Подробнее о том, как сгенерировать ключ, если у вас его еще нет, см. в статье GnuPrivacyGuard Howto.
Подписанные бинарники#
Чтобы создать подписи для подписанных двоичных файлов, запустите guix-codesign
, а затем guix-attest:
env DETACHED_SIGS_REPO=~/dash-detached-sigs ./contrib/guix/guix-codesign
# <signer> = The name associated with your PGP key
# Example: env GUIX_SIGS_REPO=~/guix.sigs SIGNER=alice ./contrib/guix/guix-attest
env GUIX_SIGS_REPO=~/guix.sigs SIGNER=<signer> ./contrib/guix/guix-attest
Загрузка подписей#
После успешной сборки бинарных файлов, их подписания и проверки подписей вы можете внести их в репозиторий guix.sigs с помощью pull request на GitHub.
Первоначальная настройка#
Поскольку официальный репозиторий guix.sigs имеет ограниченный доступ на запись, создайте форк этого репозитория через GitHub и добавьте свой форк в качестве удаленного репозитория:
cd ~/guix.sigs
git remote add me https://github.com/<your GitHub username>/guix.sigs
При первом внесении подписей также поместите копию своего открытого ключа в папку builder-keys
репозитория, чтобы другие пользователи могли легко проверить вашу подпись. Открытый ключ можно экспортировать в файл с помощью следующей команды:
# <signer> = The name associated with your PGP key
# Example: gpg --output alice.pgp --armor --export alice
gpg --output <signer>.pgp --armor --export <signer>
Добавление ваших подписей#
Добавьте и зафиксируйте файлы *.SHA256SUMS
и *.SHA256SUMS.asc
, созданные в процессе сборки:
# Example: git add 20.0.3
git add <version>
# Example: git commit -m "chore: add guix signatures for alice for 20.0.3"
git commit -m "chore: add guix signatures for <signer> for <version>"
Поместите в свой форк репозитория guix.sigs на GitHub:
# "me" references the name of the remote repository added during initial setup
git push me
Перейдите на GitHub и откройте pull request к ветке master
репозитория upstream. Запрос будет рассмотрен разработчиками Dash Core и интегрирован, если все будет проверено. Спасибо за участие!
Проверка подписей#
Репозиторий guix.sigs содержит детерминированные результаты сборки, подписанные несколькими разработчиками Core для каждого выпуска. Репозиторий также содержит открытые ключи, используемые для проверки подписи. Импортируйте публичные ключи:
cd ~/guix.sigs
git pull
gpg --import builder-keys/*.pgp
Выполните следующие команды, чтобы убедиться, что ваша сборка соответствует официальному релизу:
cd ~/dash
git -C ~/guix.sigs pull
# Example:
# git checkout 20.0.3
git checkout <version>
env GUIX_SIGS_REPO=~/guix.sigs ./contrib/guix/guix-verify
Вы должны получить результат, аналогичный приведенному ниже для Linux, Windows, MacOS, Signed Windows и Signed MacOS. При условии успешного выполнения предыдущих шагов вы также увидите свои собственные подписи со статусом OK
.
Looking for signature directories in '../guix.sigs/20.0.3'
--------------------
gpg: Signature made Tue Dec 26 15:15:29 2023 EST
gpg: using RSA key 3F5D48C9F00293CD365A3A9883592BD1400D58D9
gpg: issuer "udjinm6@dash.org"
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
Files ../guix.sigs/20.0.3/UdjinM6/noncodesigned.SHA256SUMS and ../guix.sigs/20.0.3/UdjinM6/noncodesigned.SHA256SUMS are identical
Verified: '../guix.sigs/20.0.3/UdjinM6/noncodesigned.SHA256SUMS'
gpg: Signature made Wed Dec 27 01:21:08 2023 EST
gpg: using RSA key 15191D05B5CF956FE37C95962176C4A5D01EA524
gpg: issuer "knstqq@gmail.com"
gpg: Good signature from "Konstantin Akimov <knstqq@gmail.com>" [unknown]
gpg: aka "Konstantin Akimov <konstantin.akimov@dash.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: 1519 1D05 B5CF 956F E37C 9596 2176 C4A5 D01E A524
5c5
< 40613fc2d13198d7765a9bbcf2feeca93bc43dc57c74f26ee631185437b8e100 dashcore-20.0.3-arm64-apple-darwin-debug.tar.gz
---
> 8035094d94fca4f8ed3abf50eb5707ba60910a345a7072b57b3271d98cb1a92b dashcore-20.0.3-arm64-apple-darwin-debug.tar.gz
12c12
< 90924b90e73f50bf072798c9911e37f6b97b7863b04dd88575161392e661e1c2 dashcore-20.0.3-x86_64-apple-darwin-debug.tar.gz
---
> 46113d6c4ac419d9df78244ac951d9021f43cef80eb3e4ecee4f37c5d448ddfa dashcore-20.0.3-x86_64-apple-darwin-debug.tar.gz
ERR: The SHA256SUMS attestation in these two directories differ:
'../guix.sigs/20.0.3/UdjinM6/noncodesigned.SHA256SUMS'
'../guix.sigs/20.0.3/knst/noncodesigned.SHA256SUMS'
gpg: Signature made Tue Dec 26 13:13:27 2023 EST
gpg: using RSA key 29590362EC878A81FD3C202B52527BEDABE87984
gpg: issuer "pasta@dashboost.org"
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
5c5
< 40613fc2d13198d7765a9bbcf2feeca93bc43dc57c74f26ee631185437b8e100 dashcore-20.0.3-arm64-apple-darwin-debug.tar.gz
---
> bb577ed0a7a577a67fde39ac9c00ddfe11991aa98f44d850eb45c0f18d52709f dashcore-20.0.3-arm64-apple-darwin-debug.tar.gz
12c12
< 90924b90e73f50bf072798c9911e37f6b97b7863b04dd88575161392e661e1c2 dashcore-20.0.3-x86_64-apple-darwin-debug.tar.gz
---
> 1c650cfe167c4f16dc8329701b94fe507dcb758a9b874c65633667d7fdcfa377 dashcore-20.0.3-x86_64-apple-darwin-debug.tar.gz
ERR: The SHA256SUMS attestation in these two directories differ:
'../guix.sigs/20.0.3/UdjinM6/noncodesigned.SHA256SUMS'
'../guix.sigs/20.0.3/pasta/noncodesigned.SHA256SUMS'
gpg: Signature made Tue Dec 26 14:32:19 2023 EST
gpg: using RSA key FD4A3062EE42C95FE9B34DBC6317F01E6F491072
gpg: issuer "thephez@gmail.com"
gpg: Good signature from "thephez <thephez@gmail.com>" [full]
5c5
< 40613fc2d13198d7765a9bbcf2feeca93bc43dc57c74f26ee631185437b8e100 dashcore-20.0.3-arm64-apple-darwin-debug.tar.gz
---
> cbb3213303c3813c818fdda91671acf60d7c81f8f13800c297fcd66e4058b799 dashcore-20.0.3-arm64-apple-darwin-debug.tar.gz
12c12
< 90924b90e73f50bf072798c9911e37f6b97b7863b04dd88575161392e661e1c2 dashcore-20.0.3-x86_64-apple-darwin-debug.tar.gz
---
> 4b084a5153024de5806f1bc8cd48914d6cf686d52602bcf52cf671023dca602b dashcore-20.0.3-x86_64-apple-darwin-debug.tar.gz
ERR: The SHA256SUMS attestation in these two directories differ:
'../guix.sigs/20.0.3/UdjinM6/noncodesigned.SHA256SUMS'
'../guix.sigs/20.0.3/thephez/noncodesigned.SHA256SUMS'
DONE: Checking output signatures for noncodesigned.SHA256SUMS
--------------------
WARN: No signature directories with all.SHA256SUMS found
====================
Gitian#
Предупреждение
Сборки на Gitian были отменены в пользу сборок на Guix с выходом Dash Core v20.0. Инструкции по сборке Dash Core 19.0 или более ранних версий с помощью gitian доступны в предыдущей версии этой страницы.