Skip to content

Instantly share code, notes, and snippets.

@avelrl
Forked from cc32d9/nodeos_full_node_setup.txt
Created December 13, 2018 14:49
Show Gist options
  • Save avelrl/3206d0e4a40baabc6a3a44b13e57712f to your computer and use it in GitHub Desktop.
Save avelrl/3206d0e4a40baabc6a3a44b13e57712f to your computer and use it in GitHub Desktop.

Revisions

  1. @cc32d9 cc32d9 revised this gist Dec 1, 2018. 1 changed file with 4 additions and 8 deletions.
    12 changes: 4 additions & 8 deletions nodeos_full_node_setup.txt
    Original file line number Diff line number Diff line change
    @@ -80,7 +80,7 @@ innodb_flush_log_at_trx_commit=1
    innodb_log_group_home_dir = /var/lib/mysql-log
    innodb_locks_unsafe_for_binlog = 1
    sync_binlog=1
    log_bin=/var/lib/mysql-log/binlog-fra01
    log_bin=/var/lib/mysql-log/binlog-apisrv01
    binlog_format=row
    expire_logs_days=3
    log_slave_updates=true
    @@ -93,13 +93,9 @@ rm /var/lib/mysql/binlog*

    systemctl start mariadb

    # Needed for ZMQ plugin
    apt-get install -y pkg-config libzmq5-dev

    # ZMQ plugin receiver dependencies
    apt-get install -y cpanminus gcc g++ libzmq5-dev mariadb-server \
    libdbi-perl libmysqlclient-dev libexcel-writer-xlsx-perl \
    libjson-xs-perl libjson-perl
    apt-get install -y cpanminus gcc g++ pkg-config libzmq5-dev \
    libdbi-perl libmysqlclient-dev libjson-xs-perl libjson-perl


    useradd -G sudo -s /bin/bash eosio
    @@ -144,7 +140,7 @@ vi /etc/default/lightapi_eos
    # that are predefined in systemd/lightapi_api.service

    cd systemd
    sh install_systemd_dbwrite.sh
    sh install_systemd_dbwrite.sh eos
    sh install_systemd_api.sh

    # go back to eosio user
  2. @cc32d9 cc32d9 created this gist Nov 7, 2018.
    268 changes: 268 additions & 0 deletions nodeos_full_node_setup.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,268 @@
    apt-get update && apt-get install -y aptitude git lxc-utils zfsutils-linux netfilter-persistent sysstat

    # find the partition ID that is linked to the storage serial number.
    # This will prevent from losing the partition if disk mapping changes
    ls -l /dev/disk/by-id/ | grep sda6
    zpool create -f zdata /dev/disk/by-id/wwn-0x600507604092b628236df4851535cef5-part6

    ## Fixate internal IP address of the container
    systemctl stop lxc-net
    sed -i -e 's,^.*LXC_DHCP_CONFILE,LXC_DHCP_CONFILE,' /etc/default/lxc-net
    sed -i -e 's,10\.0\.3,10\.0\.11,g' /etc/default/lxc-net
    cat >/etc/lxc/dnsmasq.conf <<'EOT'
    dhcp-host=lightapi,10.0.11.10
    EOT
    systemctl start lxc-net

    # Optionally, a parent filesystem. You either create child entries, or
    # you can also use a flat naming scheme, like zdata/lightapi_lxc
    zfs create zdata/lightapi
    zfs set recordsize=128k zdata/lightapi
    zfs set atime=off zdata/lightapi

    # LXC container contents
    zfs create -o mountpoint=/var/lib/lxc/lightapi zdata/lightapi/lxc

    # EOS blocks log, compressed, with 8KB records
    zfs create -o mountpoint=/var/lib/lxc/lightapi/rootfs/home/eosio/data zdata/lightapi/eosdata
    zfs set compression=lz4 zdata/lightapi/eosdata
    zfs set primarycache=all zdata/lightapi/eosdata
    zfs set recordsize=8k zdata/lightapi/eosdata

    # EOS state shared memory. 4KB records, uncompressed, content is not cached
    zfs create -o mountpoint=/var/lib/lxc/lightapi/rootfs/home/eosio/data/state zdata/lightapi/eosstate
    zfs set recordsize=4k zdata/lightapi/eosstate
    zfs set primarycache=metadata zdata/lightapi/eosstate

    # MySQL data. Innodb standard write size is 16KB
    zfs create -o mountpoint=/var/lib/lxc/lightapi/rootfs/var/lib/mysql zdata/lightapi/mysql
    zfs set recordsize=16k zdata/lightapi/mysql
    zfs set primarycache=metadata zdata/lightapi/mysql

    # MySQL Innodb log and binlog for replication. Compressed, 128KB records. Full cache to allow random size appending.
    zfs create -o mountpoint=/var/lib/lxc/lightapi/rootfs/var/lib/mysql-log zdata/lightapi/mysqllog
    zfs set compression=lz4 zdata/lightapi/mysqllog
    zfs set primarycache=all zdata/lightapi/mysqllog

    # Download Ubuntu 18.04 packages and set up a new container
    lxc-create -n lightapi -t download -- --dist ubuntu --release bionic --arch amd64

    # Allow SSH to the container, provided that you have an SSH agent running
    mkdir /var/lib/lxc/lightapi/rootfs/home/eosio/.ssh/
    cp .ssh/authorized_keys /var/lib/lxc/lightapi/rootfs/home/eosio/.ssh/

    # if needed, also adjust the MAC address to be unique
    echo "lxc.start.auto = 1" >> /var/lib/lxc/lightapi/config

    lxc-start -n lightapi
    lxc-attach -n lightapi

    # this user was in default template
    userdel -r ubuntu

    # generic packages and MariaDB
    apt-get update && apt-get install -y aptitude git openssh-server net-tools \
    mariadb-server mariadb-client

    chown mysql.mysql /var/lib/mysql-log

    systemctl stop mariadb

    cat >/etc/mysql/mariadb.conf.d/90-lightapi.cnf <<'EOT'
    [mysqld]
    server_id=11
    bind-address=0.0.0.0
    default_storage_engine=InnoDB
    innodb_buffer_pool_size = 10G
    innodb_doublewrite = 0
    innodb_checksum_algorithm = none
    innodb_flush_log_at_trx_commit=1
    innodb_log_group_home_dir = /var/lib/mysql-log
    innodb_locks_unsafe_for_binlog = 1
    sync_binlog=1
    log_bin=/var/lib/mysql-log/binlog-fra01
    binlog_format=row
    expire_logs_days=3
    log_slave_updates=true
    gtid_domain_id = 11
    gtid_strict_mode = ON
    EOT

    rm /var/lib/mysql/ib_logfile*
    rm /var/lib/mysql/binlog*

    systemctl start mariadb

    # Needed for ZMQ plugin
    apt-get install -y pkg-config libzmq5-dev

    # ZMQ plugin receiver dependencies
    apt-get install -y cpanminus gcc g++ libzmq5-dev mariadb-server \
    libdbi-perl libmysqlclient-dev libexcel-writer-xlsx-perl \
    libjson-xs-perl libjson-perl


    useradd -G sudo -s /bin/bash eosio
    sed -i -e 's,^\%sudo.*,%sudo ALL=(ALL:ALL) NOPASSWD:ALL,' /etc/sudoers
    chown -R eosio:eosio /home/eosio
    chmod 700 /home/eosio/.ssh/
    chmod 600 /home/eosio/.ssh/authorized_keys

    # out of LXC container
    exit

    # in again, as eosio user
    ssh -A [email protected]

    mkdir build
    cd build
    git clone https://github.com/cc32d9/eos_zmq_plugin.git
    git clone https://github.com/EOSIO/eos --recursive
    cd eos
    LOCAL_CMAKE_FLAGS="-DEOSIO_ADDITIONAL_PLUGINS=${HOME}/build/eos_zmq_plugin" ./eosio_build.sh
    sudo ./eosio_install.sh

    sudo -i

    ## Light API ZMQ receiver
    cpanm DBD::MariaDB
    cpanm ZMQ::Raw
    cpanm Starman

    cd /opt
    git clone https://github.com/cc32d9/eos_zmq_light_api.git
    cd eos_zmq_light_api

    sudo mysql <sql/lightapi_dbcreate.sql
    sh setup/add_eos_mainnet.sh

    vi /etc/default/lightapi_eos
    # add the ZMQ socket details:
    # DBWRITE_OPTS=--pull=tcp://127.0.0.1:5556

    # Optionally, edit /etc/default/lightapi_api and adjust variables
    # that are predefined in systemd/lightapi_api.service

    cd systemd
    sh install_systemd_dbwrite.sh
    sh install_systemd_api.sh

    # go back to eosio user
    exit

    #### nodeos configuration ####
    # Take P2P endpoints near to you from https://eosnodes.privex.io/
    cat >etc/config.ini <<'EOT'
    chain-state-db-size-mb = 32768
    wasm-runtime = wabt
    validation-mode = light
    http-server-address = 0.0.0.0:8888
    p2p-listen-endpoint = 0.0.0.0:9856
    p2p-server-address = :9856
    allowed-connection = any
    access-control-allow-origin = *
    verbose-http-errors = true
    contracts-console = true
    max-clients = 100
    plugin = eosio::chain_plugin
    plugin = eosio::chain_api_plugin
    plugin = eosio::db_size_api_plugin
    plugin = eosio::zmq_plugin
    zmq-sender-bind = tcp://0.0.0.0:5556
    sync-fetch-span = 1000
    p2p-peer-address = eos-seed-de.privex.io:9876
    p2p-peer-address = api.eosuk.io:12000
    p2p-peer-address = p2p2.eossweden.eu:9966
    p2p-peer-address = peer.eosgeneva.io:9876
    EOT

    cat >etc/logging.json <<'EOT'
    {
    "includes": [],
    "appenders": [{
    "name": "consoleout",
    "type": "console",
    "args": {
    "stream": "std_out",
    "level_colors": [{
    "level": "debug",
    "color": "green"
    },{
    "level": "warn",
    "color": "brown"
    },{
    "level": "error",
    "color": "red"
    }
    ]
    },
    "enabled": true
    }
    ],
    "loggers": [{
    "name": "default",
    "level": "warn",
    "enabled": true,
    "additivity": false,
    "appenders": [
    "consoleout"
    ]
    }
    ]
    }
    EOT

    cat >etc/genesis.json <<'EOT'
    {
    "initial_timestamp": "2018-06-08T08:08:08.888",
    "initial_key": "EOS7EarnUhcyYqmdnPon8rm7mBCTnBoot6o7fE2WzjvEX2TdggbL3",
    "initial_configuration": {
    "max_block_net_usage": 1048576,
    "target_block_net_usage_pct": 1000,
    "max_transaction_net_usage": 524288,
    "base_per_transaction_net_usage": 12,
    "net_usage_leeway": 500,
    "context_free_discount_net_usage_num": 20,
    "context_free_discount_net_usage_den": 100,
    "max_block_cpu_usage": 200000,
    "target_block_cpu_usage_pct": 1000,
    "max_transaction_cpu_usage": 150000,
    "min_transaction_cpu_usage": 100,
    "max_transaction_lifetime": 3600,
    "deferred_trx_expiration_window": 600,
    "max_transaction_delay": 3888000,
    "max_inline_action_size": 4096,
    "max_inline_action_depth": 4,
    "max_authority_depth": 6
    }
    }
    EOT


    initialize the blockchain with genesis. This is a one-time operation, and you can press Ctrl-C when it runs for few seconds.
    /usr/local/eosio/bin/nodeos --data-dir /home/eosio/data --config-dir /home/eosio/etc --genesis-json=etc/genesis.json
    Ctrl-C

    cat >etc/nodeos.service <<'EOT'
    [Unit]
    Description=EOS nodeos
    [Service]
    Type=simple
    ExecStart=/usr/local/eosio/bin/nodeos --data-dir /home/eosio/data --config-dir /home/eosio/etc
    TimeoutStartSec=30s
    TimeoutStopSec=300s
    Restart=no
    User=eosio
    Group=eosio
    KillMode=control-group
    [Install]
    WantedBy=multi-user.target
    EOT

    sudo cp etc/nodeos.service /etc/systemd/system/
    sudo systemctl daemon-reload
    sudo systemctl enable nodeos
    sudo systemctl restart nodeos