System requirements
===================

-  Linux/Unix

-  Python >= 3.6

-  Python modules:

   -  argcomplete (optional)
   -  psycopg2 >= 2.4.2
   -  python-dateutil
   -  setuptools

-  PostgreSQL >= 10 (next version will require PostgreSQL >= 11)

-  rsync >= 3.1.0 (optional)

..  IMPORTANT::
   Users of RedHat Enterprise Linux, CentOS and Scientific Linux are required to install the [Extra Packages Enterprise Linux (EPEL) repository][epel].

..  NOTE::
   Support for Python 2.6 and 3.5 are discontinued. Support for Python 2.7 is limited to Barman 3.4.X version and will receive only bugfixes. It will be discontinued in  the near future. Support for Python 3.6 will be discontinued in future releases. Support for PostgreSQL < 10 is discontinued since Barman 3.0.0. Support for PostgreSQL 10 will be discontinued after Barman 3.5.0.

Requirements for backup
-----------------------

The most critical requirement for a Barman server is the amount of disk
space available. You are recommended to plan the required disk space
based on the size of the cluster, number of WAL files generated per day,
frequency of backups, and retention policies.

Barman developers regularly test Barman with XFS and ext4. Like
 `PostgreSQL <https://www.postgresql.org/docs/current/creating-cluster.html#CREATING-CLUSTER-FILESYSTEM>`_  , Barman does nothing special for NFS. The following
points are required for safely using Barman with NFS:

-  The ``barman_lock_directory`` should be on a non-network filesystem.

-  Use version 4 of the NFS protocol.

-  The file system must be mounted using the hard and synchronous
   options (``hard,sync`` ).

Requirements for recovery
-------------------------

Barman allows you to recover a PostgreSQL instance either locally (where
Barman resides) or remotely (on a separate server).

Remote recovery is definitely the most common way to restore a
PostgreSQL server with Barman.

Either way, the same [requirements for PostgreSQL’s Log shipping and
Point-In-Time-Recovery apply][requirements_recovery]:

-  identical hardware architecture

-  identical major version of PostgreSQL

In general, it is **highly recommended** to create recovery environments
that are as similar as possible, if not identical, to the original
server, because they are easier to maintain. For example, we suggest
that you use the same operating system, the same PostgreSQL version, the
same disk layouts, and so on.

Additionally, dedicated recovery environments for each PostgreSQL
server, even on demand, allows you to nurture the disaster recovery
culture in your team. You can be prepared for when something unexpected
happens by practising recovery operations and becoming familiar with
them.

Based on our experience, designated recovery environments reduce the
impact of stress in real failure situations, and therefore increase the
effectiveness of recovery operations.

Finally, it is important that time is synchronised between the servers,
using NTP for example.
