| 
									
										
										
										
											2014-04-14 16:26:48 +02:00
										 |  |  | { config, lib, pkgs, ... }: | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | # TODO: test configuration when building nixexpr (use -t parameter) | 
					
						
							|  |  |  | # TODO: support sqlite3 (it's deprecate?) and mysql | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-14 16:26:48 +02:00
										 |  |  | with lib; | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | let | 
					
						
							|  |  |  |   libDir = "/var/lib/bacula"; | 
					
						
							| 
									
										
										
										
											2013-05-16 21:58:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |   fd_cfg = config.services.bacula-fd; | 
					
						
							|  |  |  |   fd_conf = pkgs.writeText "bacula-fd.conf" | 
					
						
							|  |  |  |     ''
 | 
					
						
							|  |  |  |       Client { | 
					
						
							|  |  |  |         Name = "${fd_cfg.name}"; | 
					
						
							|  |  |  |         FDPort = ${toString fd_cfg.port}; | 
					
						
							|  |  |  |         WorkingDirectory = "${libDir}"; | 
					
						
							| 
									
										
										
										
											2018-12-19 22:35:21 +01:00
										 |  |  |         Pid Directory = "/run"; | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |         ${fd_cfg.extraClientConfig} | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2020-08-07 14:43:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |       ${concatStringsSep "\n" (mapAttrsToList (name: value: ''
 | 
					
						
							|  |  |  |       Director { | 
					
						
							|  |  |  |         Name = "${name}"; | 
					
						
							|  |  |  |         Password = "${value.password}"; | 
					
						
							|  |  |  |         Monitor = "${value.monitor}"; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       '') fd_cfg.director)}
 | 
					
						
							| 
									
										
										
										
											2020-08-07 14:43:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |       Messages { | 
					
						
							|  |  |  |         Name = Standard; | 
					
						
							|  |  |  |         syslog = all, !skipped, !restored | 
					
						
							|  |  |  |         ${fd_cfg.extraMessagesConfig} | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     '';
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   sd_cfg = config.services.bacula-sd; | 
					
						
							| 
									
										
										
										
											2020-08-07 14:43:58 +01:00
										 |  |  |   sd_conf = pkgs.writeText "bacula-sd.conf" | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |     ''
 | 
					
						
							|  |  |  |       Storage { | 
					
						
							|  |  |  |         Name = "${sd_cfg.name}"; | 
					
						
							|  |  |  |         SDPort = ${toString sd_cfg.port}; | 
					
						
							|  |  |  |         WorkingDirectory = "${libDir}"; | 
					
						
							| 
									
										
										
										
											2018-12-19 22:35:21 +01:00
										 |  |  |         Pid Directory = "/run"; | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |         ${sd_cfg.extraStorageConfig} | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2019-09-08 16:37:00 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |       ${concatStringsSep "\n" (mapAttrsToList (name: value: ''
 | 
					
						
							|  |  |  |       Autochanger { | 
					
						
							|  |  |  |         Name = "${name}"; | 
					
						
							|  |  |  |         Device = ${concatStringsSep ", " (map (a: "\"${a}\"") value.devices)}; | 
					
						
							|  |  |  |         Changer Device =  "${value.changerDevice}"; | 
					
						
							|  |  |  |         Changer Command = "${value.changerCommand}"; | 
					
						
							|  |  |  |         ${value.extraAutochangerConfig} | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       '') sd_cfg.autochanger)}
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |       ${concatStringsSep "\n" (mapAttrsToList (name: value: ''
 | 
					
						
							|  |  |  |       Device { | 
					
						
							|  |  |  |         Name = "${name}"; | 
					
						
							|  |  |  |         Archive Device = "${value.archiveDevice}"; | 
					
						
							|  |  |  |         Media Type = "${value.mediaType}"; | 
					
						
							|  |  |  |         ${value.extraDeviceConfig} | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       '') sd_cfg.device)}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       ${concatStringsSep "\n" (mapAttrsToList (name: value: ''
 | 
					
						
							|  |  |  |       Director { | 
					
						
							|  |  |  |         Name = "${name}"; | 
					
						
							|  |  |  |         Password = "${value.password}"; | 
					
						
							|  |  |  |         Monitor = "${value.monitor}"; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       '') sd_cfg.director)}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Messages { | 
					
						
							|  |  |  |         Name = Standard; | 
					
						
							|  |  |  |         syslog = all, !skipped, !restored | 
					
						
							|  |  |  |         ${sd_cfg.extraMessagesConfig} | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     '';
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   dir_cfg = config.services.bacula-dir; | 
					
						
							| 
									
										
										
										
											2020-08-07 14:43:58 +01:00
										 |  |  |   dir_conf = pkgs.writeText "bacula-dir.conf" | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |     ''
 | 
					
						
							|  |  |  |     Director { | 
					
						
							|  |  |  |       Name = "${dir_cfg.name}"; | 
					
						
							|  |  |  |       Password = "${dir_cfg.password}"; | 
					
						
							|  |  |  |       DirPort = ${toString dir_cfg.port}; | 
					
						
							|  |  |  |       Working Directory = "${libDir}"; | 
					
						
							| 
									
										
										
										
											2018-12-19 22:35:21 +01:00
										 |  |  |       Pid Directory = "/run/"; | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |       QueryFile = "${pkgs.bacula}/etc/query.sql"; | 
					
						
							|  |  |  |       ${dir_cfg.extraDirectorConfig} | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Catalog { | 
					
						
							|  |  |  |       Name = "PostgreSQL"; | 
					
						
							|  |  |  |       dbname = "bacula"; | 
					
						
							|  |  |  |       user = "bacula"; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Messages { | 
					
						
							|  |  |  |       Name = Standard; | 
					
						
							|  |  |  |       syslog = all, !skipped, !restored | 
					
						
							|  |  |  |       ${dir_cfg.extraMessagesConfig} | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ${dir_cfg.extraConfig} | 
					
						
							|  |  |  |     '';
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-20 20:56:59 +00:00
										 |  |  |   directorOptions = {...}: | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |   { | 
					
						
							|  |  |  |     options = { | 
					
						
							|  |  |  |       password = mkOption { | 
					
						
							|  |  |  |         # TODO: required? | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							| 
									
										
										
										
											2019-09-08 16:37:00 +02:00
										 |  |  |           Specifies the password that must be supplied for the default Bacula | 
					
						
							|  |  |  |           Console to be authorized. The same password must appear in the | 
					
						
							|  |  |  |           Director resource of the Console configuration file. For added | 
					
						
							|  |  |  |           security, the password is never passed across the network but instead | 
					
						
							|  |  |  |           a challenge response hash code created with the password. This | 
					
						
							|  |  |  |           directive is required. If you have either /dev/random or bc on your | 
					
						
							|  |  |  |           machine, Bacula will generate a random password during the | 
					
						
							|  |  |  |           configuration process, otherwise it will be left blank and you must | 
					
						
							|  |  |  |           manually supply it. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           The password is plain text. It is not generated through any special | 
					
						
							|  |  |  |           process but as noted above, it is better to use random text for | 
					
						
							| 
									
										
										
										
											2020-08-07 14:43:58 +01:00
										 |  |  |           security reasons. | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2020-08-07 14:43:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |       monitor = mkOption { | 
					
						
							|  |  |  |         default = "no"; | 
					
						
							|  |  |  |         example = "yes"; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							| 
									
										
										
										
											2019-09-08 16:37:00 +02:00
										 |  |  |           If Monitor is set to <literal>no</literal>, this director will have | 
					
						
							|  |  |  |           full access to this Storage daemon. If Monitor is set to | 
					
						
							|  |  |  |           <literal>yes</literal>, this director will only be able to fetch the | 
					
						
							|  |  |  |           current status of this Storage daemon. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           Please note that if this director is being used by a Monitor, we | 
					
						
							|  |  |  |           highly recommend to set this directive to yes to avoid serious | 
					
						
							| 
									
										
										
										
											2020-08-07 14:43:58 +01:00
										 |  |  |           security problems. | 
					
						
							| 
									
										
										
										
											2019-09-08 16:37:00 +02:00
										 |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   autochangerOptions = {...}: | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     options = { | 
					
						
							|  |  |  |       changerDevice = mkOption { | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           The specified name-string must be the generic SCSI device name of the | 
					
						
							|  |  |  |           autochanger that corresponds to the normal read/write Archive Device | 
					
						
							|  |  |  |           specified in the Device resource. This generic SCSI device name | 
					
						
							|  |  |  |           should be specified if you have an autochanger or if you have a | 
					
						
							|  |  |  |           standard tape drive and want to use the Alert Command (see below). | 
					
						
							|  |  |  |           For example, on Linux systems, for an Archive Device name of | 
					
						
							|  |  |  |           <literal>/dev/nst0</literal>, you would specify | 
					
						
							|  |  |  |           <literal>/dev/sg0</literal> for the Changer Device name.  Depending | 
					
						
							|  |  |  |           on your exact configuration, and the number of autochangers or the | 
					
						
							|  |  |  |           type of autochanger, what you specify here can vary. This directive | 
					
						
							|  |  |  |           is optional. See the Using AutochangersAutochangersChapter chapter of | 
					
						
							|  |  |  |           this manual for more details of using this and the following | 
					
						
							| 
									
										
										
										
											2020-08-07 14:43:58 +01:00
										 |  |  |           autochanger directives. | 
					
						
							| 
									
										
										
										
											2019-09-08 16:37:00 +02:00
										 |  |  |           '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       changerCommand = mkOption { | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           The name-string specifies an external program to be called that will | 
					
						
							|  |  |  |           automatically change volumes as required by Bacula. Normally, this | 
					
						
							|  |  |  |           directive will be specified only in the AutoChanger resource, which | 
					
						
							|  |  |  |           is then used for all devices. However, you may also specify the | 
					
						
							|  |  |  |           different Changer Command in each Device resource. Most frequently, | 
					
						
							|  |  |  |           you will specify the Bacula supplied mtx-changer script as follows: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           <literal>"/path/mtx-changer %c %o %S %a %d"</literal> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           and you will install the mtx on your system (found in the depkgs | 
					
						
							|  |  |  |           release). An example of this command is in the default bacula-sd.conf | 
					
						
							|  |  |  |           file. For more details on the substitution characters that may be | 
					
						
							|  |  |  |           specified to configure your autochanger please see the | 
					
						
							|  |  |  |           AutochangersAutochangersChapter chapter of this manual. For FreeBSD | 
					
						
							|  |  |  |           users, you might want to see one of the several chio scripts in | 
					
						
							|  |  |  |           examples/autochangers. | 
					
						
							|  |  |  |           '';
 | 
					
						
							|  |  |  |         default = "/etc/bacula/mtx-changer %c %o %S %a %d"; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       devices = mkOption { | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       extraAutochangerConfig = mkOption { | 
					
						
							|  |  |  |         default = ""; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Extra configuration to be passed in Autochanger directive. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |         example = ''
 | 
					
						
							| 
									
										
										
										
											2020-08-07 14:43:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-08 16:37:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-20 20:56:59 +00:00
										 |  |  |   deviceOptions = {...}: | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |   { | 
					
						
							|  |  |  |     options = { | 
					
						
							|  |  |  |       archiveDevice = mkOption { | 
					
						
							|  |  |  |         # TODO: required? | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							| 
									
										
										
										
											2019-09-08 16:37:00 +02:00
										 |  |  |           The specified name-string gives the system file name of the storage | 
					
						
							|  |  |  |           device managed by this storage daemon. This will usually be the | 
					
						
							|  |  |  |           device file name of a removable storage device (tape drive), for | 
					
						
							|  |  |  |           example <literal>/dev/nst0</literal> or | 
					
						
							|  |  |  |           <literal>/dev/rmt/0mbn</literal>. For a DVD-writer, it will be for | 
					
						
							|  |  |  |           example <literal>/dev/hdc</literal>. It may also be a directory name | 
					
						
							|  |  |  |           if you are archiving to disk storage. In this case, you must supply | 
					
						
							|  |  |  |           the full absolute path to the directory. When specifying a tape | 
					
						
							|  |  |  |           device, it is preferable that the "non-rewind" variant of the device | 
					
						
							| 
									
										
										
										
											2020-08-07 14:43:58 +01:00
										 |  |  |           file name be given. | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       mediaType = mkOption { | 
					
						
							|  |  |  |         # TODO: required? | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							| 
									
										
										
										
											2019-09-08 16:37:00 +02:00
										 |  |  |           The specified name-string names the type of media supported by this | 
					
						
							|  |  |  |           device, for example, <literal>DLT7000</literal>. Media type names are | 
					
						
							|  |  |  |           arbitrary in that you set them to anything you want, but they must be | 
					
						
							|  |  |  |           known to the volume database to keep track of which storage daemons | 
					
						
							|  |  |  |           can read which volumes. In general, each different storage type | 
					
						
							|  |  |  |           should have a unique Media Type associated with it. The same | 
					
						
							|  |  |  |           name-string must appear in the appropriate Storage resource | 
					
						
							|  |  |  |           definition in the Director's configuration file. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           Even though the names you assign are arbitrary (i.e. you choose the | 
					
						
							|  |  |  |           name you want), you should take care in specifying them because the | 
					
						
							|  |  |  |           Media Type is used to determine which storage device Bacula will | 
					
						
							|  |  |  |           select during restore. Thus you should probably use the same Media | 
					
						
							|  |  |  |           Type specification for all drives where the Media can be freely | 
					
						
							|  |  |  |           interchanged. This is not generally an issue if you have a single | 
					
						
							|  |  |  |           Storage daemon, but it is with multiple Storage daemons, especially | 
					
						
							|  |  |  |           if they have incompatible media. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           For example, if you specify a Media Type of <literal>DDS-4</literal> | 
					
						
							|  |  |  |           then during the restore, Bacula will be able to choose any Storage | 
					
						
							|  |  |  |           Daemon that handles <literal>DDS-4</literal>. If you have an | 
					
						
							|  |  |  |           autochanger, you might want to name the Media Type in a way that is | 
					
						
							|  |  |  |           unique to the autochanger, unless you wish to possibly use the | 
					
						
							|  |  |  |           Volumes in other drives. You should also ensure to have unique Media | 
					
						
							|  |  |  |           Type names if the Media is not compatible between drives. This | 
					
						
							|  |  |  |           specification is required for all devices. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           In addition, if you are using disk storage, each Device resource will | 
					
						
							|  |  |  |           generally have a different mount point or directory. In order for | 
					
						
							|  |  |  |           Bacula to select the correct Device resource, each one must have a | 
					
						
							|  |  |  |           unique Media Type. | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       extraDeviceConfig = mkOption { | 
					
						
							|  |  |  |         default = ""; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Extra configuration to be passed in Device directive. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |         example = ''
 | 
					
						
							|  |  |  |           LabelMedia = yes | 
					
						
							|  |  |  |           Random Access = no | 
					
						
							|  |  |  |           AutomaticMount = no | 
					
						
							|  |  |  |           RemovableMedia = no | 
					
						
							|  |  |  |           MaximumOpenWait = 60 | 
					
						
							|  |  |  |           AlwaysOpen = no | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | in { | 
					
						
							|  |  |  |   options = { | 
					
						
							|  |  |  |     services.bacula-fd = { | 
					
						
							|  |  |  |       enable = mkOption { | 
					
						
							|  |  |  |         type = types.bool; | 
					
						
							|  |  |  |         default = false; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							| 
									
										
										
										
											2015-09-07 01:12:26 +02:00
										 |  |  |           Whether to enable the Bacula File Daemon. | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2020-08-07 14:43:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |       name = mkOption { | 
					
						
							|  |  |  |         default = "${config.networking.hostName}-fd"; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							| 
									
										
										
										
											2015-09-07 01:12:26 +02:00
										 |  |  |           The client name that must be used by the Director when connecting. | 
					
						
							| 
									
										
										
										
											2019-09-08 16:37:00 +02:00
										 |  |  |           Generally, it is a good idea to use a name related to the machine so | 
					
						
							|  |  |  |           that error messages can be easily identified if you have multiple | 
					
						
							| 
									
										
										
										
											2015-09-07 01:12:26 +02:00
										 |  |  |           Clients. This directive is required. | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2020-08-07 14:43:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |       port = mkOption { | 
					
						
							|  |  |  |         default = 9102; | 
					
						
							| 
									
										
										
										
											2015-06-15 18:11:32 +02:00
										 |  |  |         type = types.int; | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |         description = ''
 | 
					
						
							| 
									
										
										
										
											2015-09-07 01:12:26 +02:00
										 |  |  |           This specifies the port number on which the Client listens for | 
					
						
							|  |  |  |           Director connections. It must agree with the FDPort specified in | 
					
						
							|  |  |  |           the Client resource of the Director's configuration file. | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2020-08-07 14:43:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |       director = mkOption { | 
					
						
							|  |  |  |         default = {}; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           This option defines director resources in Bacula File Daemon. | 
					
						
							|  |  |  |         '';
 | 
					
						
							| 
									
										
										
										
											2016-09-11 16:42:35 +09:00
										 |  |  |         type = with types; attrsOf (submodule directorOptions); | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       extraClientConfig = mkOption { | 
					
						
							|  |  |  |         default = ""; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Extra configuration to be passed in Client directive. | 
					
						
							|  |  |  |         '';
 | 
					
						
							| 
									
										
										
										
											2016-01-17 19:34:55 +01:00
										 |  |  |         example = ''
 | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |           Maximum Concurrent Jobs = 20; | 
					
						
							|  |  |  |           Heartbeat Interval = 30; | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       extraMessagesConfig = mkOption { | 
					
						
							|  |  |  |         default = ""; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Extra configuration to be passed in Messages directive. | 
					
						
							|  |  |  |         '';
 | 
					
						
							| 
									
										
										
										
											2016-01-17 19:34:55 +01:00
										 |  |  |         example = ''
 | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |           console = all | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     services.bacula-sd = { | 
					
						
							|  |  |  |       enable = mkOption { | 
					
						
							|  |  |  |         type = types.bool; | 
					
						
							|  |  |  |         default = false; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Whether to enable Bacula Storage Daemon. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2020-08-07 14:43:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |       name = mkOption { | 
					
						
							|  |  |  |         default = "${config.networking.hostName}-sd"; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Specifies the Name of the Storage daemon. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2020-08-07 14:43:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |       port = mkOption { | 
					
						
							|  |  |  |         default = 9103; | 
					
						
							| 
									
										
										
										
											2015-06-15 18:11:32 +02:00
										 |  |  |         type = types.int; | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |         description = ''
 | 
					
						
							| 
									
										
										
										
											2019-09-08 16:37:00 +02:00
										 |  |  |           Specifies port number on which the Storage daemon listens for | 
					
						
							|  |  |  |           Director connections. | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       director = mkOption { | 
					
						
							|  |  |  |         default = {}; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           This option defines Director resources in Bacula Storage Daemon. | 
					
						
							|  |  |  |         '';
 | 
					
						
							| 
									
										
										
										
											2016-09-11 16:42:35 +09:00
										 |  |  |         type = with types; attrsOf (submodule directorOptions); | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       device = mkOption { | 
					
						
							|  |  |  |         default = {}; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           This option defines Device resources in Bacula Storage Daemon. | 
					
						
							|  |  |  |         '';
 | 
					
						
							| 
									
										
										
										
											2016-09-11 16:42:35 +09:00
										 |  |  |         type = with types; attrsOf (submodule deviceOptions); | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |       }; | 
					
						
							| 
									
										
										
										
											2019-09-08 16:37:00 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |       autochanger = mkOption { | 
					
						
							|  |  |  |         default = {}; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           This option defines Autochanger resources in Bacula Storage Daemon. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |         type = with types; attrsOf (submodule autochangerOptions); | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |       extraStorageConfig = mkOption { | 
					
						
							|  |  |  |         default = ""; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Extra configuration to be passed in Storage directive. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |         example = ''
 | 
					
						
							|  |  |  |           Maximum Concurrent Jobs = 20; | 
					
						
							|  |  |  |           Heartbeat Interval = 30; | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       extraMessagesConfig = mkOption { | 
					
						
							|  |  |  |         default = ""; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Extra configuration to be passed in Messages directive. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |         example = ''
 | 
					
						
							|  |  |  |           console = all | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2020-08-07 14:43:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     services.bacula-dir = { | 
					
						
							|  |  |  |       enable = mkOption { | 
					
						
							|  |  |  |         type = types.bool; | 
					
						
							|  |  |  |         default = false; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Whether to enable Bacula Director Daemon. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       name = mkOption { | 
					
						
							|  |  |  |         default = "${config.networking.hostName}-dir"; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							| 
									
										
										
										
											2019-09-08 16:37:00 +02:00
										 |  |  |           The director name used by the system administrator. This directive is | 
					
						
							|  |  |  |           required. | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2020-08-07 14:43:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |       port = mkOption { | 
					
						
							|  |  |  |         default = 9101; | 
					
						
							| 
									
										
										
										
											2015-06-15 18:11:32 +02:00
										 |  |  |         type = types.int; | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |         description = ''
 | 
					
						
							| 
									
										
										
										
											2019-09-08 16:37:00 +02:00
										 |  |  |           Specify the port (a positive integer) on which the Director daemon | 
					
						
							|  |  |  |           will listen for Bacula Console connections. This same port number | 
					
						
							|  |  |  |           must be specified in the Director resource of the Console | 
					
						
							|  |  |  |           configuration file. The default is 9101, so normally this directive | 
					
						
							|  |  |  |           need not be specified. This directive should not be used if you | 
					
						
							|  |  |  |           specify DirAddresses (N.B plural) directive. | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2020-08-07 14:43:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |       password = mkOption { | 
					
						
							|  |  |  |         # TODO: required? | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |            Specifies the password that must be supplied for a Director. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       extraMessagesConfig = mkOption { | 
					
						
							|  |  |  |         default = ""; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Extra configuration to be passed in Messages directive. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |         example = ''
 | 
					
						
							|  |  |  |           console = all | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       extraDirectorConfig = mkOption { | 
					
						
							|  |  |  |         default = ""; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Extra configuration to be passed in Director directive. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |         example = ''
 | 
					
						
							|  |  |  |           Maximum Concurrent Jobs = 20; | 
					
						
							|  |  |  |           Heartbeat Interval = 30; | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       extraConfig = mkOption { | 
					
						
							|  |  |  |         default = ""; | 
					
						
							| 
									
										
										
										
											2016-10-23 19:33:41 +02:00
										 |  |  |         type = types.lines; | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |         description = ''
 | 
					
						
							|  |  |  |           Extra configuration for Bacula Director Daemon. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |         example = ''
 | 
					
						
							|  |  |  |           TODO | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   config = mkIf (fd_cfg.enable || sd_cfg.enable || dir_cfg.enable) { | 
					
						
							|  |  |  |     systemd.services.bacula-fd = mkIf fd_cfg.enable { | 
					
						
							|  |  |  |       after = [ "network.target" ]; | 
					
						
							|  |  |  |       description = "Bacula File Daemon"; | 
					
						
							|  |  |  |       wantedBy = [ "multi-user.target" ]; | 
					
						
							|  |  |  |       path = [ pkgs.bacula ]; | 
					
						
							| 
									
										
										
										
											2018-03-19 10:26:46 +01:00
										 |  |  |       serviceConfig = { | 
					
						
							|  |  |  |         ExecStart = "${pkgs.bacula}/sbin/bacula-fd -f -u root -g bacula -c ${fd_conf}"; | 
					
						
							|  |  |  |         ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID"; | 
					
						
							|  |  |  |         LogsDirectory = "bacula"; | 
					
						
							|  |  |  |         StateDirectory = "bacula"; | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     systemd.services.bacula-sd = mkIf sd_cfg.enable { | 
					
						
							|  |  |  |       after = [ "network.target" ]; | 
					
						
							|  |  |  |       description = "Bacula Storage Daemon"; | 
					
						
							|  |  |  |       wantedBy = [ "multi-user.target" ]; | 
					
						
							|  |  |  |       path = [ pkgs.bacula ]; | 
					
						
							| 
									
										
										
										
											2018-03-19 10:26:46 +01:00
										 |  |  |       serviceConfig = { | 
					
						
							|  |  |  |         ExecStart = "${pkgs.bacula}/sbin/bacula-sd -f -u bacula -g bacula -c ${sd_conf}"; | 
					
						
							|  |  |  |         ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID"; | 
					
						
							|  |  |  |         LogsDirectory = "bacula"; | 
					
						
							|  |  |  |         StateDirectory = "bacula"; | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     services.postgresql.enable = dir_cfg.enable == true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     systemd.services.bacula-dir = mkIf dir_cfg.enable { | 
					
						
							|  |  |  |       after = [ "network.target" "postgresql.service" ]; | 
					
						
							|  |  |  |       description = "Bacula Director Daemon"; | 
					
						
							|  |  |  |       wantedBy = [ "multi-user.target" ]; | 
					
						
							|  |  |  |       path = [ pkgs.bacula ]; | 
					
						
							| 
									
										
										
										
											2018-03-19 10:26:46 +01:00
										 |  |  |       serviceConfig = { | 
					
						
							|  |  |  |         ExecStart = "${pkgs.bacula}/sbin/bacula-dir -f -u bacula -g bacula -c ${dir_conf}"; | 
					
						
							|  |  |  |         ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID"; | 
					
						
							|  |  |  |         LogsDirectory = "bacula"; | 
					
						
							|  |  |  |         StateDirectory = "bacula"; | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |       preStart = ''
 | 
					
						
							|  |  |  |         if ! test -e "${libDir}/db-created"; then | 
					
						
							|  |  |  |             ${pkgs.postgresql}/bin/createuser --no-superuser --no-createdb --no-createrole bacula | 
					
						
							|  |  |  |             #${pkgs.postgresql}/bin/createdb --owner bacula bacula | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             # populate DB | 
					
						
							|  |  |  |             ${pkgs.bacula}/etc/create_bacula_database postgresql | 
					
						
							|  |  |  |             ${pkgs.bacula}/etc/make_bacula_tables postgresql | 
					
						
							|  |  |  |             ${pkgs.bacula}/etc/grant_bacula_privileges postgresql | 
					
						
							|  |  |  |             touch "${libDir}/db-created" | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |             ${pkgs.bacula}/etc/update_bacula_tables postgresql || true | 
					
						
							|  |  |  |         fi | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     environment.systemPackages = [ pkgs.bacula ]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-30 01:58:35 +02:00
										 |  |  |     users.users.bacula = { | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |       group = "bacula"; | 
					
						
							| 
									
										
										
										
											2013-08-23 11:33:24 +02:00
										 |  |  |       uid = config.ids.uids.bacula; | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |       home = "${libDir}"; | 
					
						
							|  |  |  |       createHome = true; | 
					
						
							|  |  |  |       description = "Bacula Daemons user"; | 
					
						
							|  |  |  |       shell = "${pkgs.bash}/bin/bash"; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-30 01:58:35 +02:00
										 |  |  |     users.groups.bacula.gid = config.ids.gids.bacula; | 
					
						
							| 
									
										
										
										
											2013-03-15 16:10:21 +01:00
										 |  |  |   }; | 
					
						
							|  |  |  | } |