blockchainUncategorized

Setup Stellar Core pada CentOS 7

Introduction

Pada tutorial ini kita akan membahas tentang instalasi node stellar-core node pada CentOS 7.2. Kita akan setup node full validator, tapi dalam banyak kasus kita tidak perlu sampai dengan menjalankan validator. Validation hanya diperlukan jika node lainnya perlu validasi kita dan kita mau berpartisipasi dalam SCP. Untuk info lebih detail tentang stellar-core dan kenapa dan kapan kita perlu menjalankan node klik ini this page.

Langkah-langkah men-setup node validator dan non-validator hampir sama, bedanya hanya pada file the configuration. Jadi kita bisa gunakan tutorial ini pada keduanya.

Sebetulnya tersedia stellar-core docker images: https://github.com/stellar/docker-stellar-core-horizon
Dengan cara docker, kita bisa menghemat banyak waktu tapi mengorbankan flexibility dan control.

Requirements

Node validator bisa dijalankan pada droplet DigitalOcean instance yang $5/bulan dengan 512 MB RAM, tapi akan mengalami masalah performance. Terutama stellar-core perlu RAM banyak dan akan membuat server mati ketika swap penuh. Disarankan menggunakna minimal 2 GB of RAM. CPU dan network is ok.

Setup CentOS Umum

Install CentOS. Setelah itu ada perlu beberapa langkah sebelum stellar-core untuk memastikan system sudah secure dan up to date.

Pertama yang perlu dijalanlan:

sudo yum upgrade
sudo yum install vim

Ini akan men-kontak repository dan semua package system akan up to date. Saya suka vim supaya bisa lebih cepat mengedit configuration file. Silahkan pilih selain vim :)

Langkah selanjutnya, pada machine yang baru diinstall, adalah membuat local non-root user dan membatasi root login. Bisa ikut tutorial ini untuk melakukannya.

Kita perlu juga menambahkan baris pada file /etc/ssh/sshd_config:

PasswordAuthentication no

Agar men-disables password authentication dan kita akan hanya bisa login ke machine menggunakan Public/Private Key. Ini hal yang bagus untuk menambah tingkat security.

Cek juga tutorial ini untuk meng-enable firewall, set time dan menambah swap file.

Lalu biarkan 2 ports terbuka untuk sshd dan stellar peer port (11625):

sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-port=11625/tcp

Building stellar-core

Kita akan meng-compile stellar-core dari source oleh karena itu perlu meng-install developer tools:

sudo yum groupinstall 'Development Tools'
sudo yum install postgresql-devel

Mungkin perlu cek dependencies yang diperlukan oleh stellar-core disini.

BUILDING GCC

CentOs 7.2 telah dilengkapi dengan gcc 4.8. Stellar-core membutuhkan versi 4.9 atau lebih. Cara terbaik untuk mengatasi masalah ini adalah meng-compile gcc versi terbaru dari source dengan mengikuti instruksi StackOverflow disini:
http://stackoverflow.com/questions/36327805/how-to-install-gcc-5-3-with-yum-on-centos-7-2

Kita akan gunakan latest version (6.2) dan bukan of 5.3 dengan cara:

curl ftp://ftp.gnu.org/pub/gnu/gcc/gcc-6.2.0/gcc-6.2.0.tar.bz2 -O

Proses compilation akan memakan waktu cukup lama, ngopi dulu.

Kita juga perlu  simlink ke libstdc++ library yang baru di-compile dengan cara:

sudo cp /usr/local/lib64/libstdc++.so.6.0.22 /lib64/
sudo rm /lib64/libstdc++.so.6
sudo ln -s /lib64/libstdc++.so.6.0.22 /lib64/libstdc++.so.6

KONFIGURASI LIBPQ

Pada saat proses compile stellar-core, kita perlu menjalankan ./configure dan mungkin akan ada erroro:

No package 'libpq' found

Problem ini karena ketika menginstall PostgreSQL dev tools pada CentOS dia tidak mengisntall file yang diperlukan oleh pkg-config. Untuk mengatasi hal ini kita bisa membuat secara manual.

/usr/lib64/pkgconfig/libpq.pc:

prefix=/usr
libdir=${prefix}/lib64
includedir=${prefix}/include/pgsql
 
Name: LibPQ
Version: 5.5.0
Description: PostgreSQL client library
Requires:
Libs: -L${libdir}/libpq.so -lpq
Cflags: -I${includedir}

DOWNLOAD STELLAR-CORE

