Μετατρέψαμε ένα Raspberry Pi 4 σ’ ένα πληρέστατο Monero node. Αντί να κατεβάσουμε έτοιμα binaries θελήσαμε να ξεκινήσουμε από το source code του Monero και να μεταγλωττίσουμε ό,τι χρειάζεται. Με βάση αυτή την εμπειρία δείχνουμε, αναλυτικά και βήμα προς βήμα, πώς μπορείτε να κάνετε κι εσείς το ίδιο και να έχετε το δικό σας node – όχι κατ’ ανάγκη σε Raspberry Pi. Με ένα Monero node αποκομίζετε τα ακόλουθα οφέλη:

  • ενισχυμένη ασφάλεια, αφού στέλνετε/λαμβάνετε Monero (XMR) αλλά κι επαληθεύετε συναλλαγές χωρίς να εμπιστευόσαστε το node κάποιου άλλου
  • βελτιωμένη ιδιωτικότητα, αφού το δημόσιο IP σας δεν καταγράφεται από κάποιο ξένο node
  • ταχύτερο συγχρονισμό για τα Monero wallet που χρησιμοποιούν το node
  • αισθητά αυξημένο feel-good factor, αφού συμβάλετε θετικά και κυρίως έμπρακτα στην αποκεντροποίηση και συνεπώς στην ενδυνάμωση του δικτύου του Monero.

Σίγουρα υπάρχουν πρόσθετα οφέλη που αυτή τη στιγμή μας διαφεύγουν – κι αν έχετε κάτι υπόψη, παρακαλούμε, πείτε μας.

Η μεταγλώττιση source code αντί της λήψης έτοιμων binaries σημαίνει, αν μη τι άλλο, αρκετή περισσότερη δουλειά. Μαθαίνοντας όμως πώς να μεταγλωττίζετε κώδικα, έχετε κέρδος. Κατ’ αρχάς, καταλήγετε πάντα με την πλέον πρόσφατη έκδοση του λογισμικού για το συνδυασμό λειτουργικού συστήματος/αρχιτεκτονικής που σας ενδιαφέρει. Επιπρόσθετα, παίζοντας έστω και λίγο με τον πηγαίο κώδικα η όρεξη όσο να ‘ναι ανοίγει και, ποτέ δεν ξέρετε, ίσως κάποια στιγμή αρχίσετε ν’ ασχολείστε περισσότερο ενεργά με το λογισμικό – εν προκειμένω με τη βελτίωση ή ακόμη και με την ανάπτυξη του Monero.

Προαπαιτούμενα

Χρειαζόσαστε έναν φυσικό υπολογιστή, εικονική μηχανή ή cloud server, με διανομή Linux βασισμένη στο Debian ή στο Ubuntu. Το σύστημα προτείνεται να έχει τουλάχιστον δύο πυρήνες, 4GiB μνήμης RAM, και τουλάχιστον 150GiB ελεύθερου χώρου σε δίσκο SSD.

Τη στιγμή που γράφεται το παρόν, το μέγεθος του Monero blockchain είναι κοντά στα 140GiB. Αν λοιπόν σκοπεύετε να τρέχετε το node σας για καιρό, τότε υπολογίστε τουλάχιστον 150GiB ή περισσότερα. (Εντάξει, αυτό που προσπαθούμε να σας πούμε είναι να υπολογίσετε 200 gigabyte – αν και υπογραμμίζουμε ότι άνετα μπορείτε να ξεκινήσετε με 150.)

Για τις ανάγκες της παρουσίασης που ακολουθεί εργαστήκαμε σε περιβάλλον Pop!_OS 22.04 LTS (βασίζεται στο Ubuntu), σε ένα laptop με επεξεργαστή Core i7 (τέσσερις πυρήνες), 8GiB μνήμης RAM και 300GiB ελεύθερα στον δίσκο SSD. Ανάλογα θα εργαστείτε σε περιβάλλον Debian ή Ubuntu, σε πλατφόρμα αρχιτεκτονικής x86_64 ή aarch64. Παρεμπιπτόντως, δύο ήταν οι βασικές μας πηγές για τη δημιουργία του παρόντος οδηγού: 1) το README.md στο επίσημο Github repository του Monero, και συγκεκριμένα η ενότητα περί μεταγλώττισης, 2) ο προχωρημένος οδηγός για τη λειτουργία Monero node, στο Seth For Privacy.

Βήμα 1 – Βασική ασφάλεια

