라즈베리파이로 증인노드를 돌려본다? - Tutorial - 일단 실패

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

PLAY STEEM 모바일 / Flutter 웹앱 개발자 이타인클럽입니다.

라즈베리파이에서 증인노드를 돌릴 수 있는가 시도해 보고 있습니다.


시놉시스

블러트 재단의 요청으로 블러트 증인노드를 라즈베리 파이에서 돌리고 있습니다. 스팀 증인노드에 대해서는 생각해 보지 않았는데, 최근 증인노드에 관심이 가면서 생각해보니, 블러트도 되는데, 스팀도 되지 않을까?

그래서 시도를 해보고 있습니다.

아래 설명은 리눅스 기준이지만, 윈도우에서도 가능합니다.

1. 준비물

1-1. 라즈베리 파이 4B, 8G

image.png

http://item.gmarket.co.kr/detailview/item.asp?goodscode=1837990502

최신 라즈베리 파이가 필요합니다. 중요한 것은 램 크기가 8G이어야 한다는 것입니다.
이 문서에 따르면 최소 램 사양이 8G입니다. 이건 클라우드 서버를 사용할 때도 동일합니다.

https://steemit.com/steem/@someguy123/your-guide-to-setting-up-a-witness-server-steem-in-a-box-hf19#

증인노드 설정을 해보다니 보니, 고사양이 필요한 경우는 동기화인데, 블록 파일을 미리 받아놓으면 고사양이 필요없을 수도 있을거 같습니다.

또 여기서 중요한 것은 파워입니다. 위 그림에서도 전용 파워 5V, 4A (전류량이 중요)를 사용해야 나중에 라즈베리파이에 SSD 같은 장치나 다른 장치를 별도 파워 없이 연결할 수 있습니다. (SSD는 블록 파일을 저장하기 위해 나중에 설명합니다)

현재 라즈베리 4B의 물량이 별로 없나봅니다. 배송이 매우 오래 걸리네요.

1-2. HDMI - MIcro HDMI 변환 케이블

image.png
http://item.gmarket.co.kr/Item?goodscode=1940204183

라즈베리 4B에는 디스플레이 포트가 있는데, MIcro HDMI입니다. 그래서 일반적으로 사용하는 HDMI 케이블을 연결할 수 없습니다. HDMI to Micro-HDMI 변환 젠더를 사거나, HDMI to MIcro HDMI 케이블을 사용하시면 됩니다.

1-3. 512GB 이상의 SD 카드

image.png
http://item.gmarket.co.kr/Item?goodscode=2121665157

현재 스팀 블록 파일 사이즈가 350G?가 넘어갑니다. 그래서 증인노드를 돌리려면 이 이상의 스토리지가 필요합니다. 저는 처음에 256G를 사다가, 외장 SSD에 steem_witness 파일을 두고 사용할 수 있지 않을까 했는데, 지금은 안되는거 같습니다. steem_witness 파일이 호스트에 저장되어야 합니다.

1-4. 우분투 20.04 라즈베리 파이 이미지

라즈베리에 우분투 20.04 서버를 설치할 것입니다. 따라서 다음과 같은 이미지를 받아 둡니다.

image.png

https://ubuntu.com/download/raspberry-pi

여기서 여러가지 버전이 있는데, 20.04 LTS를 추천합니다.

1-5. 이미지 라이팅 프로그램, Balena Etcher

위에서 받은 우분투 이미지를 굽기 위한 라이팅 프로그램을 다운로드합니다.
https://www.balena.io/etcher/

굽는 방법 참고. https://whiteknight3672.tistory.com/232

1-6. steem_witness 파일 다운로드

블록 데이터를 따로 받아서 복사하는 방법이 있고, 그렇지 않고 받으면서 압축을 해제하는 방법이 있습니다. @ety001님이 새롭게 방법을 올려주셨습니다.
https://steemit.com/steem/@ety001/a-simple-tuturial-for-a-dockerize-steem-witness-deployment

