# Validating the prerequisites in a multi-node HA-ready production setup

> Before installing Automation Suite, it is good practice to validate the installation prerequisites and infrastructure readiness. You can use the `validateUiPathASReadiness.sh` script to evaluate your environment and generate a summary before performing the installation.

## Overview

Before installing Automation Suite, it is good practice to validate the installation prerequisites and infrastructure readiness. You can use the `validateUiPathASReadiness.sh` script to evaluate your environment and generate a summary before performing the installation.

<colgroup>
<col/>
<col/>
</colgroup>

Validation

Description

Hardware requirements

Validates that each machine in the cluster meets the hardware requirements. The check takes into account the following aspects:

server, agent, or tainted node;
online or offline system;
single-node evaluation profile or multi-node HA-ready production profile.

Disk partitioning and configuration

Validates that you properly partitioned and configured the disk. The check takes into account the following aspects:

server or agent node;
online or offline system;
primary or secondary server node.

SQL Server connectivity

Validates the connectivity to the configured SQL Server and database. The check takes into account the following aspects:

connectivity to the SQL Server host (endpoint) on a given endpoint;
connectivity to the principal database if <code>create_db</code> is set to <code>true</code>;
                                 
create database (<code>dbcreator</code>) permissions if <code>create_db</code> is set to <code>true</code>;
                                 
create schema (<code>db_ddladmin</code>), read (<code>db_datareader</code>), and write (<code>db_datawriter</code>) permissions;
                                 
connectivity to the database when <code>create_db</code> is set to <code>false</code>;
                                 
special requirements for each service. For instance, for Insights, the script checks the columnstore index, <code>json</code> support, and whether SQL Server compatibility level is &gt;= 130;
                                 
connectivity to the database and SQL Server with integrated authentication.

Server certificate

Checks that the server certificate you provided is valid. The check takes into account the following aspects:

the certificate file format is <code>.pem</code>, i.e. Base64-encoded DER certificate;
                                 
the private key length is at least 2048;
Extended Key Usage and TLS Web Server Authentication, required for accessing Automation Suite on iOS devices;
Subject Alternative Name for all the required DNS entries;
server certificate and private key match;
the CA bundle you provided is actually the issuer of the server certificate;
the certificate validity is more than 30 days.

Token-signing certificate

Checks that the token-signing certificate you provided is valid. The check takes into account the following aspects:

the certificate is in <code>pfx</code> format;
                                 
the password for decrypting the certificate is valid;
the certificate validity is more than 30 days.

Proxy

Validates that you properly configure the proxy. The check takes into account the following aspects:

<code>https_proxy</code>, <code>http_proxy</code>, and <code>no_proxy</code> are set as environment variables on the machine;
                                 
the proxy server is reachable.

Connectivity

Validates that all machines can connect to each other, that all the required URLs are on the firewall allowlist, and more.
                                 The check takes into account the following aspects:
                              

the FQDN of Automation Suite and the FQDN of all the other subdomains are resolvable from the machine;
in an online setup, all the external URLs are reachable from the machine;
all servers, agents, and tainted nodes can connect to each other on the required ports;
the outbound connections (URLs) are resolvable via all the nameservers present in <code>/etc/resolve.conf</code>;
                                 
if any of the URLs is not resolvable via all the nameservers, then at least one nameserver can resolve all the URLs;
either the TCP or UDP protocol is allowed;
<code>fixed_rke_address</code> is set to port <code>9345</code> and <code>6443</code>;
                                 
a response is issued when a call is made to the FQDN on port <code>443</code>.
                                 

System services

Validates that system services are properly configured. The check takes into account the following aspects:

<code>nm-cloud-setup.service</code>, <code>nm-cloud-setup.timer</code>, <code>firewalld</code> are disabled;
                                 
<code>iscsi-initiator-utils</code> is installed and enabled;
                                 
<code>auditd</code> is properly configured for <code>--backlog_wait_time</code> set as <code>1</code>;
                                 
<code>logrotate</code> is properly configured;
                                 

<code>net.ipv4.conf.all.rp_filter</code> is disabled (set to <code>0</code>).
                                    

Software requirements

Validates that all the required software is installed. If some software is not installed, the <code>install-uipath.sh</code> installer attempts to install it.
                              

## Using the script to validate installation prerequisites

### Downloading the Script

:::note
For offline installations, you must perform this step on a machine with access to internet and to the air-gapped machines where Automation Suite is deployed. Copy the file from the online machine to the first target machine.
:::