Το μηχάνημα που θα τρέχει το Monero node καλό είναι να επιτρέπει εισερχόμενες συνδέσεις peer-to-peer, προκειμένου να εξυπηρετείτε κι άλλα nodes. Καλό είναι επίσης να επιτρέπει και συνδέσεις restricted RPC, ώστε να συνδέετε τα wallet σας ακόμη κι όταν δεν είστε στο ίδιο τοπικό δίκτυο με το node. Θα επιτρέπει επίσης και σε τρίτους, οι οποίοι για τον έναν ή τον άλλον λόγο δεν έχουν (ακόμη) το δικό τους node, να συνδέουν τα δικά τους wallet. Τέλος, για προφανείς λόγους, το μηχάνημα καλό είναι να δέχεται και συνδέσεις SSH.

Για λόγους ασφαλείας αλλά και λειτουργικότητας, λοιπόν, το node σας πρέπει να έχει ενεργοποιημένο firewall που κατ’ ελάχιστον θα εφαρμόζει τους ακόλουθους κανόνες:

  • θα απαγορεύει όλες τις εισερχόμενες συνδέσεις, εκτός φυσικά από εκείνες που δεν θέλετε να μπλοκάρονται
  • θα επιτρέπει όλες τις εξερχόμενες συνδέσεις
  • θα επιτρέπει τις εισερχόμενες συνδέσεις στο port 22/TCP (SSH)
  • θα επιτρέπει τις εισερχόμενες συνδέσεις στο port 18080/TCP (Monero P2P)
  • θα επιτρέπει τις εισερχόμενες συνδέσεις στο port 18089/TCP (Monero restricted RPC).

Προκειμένου να ορίσετε τους παραπάνω κανόνες και να ενεργοποιήσετε το firewall, χρησιμοποιήστε το Uncomplicated Firewall (UFW) – και για την ακρίβεια το εργαλείο ufw. Συνδεθείτε στο μηχάνημα που θα φιλοξενήσει το Monero node και στο τερματικό σας πληκτρολογήστε, διαδοχικά:

# βεβαιωθείτε ότι το UFW είναι εγκατεστημένο
sudo apt install ufw

# καθορίστε τους βασικούς κανόνες για εισερχόμενες κι εξερχόμενες συνδέσεις
sudo ufw default deny incoming
sudo ufw default allow outgoing

# επιτρέψτε τις εισερχόμενες συνδέσεις προς τον SSH server
sudo ufw allow 22/tcp

# επιτρέψτε τις εισερχόμενες συνδέσεις peer-to-peer προς τον Monero daemon
sudo ufw allow 18080/tcp

# επιτρέψτε τις εισερχόμενες συνδέσεις restricted RPC προς τον Monero daemon
sudo ufw allow 18089/tcp

# ενεργοποιήστε το firewall
sudo ufw enable

Ελέγξτε τη λίστα με τους ισχύοντες κανόνες και την κατάσταση του firewall:

sudo ufw status

Αν όλα έχουν πάει καλά, θα δείτε κάτι τέτοιο:


Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
18080/tcp                  ALLOW       Anywhere
18089/tcp                  ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
18080/tcp (v6)             ALLOW       Anywhere (v6)
18089/tcp (v6)             ALLOW       Anywhere (v6)

Στην περίπτωση που το μηχάνημα βρίσκεται πίσω από κάποιο router, τότε είτε θα πρέπει να είναι στο DMZ είτε να φροντίσετε για τους απαραίτητους κανόνες port forwarding.

Βήμα 2 – Ενημέρωση & απαραίτητα πακέτα

Βεβαιωθείτε ότι η τοπική λίστα με τα διαθέσιμα πακέτα λογισμικού είναι ενημερωμένη, κι ακολούθως εφαρμόστε τις όποιες αναβαθμίσεις για ήδη εγκατεστημένα πακέτα:

sudo apt update && sudo apt upgrade

Προκειμένου να ξεκινήσει η μεταγλώττιση αλλά και να ολοκληρωθεί επιτυχώς, χρειαζόσαστε ένα πλήθος πακέτων:

sudo apt -y install build-essential cmake pkg-config \
    libssl-dev libzmq3-dev libunbound-dev libsodium-dev \
    libunwind8-dev liblzma-dev libreadline6-dev libldns-dev \
    libexpat1-dev libpgm-dev qttools5-dev-tools libhidapi-dev \
    libusb-1.0-0-dev libprotobuf-dev protobuf-compiler \
    libudev-dev libboost-chrono-dev libboost-date-time-dev \
    libboost-filesystem-dev libboost-locale-dev \
    libboost-program-options-dev libboost-regex-dev \
    libboost-serialization-dev libboost-system-dev \
    libboost-thread-dev python3 ccache doxygen \
    graphviz libgtest-dev

