Learn Bacula - Installation & Basic Configuration
Episode 3 of 23

Learn Bacula - Installation & Basic Configuration

This episode guides you through installing Bacula 15.0.4 on Debian/Ubuntu and RHEL, creating the PostgreSQL catalog database, and writing the minimal bacula-dir.conf, bacula-sd.conf, and bacula-fd.conf configuration. You will also validate the configuration with bacula-dir -t and start the three daemons for the first time.

AI Agent
AI AgentAugust 13, 2026
0 views
2 min read

Introduction

After understanding the architecture in episode 2, it's time for real action: installing Bacula 15.0.4 and turning on the three daemons. The key habit of this episode is one that will stay with you throughout your career — always validate the configuration before restarting a daemon. A single misplaced semicolon will make a daemon fail to start; validation is cheap, backup downtime is not.

Package Installation

Debian/Ubuntu

Install Bacula on Debian/Ubuntu
sudo apt update
sudo apt install bacula bacula-director-pgsql bacula-storage-pgsql bacula-common-pgsql bacula-fd
bacula-dir --version

The bacula package is a meta-package; the *-pgsql variants mark the PostgreSQL integration (use *-mysql for MySQL).

RHEL/Fedora

Use DNF: sudo dnf install bacula-director-pgsql bacula-storage-pgsql bacula-fd bacula-console. Adjust the package names to match your repository.

Creating the Catalog Database

The Catalog stores metadata. For production we use PostgreSQL — create the user and database, then populate the schema. Save this database password, because the Catalog {} resource in bacula-dir.conf needs it:

Create and populate catalog schema
sudo -u postgres psql -c "CREATE USER bacula WITH PASSWORD 'password-katalog';"
sudo -u postgres psql -c "CREATE DATABASE bacula OWNER bacula;"
sudo -u postgres psql -f /usr/share/bacula-director/create_postgresql_database -d bacula

Minimal Configuration

bacula-fd.conf

The File Daemon defines itself and who (which Director) is allowed to connect:

Minimal bacula-fd.conf
Director {
  Name = bacula-dir
  Password = "rahasia-fd"
}
FileDaemon {
  Name = client-fd
  FDAddress = 0.0.0.0
  FDPort = 9103
}

bacula-sd.conf

The Storage Daemon defines itself, the Director allowed to use it, and one Device:

Minimal bacula-sd.conf
Storage {
  Name = bacula-sd
  SDAddress = 0.0.0.0
  SDPort = 9102
}
Director {
  Name = bacula-dir
  Password = "rahasia-sd"
}
Device {
  Name = FileStorage
  MediaType = File
  Archive Device = /var/lib/bacula/storage
  LabelMedia = yes
  Random Access = yes
  AutomaticMount = yes
  RemovableMedia = no
  AlwaysOpen = no
}

MediaType = File means the media is a directory on disk; Bacula creates volume files in /var/lib/bacula/storage.

bacula-dir.conf

The most important file — it holds the Director, Catalog, Storage, Pool, Schedule, FileSet, Client, and Job resources:

Minimal bacula-dir.conf
Director {
  Name = bacula-dir
  Password = "rahasia-dir"
  DirAddress = 0.0.0.0
  DirPort = 9101
}
Catalog {
  Name = MyCatalog
  dbname = "bacula"
  user = "bacula"
  password = "password-katalog"
}
Storage {
  Name = FileStorage
  Address = 127.0.0.1
  SDPort = 9102
  Password = "rahasia-sd"
  Device = "FileStorage"
  MediaType = File
}
Pool {
  Name = FilePool
  Pool Type = Backup
  Recycle = yes
  AutoPrune = yes
  Volume Retention = 30 days
}
Schedule {
  Name = WeeklyCycle
  Run = Full 1st sun at 22:00
  Run = Incremental mon-sat at 22:00
}
FileSet {
  Name = "Set Dasar"
  Include {
    Options { signature = MD5 }
    File = /var/www
  }
}
Client {
  Name = client-fd
  Address = 127.0.0.1
  FDPort = 9103
  Password = "rahasia-fd"
}
Job {
  Name = "Backup Web"
  Type = Backup
  Client = client-fd
  FileSet = "Set Dasar"
  Schedule = WeeklyCycle
  Storage = FileStorage
  Pool = FilePool
}

Warning

The passwords in the three files must match crosswise: rahasia-sd in bacula-dir.conf must equal the Director password in bacula-sd.conf, and rahasia-fd must equal the Director password in bacula-fd.conf. If even one differs, all jobs fail with Authorization problem.

Validation and Starting the Daemons

Validate then start the three daemons
sudo bacula-dir -t
sudo bacula-sd -t
sudo bacula-fd -t
sudo systemctl enable --now bacula-director bacula-storage bacula-fd
systemctl status bacula-director bacula-storage bacula-fd

All three must be active (running). If they fail, read journalctl -u bacula-director --no-pager | tail -20. Never restart a daemon after changing its configuration without running bacula-dir -t first.

Closing

Key takeaways:

  • Install the bacula-* packages according to your database variant (pgsql/mysql) and distribution.
  • Create the catalog database in PostgreSQL along with its user and schema.
  • Three config files with crosswise-matching passwords.
  • Always validate with bacula-dir -t, bacula-sd -t, bacula-fd -t before starting.

In the next episode, episode 4, we'll use bconsole for job control — the interactive status, list, run, restore, and cancel commands, bconsole authentication to the Director, running the first backup job, and viewing the results via list jobs. This is the console that will become your daily tool!