The prerequisite script is packaged along with the installer in an archive called `sf-installer.zip`, and supporting tools are bundled as `sf-infra.tar.gz` for offline only. You need these files to generate a report on all the machines on which you plan to install Automation Suite.

| Installation type | Files to download |
| --- | --- |
| Online | `sf-installer.zip` – **Mandatory**. For download instructions, see [sf-installer.zip](downloading-installation-packages.md). |
| Offline | `sf-installer.zip` – **Mandatory**. For download instructions, see [sf-installer.zip](downloading-installation-packages.md).`sf-infra.tar.gz` – **Mandatory**. For download instructions, see [sf-infra.tar.gz](downloading-installation-packages.md). |

### Preparing to Use the Script

1. Become root by running the following command:

   ```
   sudo su -
   ```
2. Copy the files to the `/opt/UiPathAutomationSuite/{version}` folder by running the following command:

   ```
   VERSION="" #add the version number you are trying to install. Ex: for 2022.4.0 Set VERSION="2022.4.0"
   mkdir -p /opt/UiPathAutomationSuite/${VERSION}
   # For below command replace the /path/to where actually the files are present.
   cp /path/to/sf-installer.zip /opt/UiPathAutomationSuite/${VERSION}
   # Additionally for offline, copy sf-infra.tar.gz as well to /opt/UiPathAutomationSuite/{VERSION} folder
   cp /path/to/sf-infra.tar.gz /opt/UiPathAutomationSuite/${VERSION}
   cd /opt/UiPathAutomationSuite/${VERSION}
   ```
3. Unzip the package by running the following command:

   ```
   unzip sf-installer.zip -d installer
   ```
4. Assign the necessary permissions and navigate to the script folder by running the following command:

   ```
   chmod -R 755 installer
   cd installer
   ```

### Script Parameters

To view the help section and supported flags, run the following command:

```
./validateUiPathASReadiness.sh --help
```

Output:

```
***************************************************************************************
validateUiPathASReadiness.sh Runs pre-install validation checks
Usage:
  validateUiPathASReadiness.sh [command]
  validateUiPathASReadiness.sh [flags]
Available Commands:
  validate-packages                                     Validate that required packages are installed
  install-packages                                      Install required packages. If --install-type offline, this will also install offline required packages
Arguments:
 -i|--input                                             Specify cluster config json file. Defaults to /opt/UiPathAutomationSuite/cluster_config.json
 -d|--debug                                             Debug mode to get additional details helpful for debugging
 -m|--machines                                          Comma separated IP address / hostnames of all the machines
 -n|--node-type                                         Possible values [server|agent|taskmining|asrobots|gpu]. Defaults to server
 --install-type                                         Possible values [online|offline]. Defaults to online
 --prereq-bundle </uipath/offline_bundle.tar.gz>        Specify the path to the prereq bundle
 --prereq-tmp-folder </uipath>                          Specify parent directory for the temporary install folder
 --kubeconfig                                           Specify path to the kubeconfig file
 -h|--help                                              Display help
***************************************************************************************
```

The following table describes the parameters you can use when running the script:

| Parameter | Description |
| --- | --- |
| `-i\|--input` | Accepts the `cluster_config.json` file as input. This file defines the parameters, settings, and preferences applied to the UiPath services deployed via Automation Suite. For details, see [Advanced Installation Experience](advanced-installation-experience.md).If you do not provide this file, the script will trigger the interactive experience to collect these inputs. The file will then be generated on your behalf. |
| `-d\|--debug` | Debug mode to get additional details helpful for debugging. |
| `-m\|--machines` | Accepts comma-separated IP address / hostnames of all the machines. This is required to check the connectivity between all the nodes on the required port.The parameter is mandatory for multi-node HA-ready production installations. In addition to that, the parameter is also required if you plan to add a Task Mining, GPU, or Automation Suite Robots node in a single-node evaluation cluster. |
| `-n\|--node-type` | Accepts the type of the current node. Possible values are: `server`, `agent`, `task-mining`, `gpu`, and `asrobots`.The default value is `server`. |
| `--install-type` | Accepts the installation method: `online` or `offline`.The default value is `online`. |
| `--prereq-bundle` | Accepts the absolute path where the `sf-infra.tar.gz` is located. |
| `--prereq-tmp-folder` | Accepts the absolute path where `sf-infra.tar.gz` bundle will be temporarily extracted. If this path is not provided, the installer will select the `/tmp` folder. |
| `--kubeconfig` | Specify the path to the kubeconfig file. |
| `validate-packages` | Validates the required RPM packages. |
| `install-packages` | Installs the required RPM packages for online installation. |
| `install-packages --install-type offline` | Installs the RPM required packages for offline installation. |