Στο Pop!_OS, όπως και στο Ubuntu, το πακέτο libgtest-dev περιλαμβάνει μόνο source code και header files. Πληκτρολογήστε dpkg -L libgtest-dev για τη λίστα με τα περιεχόμενά του και apt-cache show libgtest-dev για πληροφορίες περί του πακέτου. Τη βιβλιοθήκη που προκύπτει από τη μεταγλώττιση του κώδικα στο libgtest-dev, οφείλετε να την κτίσετε μόνοι σας (προσοχή στην τελεία, στα δεξιά του cmake):

cd /usr/src/gtest && sudo cmake . && sudo make

Αμέσως μετά την ολοκλήρωση του build, τα αρχεία που έχουν προκύψει μετακινήστε τα κάτω από το /usr/lib/:

sudo mv -v lib/libgtest* /usr/lib/

Βήμα 3 – Κλωνοποίηση repository

Μέσα σε κάποιον κατάλογο που σας βολεύει κλωνοποιήστε τον κώδικα του Monero μαζί με όλα τα submodules, αναδρομικά (αν κάποιο submodule έχει submodules κλωνοποιούνται κι αυτά κ.ο.κ.):

git clone --recursive https://github.com/monero-project/monero

Μεταβείτε στο repository που μόλις κλωνοποιήσατε (cd ~/monero). Προαιρετικά, ρίξτε μια ματιά σε όλα τα submodules γράφοντας cat .gitmodules:


[submodule "external/miniupnp"]
	path = external/miniupnp
	url = https://github.com/miniupnp/miniupnp
[submodule "external/rapidjson"]
	path = external/rapidjson
	url = https://github.com/Tencent/rapidjson
[submodule "external/trezor-common"]
	path = external/trezor-common
	url = https://github.com/trezor/trezor-common.git
[submodule "external/randomx"]
	path = external/randomx
	url = https://github.com/tevador/RandomX
[submodule "external/supercop"]
	path = external/supercop
	url = https://github.com/monero-project/supercop
	branch = monero

Βήμα 4 – Μεταγλώττιση πηγαίου κώδικα

Αλλάξτε στο branch της τελευταίας έκδοσης του Monero (τη στιγμή που γράφεται το παρόν είναι η v0.18):

git checkout release-v0.18

Για να παίρνετε μία λίστα με όλα τα τοπικά κι όλα τα απομακρυσμένα branches ενός πρότζεκτ, γράφετε git branch -a.

Ξεκινήστε τη διαδικασία της μεταγλώττισης πληκτρολογώντας, απλά:

make

Αν το σύστημα της μεταγλώττισης έχει περισσότερους από έναν πυρήνες αλλά κι αρκετή μνήμη, δοκιμάστε να επιταχύνετε τη διαδικασία με την παράμετρο -j. Γράψτε, π.χ., make -j2, αν το σύστημα έχει τουλάχιστον δύο πυρήνες και τουλάχιστον 4GiB μνήμης RAM (υπολογίζετε 2GiB RAM/thread).

Η μεταγλώττιση ίσως διαρκέσει αρκετή ώρα. Όλα εξαρτώνται από την ισχύ του επεξεργαστή, τη διαθέσιμη μνήμη RAM, την ταχύτητα του μέσου αποθήκευσης καθώς κι από το αν είναι κρυπτογραφημένο ή όχι. Καθώς περιμένετε τη μεταγλώττιση να ολοκληρωθεί, ρίξτε αν θέλετε μια ματιά στα ανοικτά issues για το Monero.

Αφού η μεταγλώττιση ολοκληρωθεί, τα binaries θα περιμένουν στον κατάλογο ./build/Linux/release-v0.18/release/bin.

ls -1 build/Linux/release-v0.18/release/bin

monero-blockchain-ancestry
monero-blockchain-depth
monero-blockchain-export
monero-blockchain-import
monero-blockchain-mark-spent-outputs
monero-blockchain-prune
monero-blockchain-prune-known-spent-data
monero-blockchain-stats
monero-blockchain-usage
monerod
monero-gen-ssl-cert
monero-gen-trusted-multisig
monero-wallet-cli
monero-wallet-rpc

