at 18.03-beta 2.4 kB view raw
1{ config, lib, pkgs, ... }: 2let 3 cfg = config.services.virtuoso; 4 virtuosoUser = "virtuoso"; 5 stateDir = "/var/lib/virtuoso"; 6in 7with lib; 8{ 9 10 ###### interface 11 12 options = { 13 14 services.virtuoso = { 15 16 enable = mkOption { 17 default = false; 18 description = "Whether to enable Virtuoso Opensource database server."; 19 }; 20 21 config = mkOption { 22 default = ""; 23 description = "Extra options to put into Virtuoso configuration file."; 24 }; 25 26 parameters = mkOption { 27 default = ""; 28 description = "Extra options to put into [Parameters] section of Virtuoso configuration file."; 29 }; 30 31 listenAddress = mkOption { 32 default = "1111"; 33 example = "myserver:1323"; 34 description = "ip:port or port to listen on."; 35 }; 36 37 httpListenAddress = mkOption { 38 default = null; 39 example = "myserver:8080"; 40 description = "ip:port or port for Virtuoso HTTP server to listen on."; 41 }; 42 43 dirsAllowed = mkOption { 44 default = null; 45 example = "/www, /home/"; 46 description = "A list of directories Virtuoso is allowed to access"; 47 }; 48 }; 49 50 }; 51 52 53 ###### implementation 54 55 config = mkIf cfg.enable { 56 57 users.extraUsers = singleton 58 { name = virtuosoUser; 59 uid = config.ids.uids.virtuoso; 60 description = "virtuoso user"; 61 home = stateDir; 62 }; 63 64 systemd.services.virtuoso = { 65 after = [ "network.target" ]; 66 wantedBy = [ "multi-user.target" ]; 67 68 preStart = '' 69 mkdir -p ${stateDir} 70 chown ${virtuosoUser} ${stateDir} 71 ''; 72 73 script = '' 74 cd ${stateDir} 75 ${pkgs.virtuoso}/bin/virtuoso-t +foreground +configfile ${pkgs.writeText "virtuoso.ini" cfg.config} 76 ''; 77 }; 78 79 services.virtuoso.config = '' 80 [Database] 81 DatabaseFile=${stateDir}/x-virtuoso.db 82 TransactionFile=${stateDir}/x-virtuoso.trx 83 ErrorLogFile=${stateDir}/x-virtuoso.log 84 xa_persistent_file=${stateDir}/x-virtuoso.pxa 85 86 [Parameters] 87 ServerPort=${cfg.listenAddress} 88 RunAs=${virtuosoUser} 89 ${optionalString (cfg.dirsAllowed != null) "DirsAllowed=${cfg.dirsAllowed}"} 90 ${cfg.parameters} 91 92 [HTTPServer] 93 ${optionalString (cfg.httpListenAddress != null) "ServerPort=${cfg.httpListenAddress}"} 94 ''; 95 96 }; 97 98}