Compile & Sign Particl Core builds
How to compile own Particl Core builds via Gitian and sign them with PGP
This guide will walk you through compiling your own Particl Core builds via Gitian and optionally signing the builds with your PGP key and uploading the signatures to particl/gitian.sigs repository.
The more people would compile their builds and sign them, the better.
If you can spare the time and processing power, please do!
- This guide is focused on Ubuntu-based distros - on other distributions, you might to install more dependencies etc. (also tweak the commands accordingly)
- Be patient - the builds can take up to few hours (about 3-4 hrs on systems we tested on) - luckily you can still use your PC for other things in the meantime
- For PGP signing of Gitian builds
- make sure the PGP key you’re using is not protected by a passphrase - if it is, signing will fail
- you’ll need to submit a PR to particl-core/contrib/gitian-keys with your PGP key, so that others can verify your signatures
All these instructions in this “Preparation” section need to be run only once per machine. After you have it all set up (and perhaps want to compile the next version), just skip ahead to “Compile” section.
Before we begin, we should make sure that
execute and use
sudo without a password (otherwise you’ll need to enter your root password few times during the compilation, which would further prolong the whole process):
sudo -s echo "%sudo ALL=NOPASSWD: /usr/bin/lxc-start" > /etc/sudoers.d/gitian-lxc echo "%sudo ALL=NOPASSWD: /usr/bin/lxc-execute" >> /etc/sudoers.d/gitian-lxc
$ sudo apt-get install git curl wget
Grab the latest Particl Core code and gitian-builder from Github:
$ mkdir ~/gitian $ cd ~/gitian $ git clone https://github.com/particl/particl-core.git $ cp particl-core/contrib/gitian-build.py . $ git clone https://github.com/devrandom/gitian-builder.git
We need to add some extra space to our
$ sed -i -- 's^10240^16000^g' gitian-builder/bin/make-base-vm $ sed -i -- 's^12287^16000^g' gitian-builder/bin/make-base-vm
Get the macOS SDK for the ability to compile macOS builds as well:
$ mkdir gitian-builder/inputs $ cd gitian-builder/inputs $ wget https://bitcoincore.org/depends-sources/sdks/MacOSX10.11.sdk.tar.gz $ cd ~/gitian
At this point, you’ll need your PGP key. As mentioned in the Notes above, you’ll need a key without a passphrase. If you don’t have one, generate a new PGP key now.
In the next step, replace
KEYNAME by name of your key.
If you’re not sure about its name, check your PGP keys and locate the one you want to use (in this example, the name is represented as
$ gpg --list-secret-keys /home/user/.gnupg/pubring.kbx ------------------------------- sec rsa4096 XXXX-XX-XX [SCA] [expires: XXXX-XX-XX] XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX uid [ultimate] KEYNAME <firstname.lastname@example.org> ssb rsa4096 XXXX-XX-XX [E] [expires: XXXX-XX-XX]
Prepare the build process (replace
KEYNAME by the key’s name and
VERSION by latest Particl Core version):
$ ./gitian-build.py --setup KEYNAME VERSION # for example: $ ./gitian-build.py --setup allienworks 0.18.1.3 $ cd ~/gitian
ifconfig - if you see a
lxcbr0 interface, you’ll need to rename it to
br0. If you can locate
br0 right away, you’re all good and can skip this step:
$ ifconfig # if you see lxcbr0, then: $ sudo sed -i s/lxcbr0/br0/ /etc/default/lxc-net
Congratulations, that concludes all the one-time preparations. Onwards to compilation!
Once you did the Preparation part of this guide, all you need to do from that point on is the compilation. Even with new releases in the future, you just need to run this compile command, nothing else.
Running the build accepts quite a lot of parameters:
- again replace
KEYNAMEby name of your key
VERSIONby the version you want to compile
-j- number of threads used for compilation (e.g. if you have 8 threads on your CPU, you can safely use
-m- allocated memory in MB (e.g. allocate 10 GB by
$ /usr/bin/time ./gitian-build.py --no-commit -j 5 -m 5000 -b KEYNAME VERSION # for example: $ /usr/bin/time ./gitian-build.py --no-commit -j 5 -m 5000 -b allienworks 0.18.1.3
Once you hit Enter, the compilation will begin. You can check its status by running:
$ tail -f ~/gitian/gitian-builder/var/install.log # and then $ tail -f ~/gitian/gitian-builder/var/build.log
Linux builds will be first, followed by Windows and then macOS. Linux takes the most time (about half of the whole compilation process), so be patient.
After couple hours, when the compilations is done, you can find a new folder
~/gitian/particl-binaries/<VERSION> with all the builds in it.
If the PGP signing was successfull, you should see signatures of the builds signed by your PGP key in
~/gitian/gitian.sigs/<VERSION>-<ARCH>/<KEYNAME>/. Commit the changes (= addition of your signatures) and submit a PR to particl/gitian.sigs.