Bacula Enterprise Installation on MacOS

CommunityEnterprise

This procedure provides step-by-step instructions to install and configure Bacula File Daemon (bacula-fd) on a macOS system.

  1. Download and install the Bacula macOS package. You can download the .dmg installer for macOS from the Bacula Systems portal or use a custom-built version if available internally.

After downloading:

Mount the .dmg file.

Drag and drop the Bacula.app into /Applications.

  1. Locate the bacula-fd binary and configuration. The binary and default configuration paths are located inside the app bundle:

    Binary path: /Applications/Bacula.app/Contents/Resources/BaculaBin/sbin/bacula-fd

Default configuration path:

~/.bacula/bacula-fd.conf

Note

You may need to create this directory and configuration manually.

  1. Configure bacula-fd. Configuration can be done via the Bacula icon in the macOS menu bar or by manually editing the configuration file.

Important

If configuration is done via the Bacula icon in the menu bar, the bacula-fd.conf file will be created in a hidden .bacula directory inside the home folder of the user who performed the change, e.g. /Users/username/.bacula/bacula-fd.conf.

Alternatively, create or edit the file manually:

mkdir -p ~/.bacula
nano ~/.bacula/bacula-fd.conf

Sample minimal configuration:

Director {
  Name = my-dir
  Password = "mysecret"
}

FileDaemon {
  Name = my-client-fd
  FDport = 9102
  WorkingDirectory = /Users/your_user/bacula/working
  PidDirectory = /Users/your_user/bacula/working
  Maximum Concurrent Jobs = 2
}

Messages {
  Name = Standard
  director = my-dir = all, !skipped, !restored
}

Make sure the directories mentioned exist:

mkdir -p ~/bacula/working
  1. Run bacula-fd manually.

You can start bacula-fd using the full path:

/Applications/Bacula.app/Contents/Resources/BaculaBin/sbin/bacula-fd -c ~/.bacula/bacula-fd.conf

This will start the daemon in the foreground. You can test the connection from the Director once it’s running.

To run it in the background, you can add & at the end:

/Applications/Bacula.app/Contents/Resources/BaculaBin/sbin/bacula-fd -c ~/.bacula/bacula-fd.conf &
  1. Optional: Set up auto-start on login. If needed, create a launchd job to run bacula-fd automatically on user login.

Director {
  Name = dc-rhel9-dir-bweb-tst-dir
  Password = "cqrmarzrhlq9odeeaglws"
}

#
# Restricted Director, used by tray-monitor to get the
#   status of the file daemon
#
Director {
  Name = rhel9ClientMultiPlugin-fd-mon
  Password = "t8F2x8swmiZPxxbcodZYLSh5W2Ph0W1FH"
  Monitor = yes
}

#
# "Global" File daemon configuration specifications
#
FileDaemon {                          # this is me
  Name = hostname-fd
  FDAddress = 0.0.0.0
  FDport = 9105                  # where we listen for the director
  WorkingDirectory =  /Users/username/.bacula
  Pid Directory =  /Users/username/.bacula
  Maximum Concurrent Jobs = 20
  Plugin Directory = /Applications/Bacula.app/Contents/Resources/BaculaBin/lib
}

# Send all messages except skipped files back to Director
Messages {
  Name = Standard
  director = dc-rhel9-dir-bweb-tst-dir = all, !skipped, !restored, !verified, !saved
}

Fileset:

*show fileset=a-MacOS-FS
Fileset: name=a-MacOS-FS IgnoreFilesetChanges=0
      I /Users/username/Desktop/Screenshot 2025-08-04 at 13.42.15.png
      N
*

Steps to Connect to Bacula FD through VPN

  1. Identify the VPN IP address on the FD Host.

On the File Daemon (FD) machine, run the following command to locate the active VPN IP address:

ifconfig | grep -B3 "inet 10.255"

Example output:

utun6: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
inet 10.192.4.5 --> 10.192.4.5 netmask 0xffffff00
utun7: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
inet 10.255.0.38 --> 10.255.0.37 netmask 0xfffffffc

