Skip to content

Instantly share code, notes, and snippets.

@jancel
Forked from tannerdsilva/hostXMRNode.md
Created February 18, 2024 01:05
Show Gist options
  • Select an option

  • Save jancel/bd26b984f56069ffdf5eda09d18d75c8 to your computer and use it in GitHub Desktop.

Select an option

Save jancel/bd26b984f56069ffdf5eda09d18d75c8 to your computer and use it in GitHub Desktop.

Revisions

  1. @tannerdsilva tannerdsilva revised this gist Jan 12, 2021. 1 changed file with 8 additions and 0 deletions.
    8 changes: 8 additions & 0 deletions hostXMRNode.md
    Original file line number Diff line number Diff line change
    @@ -100,6 +100,14 @@ $ echo "public-node=1" >> /etc/monerod.conf
    $ echo "restricted-rpc=1" >> /etc/monerod.conf
    ```

    If your system owns its public IP, you may bind `monerod` directly to the interface with the following three commands.

    ```
    $ myIP="$(curl ifconfig.me)"
    $ echo "rpc-restricted-bind-ip=${myIP}" >> /etc/monerod.conf
    $ echo "rpc-bind-ip=${myIP}" >> /etc/monerod.conf
    ```

    If you would like to host a pruned blockchain, run this command to add such specification to your configuration file.

    ```
  2. @tannerdsilva tannerdsilva revised this gist Jan 3, 2021. No changes.
  3. @tannerdsilva tannerdsilva revised this gist Jan 3, 2021. 1 changed file with 6 additions and 6 deletions.
    12 changes: 6 additions & 6 deletions hostXMRNode.md
    Original file line number Diff line number Diff line change
    @@ -21,7 +21,7 @@ Here are some useful links for reaching this prerequisite if you do not currentl
    - **Storage**: > 50 GB free space (internal or external)

    # 1. Getting Started
    Now that you have access to the terminal of your Debian-based system, you can begin. Lets start by confirming that your are currently the root user.
    Now that you have access to the terminal of your Debian-based system, you can begin. Lets start by confirming that you are currently the root user.

    **THIS TUTORIAL ASSUMES THAT YOU WILL REMAIN THE ROOT USER FOR THE ENTIRETY OF THE SETUP PROCESS**

    @@ -155,10 +155,10 @@ Now, configure your fstab file to mount this device automatically
    We will be using `nftables` to secure the network traffic on this system. `nftables` a new [kernel-based packet filtering framework that replaces `iptables`](https://ral-arturo.org/2017/05/05/debian-stretch-stable-nftables.html). Amongst it's many superlatives to common firewalls, `nftables` has a very human friendly configuration syntax.

    ```
    apt-get purge iptables
    apt-get autoremove
    apt-get install -y nftables
    systemctl enable nftables
    $ apt-get purge iptables
    $ apt-get autoremove
    $ apt-get install -y nftables
    $ systemctl enable nftables
    ```

    Now, using your favorite text editor (`nano` recommended)...
    @@ -243,7 +243,7 @@ Build the source code and change the current directory to the directory containi

    Congratulations, you have now built the latest release of the Monero source code. Three simple steps remain.

    First, Stop the `monerod` service so that the binaries can be installed.
    First, stop the `monerod` service so that the binaries can be installed.

    `$ systemctl stop monerod`

  4. @tannerdsilva tannerdsilva revised this gist Jan 2, 2021. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions hostXMRNode.md
    Original file line number Diff line number Diff line change
    @@ -14,7 +14,7 @@ Here are some useful links for reaching this prerequisite if you do not currentl
    ### System Requirements
    - **OS**: Debian-based Linux

    - **RAM**: 4 GB minimum (for building Monero source code)
    - **RAM**: 3 GB minimum (for building Monero source code)

    - **CPU**: 1 core

    @@ -80,7 +80,7 @@ These configuration files specify that your Monero node will log to `/var/log/mo

    Now it is time to build the Monero source code. The following command will build Monero binaries and install them on your system by way of `/usr/bin`. It will take a while to run.

    **[NOTICE]** This command will fail if you have less than 4GB of RAM.
    **[NOTICE]** This command will fail if you have less than 3GB of RAM.

    `$ cp "$(make release | tail -1 | grep -oP '(?<='"'"').*(?<!'"'"')')/bin/"* /usr/bin`

  5. @tannerdsilva tannerdsilva revised this gist Jan 2, 2021. 1 changed file with 5 additions and 5 deletions.
    10 changes: 5 additions & 5 deletions hostXMRNode.md
    Original file line number Diff line number Diff line change
    @@ -221,7 +221,7 @@ You can monitor the progress of the blockchain sync by checking the logs.

    `$ cat /var/log/monero/monero.log`

    # [REQUIRED][IMPORTANT] 6. Updating your node
    # 6. [REQUIRED][IMPORTANT] Updating your node

    It's a well known fact that the Monero community executes biannual network upgrades that require participants (including node operators) upgrade their software. Since you have built and installed Monero from its source code, you can deploy these updates as soon as they are tagged in the GitHub repository.

    @@ -241,16 +241,16 @@ Build the source code and change the current directory to the directory containi

    `$ cd "$(make release | tail -1 | grep -oP '(?<='"'"').*(?<!'"'"')')/bin/"`

    Congratulations, you have now built the latest release of the Monero source code. Three simple steps remain...
    Congratulations, you have now built the latest release of the Monero source code. Three simple steps remain.

    Stop the `monerod` service so that the binaries can be installed.
    First, Stop the `monerod` service so that the binaries can be installed.

    `$ systemctl stop monerod`

    Copy the new binaries to `/usr/bin/`.
    Next, copy the new binaries to `/usr/bin/`.

    `$ cp ./* /usr/bin/`

    Start `monerod` once again.
    Lastly, start `monerod` once again.

    `$ systemctl start monerod`
  6. @tannerdsilva tannerdsilva revised this gist Jan 2, 2021. 1 changed file with 3 additions and 3 deletions.
    6 changes: 3 additions & 3 deletions hostXMRNode.md
    Original file line number Diff line number Diff line change
    @@ -243,14 +243,14 @@ Build the source code and change the current directory to the directory containi

    Congratulations, you have now built the latest release of the Monero source code. Three simple steps remain...

    1. Stop the `monerod` service so that the binaries can be installed.
    Stop the `monerod` service so that the binaries can be installed.

    `$ systemctl stop monerod`

    2. Copy the new binaries to `/usr/bin/`.
    Copy the new binaries to `/usr/bin/`.

    `$ cp ./* /usr/bin/`

    3. Start `monerod` once again.
    Start `monerod` once again.

    `$ systemctl start monerod`
  7. @tannerdsilva tannerdsilva revised this gist Jan 2, 2021. 1 changed file with 34 additions and 0 deletions.
    34 changes: 34 additions & 0 deletions hostXMRNode.md
    Original file line number Diff line number Diff line change
    @@ -220,3 +220,37 @@ When your system comes back online, it will automatically launch the `monerod` n
    You can monitor the progress of the blockchain sync by checking the logs.

    `$ cat /var/log/monero/monero.log`

    # [REQUIRED][IMPORTANT] 6. Updating your node

    It's a well known fact that the Monero community executes biannual network upgrades that require participants (including node operators) upgrade their software. Since you have built and installed Monero from its source code, you can deploy these updates as soon as they are tagged in the GitHub repository.

    After a new release has been tagged, updating your node is a fairly straightforward process. The following steps assume `root` access.

    First, change to the root directory of the Monero source code.

    `$ cd /root/monero`

    Download GitHub commits and change to the latest release of the source code.

    `$ git fetch && git reset --hard $(git describe --tags $(git rev-list --tags --max-count=1))`

    Confirm that you have all package dependencies by viewing the **Compiling Monero from source -> Dependencies** section the [Monero Project's README file](https://github.com/monero-project/monero/blob/master/README.md).

    Build the source code and change the current directory to the directory containing the built products.

    `$ cd "$(make release | tail -1 | grep -oP '(?<='"'"').*(?<!'"'"')')/bin/"`

    Congratulations, you have now built the latest release of the Monero source code. Three simple steps remain...

    1. Stop the `monerod` service so that the binaries can be installed.

    `$ systemctl stop monerod`

    2. Copy the new binaries to `/usr/bin/`.

    `$ cp ./* /usr/bin/`

    3. Start `monerod` once again.

    `$ systemctl start monerod`
  8. @tannerdsilva tannerdsilva revised this gist Jan 1, 2021. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion hostXMRNode.md
    Original file line number Diff line number Diff line change
    @@ -164,7 +164,7 @@ systemctl enable nftables
    Now, using your favorite text editor (`nano` recommended)...

    ```
    $ nano /etc/nftables
    $ nano /etc/nftables.conf
    ```

    ...modify the contents of the file to reflect this template:
  9. @tannerdsilva tannerdsilva revised this gist Jan 1, 2021. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion hostXMRNode.md
    Original file line number Diff line number Diff line change
    @@ -1,7 +1,7 @@
    # How to Build and Install a Monero Node on a Debian-based System

    Hello. In this document, we will walk through the steps of building and hosting your own Monero node from source on a Debian-based Linux system. These systems include Raspbian, Debian (9 and above), and Ubuntu (18.04 and above).
    This tutorial assumes that you are capable of accessing the ROOT terminal of your Debian-based system, and are capable of getting your system online if necessary. You may plan on using an external storage device to store the blockchain, this tutorial will include the optional steps to support external storage. Alternatively, this setup procedure can also acomodate users looking to host a pruned blockchain with restricted storage space.
    This tutorial assumes that you are capable of accessing the ROOT terminal of your Debian-based system, and are capable of getting your system online if necessary. You may plan on using an external storage device to store the blockchain, this tutorial will include the optional steps to support external storage. Alternatively, this setup procedure can also accomodate users looking to host a pruned blockchain with restricted storage space.

    Here are some useful links for reaching this prerequisite if you do not currently have access to a Debian-based system that meets the recommended system requirements.

  10. @tannerdsilva tannerdsilva revised this gist Jan 1, 2021. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion hostXMRNode.md
    Original file line number Diff line number Diff line change
    @@ -18,7 +18,7 @@ Here are some useful links for reaching this prerequisite if you do not currentl

    - **CPU**: 1 core

    - **Storage**: > 50 GB (internal or external)
    - **Storage**: > 50 GB free space (internal or external)

    # 1. Getting Started
    Now that you have access to the terminal of your Debian-based system, you can begin. Lets start by confirming that your are currently the root user.
  11. @tannerdsilva tannerdsilva revised this gist Jan 1, 2021. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions hostXMRNode.md
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,6 @@
    # How to Build and Install a Monero Node on a Debian-based System

    Hello. In this document, we will walk through the steps of building and hosting your own Monero node from source on a Debian-based Linux system. These systems including Raspbian, Debian, and Ubuntu.
    Hello. In this document, we will walk through the steps of building and hosting your own Monero node from source on a Debian-based Linux system. These systems include Raspbian, Debian (9 and above), and Ubuntu (18.04 and above).
    This tutorial assumes that you are capable of accessing the ROOT terminal of your Debian-based system, and are capable of getting your system online if necessary. You may plan on using an external storage device to store the blockchain, this tutorial will include the optional steps to support external storage. Alternatively, this setup procedure can also acomodate users looking to host a pruned blockchain with restricted storage space.

    Here are some useful links for reaching this prerequisite if you do not currently have access to a Debian-based system that meets the recommended system requirements.
    @@ -103,7 +103,7 @@ $ echo "restricted-rpc=1" >> /etc/monerod.conf
    If you would like to host a pruned blockchain, run this command to add such specification to your configuration file.

    ```
    echo "prune-blockchain=1" >> /etc/monerod.conf
    $ echo "prune-blockchain=1" >> /etc/monerod.conf
    ```

    ## 3. [OPTIONAL] Attaching External Storage
  12. @tannerdsilva tannerdsilva renamed this gist Jan 1, 2021. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  13. @tannerdsilva tannerdsilva revised this gist Jan 1, 2021. 1 changed file with 3 additions and 3 deletions.
    6 changes: 3 additions & 3 deletions gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -18,7 +18,7 @@ Here are some useful links for reaching this prerequisite if you do not currentl

    - **CPU**: 1 core

    - **Storage**: > 100 GB (internal or external)
    - **Storage**: > 50 GB (internal or external)

    # 1. Getting Started
    Now that you have access to the terminal of your Debian-based system, you can begin. Lets start by confirming that your are currently the root user.
    @@ -92,15 +92,15 @@ Lastly, we must create a Monero user on the system.

    `$ adduser --disabled-password --system --group --home /var/lib/monero monero`

    Optionally, you would like to elevate your node's configuration to be a public node, add additional parameters to `monerod.conf` by running the following commands.
    If you would like to elevate your node's configuration to be a "full public node", add additional parameters to `monerod.conf` by running the following commands.

    ```
    $ echo "confirm-external-bind=1" >> /etc/monerod.conf
    $ echo "public-node=1" >> /etc/monerod.conf
    $ echo "restricted-rpc=1" >> /etc/monerod.conf
    ```

    Optionally, if you would like to host a pruned blockchain, run this command to add such specification to your configuration file.
    If you would like to host a pruned blockchain, run this command to add such specification to your configuration file.

    ```
    echo "prune-blockchain=1" >> /etc/monerod.conf
  14. @tannerdsilva tannerdsilva revised this gist Jan 1, 2021. 1 changed file with 160 additions and 29 deletions.
    189 changes: 160 additions & 29 deletions gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -1,58 +1,57 @@
    # How To Built And Host a Monero Node from Source
    # How to Build and Install a Monero Node on a Debian-based System

    Hello. In this document, we will walk through the steps of building and hosting your own Monero node from source on a Debian-based Linux system. These systems including Raspbian, Debian, and Ubuntu.
    This tutorial assumes that you are capable of accessing the ROOT terminal of your Debian-based system, and are capable of getting your system online if necessary. You may plan on using an external storage device to store the blockchain, this tutorial will include the optional steps to support external storage if necessary.
    This tutorial assumes that you are capable of accessing the ROOT terminal of your Debian-based system, and are capable of getting your system online if necessary. You may plan on using an external storage device to store the blockchain, this tutorial will include the optional steps to support external storage. Alternatively, this setup procedure can also acomodate users looking to host a pruned blockchain with restricted storage space.

    Here are some useful links for reaching this prerequisite if you do not currently have access to a Debian-based system that meets the recommended system requirements for `monerod`.
    Here are some useful links for reaching this prerequisite if you do not currently have access to a Debian-based system that meets the recommended system requirements.

    - [How to spawn a VPS in the Linode Cloud Platform](https://www.youtube.com/watch?v=Kf6VrypLsZE)

    - [How to spawn a VPS in the Digital Ocean Cloud Platform](https://www.youtube.com/watch?v=vqZ7eKM0WS8)

    - [Getting started with the Rhaspberry Pi](https://www.youtube.com/watch?v=juHoJYX86Dg)

    ### Recommended System Requirements
    ### System Requirements
    - **OS**: Debian-based Linux

    - **RAM**: 1GB
    - **RAM**: 4 GB minimum (for building Monero source code)

    - **CPU**: 1 CORE
    - **CPU**: 1 core

    - **Storage**: > 150 GB (internal or external)
    - **Storage**: > 100 GB (internal or external)

    # 1. Getting Started
    Now that you have access to the terminal of your Debian-based system, we can begin setting up the monerod node. Lets start by confirming that your are currently the root user.
    Now that you have access to the terminal of your Debian-based system, you can begin. Lets start by confirming that your are currently the root user.

    **THIS TUTORIAL ASSUMES THAT YOU WILL REMAIN THE ROOT USER FOR THE ENTIRETY OF THE SETUP PROCESS**

    `$ whoami`

    If the result of this command is **root**, you may proceed with the tutorial.
    If you are not the root user, it is highly recommended you log in as root using either `su` or `sudo su` before proceeding with the tutorial.
    If the result of this command is `root`, you may proceed with the tutorial.

    Additionally, you may confirm the connectivity of your device by checking your external IP address.
    If you are **not** the root user, it is highly recommended you log in as root using either `su` or `sudo su` before proceeding with the tutorial.

    `$ curl ifconfig.me`
    Additionally, you should confirm the connectivity of your device by checking your external IP address.

    The result of this command should be your external IPv4 address.
    `$ curl ifconfig.me`

    # 2. Downloading Software
    Lets install the necessary packages that we will need to operate and set up monerod. First, we will update our package manager and install a few basic utilites such as `nano` and `git`
    # 2. Downloading, Building & Installing Monero
    Lets install the necessary packages that we will need to acquire Monero's source.

    ```
    $ apt-get update
    $ apt-get install -y nano git
    ```

    Next, lets download the Monero source code and enter the root directory of the source code
    Next, lets download the Monero source code and enter the root directory of the source code...

    ```
    $ cd /root
    $ git clone 'https://github.com/monero-project/monero.git'
    $ cd monero
    ```

    ...and change to the latest release of the source code...
    ...and initialize the source code to the latest release.

    ```
    $ git checkout $(git describe --tags $(git rev-list --tags --max-count=1))
    @@ -62,30 +61,162 @@ $ git submodule update

    Now, we will install the required packages to build the Monero source code. As of `v0.17.1.8`, Monero requires the following packages...

    **[NOTICE]** These dependencies may change with future updates. You can confirm that you have all package dependencies by viewing the **Compiling Monero from source -> Dependencies** section the [Monero Project's README file](https://github.com/monero-project/monero/blob/master/README.md).

    ```
    $ apt-get install -y build-essential cmake pkg-config libboost-all-dev libssl-dev libzmq3-dev libunbound-dev libsodium-dev libunwind8-dev liblzma-dev libreadline6-dev libldns-dev libexpat1-dev doxygen graphviz libpgm-dev qttools5-dev-tools libhidapi-dev libusb-1.0-0-dev libprotobuf-dev protobuf-compiler libudev-dev
    ```

    These dependencies may change with future updates. You can confirm that you have all package dependencies by viewing the **Compiling Monero from source -> Dependencies** section the `README.md` file.
    Next we will install the systemd service and the correlating configuration file for the process.

    ```
    $ cat ./README.md
    $ cp utils/conf/monerod.conf /etc
    $ cp utils/systemd/monerod.service /etc/systemd/system
    $ systemctl daemon-reload
    $ systemctl enable monerod
    ```

    Alternatively, you can view the README file [on a web browser](https://github.com/monero-project/monero/blob/master/README.md).
    These configuration files specify that your Monero node will log to `/var/log/monero/monero.log` and the blockchain will be stored in `/var/lib/monero`.

    Now it is time to build the Monero source code. The following command will build Monero binaries and install them on your system by way of `/usr/bin`. It will take a while to run.

    # 3. Building
    Now it is time to build the Monero source code.
    **[NOTICE]** This command will fail if you have less than 4GB of RAM.

    `$ cd "$(make -j $(nproc) release | tail -1 | grep -oP '(?<='"'"').*(?<!'"'"')')"`
    `$ cp "$(make release | tail -1 | grep -oP '(?<='"'"').*(?<!'"'"')')/bin/"* /usr/bin`

    Verify that the build worked by running the following command and verifying that the output is **ZERO**.
    Verify a successful installation by checking the version of your binaries.

    `$ echo $?`
    `$ monerod --version`

    Congratulations! You have successfully built Monero from its source code! We must now copy the binaries in a more appropriate location.
    Lastly, we must create a Monero user on the system.

    `$ adduser --disabled-password --system --group --home /var/lib/monero monero`

    Optionally, you would like to elevate your node's configuration to be a public node, add additional parameters to `monerod.conf` by running the following commands.

    ```
    $ echo "confirm-external-bind=1" >> /etc/monerod.conf
    $ echo "public-node=1" >> /etc/monerod.conf
    $ echo "restricted-rpc=1" >> /etc/monerod.conf
    ```
    $ mkdir /opt/monero
    $ cp ./bin/* /opt/monero
    ```

    Optionally, if you would like to host a pruned blockchain, run this command to add such specification to your configuration file.

    ```
    echo "prune-blockchain=1" >> /etc/monerod.conf
    ```

    ## 3. [OPTIONAL] Attaching External Storage
    If you have an external storage volume that you would like to use for your blockchain data, **attach it to your Linux system now**.

    List the available storage volumes on your system with the following command. From the output, identify the volume that you are going to use.

    `$ fdisk -l`

    You will see output that looks roughly like this:

    ```
    Disk /dev/sda: 49.5 GiB, 53154414592 bytes, 103817216 sectors
    Disk model: QEMU HARDDISK
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk /dev/sdb: 516 MiB, 541065216 bytes, 1056768 sectors
    Disk model: QEMU HARDDISK
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk /dev/sdc: 256 GiB, 274877906944 bytes, 536870912 sectors
    Disk model: Volume
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    ```

    In this case, I am picking `/dev/sdc`, since this is the storage volume with enough space to store the blockchain (256 GB). I will run this command to specify `/dev/sdc` as my current device.

    `$ curDev=/dev/sdc`

    Now that you have identified the storage device on your system, you may now format it.

    **[WARNING]** The following command is dangerous and will erase all data on the specified storage volume.

    `$ mkfs.ext4 -F $curDev`

    Now, configure your fstab file to mount this device automatically

    `$ echo "$curDev /var/lib/monero ext4 defaults 0 2" >> /etc/fstab`

    ## 4. [RECOMMENDED][OPTIONAL] Firewall Setup
    We will be using `nftables` to secure the network traffic on this system. `nftables` a new [kernel-based packet filtering framework that replaces `iptables`](https://ral-arturo.org/2017/05/05/debian-stretch-stable-nftables.html). Amongst it's many superlatives to common firewalls, `nftables` has a very human friendly configuration syntax.

    ```
    apt-get purge iptables
    apt-get autoremove
    apt-get install -y nftables
    systemctl enable nftables
    ```

    Now, using your favorite text editor (`nano` recommended)...

    ```
    $ nano /etc/nftables
    ```

    ...modify the contents of the file to reflect this template:

    ```
    #!/usr/sbin/nft -f
    flush ruleset
    table inet filter {
    chain input {
    type filter hook input priority 0;
    # allow Monero RPC and P2P ports inbound
    tcp dport { 18080, 18081 } accept
    # allow SSH connections
    tcp dport { 22 } accept
    # accept any traffic bound for the loopback interface
    meta iifname lo accept
    # allow established or related network traffic inbound
    ct state { established, related } accept
    # drop remaining traffic
    drop
    }
    chain forward {
    type filter hook forward priority 0;
    }
    chain output {
    type filter hook output priority 0;
    # allow all outbound traffic
    accept
    }
    }
    ```

    After saving your changes, confirm that your syntax is correct with this command:

    `$ nft -cf /etc/nftables.conf`

    If errors are found, they should be corrected before proceeding.

    # 5. Restart your node

    `$ reboot`

    When your system comes back online, it will automatically launch the `monerod` node and begin synchronizing the blockchain.

    You can monitor the progress of the blockchain sync by checking the logs.

    `$ cat /var/log/monero/monero.log`
  15. @tannerdsilva tannerdsilva revised this gist Dec 31, 2020. 1 changed file with 13 additions and 6 deletions.
    19 changes: 13 additions & 6 deletions gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -5,9 +5,11 @@ This tutorial assumes that you are capable of accessing the ROOT terminal of you

    Here are some useful links for reaching this prerequisite if you do not currently have access to a Debian-based system that meets the recommended system requirements for `monerod`.

    [How to spawn a VPS in the Linode Cloud Platform](https://www.youtube.com/watch?v=Kf6VrypLsZE)
    [How to spawn a VPS in the Digital Ocean Cloud Platform](https://www.youtube.com/watch?v=vqZ7eKM0WS8)
    [Getting started with the Rhaspberry Pi](https://www.youtube.com/watch?v=juHoJYX86Dg)
    - [How to spawn a VPS in the Linode Cloud Platform](https://www.youtube.com/watch?v=Kf6VrypLsZE)

    - [How to spawn a VPS in the Digital Ocean Cloud Platform](https://www.youtube.com/watch?v=vqZ7eKM0WS8)

    - [Getting started with the Rhaspberry Pi](https://www.youtube.com/watch?v=juHoJYX86Dg)

    ### Recommended System Requirements
    - **OS**: Debian-based Linux
    @@ -73,12 +75,17 @@ $ cat ./README.md
    Alternatively, you can view the README file [on a web browser](https://github.com/monero-project/monero/blob/master/README.md).

    # 3. Building
    Now it is time to build the Monero source code. This command will use the full capacity of your systems CPU so you wont wait as long.
    Now it is time to build the Monero source code.

    `$ cd "$(make -j $(nproc) release | tail -1 | grep -oP '(?<='"'"').*(?<!'"'"')')"`

    Verify that the build worked by running the following command and verifying that the output is ZERO.
    Verify that the build worked by running the following command and verifying that the output is **ZERO**.

    `$ echo $?`

    Congratulations! You have successfully built your first Linux
    Congratulations! You have successfully built Monero from its source code! We must now copy the binaries in a more appropriate location.

    ```
    $ mkdir /opt/monero
    $ cp ./bin/* /opt/monero
    ```
  16. @tannerdsilva tannerdsilva renamed this gist Dec 31, 2020. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  17. @tannerdsilva tannerdsilva created this gist Dec 31, 2020.
    84 changes: 84 additions & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,84 @@
    # How To Built And Host a Monero Node from Source

    Hello. In this document, we will walk through the steps of building and hosting your own Monero node from source on a Debian-based Linux system. These systems including Raspbian, Debian, and Ubuntu.
    This tutorial assumes that you are capable of accessing the ROOT terminal of your Debian-based system, and are capable of getting your system online if necessary. You may plan on using an external storage device to store the blockchain, this tutorial will include the optional steps to support external storage if necessary.

    Here are some useful links for reaching this prerequisite if you do not currently have access to a Debian-based system that meets the recommended system requirements for `monerod`.

    [How to spawn a VPS in the Linode Cloud Platform](https://www.youtube.com/watch?v=Kf6VrypLsZE)
    [How to spawn a VPS in the Digital Ocean Cloud Platform](https://www.youtube.com/watch?v=vqZ7eKM0WS8)
    [Getting started with the Rhaspberry Pi](https://www.youtube.com/watch?v=juHoJYX86Dg)

    ### Recommended System Requirements
    - **OS**: Debian-based Linux

    - **RAM**: 1GB

    - **CPU**: 1 CORE

    - **Storage**: > 150 GB (internal or external)

    # 1. Getting Started
    Now that you have access to the terminal of your Debian-based system, we can begin setting up the monerod node. Lets start by confirming that your are currently the root user.

    **THIS TUTORIAL ASSUMES THAT YOU WILL REMAIN THE ROOT USER FOR THE ENTIRETY OF THE SETUP PROCESS**

    `$ whoami`

    If the result of this command is **root**, you may proceed with the tutorial.
    If you are not the root user, it is highly recommended you log in as root using either `su` or `sudo su` before proceeding with the tutorial.

    Additionally, you may confirm the connectivity of your device by checking your external IP address.

    `$ curl ifconfig.me`

    The result of this command should be your external IPv4 address.

    # 2. Downloading Software
    Lets install the necessary packages that we will need to operate and set up monerod. First, we will update our package manager and install a few basic utilites such as `nano` and `git`

    ```
    $ apt-get update
    $ apt-get install -y nano git
    ```

    Next, lets download the Monero source code and enter the root directory of the source code

    ```
    $ cd /root
    $ git clone 'https://github.com/monero-project/monero.git'
    $ cd monero
    ```

    ...and change to the latest release of the source code...

    ```
    $ git checkout $(git describe --tags $(git rev-list --tags --max-count=1))
    $ git submodule init
    $ git submodule update
    ```

    Now, we will install the required packages to build the Monero source code. As of `v0.17.1.8`, Monero requires the following packages...

    ```
    $ apt-get install -y build-essential cmake pkg-config libboost-all-dev libssl-dev libzmq3-dev libunbound-dev libsodium-dev libunwind8-dev liblzma-dev libreadline6-dev libldns-dev libexpat1-dev doxygen graphviz libpgm-dev qttools5-dev-tools libhidapi-dev libusb-1.0-0-dev libprotobuf-dev protobuf-compiler libudev-dev
    ```

    These dependencies may change with future updates. You can confirm that you have all package dependencies by viewing the **Compiling Monero from source -> Dependencies** section the `README.md` file.

    ```
    $ cat ./README.md
    ```

    Alternatively, you can view the README file [on a web browser](https://github.com/monero-project/monero/blob/master/README.md).

    # 3. Building
    Now it is time to build the Monero source code. This command will use the full capacity of your systems CPU so you wont wait as long.

    `$ cd "$(make -j $(nproc) release | tail -1 | grep -oP '(?<='"'"').*(?<!'"'"')')"`

    Verify that the build worked by running the following command and verifying that the output is ZERO.

    `$ echo $?`

    Congratulations! You have successfully built your first Linux