Xây dựng hạ tầng cho mạng Skywire

SKYWIRE ĐÃ CHẠY MAINNET KỂ TỪ NGÀY 6 THÁNG 4 NĂM 2020 NÊN BÀI VIẾT NÀY CHỈ CÓ GIÁ TRỊ THAM KHẢO

Skywire là một mạng mở, mọi người đều có thể tham gia. Đơn giản nhất của việc tham gia vào mạng Skywire là cài đặt một nút (node) Skywire và sử dụng trong nhu cầu hằng ngày. Hiện tại Skywire đang chạy testnet và bạn có thể sử dụng tính năng socks proxy của skywire với hơn 9000 nút (node) ở thời điểm viết bài.

Bạn sẽ được lợi ích gì khi xây dựng hạ tầng của Skywire? Với testnet hiện tại, bạn sẽ được trả Skycoin nếu tuân thủ đúng qui định của nhóm phát triển. Bạn cần chạy Skywire trên bo mạch hỗ trợ test net và đảm bảo thời gian uptime trong tháng. Xem thêm ở đây

Bài viết này ghi lại quá trình xây dựng hạ tầng Skywire (hay còn gọi là Skyminer) mà bản thân skywirex đã trải nghiệm. Nếu bạn có chút lo lắng hay do dự, bạn có thể bắt đầu bằng một bo mạch duy nhất với tổng giá thành không quá 30USD bằng việc tận dụng được những món có sẵn như cấp nguồn USB của điện thoại.

Đa phần những món hàng tôi mua là ở trang aliexpress.com. Nếu mua hàng và ship về Việt Nam, thông thường mất tầm khoảng 3 tuần để hàng về tới TP Hồ Chí Minh. Nếu lần đầu mua hàng bạn có thể ghé trang này để tham khảo cách thức mua hàng ở Aliexpress từ Việt Nam. Nó khá dễ dàng.

Yêu cầu

Sau khi đã sẵn sàng, chúng ta bắt đầu,

Chuẩn bị:

  • Phần cứng:

    • Bo mạch ARM (SBC-single board computer) + dây nguồn. Nên chọn [thương hiệu Orange Pi] (http://s.click.aliexpress.com/e/bjqvVuS4)
    • Nguồn cổng USB hoặc cấp nguồn tổ ong.
    • Switch 8 hoặc 16 cổng gigabit (tùy chọn, có thể mua sau nếu chỉ chạy một bo đầu tiên)
    • Router (tùy chọn, có thể mua sau nếu chỉ chạy một bo đầu tiên)
    • Thẻ nhớ class 10 + đầu đọc thẻ nhớ
    • Phụ kiện: dây mạng CAT6, quạt tản nhiệt, ốc vít để lắp (tùy chọn)
  • Phần mềm:

Về bo mạch, theo đề xuất của nhóm phát triển Skycoin, bo mạch nên mua là Orange Pi Prime. Nhưng để giảm chi phí ban đầu, đề xuất của tôi là bạn nên mua Orange Pi PC2 để tiết kiệm hoặc Orange Pi One Plus H6. Bạn không cần phải mua bo quá đắt đỏ, chỉ cần lưu ý là cổng LAN gigabit để tránh nghẽn băng thông khi meshnet chính thức được triển khai. Quyết định cuối cùng tùy thuộc ở bạn. :)). Lưu ý dây nguồn của Orange Pi PC2 hoặc One Plus H6 là dây nguồn 1.7mm rất khó kiếm ở các cửa hàng ở VN nên bạn nên mua cùng lúc với mua bo mạch trên aliexpress.

