[증인노드 초보자 가이드] #2 증인 노드를 위한 프로그램 설치 (Install Programs for Witness node)

in SCT.암호화폐.Crypto3 years ago (edited)

최근 막 증인 노드를 돌리기 시작한 이타인클럽(@etainclub)입니다.
증인 보팅은 아래에서 가능합니다. 부탁드립니다.
https://steemitwallet.com/~witnesses
@etainclub

image.png

1편 증인 노드 설명 및 서버 선택에 이어서 증인 노드 설치 방법에 대해서 설명합니다.
[증인노드 가이드] #1 증인 노드 설명 및 서버 선택 (Witness Node and Server)

증인 노드 설치방법은 @ayogom님께서 잘 설명하신 포스트가 있습니다.
스팀 증인 노드 세팅하기 1탄
스팀 증인 노드 세팅하기 2탄

그리고 someguy123의 글도 참고할만 합니다.
https://steemit.com/steem/@someguy123/your-guide-to-setting-up-a-witness-server-steem-in-a-box-hf19#

그리고 혹시 라즈베리 파이에서 증인 노드를 시도해 보고 싶은 분은 제가 기록한 글들을 참고하여 시도해 볼 수 있습니다.
[Steem on RPi] 히스토리

라즈베리에서 빌드는 성공했지만, 특정 블록 동기화가 실패하는 문제가 있는데, 관심 있는 분들이 해결해 나가면 좋겠습니다.


증인 노드 설치 가이드

저는 초보자가 직접 따라 해볼 수 있는 가이드를 작성해 보려고 합니다. 몇 가지 개념 설명도 추가하고, 하다가 안됐던 부분도 같이 공유하려고 합니다.

이번 글을 증인 노드를 설치할 서버가 준비된 것을 가정합니다. 관련해서 1편 글을 참고해주세요.

서버 접속

서버가 준비되면 서버에 접속할 수 있습니다. 접속할 수 있는 서버 ip가 주어지고, 보통 아이디와 암호가 주어집니다. 또는 사전에 ssh 공개키를 입력하면 공개키가 있는 pc에서 암호 없이 접속할 수도 있습니다.

우분투와 맥에서는 터미널 사용이 가능하고, 요즘은 윈도우에도 터미널 프로그램이 좋아졌습니다. 우분투나 맥 사용자는 터미널에 대한 설명이 따로 필요없겠습니다. 윈도우에서는 아래처럼 터미널 프로그램을 설치하고 진행하는 것이 좋습니다.

image.png
출처: https://forbes.tistory.com/928

참고로, 윈도우에서 WSL2를 설치하면 리눅스 사용이 가능합니다.

저는 맥을 사용하고 있어서 맥 기준으로 설명하겠습니다. 차이점은 없습니다.

서버 주소 저장

증인 노드를 설치할 때, 서버에 자주 접속하게 됩니다. 이 때, ip를 기억하는 것은 번거롭기 때문에 다음과 같이 ip를 저장해서 이름을 지정해 둡니다.

다음 내용은 서버에 접속해서 하는 작업이 아니라, 자신의 pc에서 하는 작업입니다. 수정할 에디터는 적절히 선택하시면 됩니다. vi나 nano가 많이 사용됩니다.

$ sudo vi /etc/hosts

64.123.234.13 witness # root

위 예는 ip 주소가 64.123.234.13이고 해당 주소를 witness라는 이름으로 지정한 것입니다. 그리고 # root 는 주석으로 해당 ip의 접속 id를 적어두면 좋습니다. 그럼 기억할 것은 암호 뿐입니다.

서버 접속

이제 서버에 접속합니다. 이 때, ssh 라는 프로그램을 이용합니다. 터미널에 기본 설치되어 있을 것입니다. 자신의 아이디와 설정한 서버 이름을 넣어야 합니다. 저는 위에서 처럼 아이디가 root이고 서버 주소를 witness로 매핑해놨습니다.

터미널을 실행하고, 아무 위치에서나 다음과 같이 입력합니다.