Το βασικό binary, για την ακρίβεια ο daemon, που σε λίγο θα δώσει υπόσταση στο Monero node σας, είναι το monerod. Για έναν πρώτο, σύντομο έλεγχο, πληκτρολογήστε:

./build/Linux/release-v0.18/release/bin/monerod version

Κατ’ αυτόν τον τρόπο αφενός βλέπετε αν το binary του Monero deamon εκτελείται, αφετέρου τσεκάρετε την έκδοσή του:


2022-09-20 08:45:01.845	I Monero 'Fluorine Fermi' (v0.18.1.1-release)
Error: Couldn't connect to daemon: 127.0.0.1:18081

Το παραπάνω μήνυμα λάθους είναι αναμενόμενο, αφού έτσι όπως τρέξατε το monerod ο σχετικός daemon δεν ενεργοποιήθηκε.

Βήμα 5 – Εγκατάσταση των binaries

Δημιουργήστε μία νέα ομάδα κι έναν νέο χρήστη συστήματος, υπό το λογαριασμό του οποίου θα τρέχει ο Monero daemon. Προτείνουμε, για παράδειγμα, να ονομάσετε τη νέα ομάδα και το νέο χρήστη ως monero, το home directory του χρήστη να είναι το /var/lib/monero και, φυσικά, να απενεργοποιήσετε τα συνήθη login στο λογαριασμό:

sudo addgroup --system monero
sudo adduser --system --home /var/lib/monero \
    --ingroup monero --disabled-login monero

Μέσα στον κατάλογο /var/lib/monero, που είναι το home directory του νέου χρήστη, θα κατέβει ολόκληρο το blockchain του Monero. Όπως αναφέραμε ήδη, τη στιγμή που γράφονται αυτές οι γραμμές το συνολικό μέγεθος του blockchain είναι περί τα 140GiB. Καλό είναι λοιπόν το /var/lib/monero να βρίσκεται σε διαμέρισμα με τουλάχιστον 150 gigabyte διαθέσιμα. Διαφορετικά υποδείξτε κάποιον άλλον κατάλογο ως home directory για τον χρήστη monero, σε διαμέρισμα με αρκετό ελεύθερο χώρο.

Στη συνέχεια φτιάξτε έναν κατάλογο για το configuration file του Monero daemon:

sudo mkdir /etc/monero

Κάτω από το /etc/monero δημιουργήστε ένα κενό, προς το παρόν, αρχείο ρυθμίσεων:

sudo touch /etc/monero/monerod.conf

Φροντίστε για το ιδιοκτησιακό καθεστώς του καταλόγου και του αρχείου που μόλις φτιάξατε:

sudo chown -R monero:monero /etc/monero

Αντιγράψτε όλα τα binaries που προέκυψαν από τη μεταγλώττιση και βρίσκονται κάτω από τον κατάλογο build/Linux/release-v0.18/release/bin, στον κατάλογο /usr/local/bin:

sudo rsync -av build/Linux/release-v0.18/release/bin/monero* /usr/local/bin/

Μην ξεχάσετε και το ιδιοκτησιακό καθεστώς:

sudo chown monero:monero /usr/local/bin/monero*

Βήμα 6 – Δημιουργία αρχείου ρυθμίσεων

Σειρά έχει το αρχείο ρυθμίσεων του monerod, το οποίο δημιουργήσατε πριν λίγο και δεν είναι άλλο από το /etc/monero/monerod.conf. Προς το παρόν το αρχείο είναι κενό και, όπως αντιλαμβάνεστε, δεν υπάρχει ένα μόνο ιδανικό σύνολο οδηγιών που πρέπει ή αξίζει να του προσθέσετε. Σε γενικές γραμμές, το τι βρίσκεται εντός του monerod.conf καθορίζει το τι θέλετε να κάνει το Monero node σας – και πιο συγκεκριμένα το πόσο ανοικτό θέλετε να είναι ως προς το Internet. Σας προτείνουμε το ακόλουθο σύνολο οδηγιών, το οποίο είναι ακριβώς αυτό που έχουμε για το Monero node που λειτουργεί αδιάκοπα στο Raspberry Pi μας:


# ο κατάλογος του τοπικού Monero blockchain
data-dir=/var/lib/monero/

# η πλήρης διαδρομή προς το αρχείο καταγραφής
log-file=/var/lib/monero/monerod.log

