Get your node running

Get your node running

A few weeks ago I sent out a survey to understand what issues core contributors might run into when setting up a node. Thanks to everyone who filled out the survey! (N=17)

It turns out, most CC’s that filled out the survey are happy to set up a node :raised_hands:. If you want to take a break from holiday gatherings in the coming period, here’s your chance!

Budget has been set aside to support 10 Core contributors to set up a node, by reimbursing purchase of a dedicated device.

How it works

  • The first 10 CC’s to request order approval from PeopleOps can go ahead and order on Amazon using this order list (vetted by @Petty). Ping in #PeopleOps: “I’m setting up a node by V1 and need a device”
  • Only orders with approval, that stick to the order list can be expensed through Expensify
  • The device needs to be configured to act as a node

*If you want to set up a node that requires a static IP address that you don’t already have, you might incur costs from your ISP. These costs cannot be expensed.
**Be mindful that the more nodes are set up the better for Status as a network. If you have a device that you can repurpose, please leave a slot for someone else to order

Setting up

  • The survey results showed some concerns about setting up a node, especially as a non-dev. A :open_book:manual is forthcoming! @Luis and @jakubgs are working on making this as easy as possible. Target audience for this manual is anyone. Keep an eye on this thread for a link to the manual.
  • We suggest to start with a basic node for personal messaging use (a.k.a Node S). Obviously you’re free to jump straight to running a full node. We suggest to start small as the majority of those who filled out the survey either does not have a static IP address or doesn’t know. Starting with Node S is a way to familiarize yourself without getting into ISP bureaucracy.

FAQ (from survey)

  • What OS do I need?

    • You will need a device that can run Linux. With the following software dependencies:
      • golang >= v1.13
      • docker
      • docker-compose
      • jq
      • git
      • make
  • My internet connection can be spotty. Does that matter? How?

    • A spotty internet connection will interfere with the connections made to peers by your node. If you lose connection, you will constantly try to establish new links to peers in the network. Not only does this increase your bandwidth and computation of the node, but it also decreases your ability to stay up to date on the network and serve information to any clients that are connected. For an S node this is not a big deal.
  • I can’t guarantee uninterrupted uptime. Does that matter?

    • When your client is down, it will not be able to pass information to other peers in the network, or serve requested information to clients that are connected who would like to read messages. For an S node this is not a big deal.
  • I’m concerned about the costs of running an Ethereum full node (L). What are my options?

    • The selected device and peripherals sums up to $263. While you would need this set for an Ethereum full node, there are more cost effective options for the messaging only nodes (S and M).
  • What is energy consumption of S, M and L nodes?

    • We need to measure this when more people are set up. The amount of energy will depend on the machine that is running the software. The referenced machines (NanoPC T4) are small form factor machines that are meant to always be on and have a small power footprint compared to a desktop or laptop machine.
    • The bandwidth will be more substantial and can vary depending on the size of the network. Standard amounts of bandwidth that are required will need to measured by those running a node.

Types of nodes (for reference)

For reference this is a rough distinction of the types of nodes:

:white_medium_small_square: S - Messaging only, for personal use
Send and receive messages messages with your own client on the same network.
Requires PC configuration and stable internet connection.

:white_medium_square: M - Messaging only, for yourself and others
Send and receive messages messages with your own client as well as allowing others to do the same using your node.
Requires PC configuration and stable internet connection, router configuration and admin stuff to purchase a static IP from your ISP (Availability and cost will differ, please check with your ISP).

:white_large_square: L - Messaging and transactions for yourself and others (Ethereum full node)
Send and receive messages messages and transactions with your own client as well as allowing others to do the same using your node.
Requires PC configuration and stable internet connection, router configuration and admin stuff to purchase a static IP from your ISP (Availability and cost will differ, please check with your ISP). + significant storage space which is available on a device provided by Status.

:ok_hand: None - Connect to someone else’s node and use Status as you do today.


