# Manual Installation

## Downloading the binaries

### How it works

We have a JSON manifest that you can use to obtain the package.

### Manifest URL

Check the [chains](https://gitbook.humanode.io/docs/chains "mention") page for the particular chain you would like to run. We will use the Humanode Mainnet manifest in the instructions below as an example.

To download and inspect the manifest run the command below:

{% code overflow="wrap" %}

```shell-session
$ curl -sSL "https://chainspec.mainnet.stages.humanode.io/latest/manifest.json" | jq .
{
  "binaries": [
     ...
```

{% endcode %}

<details>

<summary>Sample manifest</summary>

{% code overflow="wrap" %}

```json
{
  "binaries": [
    {
      "platform": "Darwin",
      "arch": "arm64",
      "displayName": "Humanode Mainnet",
      "description": "The Humanode network.",
      "icon": "icon.png",
      "executablePath": "humanode-peer",
      "chainspecPath": "chainspec.json",
      "ngrokPath": "ngrok-wrapper",
      "humanodeWebsocketTunnelClientPath": "humanode-websocket-tunnel",
      "files": [
        {
          "subUrl": "/latest/binaries/Darwin-arm64/humanode-peer",
          "destinationSubPath": "humanode-peer",
          "sha256": "b0260fcc038706f3ebf97ef16c1e49596e262a450adca94fc06c1ceaa9272f9d"
        },
        {
          "subUrl": "/latest/chainspec.json",
          "destinationSubPath": "chainspec.json",
          "sha256": "eefac86f7a9089c3e403c5860dfb0d576af22834bee0b6e38936d597ba69afc5"
        },
        {
          "subUrl": "/latest/binaries/Darwin-arm64/ngrok",
          "destinationSubPath": "ngrok",
          "sha256": "c9e6dfec454f9faec92a13dfd3f3857de982007e3b85987bb875aa0d74ca8101"
        },
        {
          "subUrl": "/latest/binaries/Darwin-arm64/humanode-websocket-tunnel-client",
          "destinationSubPath": "humanode-websocket-tunnel-client",
          "sha256": "76d63b77f219e56065cbb183d920a2a4efbc616a82d0788cc53275cea89a5d32"
        },
        {
          "subUrl": "/latest/scripts/humanode-websocket-tunnel",
          "destinationSubPath": "humanode-websocket-tunnel",
          "sha256": "514b29731d5ae89097ac6f8158fe9529bec0076cc4fdab40d7aa7de60587fa87"
        },
        {
          "subUrl": "/latest/scripts/ngrok-wrapper",
          "destinationSubPath": "ngrok-wrapper",
          "sha256": "f5b7ba7c61cb5f70278fa7b46d1be11f29348650989a795128b5a7a81f9d5ed6"
        }
      ]
    },
    {
      "platform": "Darwin",
      "arch": "x86_64",
      "displayName": "Humanode Mainnet",
      "description": "The Humanode network.",
      "icon": "icon.png",
      "executablePath": "humanode-peer",
      "chainspecPath": "chainspec.json",
      "ngrokPath": "ngrok-wrapper",
      "humanodeWebsocketTunnelClientPath": "humanode-websocket-tunnel",
      "files": [
        {
          "subUrl": "/latest/binaries/Darwin-x86_64/humanode-peer",
          "destinationSubPath": "humanode-peer",
          "sha256": "ad8127d1139a4f1ab8c5cfa37d3f8cf052e2a35e7fcfd317382abecbc53eec58"
        },
        {
          "subUrl": "/latest/chainspec.json",
          "destinationSubPath": "chainspec.json",
          "sha256": "eefac86f7a9089c3e403c5860dfb0d576af22834bee0b6e38936d597ba69afc5"
        },
        {
          "subUrl": "/latest/binaries/Darwin-x86_64/ngrok",
          "destinationSubPath": "ngrok",
          "sha256": "80c8fb121d6c93350d84351d9516674f4e20a3e003cdd7dcb4c3e7c48b9c5b07"
        },
        {
          "subUrl": "/latest/binaries/Darwin-x86_64/humanode-websocket-tunnel-client",
          "destinationSubPath": "humanode-websocket-tunnel-client",
          "sha256": "110ef86c98a2e76a05d16518294ed2c2faeefdd3314576d7db119bcd20de5bd5"
        },
        {
          "subUrl": "/latest/scripts/humanode-websocket-tunnel",
          "destinationSubPath": "humanode-websocket-tunnel",
          "sha256": "514b29731d5ae89097ac6f8158fe9529bec0076cc4fdab40d7aa7de60587fa87"
        },
        {
          "subUrl": "/latest/scripts/ngrok-wrapper",
          "destinationSubPath": "ngrok-wrapper",
          "sha256": "f5b7ba7c61cb5f70278fa7b46d1be11f29348650989a795128b5a7a81f9d5ed6"
        }
      ]
    },
    {
      "platform": "Linux",
      "arch": "x86_64",
      "displayName": "Humanode Mainnet",
      "description": "The Humanode network.",
      "icon": "icon.png",
      "executablePath": "humanode-peer",
      "chainspecPath": "chainspec.json",
      "ngrokPath": "ngrok-wrapper",
      "humanodeWebsocketTunnelClientPath": "humanode-websocket-tunnel",
      "files": [
        {
          "subUrl": "/latest/binaries/Linux-x86_64/humanode-peer",
          "destinationSubPath": "humanode-peer",
          "sha256": "f225e89320ea31846c948e10cec5a7dcffb102ca1fa67b688b198a7aefaee494"
        },
        {
          "subUrl": "/latest/chainspec.json",
          "destinationSubPath": "chainspec.json",
          "sha256": "eefac86f7a9089c3e403c5860dfb0d576af22834bee0b6e38936d597ba69afc5"
        },
        {
          "subUrl": "/latest/binaries/Linux-x86_64/ngrok",
          "destinationSubPath": "ngrok",
          "sha256": "218d267cd1195334718bafac14bfdf1c19dc95dcf8a24aaa6a1383c21dc86e76"
        },
        {
          "subUrl": "/latest/binaries/Linux-x86_64/humanode-websocket-tunnel-client",
          "destinationSubPath": "humanode-websocket-tunnel-client",
          "sha256": "b39c88cf5e7125c852f9727e00a76626c4e817837b62bf9799f397f75b8a6dd1"
        },
        {
          "subUrl": "/latest/scripts/humanode-websocket-tunnel",
          "destinationSubPath": "humanode-websocket-tunnel",
          "sha256": "514b29731d5ae89097ac6f8158fe9529bec0076cc4fdab40d7aa7de60587fa87"
        },
        {
          "subUrl": "/latest/scripts/ngrok-wrapper",
          "destinationSubPath": "ngrok-wrapper",
          "sha256": "f5b7ba7c61cb5f70278fa7b46d1be11f29348650989a795128b5a7a81f9d5ed6"
        }
      ]
    }
  ]
}
```

{% endcode %}

</details>

### Setting up the `humanode-peer` binary

Find the binaries for your platform in the manifest. In case of Linux, it's an entry with the following subUrl:

```
/latest/binaries/Linux-x86_64/humanode-peer
```

Use the path together with the domain from the manifest URL to get the binary download link:

{% code overflow="wrap" %}

```
https://chainspec.mainnet.stages.humanode.io/latest/binaries/Linux-x86_64/humanode-peer
```

{% endcode %}

Download the `humanode-peer` binary using the obtained link:

{% code overflow="wrap" %}

```shell-session
$ curl -sSL "https://chainspec.mainnet.stages.humanode.io/latest/binaries/Linux-x86_64/humanode-peer" -o humanode-peer
```

{% endcode %}

Make the binary executable and install it into the system:

```shell-session
$ chmod +x humanode-peer
$ sudo cp humanode-peer /usr/local/bin/
```

### Downloading the chainspec file

Using the same manifest we have obtained above, find and download the `chainspec.json` file.

In our case, this is the file with the following `subPath`:

```
/latest/chainspec.json
```

Use the hostname from the manifest URL to obtain the chainspec file URL, like in the `humanode-peer` step:

<pre><code><strong>https://chainspec.mainnet.stages.humanode.io/latest/chainspec.json
</strong></code></pre>

Then download the `chainspec.json`

{% code overflow="wrap" %}

```shell-session
$ curl -sSL "https://chainspec.mainnet.stages.humanode.io/latest/chainspec.json" -o ~/chainspec.json
```

{% endcode %}

We are now ready to proceed to the next step.

### Downloading the RPC Tunnel

In the same way, you can download and use `ngrok`, `humanode-websocket-tunnel` and `ngrok-wrapper`.