Cukup ambil dan check out stellar-core versi terakhir:

git clone https://github.com/stellar/stellar-core.git
git checkout v0.5.0 # Check out the latest stable version
git submodule init
git submodule update

COMPILING & INSTALLING STELLAR-CORE

Langkap berikut dijalankan untuk men-compile dan install stellar-core:

./autogen.sh
./configure
make -j 4
make check # Runs the tests
sudo make install

Konfigurasi CentOs untuk stellar-core

Kita akan menjalankan stellar-core atas nama stellar user:

sudo useradd stellar

Perhatikan, kita tidak menggunakan password untuk user ini karena kita tidak akan membutuhkannya. Jika ingin menjadi user untuk tersebut untuk kebutuhan configuration purposes, kita selalu bisa melalui ‘sudo su – stellar’.

INSTALASI POSTGRESQL

Untuk server production database kita tidak akan cukup menggunakan SQLite. Gunakan PostgreSQL. Ini tutorial untuk menginstall PostgreSQL pada CentOS:

https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-centos-7

Kita perlu membuat role stellar dan database stellar:

sudo -i -u postgres
createuser --interactive # role=stellar, everything else=no
createdb stellar

Sama seperti sebelumnya, kita tidak perlu membuat password untuk user ini karena  stellar-core akan berjalan atas nama user stellar dan kita punya user yang sama untuk database jadi akan otomatis akses ke PostgreSQL.

STELLAR FOLDER

Stellar perlu sebuah folder untuk menyimpan  logs dan full ledger:

sudo mkdir /var/log/stellar
sudo chown stellar /var/log/stellar
 
sudo mkdir -p /var/stellar/buckets
sudo chown stellar /var/stellar
sudo chown stellar /var/stellar/buckets

Konfigurasi stellar-core

Ini langkah yang paling penting! Kita bisa lihat semua information tentang configuration parameters disini.

Ini contoh untuk validator configuration file:
https://github.com/stellar/docs/blob/master/other/stellar-core-validator-example.cfg

Gunakan contoh di atas dan sesuaikan dengan kebutuhan kita:

sudo mkdir /etc/stellar
sudo cp stellar-core/docs/stellar-core_example.cfg /etc/stellar/stellar.cfg
sudo chown stellar /etc/stellar/stellar.cfg
sudo chmod 600 /etc/stellar/stellar.cfg
sudo vim /etc/stellar/stellar.cfg

Ini contoh file configuration parameters:

LOG_FILE_PATH="/var/log/stellar/stellar-core.log"
BUCKET_DIR_PATH="/var/stellar/buckets"
DATABASE="postgresql://dbname=stellar user=stellar"
 
NODE_NAMES=[
"GAOO3LWBC4XF6VWRP5ESJ6IBHAISVJMSBTALHOQM2EZG7Q477UWA6L7U  eno",
"GAXP5DW4CVCW2BJNPFGTWCEGZTJKTNWFQQBE5SCWNJIJ54BOHR3WQC3W  moni",
"GBFZFQRGOPQC5OEAWO76NOY6LBRLUNH4I5QYPUYAK53QSQWVTQ2D4FT5  dzham",
"GDXWQCSKVYAJSUGR2HBYVFVR7NA7YWYSYK3XYKKFO553OQGOHAUP2PX2  jianing",
"GCJCSMSPIWKKPR7WEPIQG63PDF7JGGEENRC33OKVBSPUDIRL6ZZ5M7OO  tempo.eu.com",
"GCCW4H2DKAC7YYW62H3ZBDRRE5KXRLYLI4T5QOSO6EAMUOE37ICSKKRJ  sparrow_tw",
"GD5DJQDDBKGAYNEAXU562HYGOOSYAEOO6AS53PZXBOZGCP5M2OPGMZV3  fuxi.lab",
"GBGGNBZVYNMVLCWNQRO7ASU6XX2MRPITAGLASRWOWLB4ZIIPHMGNMC4I  huang.lab",
"GDPJ4DPPFEIP2YTSQNOKT7NMLPKU2FFVOEIJMG36RCMBWBUR4GTXLL57  nezha.lab",
"GCDLFPQ76D6YUSCUECLKI3AFEVXFWVRY2RZH2YQNYII35FDECWUGV24T  SnT.Lux",
"GBAR4OY6T6M4P344IF5II5DNWHVUJU7OLQPSMG2FWVJAFF642BX5E3GB  telindus",
# non validating
"GCGB2S2KGYARPVIA37HYZXVRM2YZUEXA6S33ZU5BUDC6THSB62LZSTYH  sdf_watcher1",
"GCM6QMP3DLRPTAZW2UZPCPX2LF3SXWXKPMP3GKFZBDSF3QZGV2G5QSTK  sdf_watcher2",
"GABMKJM6I25XI4K7U6XWMULOUQIQ27BCTMLS6BYYSOWKTBUXVRJSXHYQ  sdf_watcher3"
]
 