Lastly…

Here’s a quote to inspire why it’s important for us to run Status locally so we can experiment with network restrictions and learn how to support others.

Posted #Public on Status on Nov 26 by someone from Iran looking for solutions to communicate while the Internet was blocked in the country:

This is the story : the government shutdown the internet but it does not mean that people don’t have access to internet. The government just disconnected the country gateway from outside world but the internet inside the country is working for servers and services that are hosted inside the country. As soon as the connection from outside world disconnects, all messaging apps stop working, telegram, whatsapp etc… And no one trust apps that are hosted inside the country.

Let’s assume we run couple of mail servers on data centers inside the country, and we knew that the government owns these data centers and can monitor traffic inbound and outbound and also has access to the servers, is there any way that they know those mail servers are running to support STATUS? And any way to trace users location or IPs? more than 60 million people are looking for a solution in this situation and they are concerned about their safety and privacy since leaking any information could cause death penalty.

11 Likes

props to @Bruno for a lot of this, as his boards guided me through my trials.

2 Likes

I received my hardware to set-up a node (got the exact pieces listed above in this thread). Is there any doc ready to help newbies to set things up? Thanks!

2 Likes

WIP: About nodes - CodiMD

The installation steps should be accurate still tweaking on configuration and terminology. Please do share any issue your run into along the way here!

2 Likes

This is great! I received my hardware yesterday and I wasn’t sure either on how to set up this device!
I’ll configure it this weekend and share the experience!

6 Likes

I started setting up my NanoPC and documenting the process here: Setting up a NanoPC t4 - CodiMD

Using Armbian server as the OS, so far I’ve found the installation to be easy but not the most user friendly process due to requiring doing some manual configuration to have the drive formatted, creating a partition and mounting it, as well as configuring swap, networking among other things… Probably using the desktop version would make things easier but it does not seem right to install a desktop environment for such device. Is Armbian going to be the recommended OS for the NanoPCs?

I’ve also found this: GitHub - diglos/userpatches: Tool used to create an Ethereum full node based on Armbian distro which looks like it generates an image with ethereum software but not sure if we can use this. (I will continue to setup mine manually).

1 Like

I need to redo mine as I need a tracing node for some work I’m doing… i’ll try out these other images to see if they’re useful in that process.

1 Like

hmm … this is probably a pretty basic question, but how do you connect the SSD drive to the board (I got the parts listed above) ?

Staying tuned for the answer as I received my kit last week. @petty any guidance?

In the bottom of the nanopc there is a slot for the drive.
It needs a M3 screw too (I had to find one lying around my office)

1 Like

Added more steps in my log on how I installed Status in the NanoPC by using the guide shared by @hester, following the systemd installation method.

https://notes.status.im/A0VSe1h2SD2ED_95Zy6AEA?view#Installing-Status

Some notes:

  • I had to install the arm64 version of Go (makes sense considering the type of device used). I initially attempted to install the amd64 version of Go because that’s what I use on my laptop, and that did not work
  • The installation of status-go failed initially because the envsubst command was not available. I had to execute apt install gettext-base in order to get this command. (I think this command should be added to the status-go install guide or at least have the required packages listed)
  • It would be nice if during the installation of status-go the enode address was outputted to a file somewhere instead of having to copy it manually.
  • I had to use a different service name to check if the node was running: status-go-bootnode instead of bootnode.

Now status-go is running successfully in the NanoPC!

next steps, configuring geth and improving the security of the nanopc :slight_smile:

EDIT:
I read here https://github.com/status-im/status-go/blob/develop/_assets/systemd/bootnode/README.md that we could execute make enode to obtain the enode address.

1 Like

Quick note of apology: The device recommended in the WIP manual doc comes with a NEMA powerplug (North/Central America). Please check to order a device that comes with a power plug that works in your region.

#waitingonadapter

