FreeBSD.software
Home/Guides/Bareos on FreeBSD: Open Source Backup Review
review·2026-04-09·11 min read

Bareos on FreeBSD: Open Source Backup Review

In-depth review of Bareos on FreeBSD: Bacula fork differences, WebUI management, modern backup features, installation, and comparison with Bacula, Borg, and Restic.

Bareos on FreeBSD: Open Source Backup Review

Bareos (Backup Archiving Recovery Open Sourced) is an open-source network backup solution forked from Bacula in 2010. The fork was motivated by concerns about the direction of Bacula's development under Bacula Systems' commercial influence, with community developers wanting a fully open development model. Since the fork, Bareos has diverged significantly -- adding a web-based management interface, modernized TLS handling, improved cloud storage support, and a cleaner codebase while maintaining backward compatibility with much of Bacula's configuration format. On FreeBSD, Bareos is available through ports and packages, uses the same three-daemon architecture as Bacula, and integrates with PostgreSQL for its catalog database. This review covers what makes Bareos different from Bacula, installation on FreeBSD, the WebUI, modern features, and how it compares with Bacula, Borg, and Restic.

What Changed Since the Fork

Bareos and Bacula share a common ancestor, but after 15+ years of independent development, the differences are substantial:

  • Web UI -- Bareos ships a built-in web management interface. Bacula's open-source version has only the text-based bconsole (a web GUI is a commercial add-on).
  • TLS everywhere -- Bareos modernized its TLS implementation with TLS-PSK (Pre-Shared Key) for daemon-to-daemon communication. Configuration is simpler than Bacula's certificate-based TLS.
  • Cloud storage -- Bareos has native support for S3-compatible storage backends (AWS S3, MinIO, Wasabi) as a storage device type. Bacula's cloud support is a commercial feature.
  • Passive clients -- Bareos supports passive File Daemons that initiate connections to the Director, useful when clients are behind NAT or firewalls.
  • Plugin improvements -- modernized plugin API with better Python integration for custom backup workflows.
  • Code modernization -- C++17, improved memory management, reduced technical debt.
  • Fully open development -- all features are available in the open-source version. No commercial feature gating.

Installation on FreeBSD

Package Installation

sh
pkg install bareos-server bareos-client bareos-webui

This installs the Director, Storage Daemon, File Daemon, Console, and Web UI.

Ports Installation

sh
cd /usr/ports/sysutils/bareos-server make install clean cd /usr/ports/sysutils/bareos-client make install clean cd /usr/ports/sysutils/bareos-webui make install clean

PostgreSQL Setup

Install and configure PostgreSQL:

sh
pkg install postgresql16-server sysrc postgresql_enable="YES" service postgresql initdb service postgresql start

Create the Bareos database:

sh
su - postgres /usr/local/lib/bareos/scripts/create_bareos_database postgresql /usr/local/lib/bareos/scripts/make_bareos_tables postgresql /usr/local/lib/bareos/scripts/grant_bareos_privileges postgresql exit

Enable Services

sh
sysrc bareos_dir_enable="YES" sysrc bareos_sd_enable="YES" sysrc bareos_fd_enable="YES"

Start Services

sh
service bareos-dir start service bareos-sd start service bareos-fd start

Verify all services are running:

sh
service bareos-dir status service bareos-sd status service bareos-fd status

Configuration

Bareos uses a modular configuration directory structure instead of monolithic files. Configuration lives under /usr/local/etc/bareos/:

sh
ls /usr/local/etc/bareos/

Typical structure:

sh
bareos-dir.d/ catalog/ client/ console/ director/ fileset/ job/ jobdefs/ messages/ pool/ profile/ schedule/ storage/ bareos-sd.d/ device/ director/ messages/ storage/ bareos-fd.d/ client/ director/ messages/

Each resource type has its own directory with one configuration file per resource. This modular approach is cleaner than Bacula's single monolithic file and makes it easier to manage with configuration management tools like Ansible.

Director Configuration

Edit /usr/local/etc/bareos/bareos-dir.d/director/bareos-dir.conf:

sh
Director { Name = bareos-dir QueryFile = "/usr/local/lib/bareos/scripts/query.sql" Maximum Concurrent Jobs = 10 Password = "director-password" Messages = Daemon Auditing = yes }

Client Configuration

Create /usr/local/etc/bareos/bareos-dir.d/client/webserver-fd.conf:

sh
Client { Name = webserver-fd Address = 192.168.1.10 Password = "client-password" File Retention = 30 days Job Retention = 180 days Auto Prune = yes }

FileSet Configuration

Create /usr/local/etc/bareos/bareos-dir.d/fileset/FreeBSD-Server.conf:

sh
FileSet { Name = "FreeBSD-Server" Include { Options { Signature = SHA1 Compression = LZ4 ACL Support = Yes XAttr Support = Yes } File = "/etc" File = "/usr/local/etc" File = "/var/db" File = "/home" File = "/root" } Exclude { File = "/tmp" File = "/var/tmp" File = "/proc" File = "/dev" } }

Storage Configuration

Create /usr/local/etc/bareos/bareos-dir.d/storage/File-Storage.conf:

sh
Storage { Name = File-Storage Address = 192.168.1.1 Password = "storage-password" Device = FileStorage Media Type = File Maximum Concurrent Jobs = 5 }

Configure the Storage Daemon device at /usr/local/etc/bareos/bareos-sd.d/device/FileStorage.conf:

sh
Device { Name = FileStorage Media Type = File Archive Device = /backup/bareos LabelMedia = yes Random Access = yes AutomaticMount = yes RemovableMedia = no AlwaysOpen = no }

Create the backup directory:

sh
mkdir -p /backup/bareos chown bareos:bareos /backup/bareos

Job Configuration

Create /usr/local/etc/bareos/bareos-dir.d/job/BackupWebserver.conf:

sh
Job { Name = "BackupWebserver" Type = Backup Level = Incremental Client = webserver-fd FileSet = "FreeBSD-Server" Schedule = "WeeklyCycle" Storage = File-Storage Pool = Incremental Full Backup Pool = Full Messages = Standard Priority = 10 Write Bootstrap = "/var/db/bareos/%c.bsr" }

Schedule Configuration

Create /usr/local/etc/bareos/bareos-dir.d/schedule/WeeklyCycle.conf:

sh
Schedule { Name = "WeeklyCycle" Run = Full 1st Sun at 23:05 Run = Differential 2nd-5th Sun at 23:05 Run = Incremental Mon-Sat at 23:05 }

Pool Configuration

Create pool files under /usr/local/etc/bareos/bareos-dir.d/pool/:

sh
# Full.conf Pool { Name = Full Pool Type = Backup Recycle = yes AutoPrune = yes Volume Retention = 365 days Maximum Volume Bytes = 50G Maximum Volumes = 100 Label Format = "Full-" }
sh
# Incremental.conf Pool { Name = Incremental Pool Type = Backup Recycle = yes AutoPrune = yes Volume Retention = 30 days Maximum Volume Bytes = 10G Maximum Volumes = 200 Label Format = "Inc-" }

WebUI

The Bareos WebUI is a PHP application that provides browser-based management of Bareos. It is one of the primary reasons to choose Bareos over Bacula.

WebUI Setup

Install NGINX and PHP-FPM if not already present:

sh
pkg install nginx php83 php83-pdo_pgsql php83-json php83-curl php83-intl php83-session sysrc nginx_enable="YES" sysrc php_fpm_enable="YES"

Create an NGINX configuration for the WebUI:

sh
server { listen 9100 ssl; server_name bareos.example.com; ssl_certificate /usr/local/etc/ssl/bareos.crt; ssl_certificate_key /usr/local/etc/ssl/bareos.key; root /usr/local/www/bareos-webui/public; index index.php; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass unix:/var/run/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }

WebUI Console Configuration

Create a console profile for the WebUI at /usr/local/etc/bareos/bareos-dir.d/console/admin.conf:

sh
Console { Name = admin Password = "webui-admin-password" Profile = webui-admin TLS Enable = no }

Create the profile at /usr/local/etc/bareos/bareos-dir.d/profile/webui-admin.conf:

sh
Profile { Name = webui-admin CommandACL = !.bvfs_clear_cache, !.exit, !.sql, !configure, !create, !delete, !purge, !prune, !sqlquery, !umount, !unmount, *all* Job ACL = *all* Schedule ACL = *all* Catalog ACL = *all* Pool ACL = *all* Storage ACL = *all* Client ACL = *all* FileSet ACL = *all* Where ACL = *all* }

Reload the Director:

sh
service bareos-dir reload

Access the WebUI at https://bareos.example.com:9100/. Log in with the console name and password.

What the WebUI Provides

  • Dashboard -- overview of recent jobs, client status, and storage usage.
  • Job management -- run, cancel, and monitor backup and restore jobs.
  • Client management -- view client status, enabled/disabled state, and last backup time.
  • Restore -- browse backup catalogs and select files for restore through a file browser interface.
  • Volume management -- view, purge, and manage storage volumes.
  • Timeline view -- visual timeline of backup jobs showing duration and status.

Cloud Storage (S3)

Bareos supports S3-compatible storage natively, useful for off-site backups to cloud providers.

Configure an S3 storage device:

sh
# In bareos-sd.d/device/S3-Device.conf Device { Name = S3-Device Media Type = S3 Archive Device = S3 Cloud Device Options = "profile=/usr/local/etc/bareos/.aws/credentials,bucket=bareos-backup,region=us-east-1" Device Type = droplet LabelMedia = yes Random Access = yes AutomaticMount = yes RemovableMedia = no AlwaysOpen = no }

The S3 storage backend supports AWS S3, MinIO, Wasabi, and any S3-compatible object storage. This enables a hybrid backup strategy: local disk for fast restores, S3 for disaster recovery.

Passive Clients

Bareos supports passive File Daemons -- clients that initiate outbound connections to the Director rather than accepting inbound connections. This is useful for clients behind NAT or restrictive firewalls.

Configure a passive client:

sh
# In bareos-dir.d/client/nat-client-fd.conf Client { Name = nat-client-fd Address = 0.0.0.0 Passive = yes Password = "client-password" }