PREFERRED_PEERS=[]
 
PREFERRED_PEER_KEYS=[
"$sdf_watcher1",
"$sdf_watcher2",
"$sdf_watcher3",
"$dzham",
"$SnT.Lux",
"$tempo.eu.com"
]
 
KNOWN_PEERS=[
"core-live-a.stellar.org:11625",
"core-live-b.stellar.org:11625",
"core-live-c.stellar.org:11625",
"confucius.strllar.org",
"stellar1.bitventure.co",
"stellar.256kw.com"
]
 
NODE_SEED="SXXXXXX....XXXX galactictalk.org"
 
NODE_IS_VALIDATOR=true
 
# History local commented out
# [HISTORY.local]
# get="cp /var/stellar/history/vs/{0} {1}"
# put="cp {0} /var/stellar/history/vs/{1}"
# mkdir="mkdir -p /var/stellar/history/vs/{0}"
 
# Stellar.org history store
[HISTORY.sdf1]
get="curl -sf http://history.stellar.org/prd/core-live/core_live_001/{0} -o {1}"
 
[HISTORY.sdf2]
get="curl -sf http://history.stellar.org/prd/core-live/core_live_002/{0} -o {1}"
 
[HISTORY.sdf3]
get="curl -sf http://history.stellar.org/prd/core-live/core_live_003/{0} -o {1}"
 
[QUORUM_SET]
VALIDATORS=[
"$moni",
"$eno",
"$tempo.eu.com",
"$dzham",
"$sparrow_tw",
"$SnT.Lux"
]

# This field does not exist
# MAINTENANCE_ON_STARTUP=true

Perhatikan kita men-comment baris parameter MAINTENANCE_ON_STARTUP. Ini karena akan ada error dibawah ketika stellar-core dijalankan:

<startup> [default FATAL] Got an exception: Unknown configuration entry: 'MAINTENANCE_ON_STARTUP' [main.cpp:537]

Sebagai validator, men-define parameter QUORUM_SET adalah hal yang paling penting. Luangkan waktu untuk memahami dan mengerti akan hal ini.

MEMBENTUK TABEL STELLAR-CORE POSTGRESQL

Masuk sebagai  stellar user dan create database tables:

sudo su - stellar
stellar-core --conf /etc/stellar/stellar.cfg --newdb

TAMBAHKAN STELLAR-CORE KE SYSTEMD

Jika langkah sebelumnya berhasil baik, selanjutnya kita menambahkan stellar-core ke systemd sebagai service, agar ia bisa jalan automatically pada waktu crashes atau server dinyalakan.

Untuk hal ini, buat file /etc/systemd/system/stellar-core.service dengan isi:

[Unit]
Description=Stellar Core
After=postgresql.service
 
[Service]
ExecStart=/usr/local/bin/stellar-core --conf /etc/stellar/stellar.cfg
User=stellar
Group=stellar
WorkingDirectory=/home/stellar
Restart=on-failure
 
[Install]
WantedBy=default.target

Perhatikan bagaimana stellar-core dijalankan setelah  PostgreSQL agar sudah ada database ketika ia jalan.

Sekarang kita bisa jalankan node stellar-core dan mengaktifkan automatic startup:

sudo systemctl start stellar-core
sudo systemctl enable stellar-core

Monitoring status node

Selamat! Node sudah jalan. Sekarang kita perlu memantau file logs dan kesehatan quorum agar node kita selalu aktif.

Untuk mengecek apa yang ditulis oleh stellar-core service ke stdout dan stderr, jalankan:

sudo journalctl -u stellar

Untuk command selanjutnya, kita perlu masuk sebagai stellar user:

sudo su - stellar

Untuk mendapat informasi umum mengenai node:

stellar-core --conf /etc/stellar/stellar.cfg --c 'info'

Untuk mengecek quorum status:

stellar-core --conf /etc/stellar/stellar.cfg --c 'quorum'

Panduan lengkapnya ada disini.

 

Demikain sodara, semoga tutorial ini ada manfaatnya.

Akhmad D. Sembiring
Blockchain Expert Indonesia