In this case, the VPN-assigned IP for the FD is 10.255.0.38.

  1. Create an SSH Tunnel from the Director to the FD Host on the Director (DIR) host, establish an SSH tunnel to forward traffic to port 9105:

ssh -L 9105:localhost:9105 username@10.255.0.38

You will be prompted for the remote user password:

username@10.255.0.38's password:

Example login output:

Last login: Mon Aug 4 13:38:13 2025 from 10.0.99.84
/Users/username/.zshrc:source:7: no such file or directory: /Users/username/.oh-my-zsh/oh-my-zsh.sh

Once the tunnel is established, the Director can communicate with the FD through localhost:9105.

Testing access and communication:

*estimate listing
The defined Job resources are:
     1: A-AutoPrune-Pool-DiskBackup365d
     2: BaculaDirectorConfigs
     3: Copy
     4: J-MacMini-MacOS
     5: J-PGSQL
     6: J_amazon-rds_ins-db-pgl
     7: J_gw_jorge_at_baculasystmes.com
     8: J_gw_license_at_baculasystmes.com
     9: J_gw_nbc_at_baculasystmes.com
    10: J_rhel9-mysql8.4-fd_mysql_demo2
    11: LinuxHome
    12: RDS-PGSQL-J
    13: Restore
    14: ServerMysql-J
    15: VSphere-DanielVM-J
    16: dc-rhel9-dir-bweb-tst-dev-null-job
    17: gw-J
    18: gw-bookworm-J
Select Job resource (1-18): 4
Using Catalog "BaculaCatalog"
Connecting to Client macmini-fd at 127.0.0.1:9105
-rw-r--r--   1 danielca staff                 48823 2025-08-04 13:42:21  /Users/username/Desktop/Screenshot 2025-08-04 at 13.42.15.png
2000 OK estimate files=1 bytes=48,823

Backup Job:

