 64d05bbdd2
			
		
	
	
		64d05bbdd2
		
			
		
	
	
	
	
		
			
			Although the package itself builds fine, the module fails because it tries to log into a non-existant file in `/var/log` which breaks the service. Patching to default config to log to stdout by default fixes the issue. Additionally this is the better solution as NixOS heavily relies on systemd (and thus journald) for logging. Also, the runtime relies on `/etc/localtime` to start, as it's not required by the module system we set UTC as sensitive default when using the module. To ensure that the service's basic functionality is available, a simple NixOS test has been added.
		
			
				
	
	
		
			81 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { config, lib, pkgs, ... }:
 | |
| let
 | |
|   cfg = config.services.clickhouse;
 | |
|   confDir = "/etc/clickhouse-server";
 | |
|   stateDir = "/var/lib/clickhouse";
 | |
| in
 | |
| with lib;
 | |
| {
 | |
| 
 | |
|   ###### interface
 | |
| 
 | |
|   options = {
 | |
| 
 | |
|     services.clickhouse = {
 | |
| 
 | |
|       enable = mkOption {
 | |
|         default = false;
 | |
|         description = "Whether to enable ClickHouse database server.";
 | |
|       };
 | |
| 
 | |
|     };
 | |
| 
 | |
|   };
 | |
| 
 | |
| 
 | |
|   ###### implementation
 | |
| 
 | |
|   config = mkIf cfg.enable {
 | |
| 
 | |
|     users.users.clickhouse = {
 | |
|       name = "clickhouse";
 | |
|       uid = config.ids.uids.clickhouse;
 | |
|       group = "clickhouse";
 | |
|       description = "ClickHouse server user";
 | |
|     };
 | |
| 
 | |
|     users.groups.clickhouse.gid = config.ids.gids.clickhouse;
 | |
| 
 | |
|     systemd.services.clickhouse = {
 | |
|       description = "ClickHouse server";
 | |
| 
 | |
|       wantedBy = [ "multi-user.target" ];
 | |
| 
 | |
|       after = [ "network.target" ];
 | |
| 
 | |
|       preStart = ''
 | |
|         mkdir -p ${stateDir}
 | |
|         chown clickhouse:clickhouse ${confDir} ${stateDir}
 | |
|       '';
 | |
| 
 | |
|       script = ''
 | |
|         cd "${confDir}"
 | |
|         exec ${pkgs.clickhouse}/bin/clickhouse-server
 | |
|       '';
 | |
| 
 | |
|       serviceConfig = {
 | |
|         User = "clickhouse";
 | |
|         Group = "clickhouse";
 | |
|         PermissionsStartOnly = true;
 | |
|       };
 | |
|     };
 | |
| 
 | |
|     environment.etc = {
 | |
|       "clickhouse-server/config.xml" = {
 | |
|         source = "${pkgs.clickhouse}/etc/clickhouse-server/config.xml";
 | |
|       };
 | |
| 
 | |
|       "clickhouse-server/users.xml" = {
 | |
|         source = "${pkgs.clickhouse}/etc/clickhouse-server/users.xml";
 | |
|       };
 | |
|     };
 | |
| 
 | |
|     environment.systemPackages = [ pkgs.clickhouse ];
 | |
| 
 | |
|     # startup requires a `/etc/localtime` which only if exists if `time.timeZone != null`
 | |
|     time.timeZone = mkDefault "UTC";
 | |
| 
 | |
|   };
 | |
| 
 | |
| }
 |