# Ansible based installation

## Prerequisites

Nodeum is compatible with the RHEL, Rocky, and AlmaLinux families. Please refer to the software requirements for further details.

**Installing Nodeum Software**

Nodeum can be installed on either a physical server or a virtual machine. To learn more about hardware requirements, please refer to the official documentation. The installation process utilizes an Ansible Playbook or a Docker Image for setup.

### Pre-Deployment Checklist

1. **DNS Resolution**: Ensure DNS resolution is functioning correctly.
2. **Server Time**: Verify the server's time is accurately configured.
3. **Ansible Requirements**:

   * Deploy **Ansible 2.15**

   Run Ansible playbooks from the node where they are installed.

   ```bash
   $ pip3 install ansible
   ```

   or

   <pre><code><strong>$ pip install ansible
   </strong></code></pre>

   * Ensure **Python 3.9** is installed

uninstall any existing Python installations and install the correct version.

```bash
$ pip uninstall pip
$ yum remove python3
$ yum install python39
$ pip3 install --upgrade pip
```

or

```
$ yum install pip
$ pip install --upgrade pip
```

{% hint style="danger" %}
For a multi-node deployment, Python installation and pip3 upgrade must be performed
{% endhint %}

4. **Install the Operating System:** Ensure root user access before starting the installation.
5. **SELinux Configuration:** SELinux will be disabled during the Ansible deployment. Be ready to reboot the system afterward.

## Nodeum Installation and Update Guide

To install or update Nodeum, follow the steps below. Ensure you have an unlimited internet connection.

1. Install `wget`:

   ```bash
   yum install wget
   ```
2. Download the Nodeum package:

   ```bash
   wget get.nodeum.io/public/nodeum-v1-100.x.tar.gz
   ```
3. Extract the downloaded package:

   ```bash
   tar -xvzf /root/nodeum-xxx.tar.gz
   ```
4. Navigate to the extracted directory:

   ```bash
   cd v1-100.x-xx
   ```
5. Run the Ansible playbooks:
   * Check the installation:

     ```bash
     ansible-playbook check_install.yml
     ```
   * Install Nodeum:

     ```bash
     ansible-playbook install.yml
     ```

Upon successful completion, the installation screen should display.

<figure><img src="/files/590IhL8a0348BLyOGCn1" alt=""><figcaption></figcaption></figure>

{% hint style="danger" %}
Notice that there are no failure results.
{% endhint %}

Nodeum is now ready to use. Access it via your browser at `http://your-nodeum-ip-address/` or using the DNS name.

{% hint style="info" %}
If you are unable to access the Console via the default HTTP port, a local firewall might be active. To resolve this, configure the firewall to allow access through the HTTP/HTTPS protocols.
{% endhint %}

#### Advanced Settings: Proxy Configuration

If your network requires a Proxy server for internet access, configure the Proxy servers as follows:

<pre class="language-bash"><code class="lang-bash">$ vi /etc/environment
export http_proxy=http://xxxxx:xxxx@server.domain.local:8080
<strong>export https_proxy=http://xxxxx:xxxx@server.domain.local:8080
</strong>export ftp_proxy=http://xxxxx:xxxx@server.domain.local:8080
no_proxy=http://xxxxx:xxxx@server.domain.local:8080
</code></pre>

{% hint style="info" %}
To include special characters like ! and @ in your password using Unicode, you should represent them in hexadecimal format.

For instance, if your password is `F@o:o!B#ar$`, **the export will fail**export&#x20;

```
http_proxy="http://user:F@o:o!B#ar$@server.domain.local:8080"
```

Convert special characters to their hexadecimal format, for instance:

```bash
@ becomes %40, 
: becomes %3A, 
and so on. 
```

{% endhint %}

For example, using the [Online Toolz text to hex converter](https://www.online-toolz.com/tools/text-hex-convertor.php), the password `F@o:o!B#ar$` is transformed to `F%40o%3Ao%21B%23ar%24`. The `http_proxy` export is formatted as follows:

```bash
export http_proxy="http://user:F%40o%3Ao%21B%23ar%24@server.domain.local:8080"
```

#### Network Interface Service Mapping

To bind each service to a specific network interface, follow these steps:

1. Update the inventory files with your desired network interface mapping.
2. Reapply the Ansible playbooks to implement changes.

Within the Nodeum installation package, locate the `/inventory/hosts_vars/srv1` file. This file contains essential configurations and settings for the host.

The service can be configured using the available section. By default, the `iface_name` parameter utilizes the primary network interface, but it can be customized.

```bash
# If there is no default network interface defined or you want to override it
# iface_name: eth0
```

Later in the same file, you'll find various parameters for linking a list of services to a specific interface name.

```bash
# Specific name of interface for each services. Default to iface_name 
# or default network interface) if undefined
# smb_iface_name: eth0
# nfs_iface_name: eth0
# rails_iface_name: eth0
# zookeeper_iface_name: eth0
# solr_iface_name: eth0
# catalog_indexer_iface_name: eth0
```

<mark style="color:purple;">Description of each parameter :</mark>

<table><thead><tr><th width="298">Parameter</th><th>Service Name</th></tr></thead><tbody><tr><td>smb_iface_name</td><td>SAMBA</td></tr><tr><td>nfs_iface_name</td><td>NFS</td></tr><tr><td>rails_iface_name</td><td>RAILS</td></tr><tr><td>solr_iface_name</td><td>SOLR</td></tr><tr><td>catalog_iface_name</td><td>CATALOG INDEXER</td></tr></tbody></table>


---

# 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.nodeum.io/data-archiving/install-and-deploy/ansible-based-installation.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.