2025-08-04 22:22:19 dc-rhel9-dir-bweb-tst-dir JobId 1082: No prior or suitable Full backup found in catalog. Doing FULL backup.
2025-08-04 22:22:21 dc-rhel9-dir-bweb-tst-dir JobId 1082: Start Backup JobId 1082, Job=J-MacMini-MacOS.2025-08-04_22.22.19_06
2025-08-04 22:22:21 dc-rhel9-dir-bweb-tst-dir JobId 1082: Connected to Storage "DiskAutochanger" at dc-rhel9-dir-bweb-tst:9103 with TLS
2025-08-04 22:22:21 dc-rhel9-dir-bweb-tst-dir JobId 1082: Using Device "DiskAutochanger_Dev0" to write.
2025-08-04 22:22:24 dc-rhel9-dir-bweb-tst-dir JobId 1082: Connected to Client "macmini-fd" at 127.0.0.1:9105 with TLS
2025-08-04 22:22:27 hostname-fd JobId 1082: Connected to Storage at dc-rhel9-dir-bweb-tst:9103 with TLS
2025-08-04 22:22:28 dc-rhel9-dir-bweb-tst-sd JobId 1082: Recycled volume "Vol-0082" on File device "DiskAutochanger_Dev0" (/opt/bacula/archive), all previous data lost.
2025-08-04 22:22:30 dc-rhel9-dir-bweb-tst-sd JobId 1082: Elapsed time=00:00:02, Transfer rate=24.48 K Bytes/second
2025-08-04 22:22:30 dc-rhel9-dir-bweb-tst-sd JobId 1082: Sending spooled attrs to the Director. Despooling 195 bytes ...
2025-08-04 22:22:31 dc-rhel9-dir-bweb-tst-dir JobId 1082: Bacula Enterprise dc-rhel9-dir-bweb-tst-dir 18.2.0 (22May25):
  Build OS:               x86_64-redhat-linux-gnu-bacula-enterprise redhat (Blue
  JobId:                  1082
  Job:                    J-MacMini-MacOS.2025-08-04_22.22.19_06
  Backup Level:           Full (upgraded from Incremental)
  Client:                 "macmini-fd" 14.0.5 (10Aug22) x86_64-apple-darwin21.5.0,osx,21.5.0
  FileSet:                "a-MacOS-FS" 2025-08-04 21:58:12
  Pool:                   "DiskBackup365d" (From Job resource)
  Catalog:                "BaculaCatalog" (From Client resource)
  Storage:                "DiskAutochanger" (From Job resource)
  Scheduled time:         04-Aug-2025 22:22:16
  Start time:             04-Aug-2025 22:22:27
  End time:               04-Aug-2025 22:22:31
  Elapsed time:           4 secs
  Priority:               10
  FD Files Written:       1
  SD Files Written:       1
  FD Bytes Written:       48,823 (48.82 KB)
  SD Bytes Written:       48,961 (48.96 KB)
  Rate:                   12.2 KB/s
  Software Compression:   None
  Comm Line Compression:  None
  Snapshot/VSS:           no
  Encryption:             no
  Accurate:               no
  Volume name(s):         Vol-0082
  Volume Session Id:      35
  Volume Session Time:    1750966840
  Last Volume Bytes:      49,704 (49.70 KB)
  Non-fatal FD errors:    0
  SD Errors:              0
  FD termination status:  OK
  SD termination status:  OK
  Termination:            Backup OK

Restore Job:

Enter a period to cancel a command.
*r
Automatically selected Catalog: BaculaCatalog
Using Catalog "BaculaCatalog"

First you select one or more JobIds that contain files
to be restored. You will be presented several methods
of specifying the JobIds. Then you will be allowed to
select which files from those JobIds are to be restored.

To select the JobIds, you have the following choices:
     1: List last 20 Jobs run
     2: List Jobs where a given File is saved
     3: Enter list of comma separated JobIds to select
     4: Enter SQL list command
     5: Select the most recent backup for a client
     6: Select backup for a client before a specified time
     7: Enter a list of files to restore
     8: Enter a list of files to restore before a specified time
     9: Find the JobIds of the most recent backup for a client
    10: Find the JobIds for a backup for a client before a specified time
    11: Enter a list of directories to restore for found JobIds
    12: Select full restore to a specified Job date
    13: Select object to restore
    14: Cancel
Select item:  (1-14): 3
Enter JobId(s), comma separated, to restore: 1082
You have selected the following JobId: 1082

Building directory tree for JobId(s) 1082 ...
1 files inserted into the tree.

You are now entering file selection mode where you add (mark) and
remove (unmark) files to be restored. No files are initially added, unless
you used the "all" keyword on the command line.
Enter "done" to leave this mode.

cwd is: /
$ add *
1 file marked.
$ done
Bootstrap records written to /opt/bacula/working/dc-rhel9-dir-bweb-tst-dir.restore.2.bsr

The Job will require the following (*=>InChanger):
   Volume(s)                 Storage(s)                SD Device(s)
===========================================================================

    Vol-0082                  DiskAutochanger           DiskAutochanger

Volumes marked with "*" are in the Autochanger.


1 file selected to be restored.

Defined Clients:
     1: GoogleWorkspace-fd
     2: U24PsqlPlugin-fd
     3: bookworm-GW-fd
     4: dc-bookworm-fd-fd
     5: dc-psql-deb12-fd
     6: dc-rhel9-dir-bweb-tst-fd
     7: dc-rhel9-fd-tst-fd
     8: macmini-fd
     9: rescue-fd
    10: rhel9-mysql8.4-fd
    11: rhel9ClientMultiPlugin-fd
Select the Client (1-11): 8
Run Restore job
JobName:         Restore
Bootstrap:       /opt/bacula/working/dc-rhel9-dir-bweb-tst-dir.restore.2.bsr
Where:           /opt/bacula/archive/bacula-restores
Replace:         Always
Fileset:         BaculaConfigs
Backup Client:   macmini-fd
Restore Client:  macmini-fd
Storage:         DiskAutochanger
When:            2025-08-08 15:43:08
Catalog:         BaculaCatalog
Priority:        10
Plugin Options:  *None*
OK to run? (Yes/mod/no): mod
Parameters to modify:
     1: Level
     2: Storage
     3: Job
     4: Fileset
     5: Restore Client
     6: When
     7: Priority
     8: Bootstrap
     9: Where
    10: File Relocation
    11: Replace
    12: JobId
    13: Plugin Options
Select parameter to modify (1-13): 9
Please enter the full path prefix for restore (/ for none): /
Run Restore job
JobName:         Restore
Bootstrap:       /opt/bacula/working/dc-rhel9-dir-bweb-tst-dir.restore.2.bsr
Where:
Replace:         Always
Fileset:         BaculaConfigs
Backup Client:   macmini-fd
Restore Client:  macmini-fd
Storage:         DiskAutochanger
When:            2025-08-08 15:43:08
Catalog:         BaculaCatalog
Priority:        10
Plugin Options:  *None*
OK to run? (Yes/mod/no): yes
Job queued. JobId=1087

Restore joblog:

*list joblog jobid=1087
+----------------------------------------------------------------------------------------------------+
| logtext                                                                                              |
+----------------------------------------------------------------------------------------------------+
| dc-rhel9-dir-bweb-tst-dir JobId 1087: Start Restore Job Restore.2025-08-08_15.43.36_15               |
| dc-rhel9-dir-bweb-tst-dir JobId 1087: Restoring files from JobId(s) 1082                             |
| dc-rhel9-dir-bweb-tst-dir JobId 1087: Connected to Storage "DiskAutochanger" at dc-rhel9-dir-bweb-tst:9103 with TLS |
| dc-rhel9-dir-bweb-tst-dir JobId 1087: Using Device "DiskAutochanger_Dev0" to read.                   |
| dc-rhel9-dir-bweb-tst-dir JobId 1087: Connected to Client "macmini-fd" at 127.0.0.1:9105 with TLS    |
| hostname-fd JobId 1087: Connected to Storage at dc-rhel9-dir-bweb-tst:9103 with TLS                    |
| dc-rhel9-dir-bweb-tst-sd JobId 1087: Ready to read from volume "Vol-0082" on File device "DiskAutochanger_Dev0" (/opt/bacula/archive). |
| dc-rhel9-dir-bweb-tst-sd JobId 1087: Forward spacing Volume "Vol-0082" to addr=277                   |
| dc-rhel9-dir-bweb-tst-sd JobId 1087: Elapsed time=00:00:01, Transfer rate=48.96 K Bytes/second       |
| dc-rhel9-dir-bweb-tst-dir JobId 1087: Bacula Enterprise dc-rhel9-dir-bweb-tst-dir 18.2.0 (22May25):
  Build OS:               x86_64-redhat-linux-gnu-bacula-enterprise redhat (Blue
  JobId:                  1087
  Job:                    Restore.2025-08-08_15.43.36_15
  Restore Client:         "macmini-fd" 14.0.5 (10Aug22) x86_64-apple-darwin21.5.0,osx,21.5.0
  Where:
  Replace:                Always
  Start time:             08-Aug-2025 15:43:38
  End time:               08-Aug-2025 15:43:48
  Elapsed time:           10 secs
  Files Expected:         1
  Files Restored:         1
  Bytes Restored:         48,823 (48.82 KB)
  Rate:                   4.9 KB/s
  FD Errors:              0
  FD termination status:  OK
  SD termination status:  OK
   Termination:            Restore OK |
+----------------------------------------------------------------------------------------------------+
+-------+---------+---------------------+------+-------+----------+----------+-----------+
| jobid | name    | starttime           | type | level | jobfiles | jobbytes | jobstatus |
+-------+---------+---------------------+------+-------+----------+----------+-----------+
| 1,087 | Restore | 2025-08-08 15:43:38 | R    | F     |        1 |   48,823 | T         |
+-------+---------+---------------------+------+-------+----------+----------+-----------+
*

Go back to: Bacula Enterprise Installation.