For the disk less space users, you could try the stream way to download and decompress backup data. Like this:
$ wget -c -qO- https://files.steem.fans/data/steem_witness-20210806.tar.lz4 | lz4 -d | tar x

라즈베리 주문해 놓고, 기다리실 분들은 파일을 별도로 받아두고, 라즈베리가 도착하면 빠르게 증인노드 동기화를 할 수 있겠습니다.
블록 동기화를 빨리 하기 위해서 steem_witness 파일을 다운로드 합니다.

다운로드 사이트. https://files.steem.fans/

image.png

최신 파일을 받으면 좋겠죠?
steem_witness-20210806.tar.lz4 191.89GB

다운로드 사이즈는 210GB 정도인데, 압축되어 있는거라 압축을 풀면 350GB 정도 되는가 봅니다.

별도의 외장 SSD에 받아둡니다.

200GB가 넘는 파일이므로 중간에 인터넷 사정에 따라 끊기는 경우가 발생할 수 있습니다. 특히 라즈베리파이의 sd카드에 다운로드하며 압축을 풀 때, 다운로드가 중지되면 처음부터 다시해야 하는 경우가 발생합니다. 그래서 외장 하드에 받아두는 것을 추천합니다.

받을 때 wget -c 옵션을 주면 끊기더라도 다음에 이어서 받을 수 있습니다.

wget -c https://files.steem.fans/data/steem_witness-20210806.tar.lz4
steem_witness-20210806.tar.   0%[                                          ]   1.96G  3.76MB/s    eta 19h 10m

2. 우분투 설치

라즈베리에 삽입할 sd 카드에 우분투 이미지 (20.04)를 굽습니다. 그러면 라즈베리 파이에 우분투 설치는 끝납니다.

sd카드를 라즈베리파이에 삽입합니다.
이때, 라즈베리에 키보드, 디스플레이를 연결합니다. (HDMI to Micro-HDMI 젠더 사용)

우분투가 부팅되면 로그인/암호를 입력합니다. 초기 계정/암호는 ubuntu/ubuntu입니다. 로그인 즉시, 암호를 새로 설정하라고 나오니, 새로운 암호를 설정하시면 됩니다. 이 때 먼저 기존 암호를 넣고, 새로운 암호를 두 번 연속 넣으면 됩니다.

3. 증인노드를 돌리기 위한 프로그램 설치

이제 증인노드를 돌리기 위한 프로그램들을 설치합니다.

3-1 개발 환경 설치

참고. https://steemit.com/steem/@someguy123/your-guide-to-setting-up-a-witness-server-steem-in-a-box-hf19#

라즈베리 파이에서 다음과 같은 순으로 입력합니다.

$ sudo apt update
(라즈베리파이의 소프트웨어를 최신상태로 업데이트합니다)

$ sudo apt install build-essential
(개발하기 위한 프로그램들, git, curl, wget 등을 설치합니다.)

3-2 증인노드 툴 설치

그 다음부터는 @ety001님의 자료를 따라서 합니다. someguy는 hive로 넘어갔습니다.

참고. https://steemit.com/steem/@ety001/a-simple-tuturial-for-a-dockerize-steem-witness-deployment

다음으로 증인노드를 실행하기 위한 툴을 다운로드 받습니다.

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

그러면 받은 위치에 steem-docker-ex 폴더가 생성되어 있을 것입니다.

이제, 받은 툴을 이용하여 docker를 설치합니다.

$ cd steem-docker-ex
$ ./run.sh install_docker

이렇게 하면 docker가 설치됩니다. docker 설치 후 재부팅이나 로그아웃, 로그인 해야 합니다. 그래야 docker를 사용할 수 있습니다.

이렇게 한 후, 다음 명령으로 자신이 docker 그룹에 속해 있는지 확인합니다.

$ groups
.....  docker ....
docker가 보여야 합니다.

