> For the complete documentation index, see [llms.txt](https://docs.openiam.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.openiam.com/installation/rpm/rpm-single-node/prepare-the-host.md).

# Prepare the host

Confirm the host meets the requirements and the prerequisites are in place, before anything is installed.

## What this covers, and how long it takes

<table><thead><tr><th width="184.39999389648438"></th><th></th></tr></thead><tbody><tr><td><strong>You get</strong></td><td>A host confirmed ready, so the installation runs without interruption</td></tr><tr><td><strong>Time</strong></td><td>15 minutes</td></tr><tr><td><strong>Hosts</strong></td><td>The host you are installing on</td></tr><tr><td><strong>Downtime</strong></td><td>None</td></tr><tr><td><strong>Reversible</strong></td><td>Yes — nothing is installed here</td></tr></tbody></table>

## Before you start

The host is provisioned to [*What you need*](/installation/what-you-need.md), and you have `root` or full `sudo`.

***

## Check it

Run these together and confirm each result before continuing. Fixing anything here takes minutes; finding it partway through the installation costs a restart.

### 1. Operating system

{% code overflow="wrap" %}

```bash
grep PLATFORM_ID /etc/os-release
```

{% endcode %}

**Expected:** `platform:el9` or `platform:el10`. Note which — you need it when obtaining the software.

### 2. Memory and disk

{% code overflow="wrap" %}

```bash
free -g | awk '/^Mem:/ {print $2" GB memory"}'
df -h / | awk 'NR==2 {print $4" free on /"}'
```

{% endcode %}

**Expected:** at or above the figures for your environment in [*What you need*](/installation/what-you-need.md) — 48 GB and 80 GB for non-production, 62 GB and 200 GB for production.

`free -g` rounds down and does not count memory reserved by the platform firmware, so a host provisioned with 48 GB typically reports 46 or 47. Read this as confirmation the host is in the right band; the installation performs the authoritative check against the environment you select.

### 3. Swap

{% code overflow="wrap" %}

```bash
swapon --show
```

{% endcode %}

**Expected: no output.** If a swap device is listed:

{% code overflow="wrap" %}

```bash
swapoff -a
```

{% endcode %}

and remove or comment its entry in `/etc/fstab` so it stays off across restarts.

### 4. Hostname resolution

{% code overflow="wrap" %}

```bash
hostname -f
getent hosts "$(hostname -f)"
```

{% endcode %}

**Expected:** a fully qualified name, resolving to an address on this host.

### 5. Network access

If this host will download the software during installation:

{% code overflow="wrap" %}

```bash
curl -sI https://download.openiam.com | head -1
```

{% endcode %}

**Expected:** an HTTP response line. No response means this host has no outbound path — use the air-gapped procedure in [*Obtain the software*](/installation/obtain-the-software.md).

### 6. Ports are free

The platform binds several ports on this host:

{% code overflow="wrap" %}

```bash
ss -lntp | grep -E ':(80|443|8080|8081|8082|8083|8084|8085|8086|9080|8182|8200|8500|9042|9200|5672|15672|6379|3306)\b' \
  || echo "all free"
```

{% endcode %}

**Expected:** `all free`. Anything listed is already in use by another application — resolve that before installing. [*Ports*](/installation/rpm/rpm-single-node/ports.md) lists what each is for.

### 7. Time synchronisation

{% code overflow="wrap" %}

```bash
timedatectl status | grep -E 'synchronized|NTP'
```

{% endcode %}

**Expected:** the clock is synchronised. The platform's tiers exchange time-sensitive messages, and certificate validation depends on an accurate clock.

### 8. Firewall

Decide now how the console will be reached. **The installation opens 80 and 443 in firewalld when you install the reverse proxy**, and changes nothing else in your firewall — so open what you need either before or after:

The installation opens ports 80 and 443 for you when you install the reverse proxy. **Those are the only ports that need to be reachable from outside the host** — every other port the platform uses stays internal.

If firewalld is not running during the installation, add them afterwards:

{% code overflow="wrap" %}

```bash
firewall-cmd --permanent --add-port=80/tcp --add-port=443/tcp && firewall-cmd --reload
```

{% endcode %}

***

## Verify it

A single pass confirming everything above:

{% code overflow="wrap" %}

```bash
echo "OS:      $(grep -o 'platform:el[0-9]*' /etc/os-release)"
echo "Memory:  $(free -g | awk '/^Mem:/ {print $2}') GB"
echo "Disk:    $(df -h / | awk 'NR==2 {print $4}') free"
echo "Swap:    $(swapon --show | wc -l) devices"
echo "Host:    $(hostname -f)"
echo "Clock:   $(timedatectl show -p NTPSynchronized --value)"
```

{% endcode %}

Keep this output with your build record.

## If it goes wrong

| What you see                            | What it means                        | What to do                                             |
| --------------------------------------- | ------------------------------------ | ------------------------------------------------------ |
| A platform other than `el9` or `el10`   | Unsupported operating system version | Build the host on Enterprise Linux 9 or 10             |
| Swap devices listed                     | Swap is active                       | `swapoff -a` and remove the `/etc/fstab` entry         |
| A port already listening                | Another application holds it         | Stop or relocate that application                      |
| `hostname -f` returns a short name      | Incomplete host configuration        | Set a fully qualified hostname and confirm it resolves |
| No response from `download.openiam.com` | No outbound HTTPS from this host     | Use the air-gapped procedure                           |

## What this procedure does not cover

Provisioning the host, your network design, and your organisation's hardening baseline. On AWS and Azure, [*AWS*](/installation/rpm/cloud/aws.md) and [*Azure*](/installation/rpm/cloud/azure.md) cover sizing and placement. Installation begins on [*Install*](/installation/rpm/rpm-single-node/install.md).

## Related

* [*What you need*](/installation/what-you-need.md)
* [*Obtain the software*](/installation/obtain-the-software.md)
* [*Install*](/installation/rpm/rpm-single-node/install.md) — the next page

*Applies to OpenIAM 2026.8.1.*


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

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

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.openiam.com/installation/rpm/rpm-single-node/prepare-the-host.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