The client's File Daemon connects outbound to the Director and Storage Daemon, eliminating the need for inbound firewall rules on the client side.

Bareos vs Bacula

| Feature | Bareos | Bacula (Community) |

|---------|--------|--------------------|

| Web UI | Included | Commercial add-on |

| S3 Storage | Included | Commercial add-on |

| TLS-PSK | Yes | No |

| Passive Clients | Yes | No |

| Configuration | Modular directory | Monolithic files |

| Development Model | Fully open | Community + commercial split |

| Tape Support | Yes | Yes |

| Migration from Bacula | Supported | N/A |

Choose Bareos when: you want a fully open-source backup solution with a web interface, cloud storage support, and modern features. Starting fresh with no existing Bacula infrastructure favors Bareos.

Choose Bacula when: you have existing Bacula infrastructure and expertise, or you need the specific commercial support offerings from Bacula Systems.

Bareos vs Borg and Restic

Borg and Restic are deduplicating backup tools with a fundamentally different architecture. They are single-node tools -- you run them on the machine being backed up, and they push data to a repository.

Borg Backup

Borg provides excellent deduplication, compression, and encryption. It is ideal for backing up a single server to a remote repository. Borg does not have a scheduler, a web UI, or a centralized management system. You run it from cron and manage it with scripts.

sh
pkg install py311-borgbackup

Restic

Restic is similar to Borg but written in Go with native cloud storage support (S3, B2, Azure, GCS). It is simpler than Borg but slightly less space-efficient in deduplication.

sh
pkg install restic

When to Use Each

| Scenario | Best Tool |

|----------|-----------|

| Single server, simple backups | Borg or Restic |

| 5+ servers, centralized management | Bareos |

| Cloud-first backup strategy | Restic |

| Tape library support | Bareos |

| Web-based management needed | Bareos |

| Maximum deduplication ratio | Borg |

| Mixed OS environment (FreeBSD + Windows + Linux) | Bareos |

Borg and Restic are not competitors to Bareos -- they operate at a different level of abstraction. Bareos is backup infrastructure for managing backups across an entire network. Borg and Restic are backup tools for individual machines.

Monitoring and Maintenance

Check Job Status

sh
bconsole *status dir *list jobs last=20

Database Maintenance

The Bareos catalog grows over time. Schedule regular maintenance:

sh
# Add to crontab 0 4 * * 0 /usr/local/lib/bareos/scripts/bareos-catalog-backup

Vacuum the PostgreSQL database periodically:

sh
su - postgres -c "vacuumdb -z -d bareos"

Log Monitoring

sh
tail -f /var/log/bareos/bareos.log

Verdict

Bareos is the right choice for FreeBSD administrators who need a centralized, network-wide backup system and prefer fully open-source software. The WebUI alone justifies choosing Bareos over Bacula for new deployments -- managing backups through a browser is more practical than a text console for day-to-day operations. The S3 storage support enables hybrid local/cloud backup strategies without third-party tools.

The three-daemon architecture carries the same complexity as Bacula -- initial setup requires patience and careful configuration. But the modular configuration directory, improved TLS handling, and active community development make the experience smoother than Bacula's. For FreeBSD environments with more than a handful of servers that need coordinated, policy-driven backups with centralized monitoring, Bareos delivers the capabilities without the commercial license restrictions.


Frequently Asked Questions

Can I migrate from Bacula to Bareos on FreeBSD?

Yes. Bareos provides migration documentation and tools for converting Bacula configurations and catalogs. The configuration syntax is similar but not identical -- expect to adjust some directives. The catalog database schema has diverged, so a catalog migration script is needed. Test thoroughly in a non-production environment before migrating.

Does Bareos support FreeBSD jails?

Yes. Run the Director and Storage Daemon in a management jail and File Daemons in application jails. Each component is independent and communicates over the network. Ensure proper network connectivity between jails.

How does Bareos handle encryption?

Bareos supports data encryption with per-client certificates. Data is encrypted on the File Daemon before transmission, so neither the Storage Daemon nor the Director can read the backup data. This is important for compliance scenarios where backup administrators should not have access to backup content.

What is the minimum FreeBSD hardware for a Bareos server?

For a small deployment (under 10 clients): 2 CPU cores, 4 GB RAM, and sufficient disk space for backup volumes. The PostgreSQL catalog adds moderate memory requirements. For larger deployments (50+ clients), 8+ GB RAM and fast storage for the catalog database are recommended.

Can Bareos back up to tape on FreeBSD?

Yes. Bareos supports tape devices through FreeBSD's SCSI tape driver (/dev/sa0). Configure a tape Device resource in the Storage Daemon configuration. Tape library support (autochangers) is available for multi-slot tape systems.

How do I test that restores work?

Schedule regular restore tests. Create a Verify job that runs a restore to an alternate location and compares the restored files with the originals. Bareos supports Verify jobs with multiple levels: VolumeToCatalog checks volume data against catalog entries, and DiskToCatalog compares live filesystem data with the catalog.

Get more FreeBSD guides

Weekly tutorials, security advisories, and package updates. No spam.