3-3 스팀 이미지 다운로드

이제 docker로 steem 이미지를 다운로드 받고, 받은 이미지에 새로운 이름을 태깅합니다.

$ docker pull ety001/steem-mira:0.23.1
$ docker tag ety001/steem-mira:0.23.1 steem:latest

3-4 램 크기 설정 및 config.init 수정

중요한 부분입니다. 공유 메모리 크기를 설정합니다. 실제 라즈베리 파이의 램 사이즈를 입력합니다. 다른 장치라면 설치된 램 크기를 입력합니다.

sudo ./run.sh shm_size 8G

다음 위치에서 파일을 열어서 아래처럼 내용을 수정합니다.

$ cd steem-docker-ex/data/witness_node_data_dir
$ vi config.ini (nano를 사용해도 됩니다)

## config.ini
# p2p-endpoint = 0.0.0.0:2001  (주석 처리)

shared-file-size = 8G (설치된 램 크기로 설정)
#shared-file-dir = /shm/   (주석 처리)

@ayogom님의 증인노드 설정 2편 참고 그림
https://steemit.com/hive-101145/@ayogom/6i8cmu-2

3-5 외장 SSD 마운트

이제 받아 놓은 steem_witness 파일을 다음과 같은 특정 위치로 옮겨야 하는데,
이 때, ssd를 마운틀 해야 하는데, 자동으로 되는 경우도 있고, 안되는 경우도 있습니다.

라즈베리파이의 USB 3.0 포트에 외장 SSD를 연결합니다.

다음과 같은 명령으로 확인합니다.
참고. https://geeksvoyage.com/raspberry%20pi4/ssd-for-pi4/

$ lsblk (안되면 sudo lsblk)

NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 465.8G  0 disk 
└─sda1        8:1    0 465.8G  0 part /media/pi/fd59615a-19bd-4dba-9787-6b75f17f8005
mmcblk0     179:0    0  29.8G  0 disk 
├─mmcblk0p1 179:1    0   256M  0 part /boot
└─mmcblk0p2 179:2    0  29.6G  0 part /

여기서 sda가 외장 SSD이고, mmcblk0이 sd 카드입니다 (참고용 데이터입니다)

위의 경우는 sda1에 part /media/pi/.. 이처럼 ssd가 마운트가 되어 있는 상태입니다. 저는 되어 있지 않아서 다음과 같이 수동으로 마운트 시켰습니다.

$ sudo mkdir /media/ssd
$ sudo mount /dev/sda1 /media/ssd

여기서 sda1는 자신의 외장 ssd가 잡힌 디바이스의 이름을 넣어야 합니다. sda1가 아닐 수도 있습니다. 그리고 /media/ssd는 방금 생성한 마운트 위치입니다.

3-6 steem_witness 파일 압축 해제

이제 마운트가 되면 steem_witness 파일의 압축을 푸는데, 이 때, 푸는 위치를 sd 카드의 witness_node_data_dir로 지정합니다. (압축을 풀면 blockchain 폴더가 나와야 합니다. blocklog 파일이 아니라 steem_witness파일을 받아야 합니다. 이전에 blocklog 파일을 받아서 안됐습니다.)

$ sudo lz4 -d steem_witness-20210806.tar.lz4 ~/steem-docker-ex/data/witness_node_data_dir/

그러면 압축이 풀리는 과정이 진행됩니다. 꽤 오래 걸립니다. 초당 20MB 정도씩 풀리는거 같습니다.

4. 증인노드 설정 및 실행

이부분은 아직 진행하지 않았습니다. 설정을 완료하고 나서 올리겠습니다. 혹시라도 안될 수도 있습니다.

Update

steem docker image가 arm64를 지원하지 않네요. 라즈베리파이는 arm64 아키텍쳐입니다. someguy 이미지도 amd64만 지원하네요.

일단 방법이 있나 좀 더 찾아보겠습니다.

Thank you

