> For the complete documentation index, see [llms.txt](https://docs.storware.eu/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.storware.eu/deployment/installation/quick-install-all-in-one.md).

# Storware installer

## Storware Backup & Recovery Installer

`sbr-installer` is a self-contained installer for Storware Backup & Recovery (SBR) Server and Node deployments. A single deployment configuration file defines the target hosts, the variables, and the components to install. The installer ships as one binary and requires no additional runtime on the machine you run it from.

The installer can deploy:

* Storware Backup & Recovery Server, including MariaDB and the required service configuration.
* One or more Storware Backup & Recovery Nodes.
* Server and Node on the same host, for an all-in-one setup.
* Server and Nodes on separate hosts, over SSH.

### Prerequisites

Prepare a minimal Linux installation with systemd on every target host. The installer is distributed for Linux x86\_64 (AMD64). The Server and a Node may share one host or run on separate hosts.

The following table lists the supported target operating systems and their default MariaDB repositories for Server installation. The MariaDB series selects the repository branch; the package manager resolves the available package version during installation.

| Target operating system                                         | MariaDB series | MariaDB repository                                 | APT distribution |
| --------------------------------------------------------------- | -------------- | -------------------------------------------------- | ---------------- |
| CentOS Stream 9                                                 | `11.8`         | `<https://rpm.mariadb.org/11.8/centos/9/x86_64`>   | —                |
| Red Hat Enterprise Linux 8.8, 8.9, 8.10                         | `11.8`         | `<https://rpm.mariadb.org/11.8/rhel/8/x86_64`>     | —                |
| Red Hat Enterprise Linux 9.0, 9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7 | `11.8`         | `<https://rpm.mariadb.org/11.8/rhel/9/x86_64`>     | —                |
| SUSE Linux Enterprise Server 15 SP3, SP4, SP5                   | `10.11`        | `<https://rpm.mariadb.org/10.11/sles/15.0/x86_64`> | —                |
| SUSE Linux Enterprise Server 15 SP6                             | `10.11`        | `<https://rpm.mariadb.org/10.11/sles/15.6/x86_64`> | —                |
| Oracle Linux 9                                                  | `11.8`         | `<https://rpm.mariadb.org/11.8/rhel/9/x86_64`>     | —                |
| Ubuntu 22.04                                                    | `11.8`         | `<https://deb.mariadb.org/11.8/ubuntu`>            | `jammy`          |
| Ubuntu 24.04                                                    | `11.8`         | `<https://deb.mariadb.org/11.8/ubuntu`>            | `noble`          |
| Debian 12.5                                                     | `11.8`         | `<https://deb.mariadb.org/11.8/debian`>            | `bookworm`       |

RHEL minor releases share the repository for their major version: `rhel/8` or `rhel/9`. Oracle Linux 9 uses the `rhel/9` repository.

SLES 15 SP3, SP4, and SP5 intentionally share the `sles/15.0` repository path. Do not replace it with a service-pack-specific path. SP6 uses `sles/15.6`.

The target host must be able to reach the selected repository, its download mirrors, and any required signing-key URL during installation. Explicit deployment settings can override the MariaDB series, repository URL, and APT distribution; see Server variables.

For remote installation:

* The host running the installer must be able to reach the target hosts over SSH.
* Root access, or equivalent privilege escalation, is required on every target.
* SSH key-based authentication is recommended.
* Every Node must be able to reach the Server FQDN on port `8181`.
* The Server FQDN must resolve correctly from every Node host.

Example SSH key setup:

```bash
ssh-keygen -f ~/.ssh/id_rsa -P ""
```

```bash
ssh-copy-id -i ~/.ssh/id_rsa.pub root@YOUR_HOST
```

Configuration such as backup destinations and hypervisor connectivity is performed after the installation completes.

***

### Installation Flows

There are three ways to install Storware Backup & Recovery.

#### 1. One-line remote script

Run the installation wrapper directly from the Storware repository:

```bash
bash <(curl -s https://repo.storware.eu/storware/sbr-local-install.sh)
```

If `sbr-installer.tgz` is not already present in the current directory, the wrapper downloads it from `SBR_INSTALLER_URL`, which resolves by default to:

```
https://repo.storware.eu/storware/sbr-installer.tgz
```

#### 2. Script with a local archive

Place `sbr-local-install.sh` and `sbr-installer.tgz` in the same directory. The wrapper extracts the archive, builds a temporary deployment configuration from environment variables or interactive prompts, and then runs the bundled `sbr-installer` binary:

```bash
sudo ./sbr-local-install.sh
```

If the installer binary is located elsewhere, point the wrapper at it:

```bash
sudo SBR_INSTALLER_BIN=/path/to/sbr-installer ./sbr-local-install.sh
```

#### 3. Manual archive workflow

Download and extract `sbr-installer.tgz`, edit `deployment.yml` or the component defaults, then run the binary yourself:

```bash
tar xzf sbr-installer.tgz
```

```bash
sudo ./sbr-installer
```

This flow gives you full control over the deployment configuration and is the recommended approach for multi-host installations.

***

### Wrapper Script Environment Variables

The `sbr-local-install.sh` wrapper accepts the following environment variables.

| Variable                                  | Default                                                                                                  | Description                                                                                              |
| ----------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
| `SBR_REPO_BASE_URL`                       | `<https://repo.storware.eu`>                                                                             | Base URL, including protocol, used to build both the package repository and the installer archive URLs.  |
| `SBR_REPO`                                | `$SBR_REPO_BASE_URL/storware/current/<family>`                                                           | Full package repository URL. Overrides the URL derived from the common base.                             |
| `SBR_INSTALLER_URL`                       | `$SBR_REPO_BASE_URL/storware/sbr-installer.tgz`                                                          | Full archive URL, used when no local archive is present. Overrides the URL derived from the common base. |
| `SBR_INSTALLER_ARCHIVE`                   | `./sbr-installer.tgz` next to the script, or the current directory when run through process substitution | Local installer archive path.                                                                            |
| `SBR_NODE_NAME`                           | `node1`                                                                                                  | Node registration name. Each Node name must be unique.                                                   |
| `SBR_INSTALL_SERVER`                      | `y`                                                                                                      | Set to `n` to skip the Server installation.                                                              |
| `SBR_INSTALL_NODE`                        | `y`                                                                                                      | Set to `n` to skip the Node installation.                                                                |
| `SBR_ADMIN_USER`                          | `admin`                                                                                                  | Server account used for Node registration.                                                               |
| `SBR_ADMIN_PASS`                          | prompt                                                                                                   | Server admin password.                                                                                   |
| `SBR_DB_PASS`                             | prompt when the Server is installed                                                                      | MariaDB root password used during Server setup.                                                          |
| `SBR_MARIADB_ADD_REPO`                    | `true`                                                                                                   | Controls whether the MariaDB repository is added.                                                        |
| `SBR_MARIADB_REPO_VALIDATE_CERTS`         | `true`                                                                                                   | Set to `false` to write `sslverify=0` for the MariaDB RPM repository.                                    |
| `SBR_MARIADB_REPO_GPG_KEY_VALIDATE_CERTS` | `true`                                                                                                   | Set to `false` to import the MariaDB RPM key with TLS certificate verification disabled.                 |
| `SBR_VPROTECT_REPO_VALIDATE_CERTS`        | `true`                                                                                                   | Set to `false` to write `sslverify=0` for the Storware RPM repository.                                   |
| `SBR_SERVER_FQDN`                         | detected hostname                                                                                        | FQDN used for the Server certificate and for Node registration.                                          |
| `SBR_INSTALLER_BIN`                       | `./sbr-installer` next to the script                                                                     | Path to the installer binary.                                                                            |
| `SBR_DEBUG`                               | `false`                                                                                                  | Set to `true` to pass `--debug` to the installer.                                                        |

#### Examples

All-in-one installation without interactive prompts:

```bash
sudo SBR_ADMIN_PASS='change-me' SBR_DB_PASS='change-me' SBR_NODE_NAME='node1' ./sbr-local-install.sh
```

Use a single base URL to keep the package and installer downloads on the same protocol and mirror:

```bash
sudo SBR_REPO_BASE_URL='https://mirror.example' ./sbr-local-install.sh
```

Set `SBR_REPO` or `SBR_INSTALLER_URL` only when one of the two resources intentionally uses a different full URL.

#### Self-signed certificates and corporate proxies

If the host uses a corporate proxy or a repository mirror with a self-signed certificate, disable certificate validation only for the operation that actually fails.

For a failure while importing the MariaDB RPM key:

```bash
sudo SBR_MARIADB_REPO_GPG_KEY_VALIDATE_CERTS=false ./sbr-local-install.sh
```

If `dnf` subsequently fails while downloading MariaDB repository metadata, also disable certificate validation for the repository entry:

```bash
sudo SBR_MARIADB_REPO_GPG_KEY_VALIDATE_CERTS=false SBR_MARIADB_REPO_VALIDATE_CERTS=false ./sbr-local-install.sh
```

***

### Running the Installer Manually

Manual installation is driven by a single `deployment.yml` file. Global variables and target definitions come first; component deployments then reference those targets by name.

Run with the bundled sample configuration:

```bash
sudo ./sbr-installer
```

Run with an explicit configuration file:

```bash
sudo ./sbr-installer --deployment deployment.yml
```

Print the binary version:

```bash
./sbr-installer --version
```

Preview all actions without changing the system:

```bash
sudo ./sbr-installer --dry-run
```

Print detailed debug output:

```bash
sudo ./sbr-installer --debug
```

Debug output includes merged component and step variables, module parameters, local or SSH command details, file operations, command exit codes, stdout, and stderr. Sensitive values such as passwords, tokens, cookies, and private SSH key paths are masked.

***

### Deployment Configuration

#### Local all-in-one installation

Use this when the Server and the Node are installed on the same machine where `sbr-installer` runs.

`deployment.yml`:

```yaml
vars:
  sbri_connection: local
  sbri_user: root
  admin_user: admin
  admin_pass: change-me
  db_pass: change-me
  mariadb_add_repo: true
  server_fqdn: sbr-local.example.com
targets:
  localhost:
    vars:
      node_name: node1
deployments:
  - targets: [localhost]
    components: [server]
  - targets: [localhost]
    components: [node]
```

Run:

```bash
sudo ./sbr-installer --deployment deployment.yml
```

#### Remote installation over SSH

Use this when `sbr-installer` runs on a control host and installs the Server and Nodes on other hosts over SSH.

`deployment.yml`:

```yaml
vars:
  admin_user: admin
  admin_pass: change-me
  db_pass: change-me
  mariadb_add_repo: true
  server_fqdn: sbr.example.local
targets:
  sbr-server:
    vars:
      sbri_host: 192.0.2.10
      sbri_user: root
      sbri_port: 22
      sbri_ssh_private_key_file: /root/.ssh/id_rsa
  sbr-node-1:
    vars:
      sbri_host: 192.0.2.11
      sbri_user: root
      sbri_ssh_private_key_file: /root/.ssh/id_rsa
      node_name: node1
deployments:
  - targets: [sbr-server]
    components: [server]
  - targets: [sbr-node-1]
    components: [node]
```

Run:

```bash
sudo ./sbr-installer --deployment deployment.yml
```

For separate Server and Node targets, list the Server target in the Server deployment and every Node target in the Node deployment, each with a unique `node_name`.

#### Connection variables

<table data-search="false"><thead><tr><th>Variable</th><th>Description</th></tr></thead><tbody><tr><td><code>sbri_connection</code></td><td>Use <code>local</code> for local execution. An empty value means SSH execution.</td></tr><tr><td><code>sbri_host</code></td><td>SSH target address. Defaults to the target name.</td></tr><tr><td><code>sbri_user</code></td><td>SSH user.</td></tr><tr><td><code>sbri_port</code></td><td>SSH port.</td></tr><tr><td><code>sbri_ssh_private_key_file</code></td><td>SSH private key path.</td></tr><tr><td><code>sbri_private_key_file</code></td><td>Alternative SSH private key variable.</td></tr><tr><td><code>sbri_password</code>, <code>sbri_ssh_pass</code>, <code>sbri_pass</code></td><td>Password variables for SSH authentication.</td></tr><tr><td><code>sbri_ssh_executable</code></td><td>SSH executable path. Defaults to <code>ssh</code>.</td></tr><tr><td><code>sbri_ssh_args</code></td><td>Additional SSH arguments.</td></tr><tr><td><code>sbri_ssh_common_args</code></td><td>Common SSH arguments.</td></tr><tr><td><code>sbri_ssh_extra_args</code></td><td>Extra SSH arguments, appended last.</td></tr><tr><td><code>sbri_elevate</code></td><td>Enables privilege elevation through <code>sudo</code>.</td></tr><tr><td><code>sbri_run_as_user</code></td><td>Privilege elevation target user. Defaults to <code>root</code>.</td></tr></tbody></table>

***

### The `deployments` Section

The `deployments` section assigns components directly to named targets. The snippets below show that section only; `vars` and the target definitions remain earlier in the same file.

Install Server and Nodes:

```yaml
deployments:
  - targets: [sbr-server]
    components: [server]
  - targets: [sbr-node-1, sbr-node-2]
    components: [node]
```

Install only the Server:

```yaml
deployments:
  - targets: [sbr-server]
    components: [server]
```

Install only Nodes:

```yaml
deployments:
  - targets: [sbr-node-1, sbr-node-2]
    components: [node]
```

For deployment-specific overrides, use the object form of a component entry, for example `name: server` together with `settings_file: overrides/server.yml`.

***

### Component Defaults

Every component has an implicit defaults file named after the component:

* `defaults/server.yml`
* `defaults/node.yml`

The installer resolves both `deployment.yml` and the `defaults/` directory next to the running binary; the release archive contains the binary, the deployment configuration, and `defaults/` at the same level. Use `--deployment path` only to override the default deployment file.

Static component defaults belong in these files. Platform-dependent values, such as repository paths and generated repository URLs, are added by the installer when they are not configured explicitly.

An optional `settings_file` in a component entry is applied after the implicit defaults and the target variables, so it can provide deployment-specific overrides. Its path is relative to `deployment.yml`.

***

### Installer Variables

#### Common variables

| Variable        | Default                            | Description                                                                                                                                                                                                                                                                |
| --------------- | ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `server_fqdn`   | Hostname reported by the Server OS | FQDN used for the Server certificate and for Node registration.                                                                                                                                                                                                            |
| `node_name`     | Hostname reported by the Node OS   | Unique name used when registering the Node.                                                                                                                                                                                                                                |
| `admin_user`    | `admin`                            | Server account used for Node registration.                                                                                                                                                                                                                                 |
| `admin_pass`    | `vPr0tect`                         | Final Server admin password and Node registration password.                                                                                                                                                                                                                |
| `vprotect_repo` | detected from the target OS        | Storware package repository URL. Defaults to `<https://repo.storware.eu/storware/current/el<major>>` on Red Hat family systems, `<https://repo.storware.eu/storware/current/suse<major>>` on SUSE, and `<https://repo.storware.eu/storware/current/deb`> on Debian/Ubuntu. |

#### Server variables

<table data-search="false"><thead><tr><th>Variable</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>db_pass</code></td><td><code>vPr0tect</code></td><td>MariaDB root password configured during Server installation.</td></tr><tr><td><code>orig_admin_pass</code></td><td><code>vPr0tect</code></td><td>Initial Server admin password, before the installer changes it.</td></tr><tr><td><code>mariadb_add_repo</code></td><td><code>true</code></td><td>Adds the MariaDB repository before installing packages.</td></tr><tr><td><code>mariadb_version</code></td><td>selected from the target OS</td><td>MariaDB repository series: <code>10.11</code> on SLES 15 SP3/SP4/SP5/SP6 and <code>11.8</code> on other supported systems. An explicit deployment setting overrides the selected version.</td></tr><tr><td><code>mariadb_repo_gpg_key</code></td><td><code>&#x3C;https://rpm.mariadb.org/RPM-GPG-KEY-MariaDB</code>></td><td>MariaDB repository signing key URL.</td></tr><tr><td><code>mariadb_repo_validate_certs</code></td><td><code>true</code></td><td>Controls TLS certificate validation for the MariaDB RPM repository entry. Set to <code>false</code> to write <code>sslverify=0</code>.</td></tr><tr><td><code>mariadb_repo_gpg_key_validate_certs</code></td><td><code>true</code></td><td>Controls TLS certificate validation when importing the MariaDB RPM key over HTTPS. Set to <code>false</code> for self-signed certificates.</td></tr><tr><td><code>mariadb_repo_url</code></td><td>generated from the target OS</td><td>MariaDB repository URL. SLES 15 SP3/SP4/SP5 map to <code>sles/15.0</code>; SLES 15 SP6 maps to <code>sles/15.6</code>. An explicit deployment setting overrides the generated URL.</td></tr><tr><td><code>mariadb_distro_release</code></td><td>detected from the target OS</td><td>APT distribution: <code>jammy</code> for Ubuntu 22.04, <code>noble</code> for Ubuntu 24.04, and <code>bookworm</code> for Debian 12.5. An explicit deployment setting overrides the detected value.</td></tr><tr><td><code>vprotect_repo_validate_certs</code></td><td><code>true</code></td><td>Controls TLS certificate validation for the Storware RPM repository entry. Set to <code>false</code> to write <code>sslverify=0</code>.</td></tr><tr><td><code>ssl_key</code></td><td><code>/opt/vprotect/vprotect.key</code></td><td>Server SSL private key path.</td></tr><tr><td><code>ssl_crt</code></td><td><code>/opt/vprotect/vprotect.crt</code></td><td>Server SSL certificate path.</td></tr><tr><td><code>ssl_p12</code></td><td><code>/opt/vprotect/vprotect.p12</code></td><td>Server PKCS#12 bundle path.</td></tr><tr><td><code>ssl_keystore</code></td><td><code>/opt/vprotect/keystore.jks</code></td><td>Server Java keystore path.</td></tr></tbody></table>

## Next Steps

After completing the installation, proceed to [**First Steps After Installation** ](/deployment/first-steps-after-installation.md)to connect Nodes to the Server and complete the initial configuration of Storware Backup & Recovery.
