아직도 노드가 정상적으로 돌아가지 않고 있지만 노드 돌리는 가이드를 계속 정리해 보겠습니다.
Flux 노드를 돌리려면 ZelCore라는 지갑을 설치해야 하는데, 아래 그림은 제 지갑 화면입니다.
ZelCore 지갑 설치는 생략하도록 하겠습니다.
라즈베리파이에 우분투 설치부터 노드 설정까지 아래 동영상에 자세히 나와 있습니다.
저는 최대한 초보자도 따라할 수 있게 설명과 함께 써보겠습니다.
준비물
- 라즈베리파이 8GB 램, 전용 충전기
- SD 카드 (64GB 이상)
- SSD (256GB 이상, 쓰기속도 180MB/s 이상)
- 25 Mb 이상의 인터넷 속도
1. 우분투 20.04 LTS Server 설치
64GB 이상의 SD카드 (속도도 빠른 것이 좋습니다)를 준비하여 Ubuntu 20.04 LTS for Raspberry Pi를 설치합니다.
먼저, 노트북이나 데스크탑에서 우분투 이미지를 다운로드 합니다. (라즈베리파이에서 하는 것이 아닙니다.)
아래 사이트를 방문하여 아래 부분에 Ubuntu Server 20.04.4 LTS
의 Download 64-bit를 클릭하여 다운로드 합니다.
https://ubuntu.com/download/raspberry-pi
다운로드가 되면 이것을 SD 카드에 구워야 합니다. 추천하는 굽기 프로그램은 Balena의 balenaEtcher입니다. 아래 사이트에서 os 버전에 맞는 프로그램을 다운받아서 설치합니다.
https://www.balena.io/etcher/
우분투 이미지 다운로드 및 굽기 프로그램 설치가 끝나면, balenaEtcher를 실행합니다.
- PC에 sd카드를 넣습니다(sd를 usb로 변환하는 젠더 필요, 또는 노트북의 sd 리더기에 삽입.)
- 굽기 프로그램에서 다운로드한 우분투 이미지 파일을 선택합니다.
- 다음 단계에서 SD 카드를 선택하고, Flash 버튼을 눌러서 이미지를 SD 카드에 굽습니다.
이렇게 하면 라즈베리파이에서 동작할 우분투 os가 준비됩니다.
2. 공유기 설정
os가 설치된 SD 카드를 라즈베리파이에 삽입합니다. 앞으로 라즈베리파이를 파이로 줄여서 부르겠습니다.
SD 카드를 삽입하고 전원을 연결하면 우분투가 실행되는데, 볼 수가 없습니다. 그래서 파이에 모니터와 키보드를 연결해야 합니다. 그런데 그렇게 하지 않고 원격으로 접속할 수 있습니다.
이 때, 파이에 유선 인터넷 선을 연결합니다. 대부분 동적 ip가 할당되어 공유기 관리자 페이지로 가보면 연결된 기기의 ip가 보입니다. 192.168.xxx.xxxx 이런 방식으로 되어 있습니다.
그런데 이렇게 연결된 ip를 보기까지, 그리고 flux노드를 돌리기 위해 모뎀, 공유기 설정이 필요합니다.
저는 SK 브로드밴드 공유기를 사용하는데, 이게 좀 골때립니다. 모뎀이라고 부르는 녀석이 있고, 이게 다시 공유기에 연결되는 방식입니다.
[출처: https://comterman.tistory.com/1408]
저도 이것때문에 한참 헤맸습니다. SK 브로드밴드 사용하시는 분들은 주의하세요.
iptime 공유기는 비교적 자료도 많고, 공유기 접속도 어렵지 않습니다.
SK 브로드밴드 위주로 하겠습니다.
참고로, 다음 내용이 큰 도움이 됐습니다.
https://badayak.com/entry/skbroadband-modem
가장 중요한 점은 flux 노드를 돌리기 위해서 포트 포워딩(port forwarding)이 필요한데, 일반적으로는 이게 안됩니다. 앞서 얘기했듯이 모뎀이 있고, 공유기가 있는 상태인데, 공유기에 관리자 세팅에 들어가서 포트 포워딩을 해도 전혀 먹히질 않습니다.
원인은 모뎀의 서비스 모드가 NAT로 되어 있기 때문입니다. 이것을 브릿지 (bridge) 모드로 변경시켜줘야 합니다. 여기서 또 주의할 것은 브릿지 모드로 변경하면 모뎀의 관리자 페이지 접속이 안됩니다. 접속하려면 모뎀에 직접 유선으로 연결해야 합니다. 자세한 내용은 위 링크를 참고하시면 됩니다.
작업은 다음과 같은 순서로 진행합니다. 참고. https://badayak.com/entry/skbroadband-modem
- 모뎀 접속: SK 브로드밴의 경우는 192.168.75.1 입니다. (모뎀별로 다르니 자신의 모뎀 ip를 입력합니다.) 접속은 브라우저에 주소를 치면 계정과 암호는 묻는 창이 나타납니다.
- 서비스 모드를 NAT에서 브릿지로 변경합니다. (자세한 설명은 위 링크를 참고하세요)
- 모뎀을 재시작합니다.
- 이번에는 공유기에 접속합니다. 제 경우는 192.168.25.1입니다. 이 때, 연결하고자 하는 pc가 해당 공유기에 연결되어 있어야 합니다. 유선이든, 무선이든이요.
- 이번에도 공유기 관리자 페이지 접속하기 위해 계정과 암호를 입력해야 합니다. 위 링크를 참고해주세요.
- 포트 포워딩
위 그림처럼 포트 포워딩 설정하는 곳으로 가서 다음 두 개를 추가합니다.
- 서비스 포트: 16124-16128, 이름: FLUXD (디먼, daemon)
- 서비스 포트: 30000-39999, 이름: FLUXAPPS (apps)
내부주소는 파이의 주소입니다. 이건 공유기에 연결된 장치의 ip를 보고 확인해야 합니다.
접속리스트를 보고서 기존에 없었는데 추가된 ip를 찾습니다. 이 ip를 위의 내부주소에 입력합니다. 설명하면 외부에서 해당 서비스포트로 들어오는 데이터를 파이 주소로 연결시켜주겠다는 것입니다.
여기서 좀 웃긴건 외부 서비스 포트가 16124부터 16128까지 범위로 되어 있는데, 연결되는 내부 포트는 입력는 한개만 입력된다는 것입니다.
Flux 노드를 설치하기 직접에 집 공유기를 바꿨는데요, 구 공유기에서는 내부 포트도 범위를 설정할 수 있게 해놨는데, 새로운 공유기는 오히려 범위를 설정할 수 없게 되어 있네요. 포트 30000-39999를 일일이 하나씩 입력하는 것은 불가능합니다. 아니 어떻게 이렇게 프로그램을 만들었는지 이해가 안갑니다.
그래도 다른 방법이 있습니다. DMZ라는 기능인데, 모든 포트를 내부의 지정된 ip로 연결시키는 기능입니다. 저도 어쩔 수 없이 이 기능을 사용합니다. 감 잡으셨겠지만, 모든 포트를 여는 거라서 보안 위험이 발생합니다. 흔히 사용하는 ssh 포트인 22번도 열립니다. 외부에서 ssh로 파이에 접속하는 게 가능해집니다. 편해보이지만 보안에 안좋겠죠?
포트 설정이 범위로 안되는 경우만 DMZ 설정을 하세요. 여기서도 파이의 ip 주소를 입력해야 합니다.
이렇게 하면 공유기를 재부팅합니다.
3. 라즈베리파이 기본 설정
그럼 이제 파이의 ip도 알고 있으니 원격으로 접속해 봅니다.
$ ssh ubuntu@<파이 ip>
원격 접속 계정은 초기는 무조건 ubuntu입니다. 파이 ip는 본인이 가지고 있는 파이의 ip를 입력합니다.
접속되면 가장 먼저 암호를 바꾸는 내용이 나옵니다. 암호를 변경해줍니다.
다음으로 우분투를 최신 상태로 업그레이드 합니다.
$ sudo apt update -y
$ sudo apt dist-upgrade -y
다음으로 기본 소프트웨어를 설치합니다.
$ sudo apt install build-essential
옵션으로 텍스트 에디터 vim을 설치합니다. 에디터는 본인이 선호하는 에디터를 사용하면 됩니다.
$ sudo apt install vim
다음으로 flux라는 계정 생성합니다. 나중에 flux 노드 설치할 때 기본 계정인 ubuntu를 사용할 수 없습니다.
계정은 다음과 같이 만들고 sudo 권한을 줘서 관리자 모드를 사용할 수 있게 합니다.
$ sudo adduser flux
$ sudo usermod -aG sudo flux
이것으로 파이 기본 설정은 완료됩니다. 파이의 ip를 잘 기록해 둡니다. 참고로, 파이의 ip는 왠만하면 변경되지 않습니다. 접속 ip가 바뀌지 않을 것입니다. ip를 고정하고 싶다면 파이의 설정을 변경하여 ip를 고정시킬 수 있습니다. 이것은 생략하도록 하겠습니다.
4. SSD 준비
256GB이상의 SSD를 준비합니다. 이 때, 반드시 쓰기 속도를 확인해야 합니다. 저는 비교적 빠르다는 아래 제품으로 해봤는데, 라즈베리 파이에서 속도가 안나옵니다.
노트북에서는 쓰기 속도가 300MB/s 정도 나왔는데, 라즈베리파이에 연결하면 속도가 130MB/s정도 밖에 안나옵니다. 그리고 엄청나게 뜨거워집니다. 그것때문인지 mount할 때 문제가 자주 발생했습니다. 아예 /dev 리스트에서도 안보이는 경우가 많았습니다. 아무래도 과열돼서 셧다운된거 같습니다.
결국은 사용을 못하고 Samsung T5 (500GB) 제품을 사용했습니다. 이건 속도가 좀 더 느리지만, 기준치인 180MB/s 이상 나와서 사용이 가능합니다.
파이에서 쓰기 속도 측정을 하려면, 파이에 ssd를 마운트 시켜야 합니다. 여기서 마운트란 /dev에 있는 장치를 사용할 수 있게 운영체제 파일로 등록시키는 작업입니다.
여기서 ssd를 연결해도 폴더가 나타나지 않습니다. 이 때 먼저 파티션을 만들어야 합니다.
파티션 만들기
먼저 연결한 ssd의 장치명을 알아냅니다.
$ ls /dev/sd*
ssd의 경우는 sda
, sdb
, sdc
와 같은 장치명으로 나타납니다. 연결된 장치명을 확인합니다. 대부분 sda
입니다. 이 때 자동으로 파티션된 경우는 sda1
처럼 숫자가 표시되어 있습니다.
그럼 이제 장치가 어떤 상태인지 다음과 같이 터미널에 입력합니다.
$ sudo fdisk -l
위 그림처럼 /dev/sda로만 보이면 파티션이 없는 상태입니다. (/dev/sda1처럼 뒤에 숫자가 붙으면 파티션이 이미 만들어진 상태입니다.)
/dev/sda로만 되어 있다면 이제 파티션을 만듭니다. 아래처럼 명령을 실행합니다.
$ sudo parted /dev/sda
(parted) mklabel GPT
(parted) mkpart primary 2048s 100%
(parted) q
이렇게 한 후 다시 fdisk -l를 실행하면, 아래 그림처럼 /dev/sda1로 표시됩니다. 즉 파티션이 만들어 진것입니다.
파일 시스템 만들기
파티션이 만들어 졌으니 그 파티션의 파일 시스템을 만들어야 합니다. 여기서는 ext4 파일 시스템을 만듭니다. /dev/sda1는 파티션 이름입니다.
$ sudo mkfs.ext4 /dev/sda1
SSD 마운트
장치 이름을 파일 시스템의 특정 폴더로 연결시킵니다. 여기서는 /media/ssd 폴더에 연결시키겠습니다.
// 먼저 /media/ssd 폴더를 생성. 이미 있을 수도 있습니다.
$ sudo mkdir /media/ssd
// 마운트 (장치명이 sda1인 경우, 다른 경우는 변경하여 입력)
$ sudo mount /dev/sda1 /media/ssd
이렇게 하면 /media/ssd에 ssd 내용이 나타납니다. ssd가 빈 것이라면 lost+found 폴더 하나만 있을 것입니다. ssd가 마운트 된 것입니다.
참고. https://linuxconfig.org/how-to-benchmark-disk-performance-on-linux
그런데 이렇게 마운트된 ssd는 재부팅하면 다시 마운트 되지 않은 상태가 됩니다. 이것을 부팅할 때 알아서 마운트 되도록 해줍니다.
참고. https://raspberrypi.stackexchange.com/questions/113227/auto-mount-with-fstab-not-auto-mounting
먼저, ssd의 UUID (고유 id)를 다음과 같이 얻습니다.
$ sudo blkid /dev/sda1
여기서 UUID를 복사해 둡니다. 그 다음 /etc/fstab 파일을 엽니다.
$ sudo vi /etc/fstab
여기에 다음과 같이 입력합니다.
LABEL=writable / ext4 default 0 1
아래에 추가
UUID=<UUID> /media/ssd ext4 rw,user,nofail 0 0
이것을 재시작 하지 않고 테스트 해볼 수 있습니다. 테스트 용으로 /etc/fstabl 파일을 열고 아래처럼 수정합니다.
UUID=<UUID> /media/ssd ext4 rw,user,nofail
그 다음 다음 명령을 실행하여 모두 마운트를 시킵니다.
$ sudo mount -av
문제가 없다면, /dev/sda1는 /media/ssd에 마운트됩니다. 그럼 이제 다시 /etc/fstab을 아래처럼 바꾸어 놓습니다.
UUID=<UUID> /media/ssd ext4 rw,user,nofail 0 0
재부팅합니다.
SSD 속도 측정
아래와 같이 ssd를 파이에 연결하고 쓰기 속도를 측정해 볼 수 있습니다.
$ sudo dd if=/dev/zero of=/media/ssd/temp oflag=direct bs=128k count=32k
32768+0 records in
32768+0 records out
4294967296 bytes (4.3 GB, 4.0 GiB) copied, 22.2491 s, 193 MB/s
위 결과는 라즈베리파이에 ssd를 연결한 후 측정한 결과입니다. 193MS/s로 기준을 간당하게 넘기고 있습니다. 노트북에 연결하고 하면 더 높은 수치가 나올 것입니다. 그래서 수치가 많이 높지 않다면 라즈베리파이에 연결하고 측정해볼 필요가 있습니다.
내용이 매우 많고, 시스템 지식이 필요해 쉽지 않아 보입니다만, 잘 따라하시면 flux 노드를 돌릴 수 있습니다!
Congratulations, your post has been curated by @dsc-r2cornell. You can use the tag #R2cornell. Also, find us on Discord
Felicitaciones, su publicación ha sido votada por @ dsc-r2cornell. Puedes usar el tag #R2cornell. También, nos puedes encontrar en Discord