도움을 주신 분들께 고맙습니다.

Thank You

@ety001
@ayogom
@justyy
@pennsif

cc.
@steemcurator01
@steemitblog

Sort:  

불가능입니다 ㅠ
권장 사양이 64 램 정도 권장하고
경험상은 32램은 넘어야 합니다.

ssd 사용해서... 600기가정도 확보되어야하고
지속적으로 데이터가 늘어나서.... 그 부분도 어렵습니다

hdd를 사용할 수도 있지만 동기화하는데 엄청 오래 걸릴 듯 합니다 ㅠ
전 한번 테스트 하다가 포기했습니다

사양은 크게 문제가 안될거라고 봅니다. 블러트 증인노드 잘 돌리고 있거든요. 믄제는 스팀 소스가 arn을 지원하지 않는데, 찾아보면 몇 명이 시도해서 성공했습니다. 동기화는 최신 blocklog받으면 빨리 됩니다. arm용 docker이미지만 찾거나 빌드할 수 있으면 되는데.. 아직 못 찾았습니다.

제가 이전에 증인노드 비용을 줄이기 위해 16 RAM에서 설치 시도를 해본적이 있는데, 설치 자체가 안되더라고요...

요즘 라즈베리파이를 저도 좀 가지고 놀고 있어서 ㅎㅎ 가능하다면 참 좋겠습니다 ㅎ

찾아본 결과 steem의 fc 라이브러리가 arm을 지원하지 않아 빌드가 안되는거 같습니다.
https://github.com/steemit/steem/issues/622

블러트팀은 이걸 해결해서 라즈베리파이에서도 빌드할 수 있게 했구요. 다른 몇 팀도 스팀의 부분을 수정해서 arm에서 노드를 돌린 거 같습니다.

일단 그 문제가 있을 수도 있지만 하드웨어 스펙 자체가 만족을 못 합니다.

블러트의 경우 새로운 별도 체인으로 가져갔기 때문에 기존의 데이터가 없는 경우라 낮은 램/낮은 저장공간에서도 가능한 것이고요, 스팀의 경우에는 이미 데이터가 너무 많이 쌓여 있어서 어렵다는 의견이었습니다.

라즈베리파이 주문을 했는데 8월 초는 넘어야 온다고 하네요
그럼 한번 시도를 해보려고 합니다.

지금은 안됩니다. 스팀 소스가 arm을 지원하지 않습니다. 자료를 찾아보면 몇 팀이 문제되는 코드를 수정해서 arm(라즈베리파이 아키텍처)에서 돌렸는데, 스팀은 그렇게 개발할 계획이 없는거 같습니다. gtg가 예전에 공개했는데 하이브로 넘어가고 지금은 해당 자료는 없네요.

사신 다면 이걸로 사셔서 해볼 수 있습니다.
http://item.gmarket.co.kr/Item?goodscode=2167404751

전력소비가 라즈베리파이보단 높고, 가격도 비쌉니다. ssd도 별도로 구매해야 하구요...

이미 라스베리파이를 주문해버렸군요. 그래서 우선 먼저 라스베리파이부터 먼저 해보고 다음에 해봐야 겠습니다

저도 진작에 주문했는데 물량 문제로 배송이 안되고 있네요. 하나 가지고 있어도 나쁘진 않겠습니다. 아니면 취소 가능할겁니다.

이런 시도를 해보시다니 멋집니다.
라즈베리 파이에서 노드가 돌아간다면 저도 한번 시도해보고 싶네요.

소스 빌드가 안된다고 하네요. fc 라이브러리에서 arm용으로 빌드되게 고치면 가능한거 같은데.. 쉽진 않아 보입니다.

쉽지 않군요. ㅠㅠ 답변 감사합니다.

Coin Marketplace

STEEM 0.21
TRX 0.13
JST 0.030
BTC 67753.34
ETH 3502.65
USDT 1.00
SBD 2.82