Nguồn cấp cho Orange Pi nên chọn loại bộ nguồn tốt để cho dòng điện ra ổn định tầm max là 5V-2.4A. Nhóm phát triển Skycoin khuyến nghị mua nguồn tổ ong, nhưng theo kinh nghiệm của tôi bạn nên sử dụng nguồn USB thuận tiện hơn rất nhiều. Bạn có thể tham khảo bộ nguồn này trên [Aliexpress] (http://s.click.aliexpress.com/e/gxYYtTK) hoặc trên Amazon. Nếu mới bắt đầu bạn có thể tận dụng cục sạc điện thoại USB có sẵn trong gia đình (dòng điện có thể là 5V - 1.5A, 2A hoặc 2.4A).

Thẻ nhớ nên chọn thẻ nhớ Samsung class 10 có bán rất nhiền trên trang shopee, nên chọn nhà cung cấp uy tín - Shopee Mall, tránh thẻ nhớ rởm.

Bo mạch đầu tiên (node số 1)

Sau khi đã tập hợp đầy đủ các linh kiện, chúng ta bắt đầu ráp và chạy node đầu tiên.

Hướng dẫn này giúp sẽ giúp bạn thực hiện trên file ảnh do armbian xây dựng. Do đó, tùy thuộc vào bo mạch bạn chọn bạn sẽ tải file ảnh tương ứng (nên chọn file ảnh Debian-Armbian Stretch). Ở hướng dẫn này tôi chọn file ảnh là Orange Pi PC2

  • Flash file ảnh (file đuôi .img) tải từ armbian vào thẻ nhớ bằng cách dùng phần mềm Rufus hoặc Etcher tải ở trên

  • Nhét thẻ nhớ đã flash vào bo mạch, cắm dây mạng vào router và bật nguồn. Bo mạch sẽ tự động khởi động sau khi cắm nguồn một vài giây, lúc này bạn sẽ thấy đèn xanh nhỏ trên bo sáng lên. Nếu đèn màu đỏ bạn cần phải flash lại file ảnh lên thẻ nhớ.

  • Bạn vào trang quản lý router để xác định địa chỉ IP trong mạng LAN của bo mạch sau khi khởi động, hoặc bạn có thể dùng phần mềm scan IP để lấy địa chỉ IP của bo mạch trong LAN. Sau đó dùng phần mềm MobaXterm Home Edition thực hiện SSH đến địa chỉ của bo mạch này. Login với tài khoản root pass mặc định là 1234 theo thông tin ở trang armbian.

  • Lần đầu login bạn sẽ được yêu cầu đổi password mặc định. Bạn thực hiện đổi pass mặc định và KHÔNG CẦN TẠO USER MỚI. Bấm Ctrl+C để thoát và đăng nhập lại là được.

Màn hình SSH sau khi login thành công sẽ trông giống như sau:


  ___                               ____  _   ____   ____ ____
 / _ \ _ __ __ _ _ __   __ _  ___  |  _ \(_) |  _ \ / ___|___ \
| | | | '__/ _` | '_ \ / _` |/ _ \ | |_) | | | |_) | |     __) |
| |_| | | | (_| | | | | (_| |  __/ |  __/| | |  __/| |___ / __/
 \___/|_|  \__,_|_| |_|\__, |\___| |_|   |_| |_|    \____|_____|
                       |___/

Welcome to ARMBIAN 5.73 stable Debian GNU/Linux 9 (stretch) 4.19.20-sunxi64
System load:   0.16 0.03 0.01   Up time:       7:31 hours
Memory usage:  15 % of 993MB    IP:            192.168.1.24
CPU temp:      42°C
Usage of /:    7% of 30G

Hura, thế là bạn đã thành công trong việc cài đặt hệ điều hành cho headless server.

Cài đặt skywire

Khi bạn cài đặt skywire sẽ có 2 thành phần được cài đặt là skywire manager và skywire node. Skywire manager có giao diện quản lý các nút (node) và quản lý chính nó (nó cũng là một nút).

Việc cài đặt skywire diễn ra khá dễ dàng, chỉ cần bạn biết gõ dòng lệnh (hoặc copy cũng được :D) và thực hiện tuần tự theo các bước sau:

  • Cập nhật cho hệ điều hành và cài dependenci
# apt-get update && apt-get upgrade -y 
# apt-get install -y curl git mercurial make binutils gcc bzr bison libgmp3-dev screen gcc build-essential
  • Cài đặt Go, tôi chọn phiên bản 1.12
# cd ~ 
# export GOV=1.12
# curl -sS https://storage.googleapis.com/golang/go$GOV.linux-arm64.tar.gz > go$GOV.linux-arm64.tar.gz
# tar xvf go$GOV.linux-arm64.tar.gz
# mv go /usr/local/go 
# ln -s /usr/local/go/bin/go /usr/local/bin/go 
# ln -s /usr/local/go/bin/godoc /usr/local/bin/godoc 
# ln -s /usr/local/go/bin/gofmt /usr/local/bin/gofmt
  • Tạo thư mục GO
# mkdir -p $HOME/go
# mkdir -p $HOME/go/bin
# mkdir -p $HOME/go/src
# mkdir -p $HOME/go/pkg
  • Thiết lập biến $GOPATH bằng cách chỉnh sửa file .bashrc
# nano .bashrc

Trong trình soạn thảo nano thêm vào những dòng sau ở cuối,

export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN

File .bashrc sau khi chỉnh sửa nội dung có dạng như sau:

Nội dung file .bashrc sau khi chỉnh sửa

Nội dung file .bashrc sau khi chỉnh sửa

Bấm Crtl + O sau đó Enter để xác nhận lưu nội dung vào file .bashrc, Ctrl + X để thoát trình soạn thảo nano và trở về cửa sổ lệnh.

Sau cùng load lại file .bashrc bằng lệnh

# source ~/.bashrc 

Kiểm tra việc cài đặt thành công Go bằng câu lệnh

# go version
  • Tải và cài đặt Skywire
# mkdir -p $GOPATH/src/github.com/skycoin
# cd $GOPATH/src/github.com/skycoin
# git clone https://github.com/skycoin/skywire.git
# cd $GOPATH/src/github.com/skycoin/skywire/cmd
# go install ./...
# cd

Sau khi thực hiện lệnh go install ./... thành công nghĩa là bạn đã cài đặt skywire manager và skywire node thành công,

Chạy Skywire manager

# cd $GOPATH/bin
# nohup ./skywire-manager -web-dir ${GOPATH}/src/github.com/skycoin/skywire/static/skywire-manager > /dev/null 2>&1 &sleep 3

Chạy Skywire node

# cd $GOPATH/bin
# ./skywire-node -connect-manager -manager-address 127.0.0.1:5998 -manager-web 127.0.0.1:8000 -discovery-address testnet.skywire.skycoin.com:5999-028ec969bdeb92a1991bb19c948645ac8150468a6919113061899051409de3f243 -address :5000 -web-port :6001

Sau khi thực hiện những câu lệnh chạy skywire manager và skywire node ở trên, bạn mở trình duyệt và gõ địa chỉ <IP-bo-số-1>:8000 vào trình duyệt để đăng nhập vào trang quản lý của skywire với pass mặc định là 1234.

Trang quản lý của skywire manager

Trang quản lý của skywire manager

Bo số 2,3,4,5,6,7,8 (node số 2,3,4,5,6,7,8)

Để chạy testnet và nhận skycoin hằng tháng, nhóm skycoin giới hạn ở 8 bo mạch ở một địa chỉ WAN IP (một đường truyền internet). Các bước cài đặt bo số 2 đến bo số 8 thực hiện tương tự với bo đầu tiên cho đến câu lệnh go install ./.... Đến đây để kết nối từ node số 2 vào bo số 1 (bo quản lý - skywire manager). Ta thực hiện câu lệnh sau:

# cd $GOPATH/bin
# nohup ./skywire-node -connect-manager -manager-address 127.0.0.1:5998 -manager-web 127.0.0.1:8000 -discovery-address testnet.skywire.skycoin.com:5999-028ec969bdeb92a1991bb19c948645ac8150468a6919113061899051409de3f243 -address :5000 -web-port :6001 > /dev/null 2>&1 &cd /

Thay thế 127.0.0.1 bằng địa chỉ IP của bo số 1 (ví dụ 192.168.1.10). Do đó, để bo số 1 luôn được router cấp phát địa chỉ đó thì bạn nên gán địa chỉ IP tĩnh cho bo số 1 (ví dụ 192.168.1.10).

Script tự động chạy skywire khi khởi động lại bo mạch

Để các node của skywire tự động chạy sau khi khởi động lại hệ điều hành hoặc cúp điện thì các bạn dùng script được viết sẵn để thực hiện việc đó.

Để tránh xảy ra xung đột, dịch vụ skymanager và skynode phải được tắt nếu bạn đã kích hoạt trước đó:

# systemctl stop skymanager.service
# systemctl stop skynode.service

Chuyển đến thư mục hệ thống và tạo dịch vụ cho bo mạch manager (bo quản lý - bo số 1) (chỉ thực hiện trên board manager)

# cd /etc/systemd/system
# nano skymanager.service

Thêm những dòng sau lưu lại và thoát

[Unit]
Description=Skywire Manager
After=network-online.target

[Service]
User=root
Group=root
WorkingDirectory=/root/go/bin
Environment="GOPATH=/root/go" "GOBIN=$GOPATH/bin"
ExecStart=/root/go/bin/skywire-manager -web-dir /root/go/src/github.com/skycoin/skywire/static/skywire-manager
ExecStop=kill
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

Tạo dịch vụ cho node (làm cho tất cả các bo mạch bao gồm manager)

# cd /etc/systemd/system
# nano skynode.service

Thêm những dòng sau, lưu và thoát (thay thế 127.0.0.1 với IP của bo mạch quản lý)

[Unit]
Description=Skywire Node
After=network-online.target

[Service]
User=root
Group=root
WorkingDirectory=/root/go/bin
Environment="GOPATH=/root/go" "GOBIN=$GOPATH/bin"
ExecStart=/root/go/bin/skywire-node -connect-manager -manager-address 127.0.0.1:5998 -manager-web 127.0.0.1:8000 -discovery-address testnet.skywire.skycoin.com:5999-028ec969bdeb92a1991bb19c948645ac8150468a6919113061899051409de3f243 -address :5000 -web-port :6001
ExecStop=kill
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

Thêm dịch vụ vào systemctl

# systemctl daemon-reload ###thực hiện cho tất cả các bo mạch 
# systemctl enable skymanager.service ###chỉ thực hiện cho bo mạch quản lý
# systemctl enable skynode.service ###thực hiện cho tất cả các bo mạch 
# systemctl start skymanager.service ###chỉ thực hiện cho bo mạch quản lý
# systemctl start skynode.service ###thực hiện cho tất cả các bo mạch

Hoặc các bạn cũng có thể tải file service cho manager và node tại địa chỉ bên dưới

Sau đó

  • Giải nén được những file .service và copy vào thư mục ‘/etc/systemd/system’
  • Kích hoạt và chạy dịch vụ bằng 2 câu lệnh sau:
# systemctl enable skynode.service
# systemctl start skynode.service

Backup các nút skywire

Để backup bạn nén thư mục .skywire

# tar czvf skywirex.tgz .skywire/

Dùng cửa sổ MobaXterm hoặc WinSCP để copy file skywirex.tgz vừa nén xuống máy và lưu lại

Khi cần khôi phục bạn đặt copy file đã nén để và giải nén

# tar xzvf skywirex.tgz

Kiểm tra node trên skywire discovery và uptime

Tất cả các public key của node hiện nay đều được hiển thị tập trung ở trang discovery của skycoin ở địa chỉ sau

http://discovery.skycoin.net:8001/
https://skywirenc.com

Cập nhật skywire:

Sau một thời gian cài đặt và chạy skywire, đôi khi bạn thích cập nhật Skywire lên bản mới nhất theo github, bạn cần login vào từng nút và chạy các lệnh sau đây:

# cd $GOPATH/src/github.com/skycoin/skywire
# git reset --hard
# git clean -f -d
# git pull origin master
# go install -v ./...

Trang trí

Trang trí và làm đẹp cho các bo mạch tùy thuộc khả năng sáng tạo của các bạn. Để có thêm ý tưởng các bạn vào trang này của skywirex để tham khảo sự sáng tạo của Skyfleet nhé.

Trong quá trình cài đặt nếu gặp khó khăn hay vướng mắc, bạn có thể tham gia vào Telegram group ở phần Social bên phải để được trợ giúp.

Chúc các bạn thành công và tận hưởng phần thưởng Skycoin mỗi cuối tháng.

Tham khảo