My NanoPC is not showing anything on the monitor. At first I thought it was something to do with the resolution of my somewhat obscure touch monitor, then the power plug because I was using the powerplug of my NUC which I thought should have the same output (It doesn’t, it’s more powerful :disappointed:).

Now I’m using a run of the mill monitor and and the original US plug with an adapter, but still no luck. Did I break the NanoPC?:fearful:

When I connect it to power and switch it on I hear the faintest regular tick. As though it’s on, but it’s not connecting to the monitor. (Used different HDMI cables).

Any words of advice?

I had a similar issue when I had started playing with the nanopc and in my case it was due to using an older HDMI cable… maybe that’s what is happening with yours?

… How much more powerful was the output of the powerplug you used? if the difference is in amperage, it shouldnt matter, however voltage should be 12V. (I could not find a datasheet online to see if the nanopc has an onboard step-down voltage regulator).

Higher in voltage :confused:, 19V. I’ll try another HDMI cable as well. Cable works with other devices though.

What I can tell is that I ordered the exact pieces listed above, and confirms that straight out of the box when I boot it and it’s connected through HDMI to a monitor, I do get a functional android OS with its display on the screen. I had nothing specific to set-up to get that.

Definitely seems broken in that case… I’ll give it another try over the weekend.

New Nano PC, new opportunity. So far so good, @rramos your manual on how to set up the Nano PC has been incredibly helpful!

Had an issue with navigating the the status-go source code, but it seems fine typing the whole path manually instead of using $HOME.

I’m think I’m stuck at

#Download Bootnode code and navigate to the folder
go get -v github.com/status-im/status-go

The result I get is
Can't load package: package github.com/status-im/status-go: no Go files in root/go/src/github.com/status-im/status-go

Any advice? :confused: When I check dir /root/go/src/github.com I can find /status-im/status-go and in the files go.mod and go.sum


Here are the other steps leading up to the ‘Can’t load package’ message:

root@nanopct4:~# mkdir ~/go
mkdir:cannot create directory '/root/go': File exists
echo "export GOPATH=\$HOME/go" >> .profile
echo "export PATH=\$PATH:/usr/local/go/bin:\$GOPATH/bin" >> .profile
source ~/.profile
sudo apt install -y jq gettext-base make curl git jq
Reading package lists... Done
make is already the newest version (4.1-9.1ubuntu1).
jq is already the newest version (1.5+dfsg-2).
curl is already the newest version (7.58.0-2ubuntu3.8).
gettext-base is already the newest version (0.18.8.1-6ubuntu0.3).
git is already the newest version (1:2.17.1-1ubuntu0.5).
0 upgraded, 0 newly installed, 0 to remove and 110 not upgraded
go get -v github.com/status-im/status-go
Can't load package: package github.com/status-im/status-go: no Go files in root/go/src/github.com/status-im/status-go
1 Like

I got lost at the last mile of connecting Status to the node. Status is giving a message ‘can’t connect to mailserver’ and I suspect it has to do with the password I have to include in the Enode field. @jakubgs @rramos should I have set this somewhere and can you explain me how I do that? At the moment I only set a password for the OS, but not for the node.

All seems well on the NanoPC. I have an enode and when I check the make status I get active (running).

I added the enode address to Status > Profile > Sync Settings > Mailserver settings. I included the OS password as it’s the only thing I have set, and the field validation requires the enode format to include a password. This is where unfortunately I get the message “Can’t connect to mailserver”.

My phone and Nano PC are on the same WiFi network. And the node seems to be getting a static IP address, at least within the network; It prints the same IP address when I ask for the enode repeatedly.

I actually made a PR to include the mailserver password in the enode address here:

It was merged 5 days ago, not sure what version of status-go you are on but make sure you are on newest develop. And you can get a QR code using:

cd _assets/systemd/mailserver
make enode-qr

Or in _assets/compose/mailserver if you are running via Docker.

1 Like