# Linux

`Ubuntu 20.04 LTS` was used for this tutorial.

### 1. Download the Binaries

Download `znnd`, `znn-cli` and `znn-controller` from their respective GitHub repos. Please note that `znn-controller` is only available for Linux at the moment.

### 2. Verification (depreciated)

Import the Zenon Testnet PGP key from `hkps.pool.sks-keyservers.net`

{% code overflow="wrap" %}

```
gpg --keyserver hkps.pool.sks-keyservers.net --recv E2D8289C0A9D2C28A3320B62D2AAFD5D9088F1A2
```

{% endcode %}

If you don't have `gpg` installed, please use `sudo apt install gnupg`

{% code overflow="wrap" %}

```
gpg: key E2D8289C0A9D2C28A3320B62D2AAFD5D9088F1A2: public key "Zenon Testnet <portal@zenon.network>"
```

{% endcode %}

Verify the signature. The same command can be used on macOS:

{% code overflow="wrap" %}

```
gpg --verify `path_to_sig`.sig `path_to_release_bundle`

gpg: Good signature from "Zenon Testnet <portal@zenon.network>"
```

{% endcode %}

### 3. Start the Node Daemon

If you are on a Linux machine, use the `znn-controller` option `1) Deploy`:

```
./znn-controller
```

Otherwise use:

```
./znnd
```

### 4. Verify Node RPC Communication

Inspect the `config.json` file using your favorite text editor.

Navigate to `~/.znn/config.json`.&#x20;

Check if the `http`, `websocket` entries are enabled (`true`). By default, all `Endpoints` are public.&#x20;

The default `HTTPPort` is `35997` and `WSPort` is `35998`.&#x20;

```json
{
  "RPC": {
    "EnableHTTP": true,
    "EnableWS": true,
    "Endpoints": null
  }
}
```

You can also disable the RPC communication via **`znn-cli`:**

```
./znn-cli disableRPC

RPC successfully disabled
Start znnd to use the new configuration
```

### 5. Generate a ZNN Alphanet Address (optional)

{% code overflow="wrap" %}

```
./znn-cli wallet.createNew yourComplexPassphrase

Successfully created keystore: z1qz8tylu88et6ffy227pw8gak5qvn5awg35l96x
```

{% endcode %}

### 6. Check for Pending Funds (optional)

{% code overflow="wrap" %}

```
./znn-cli unreceived --keyStore z1qz8tylu88et6ffy227pw8gak5qvn5awg35l96x --passphrase yourComplexPassphrase
```

{% endcode %}

If you have pending funds you should see messages like these:

{% code overflow="wrap" %}

```
Unreceived 15000.00000000 ZNN from z1qqjr86g6220kmhn2jrelwhtk7u0mp4r5amjwf2.
Use hash b3e51142119174f8af3ea793a7353ec8b5b4e2208f9ebe50549ead5440fd6b49 to receive.

Unreceived 15000.00000000 QSR from z1qqjr86g6220kmhn2jrelwhtk7u0mp4r5amjwf2.
Use hash c68c674c81d4d9abc2b7a20c999352c21a8128033f9b34105b3616119f116e3c to receive.
```

{% endcode %}

### 7. Receive the Pending Funds (optional)

In order to receive the ZNN you need to issue the command `receive` with the corresponding hash:

{% code overflow="wrap" %}

```
./znn-cli receive b3e51142119174f8af3ea793a7353ec8b5b4e2208f9ebe50549ead5440fd6b49 --keyStore z1qz8tylu88et6ffy227pw8gak5qvn5awg35l96x --passphrase yourComplexPassphrase
```

{% endcode %}

If you don't have Plasma, you'll need to generate it via PoW, please wait.

```
Creating receive transaction ...
Generating Plasma, please wait ...
Done
```

Similarly, you'll receive the QSR by issuing the command `receive` with the corresponding hash:

{% code overflow="wrap" %}

```
./znn-cli receive c68c...6e3c --keyStore z1qz8tylu88et6ffy227pw8gak5qvn5awg35l96x --passphrase yourComplexPassphrase

Creating receive transaction ...
Generating Plasma, please wait ...
Done
```

{% endcode %}

### 8. Check Your Balance (optional)

{% code overflow="wrap" %}

```
./znn-cli balance --keyStore z1qz8tylu88et6ffy227pw8gak5qvn5awg35l96x --passphrase yourComplexPassphrase

Balance for account-chain z1qz8tylu88et6ffy227pw8gak5qvn5awg35l96x having height 2
150000.00000000 QSR
15000.00000000 ZNN
```

{% endcode %}

### 9. Deploy a Pillar, Sentinel or Full Node

Follow these [Node Deployment](/hypercore/technical/legacy/tutorials/linux/node-deployment.md) instructions to deploy a Pillar or Sentinel.

### 10. Stop the Node Daemon

You can use the stop command from `znn-cli` if `znnd` is located at the same working directory:

```
./znn-cli stop znnd
```

If you deployed via `znn-controller` please use option 4 (Stop service)

Otherwise use:

```
pkill -9 znnd
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.zenon.org/hypercore/technical/legacy/tutorials/linux.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