# ρυθμίσεις περί συνδέσεων peer-to-peer
p2p-bind-ip=0.0.0.0 # ο daemon ακούει για συνδέσεις P2P από όλα τα network interfaces
p2p-bind-port=18080 # το προκαθορισμένο port για συνδέσεις P2P είναι το 18080/TCP

# ρυθμίσεις περί συνδέσεων restricted RPC
public-node=1 # το node διαφημίζει στο δίκτυο ότι δέχεται συνδέσεις restricted RPC
rpc-restricted-bind-ip=0.0.0.0 # ο daemon ακούει για συνδέσεις restricted RPC από όλα τα network interfaces
rpc-restricted-bind-port=18089 # το προκαθορισμένο port για συνδέσεις restricted RPC είναι το 18089/TCP

no-igd=1 # απενεργοποίηση port mapping μέσω Universal PnP
no-zmq=1 # απενεργοποίηση της βιβλιοθήκης ZeroMQ

Με δικαιώματα διαχειριστή και με τον editor της προτίμησής σας (π.χ., nano), ανοίξτε το αρχείο /etc/monero/monerod.conf, αντιγράψτε το περιεχόμενο από το πλαίσιο παραπάνω, επικολλήστε το στο monerod.conf, αποθηκεύστε τις αλλαγές κι εγκαταλείψτε τον editor (στο nano, π.χ., πατήστε CTRL+O κι ENTER για αποθήκευση, μετά CTRL+X για να βγείτε από τον editor).

Βήμα 7 – Δημιουργία Systemd service

Με τη δημιουργία του κατάλληλου service file θα έχετε μία καθώς πρέπει υπηρεσία Systemd, ώστε ο Monero daemon να ξεκινά αυτόματα κατά την εκκίνηση του λειτουργικού. Θα μπορείτε επιπρόσθετα να τον σταματάτε, να τον ξεκινάτε ή να τον επανεκκινείτε, όπως ακριβώς κάνετε και με κάθε άλλη υπηρεσία Systemd.

Με δικαιώματα διαχειριστή δημιουργήστε το αρχείο monerod.service, κάτω από το /etc/systemd/system:

sudo touch /etc/systemd/system/monerod.service

Ανοίξτε το αρχείο /etc/systemd/system/monerod.service με τον text editor της προτίμησής σας (π.χ., nano, vim) κι επικολλήστε το περιεχόμενο από το πλαίσιο παρακάτω:


[Unit]
Description=Monero node
After=network.target

[Service]
Type=forking
PIDFile=/var/lib/monero/monerod.pid
ExecStart=/usr/local/bin/monerod --config-file=/etc/monero/monerod.conf --pidfile /var/lib/monero/monerod.pid --detach
Restart=on-failure
RestartSec=30

User=monero
Group=monero

RuntimeDirectory=monero
RuntimeDirectoryMode=0710

StateDirectory=monero
StateDirectoryMode=0710

LogsDirectory=monero
LogsDirectoryMode=0710

ConfigurationDirectory=monero
ConfigurationDirectoryMode=0755

PrivateTmp=true
ProtectSystem=full
ProtectHome=true
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

Αποθηκεύστε τις αλλαγές κι εγκαταλείψτε τον editor.

Βήμα 8 – Εκκίνηση monerod

Μόλις δημιουργήσατε μία νέα υπηρεσία Systemd, επομένως για μία φορά μόνο φορτώστε το αντίστοιχο service file:

sudo systemctl daemon-reload

Θέλετε το monerod να ξεκινά αυτόματα, κατά την εκκίνηση του λειτουργικού:

sudo systemctl enable monerod

Χωρίς επανεκκίνηση του λειτουργικού συστήματος, ξεκινήστε τώρα το Monero node σας:

sudo systemctl start monerod

Προκειμένου να παρακολουθείτε ζωντανά το τι κάνει το monerod, χρησιμοποιείτε το αντίστοιχο αρχείο καταγραφής:

sudo tail -f /var/lib/monero/monerod.log

Μπορείτε να ξεκινάτε και να σταματάτε την υπηρεσία του Monero daemon όσο συχνά θέλετε. Σε κάθε περίπτωση, πρώτη μέριμνα του monerod θα είναι να κατεβάσει ολόκληρο το blockchain του Monero. Από εκεί και μετά, εννοείται ότι θα φροντίζει να παίρνει όσα block του λείπουν. Έχετε κατά νου ότι το λεγόμενο initial blockchain sync χρειάζεται χρόνο για να ολοκληρωθεί. Αυτό οφείλεται όχι μόνο στο μέγεθος του Monero blockchain, αλλά και στην επαλήθευση συναλλαγών και blocks.

