Skip to content

Latest commit

 

History

History
74 lines (51 loc) · 2.59 KB

cronosd-build-with-nix.md

File metadata and controls

74 lines (51 loc) · 2.59 KB

Cronosd build with Nix

It is also possible to reproducibly build cronosd binaries locally yourself using nix.

Prerequisites

  • Install nix, following the instructions here: https://nixos.org/download.html

  • Install cachix and enable cronos binary cache:

    nix-env -iA cachix -f https://cachix.org/api/v1/install
    cachix use cronos
    
    

Build Type Matrix

Below are listed the different possible parameters

  • Network Type
    • mainnet (default)
    • testnet
  • DB Backend
    • rocksdb (default)
    • goleveldb
  • Build Type
    • normal nix package (default)
    • re-distributable bundle
    • re-distributable tarball, the tarball of the above bundle.

Creating a reproducible build

The package name is constructed by joining the above three properties with a separator -, omitting the default values, for example:

  • cronosd: defaults to the mainnet rocksdb nix package.
  • cronosd-tarball: mainnet rocksdb re-distributable tarball.
  • cronosd-goleveldb-tarball: mainnet goleveldb re-distributable tarball.
  • cronosd-testnet-goleveldb-tarball: testnet goleveldb re-distributable tarball.

The nix flake url is: github:crypto-org-chain/cronos/$TAG_NAME#$PACKAGE_NAME,
replace the $TAG_NAME and $PACKAGE_NAME to the one you needed, for example:

The full command to build a v0.8.1 rocksdb mainnet re-distributable tarball is:

nix build github:crypto-org-chain/cronos/v0.8.1#cronosd-tarball

result -> /nix/store/dlhqc2ii8jj1ryrgki90l6j92r2by06g-bundle-cronosd-v0.8.1

The result will reside in ./result by default, you can copy the tarball to other machines with the same OS and arch. The re-distributable bundle/tarball has dynamic libraries included, no extra runtime dependencies are needed.

mkdir tmp/cronosd
tar xfz ./result -C /tmp/cronosd/

{% hint style="info" %} If you get error: experimental Nix feature 'nix-command' is disabled;
use '--extra-experimental-features nix-command' to override, e.g. by adding:

--extra-experimental-features nix-command
--extra-experimental-features flakes {% endhint %}

Tarball Content

To keep the tarball redistributable, it has all the runtime dependencies included, the dynamic linker, and the shared libraries. They are located in a relative path, so it's important that the whole package is moved together.

  • bin/cronosd: the entry point, it's a wrapper script that executes the binary using the included dynamic linker.
  • exe/cronosd: the executable.
  • lib/: all the shared libraries.