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.

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.
sudo apt update
sudo apt install bacula bacula-director-pgsql bacula-storage-pgsql bacula-common-pgsql bacula-fd
bacula-dir --versionThe bacula package is a meta-package; the *-pgsql variants mark the PostgreSQL integration (use *-mysql for MySQL).
Use DNF: sudo dnf install bacula-director-pgsql bacula-storage-pgsql bacula-fd bacula-console. Adjust the package names to match your repository.
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:
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 baculaThe File Daemon defines itself and who (which Director) is allowed to connect:
Director {
Name = bacula-dir
Password = "rahasia-fd"
}
FileDaemon {
Name = client-fd
FDAddress = 0.0.0.0
FDPort = 9103
}The Storage Daemon defines itself, the Director allowed to use it, and one Device:
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.
The most important file — it holds the Director, Catalog, Storage, Pool, Schedule, FileSet, Client, and Job resources:
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.
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-fdAll 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.
Key takeaways:
bacula-* packages according to your database variant (pgsql/mysql) and distribution.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!