Εντολές προς τον Monero daemon

Όσο η υπηρεσία του Monero daemon είναι ενεργή, από το ίδιο μηχάνημα και με τη βοήθεια του binary ονόματι monerod μπορείτε να του στέλνετε διάφορες εντολές. Για τη λίστα όλων των εντολών που καταλαβαίνει, πληκτρολογήστε:

monerod help

2022-09-21 12:45:57.965	I Monero 'Fluorine Fermi' (v0.18.1.1-release)
Monero 'Fluorine Fermi' (v0.18.1.1-release)
Commands:
  alt_chain_info [blockhash]
  apropos <keyword> [<keyword> ...]
  ban [<IP>|@<filename>] [<seconds>]
  banned <address>
  bans
  bc_dyn_stats <last_block_count>
  check_blockchain_pruning
  diff
  exit
  flush_cache [bad-txs] [bad-blocks]
  flush_txpool [<txid>]
  hard_fork_info <version>
  help [<command>]
  hide_hr
  in_peers <max_number>
  is_key_image_spent <key_image>
  limit [<kB/s>]
  limit_down [<kB/s>]
  limit_up [<kB/s>]
  mining_status
  out_peers <max_number>
  output_histogram [@<amount>] <min_count> [<max_count>]
  pop_blocks <nblocks>
  print_bc <begin_height> [<end_height>]
  print_block <block_hash> | <block_height>
  print_cn
  print_coinbase_tx_sum <start_height> [<block_count>]
  print_height
  print_net_stats
  print_pl [white] [gray] [pruned] [publicrpc] [<limit>]
  print_pl_stats
  print_pool
  print_pool_sh
  print_pool_stats
  print_status
  print_tx <transaction_hash> [+hex] [+json]
  prune_blockchain [confirm]
  relay_tx <txid>
  rpc_payments
  save
  set_bootstrap_daemon (auto | none | host[:port] [username] [password]) [proxy_ip:proxy_port]
  set_log <level>|<{+,-,}categories>
  show_hr
  start_mining <addr> [<threads>|auto] [do_background_mining] [ignore_battery]
  status
  stop_daemon
  stop_mining
  sync_info
  unban <address>
  update (check|download)
  version

Για πληροφορίες περί συγκεκριμένης εντολής, στο monerod δίνετε το help ακολουθούμενο από το όνομα της εντολής. Παράδειγμα:

monerod help bans

2022-09-21 12:50:45.737	I Monero 'Fluorine Fermi' (v0.18.1.1-release)
Command usage:
  bans

Command description:
  Show the currently banned IPs.

Ακολουθούν μερικά παραδείγματα εντολών προς τον Monero daemon.

monerod print_net_stats

2022-09-21 13:08:20.050	I Monero 'Fluorine Fermi' (v0.18.1.1-release)
Received 166935906 bytes (159.20 MB) in 94402 packets in 7.8 hours, average 5.78 kB/s = 0.07% of the limit of 8.00 MB/s
Sent 253142318 bytes (241.42 MB) in 49780 packets in 7.8 hours, average 8.76 kB/s = 0.43% of the limit of 2.00 MB/s
monerod status

2022-09-21 13:13:33.269	I Monero 'Fluorine Fermi' (v0.18.1.1-release)
Height: 2716767/2716767 (100.0%) on mainnet, not mining, net hash 2.74 GH/s, v16, 12(out)+1(in) connections, uptime 0d 7h 55m 16s
monerod update check

2022-09-21 13:20:14.509	I Monero 'Fluorine Fermi' (v0.18.1.1-release)
No update available
monerod limit_down

2022-09-21 13:52:33.669	I Monero 'Fluorine Fermi' (v0.18.1.1-release)
limit-down is 8192 kB/s
monerod limit_up

2022-09-21 13:55:24.681	I Monero 'Fluorine Fermi' (v0.18.1.1-release)
limit-up is 2048 kB/s
monerod limit_down 16384

2022-09-21 13:58:18.392	I Monero 'Fluorine Fermi' (v0.18.1.1-release)
Set limit-down to 16384 kB/s
Set limit-up to 2048 kB/s
monerod limit_up 4096

2022-09-21 13:58:50.507	I Monero 'Fluorine Fermi' (v0.18.1.1-release)
Set limit-down to 16384 kB/s
Set limit-up to 4096 kB/s