at 15.09-beta 2.1 kB view raw
1# Felix server 2{ config, lib, pkgs, ... }: 3 4with lib; 5 6let 7 8 cfg = config.services.felix; 9 10in 11 12{ 13 14 ###### interface 15 16 options = { 17 18 services.felix = { 19 20 enable = mkOption { 21 default = false; 22 description = "Whether to enable the Apache Felix OSGi service"; 23 }; 24 25 bundles = mkOption { 26 default = [ pkgs.felix_remoteshell ]; 27 description = "List of bundles that should be activated on startup"; 28 }; 29 30 user = mkOption { 31 default = "osgi"; 32 description = "User account under which Apache Felix runs."; 33 }; 34 35 group = mkOption { 36 default = "osgi"; 37 description = "Group account under which Apache Felix runs."; 38 }; 39 40 }; 41 42 }; 43 44 45 ###### implementation 46 47 config = mkIf cfg.enable { 48 users.extraGroups = singleton 49 { name = "osgi"; 50 gid = config.ids.gids.osgi; 51 }; 52 53 users.extraUsers = singleton 54 { name = "osgi"; 55 uid = config.ids.uids.osgi; 56 description = "OSGi user"; 57 home = "/homeless-shelter"; 58 }; 59 60 jobs.felix = 61 { description = "Felix server"; 62 63 preStart = 64 '' 65 # Initialise felix instance on first startup 66 if [ ! -d /var/felix ] 67 then 68 # Symlink system files 69 70 mkdir -p /var/felix 71 chown ${cfg.user}:${cfg.group} /var/felix 72 73 for i in ${pkgs.felix}/* 74 do 75 if [ "$i" != "${pkgs.felix}/bundle" ] 76 then 77 ln -sfn $i /var/felix/$(basename $i) 78 fi 79 done 80 81 # Symlink bundles 82 mkdir -p /var/felix/bundle 83 chown ${cfg.user}:${cfg.group} /var/felix/bundle 84 85 for i in ${pkgs.felix}/bundle/* ${toString cfg.bundles} 86 do 87 if [ -f $i ] 88 then 89 ln -sfn $i /var/felix/bundle/$(basename $i) 90 elif [ -d $i ] 91 then 92 for j in $i/bundle/* 93 do 94 ln -sfn $j /var/felix/bundle/$(basename $j) 95 done 96 fi 97 done 98 fi 99 ''; 100 101 script = 102 '' 103 cd /var/felix 104 ${pkgs.su}/bin/su -s ${pkgs.bash}/bin/sh ${cfg.user} -c '${pkgs.jre}/bin/java -jar bin/felix.jar' 105 ''; 106 }; 107 108 }; 109 110}