## Validating a multi-node HA-ready production setup

### On the First Server Machine

1. To validate the first server machine, run the following command:

**Online**

```
./validateUiPathASReadiness.sh \
  --node-type server \
  --install-type online \
  --machines "10.0.1.8, 10.0.1.9" #replace with actual machine IPs of all the nodes in cluster
```

**Offline**

```
./validateUiPathASReadiness.sh \
  --node-type server \
  --install-type offline \
  --prereq-bundle ../sf-infra.tar.gz \
  --prereq-tmp-folder /opt/UiPathAutomationSuite/tmp \
  --machines "10.0.1.8, 10.0.1.9" #replace with actual machine IPs of all the nodes in cluster
```

Once this script is executed, it generate sa `cluster_config.json` file under the `/opt/UiPathAutomationSuite` folder. This file is required on all the other machines.

2. To copy the `cluster_config.json` file on the other machines, run the following command:

```
scp /opt/UiPathAutomationSuite/cluster_config.json <username>@<node dns>:/opt/UiPathAutomationSuite
```

:::note
If you cannot copy the file to the `/opt/UiPathAutomationSuite` folder due to permission errors, you can temporarily copy it to `/var/tmp` on the new machines, and then move it to `/opt/UiPathAutomationSuite`.

Alternatively, you can also provide full access permissions (`777`) to the `/opt/UiPathAutomationSuite` folder on the new machines, by running the following command: `chmod -R 777 /opt/UiPathAutomationSuite`.
:::

### On the Other Server Machines

To validate the other server machines, run the following command:

**Online**

```
./validateUiPathASReadiness.sh \
  --input /opt/UiPathAutomationSuite/cluster_config.json \
  --node-type server \
  --install-type online \
  --machines "10.0.1.8, 10.0.1.9" #replace with actual machine IP of all the nodes in cluster
```

**Offline**

```
./validateUiPathASReadiness.sh \
  --input /opt/UiPathAutomationSuite/cluster_config.json \
  --node-type server \
  --install-type offline \
  --prereq-bundle ../sf-infra.tar.gz \
  --prereq-tmp-folder /opt/UiPathAutomationSuite/tmp \
  --machines "10.0.1.8, 10.0.1.9" #replace with actual machine IP of all the nodes in cluster
```

### On Agent Machines

To validate the agent machines, run the following command:

**Online**

```
./validateUiPathASReadiness.sh \
  --input /opt/UiPathAutomationSuite/cluster_config.json \
  --node-type agent \
  --install-type online \
  --machines "10.0.1.8, 10.0.1.9" # replace with actual machine IP of all the nodes in cluster
```

**Offline**

```
./validateUiPathASReadiness.sh \
  --input /opt/UiPathAutomationSuite/cluster_config.json \
  --node-type agent \
  --install-type offline \ #replace with offline for airgap
  --prereq-bundle ../sf-infra.tar.gz \
  --prereq-tmp-folder /opt/UiPathAutomationSuite/tmp \
  --machines "10.0.1.8, 10.0.1.9" # replace with actual machine IP of all the nodes in cluster
```

### On Specialized Agent Machines

To validate the Task Mining, GPU, or Automation Suite Robots machines, run the following command:

:::note
Make sure to use the suitable parameter to identify your specialized agent node:

* for Task Mining machines, use `--node-type task-mining`
* for GPU machines, use `--node-type gpu`
* For Automation Suite Robots machines, use `--node-type asrobots`
:::

**Online**

```
./validateUiPathASReadiness.sh \
  --input /opt/UiPathAutomationSuite/cluster_config.json \
  --node-type task-mining \ #replace with gpu for GPU node or asrobots for Automation Suite Robots node
  --install-type online \
  --machines "10.0.1.8, 10.0.1.9" # replace with actual machine IP of all the nodes in cluster
```

**Offline**

```
./validateUiPathASReadiness.sh \
  --input /opt/UiPathAutomationSuite/cluster_config.json \
  --node-type task-mining \ #replace with gpu for GPU node or asrobots for Automation Suite Robots node
  --install-type offline \
  --prereq-bundle ../sf-infra.tar.gz \
  --prereq-tmp-folder /opt/UiPathAutomationSuite/tmp \
  --machines "10.0.1.8, 10.0.1.9" # replace with actual machine IP of all the nodes in cluster
```