암호를 입력합니다.
image.png

$ ssh root@witness 
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-88-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

2 updates can be applied immediately.
1 of these updates is a standard security update.
To see these additional updates run: apt list --upgradable

Last login: Sat Oct 16 02:40:28 2021 from 

접속하면 위처럼 나옵니다. 서버의 OS 정보가 표시됩니다. 저는 우툰부 20.04.3 LTS 입니다.

서버 기본 프로그램 설치 및 업데이트

서버를 최신 상태로 유지할 필요가 있습니다. 제 os는 20.04.3 입니다. 간혹 20.04.1 이럴 수 있는데 최신으로 업데이트 해줍니다.
다음과 같이 입력하여 OS를 최신으로 업그레이드 합니다.

# apt update
# apt dist-upgrade

dist-upgrade를 하고 나서 서버를 재시작할 필요가 있을 수도 있습니다.

필수프로그램을 다음과 같이 설치합니다. 참고로 위 명령에서 프롬프트 (#)를 보면 #으로 되어 있습니다. 이것은 로그인한 사용자가 루트(root)라는 것을 의미합니다. 그래서 별도로 sudo 명령을 사용하지 않습니다. 만약 루트로 로그인 한것이 아니라면 sudo 입력이 필요하면 이때는 프롬프트가 $로 표시됩니다.

# apt install build-essential

git

인터넷에서 여러 소스들을 받아 오기 위한 git이라는 프로그램을 설치합니다.

# apt install git

docker 설치

증인 노드를 돌리기 위한 가장 간편한 방법은 docker를 이용하는 것입니다. docker라는 것은 일종의 가상환경으로 어떤 프로그램을 실행시키기 위한 모든 설정, 프로그램이 포함되어 있습니다. 따라서 서로 다른 pc, 서버에서도 동일하게 프로그램을 실행할 수 있게 해줍니다.

다음 내용을 참고해서 설치합니다.
https://docs.docker.com/engine/install/ubuntu/

# apt-get install apt-transport-https ca-certificates curl gnupg lsb-release

# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

이제 소스 리스트를 업데이트하고나면 docker를 설치할 수 있게 됩니다.

# apt-get update
# apt-get install docker-ce docker-ce-cli containerd.io

설치 확인은 다음과 같이 합니다. 필수적으로 설치 확인을 해야 합니다.

# docker
Usage:  docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

아래 내용은 꼭 필요하진 않지만, docker가 동작하는지 확인할 수 있습니다. 간혹 다운로드가 안될 수도 있습니다.

# docker run --rm hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:37a0b92b08d4919615c3ee023f7ddb068d12b8387475d64c622ac30f45c29c51
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

ntp 설치

증인 노드를 돌리기 위해서 시간 동기화가 중요합니다. 따라서 시간이 틀어지지 않게 다음과 같이 프로그램을 설치합니다.

참고. https://steemit.com/howto/@l0k1/howto-configuring-more-frequent-time-synchronisation-on-ubuntu

먼저 ntp를 설치합니다.

# apt install ntp

설치 후 다음과 같이 편집합니다.

# vi /etc/ntp.conf

# If you want to listen to time broadcasts on your local subnet, de-comment the
# next lines.  Please do this only if you trust everybody on the network!
#disable auth
#broadcastclient

# (제일 마지막에 다음 내용을 추가합니다.)
minpoll 5
maxpoll 7

위 의미는 시간 동기화를 위한 폴링 작업을 2^5=32초에서 2^7=128초 사이에 한다는 것입니다.

이렇게 하고, 다음과 같이 실행하여 위 내용을 적용합니다.

# systemctl enable ntp
# systemctl restart ntp

steem 툴킷 다운로드

증인 노드를 돌리기 위한 툴킷을 다운로드 받습니다. 이 때, 위에서 설치한 git을 사용합니다.

# git clone https://github.com/steemfans/steem-docker-ex.git

저는 위에 것을 사용했는데, @ayogom님의 것을 사용해도 됩니다.

https://github.com/ayogom/steem-docker.git

거의 동일한 프로그램입니다. 차이는 없을 것입니다.

그러면 서버에 다음과 같이 폴더가 생기고, 그 안에 툴킷 프로그램 있습니다.

# cd steem-docker-ex
# ls

image.png

위치는 다운로드 받은 위치가 각자 다를 수 있습니다.

스팀 docker 이미지 다운로드

다음은 스팀 소소 코드를 docker 이미지로 만든 것을 받습니다. 증인 노드를 돌리기 위해서는 steem 소스가 필요합니다.
https://github.com/steemit/steem
위 깃허브의 소스를 받아서 빌드까지 해 놓은 docker image가 있습니다.

arm용 빌드 (주의: pc에서 증인 노드 설치시 필요없는 내용입니다.)
제가 이걸 받아서 arm에서 빌드되도록 수정하고, docker 이미지로 만드는 것을 해놓은 곳은 여기에 있습니다.
https://github.com/EtainLove/steem/tree/0.23.x-arm64

그럼 이제 docker 이미지를 받습니다. 이것도 몇 가지 버전이 존재합니다. 저는 @ety001님의 것으로 하겠습니다.

# docker pull ety001/steem-mira:0.23.1

@happyberrysboy님의 것도 있습니다.
docker pull happyberrysboy/steemnode:hf0.23.1

이미지 받는 데 시간이 조금 소요됩니다. 받고 나서 다음과 같이 이미지 이름을 만들어 줍니다.
기존 이미지는 이름이 steem-mira:0.23.1이 되는데, 툴킷은 steem:latest라는 이름을 사용하기 때문에 이름을 하나 만들어 줘야 합니다.

# docker tag ety001/steem-mira:0.23.1 steem:latest

블록 파일 다운로드

이제 블록 동기화를 빨리 하기 위해 블록 파일을 다운로드 합니다.
파일은 여기에 있습니다.

https://files.steem.fans/

여기서 최신 파일을 다운로드 하면 됩니다. 증인 노드의 경우는 파일이름이 steem-witness라고 적혀 있습니다.

image.png

보시면, 사이즈가 215GB입니다. 따라서 자신의 서버의 스토리지 용량을 따져서 파일을 받아서 압축을 풀지, 다운로드 받으면서 압축을 풀지 결정해야 합니다. 압축을 풀면 300G 정도의 폴더가 나옵니다. 따라서 파일을 받고, 압축을 풀려면 520GB 이상의 여유 공간이 있어야 합니다. 그러나 다운로드 하면서 파일 압축하는 것은 중간에 다운로드가 중지되면 다시 해야 하므로 별로 권장하지 않습니다.

파일만 받는 것은 다음과 같습니다.

# wget -c https://files.steem.fans/data/steem_witness-20211015.tar.lz4

위에서 -c 옵션을 넣어야 파일 다운로드가 중단되어도 이어서 시작할 수 있으므로 꼭 넣어주세요.

파일 다운로드는 속도에 따라 수 시간 걸립니다. 저는 4시간 넘게 걸린 거 같습니다. 자기 전에 다운로드 걸고 주무세요.


여기까지 따라 오시느라 고생많으셨습니다.

다음 편에서 지갑 설정 및 블록 동기화에 대해서 설명하겠습니다.

리스팀 / 증인 보팅 부탁드립니다.

증인 보팅은 아래에서 가능합니다. 부탁드립니다.
https://steemitwallet.com/~witnesses
@etainclub

cc.
@steem-agora
@steemcurator01

Sort:  

이타인님은 증인에서 검색이 안되는데요?? 저만 그런가요?

왓 대단하십니다.

죄송합니다. 100위 밖에서 검색했어요ㅎㅎㅎ
보팅 했습니다.

ㅎㅎ 감사합니다!

Coin Marketplace

STEEM 0.32
TRX 0.12
JST 0.034
BTC 64664.11
ETH 3166.18
USDT 1.00
SBD 4.11