Iroha 1: how to just build on Linux (commands)

Sometimes You want to just build Iroha 1 on debian-based Linux. In official documentation there are instructions, but many new people are having problems with them. That is why I decided to put all commands with some modifications to fast build & run Iroha 1.
Those instructions are how to build Iroha inside docker instance of Ubuntu 22:04:

1. Running docker instance:

In terminal paste You can paste the code (of course first read description below the code where I explain arguments):

docker run \
    -it \
    --workdir /home \
    --name='ubuntu_test' \
    --network=host \
    ubuntu:22.04

Where:

  • -it  - to run image with interactive console (input && output)
  • --workdir /home  - is to set current directory in the docker instance
  • --name='ubuntu_test'  - instance name
  • --network=host - it is option to make possible easy communication between host and guest inside machine (like virtuall another computer in local network)
  • ubuntu:22.04  - image from docker-hub "ubuntu" version "22.04"

After some time You should be inside docker instance.

2. Building Iroha 1 inside the docker instance of Ubuntu 22:04:

# update package manage cache:
apt-get update

# install dependencies to build iroha (more than in official documentation are required):
apt-get -y --no-install-recommends install \
    build-essential ninja-build \
    git ca-certificates tar curl unzip cmake \
    pkg-config zip python3 python-is-python3 autoconf

# now we can clone iroha 1 from official repository (I need only last commit of branch main)
git clone https://github.com/hyperledger/iroha.git --depth=1

cd iroha

# build all dependencies for Iroha 1:
./vcpkg/build_iroha_deps.sh $PWD/vcpkg-build

# prepare configuration to build iroha 1 with ninja, not necessarily options are disabled (smart contracts, tests):
cmake -B build -DCMAKE_TOOLCHAIN_FILE=$PWD/vcpkg-build/scripts/buildsystems/vcpkg.cmake . -DCMAKE_BUILD_TYPE=RELEASE   -GNinja -DUSE_BURROW=OFF -DUSE_URSA=OFF -DTESTING=OFF -DPACKAGE_DEB=OFF

# building program which works like blockchain node with ninja-build:
cmake --build ./build --target irohad

# you can check if the program was sucessfully build (the command needs more arguments to work):
./build/bin/irohad

3. Sample run of iroha node:


In the official Iroha repository You have sample configuration files, You can use them to run a node (here is: documentation of command line arguments). I suggest to read description below before running the command:


./build/bin/irohad \
--config $PWD/example/config.docker \
   --keypair_name $PWD/example/node0 \
   -genesis_block $PWD/example/genesis.block \
   -reuse_state

    #-overwrite_ledger -drop_state

Where:

  • --config  - path to config file, in the config postgres is choosen, so it must be running
  • --keypair_name  - path to private and public keys of a the node
  • -genesis_block  - path to genesis block (first block of network)
  • -reuse_state  - not create network from beginning but use existing
  • -overwrite_ledger -drop_state  - DANGEROUS - it will erase the network (both database and files)

To run irohad  with arguments as above You need first change something in config file or change config + have working postgres DB.

A) Using Iroha with postgres db:

I suggest to use docker instance. To create instance with user&&password compatible with sample config you need command (it needs to be run in host):


docker run --name postgres_tmp \
    -e POSTGRES_USER=postgres \
    -e POSTGRES_PASSWORD=mysecretpassword \
    --network=host \
    -d postgres \
    -c 'max_prepared_transactions=100' \
    -c 'port=5432'

Then you can just run irohad  command.

B) Using Iroha with RocksDB:

Instead of postgres you can use RocksDB. In example  directory there is sample config, which is using RocksDB, but path to database must be changed, e.g.:

sed -i 's_/path/to/wsv/folder_/home/rocksdb_g' example/config.sample

The next step is to use that config when running irohad:

./build/bin/irohad \
     --config $PWD/example/config.sample \
     --keypair_name $PWD/example/node0 \
     -genesis_block $PWD/example/genesis.block \
     -reuse_state