at 17.09-beta 2.4 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 type = types.listOf types.package; 27 default = [ pkgs.felix_remoteshell ]; 28 defaultText = "[ pkgs.felix_remoteshell ]"; 29 description = "List of bundles that should be activated on startup"; 30 }; 31 32 user = mkOption { 33 default = "osgi"; 34 description = "User account under which Apache Felix runs."; 35 }; 36 37 group = mkOption { 38 default = "osgi"; 39 description = "Group account under which Apache Felix runs."; 40 }; 41 42 }; 43 44 }; 45 46 47 ###### implementation 48 49 config = mkIf cfg.enable { 50 users.extraGroups = singleton 51 { name = "osgi"; 52 gid = config.ids.gids.osgi; 53 }; 54 55 users.extraUsers = singleton 56 { name = "osgi"; 57 uid = config.ids.uids.osgi; 58 description = "OSGi user"; 59 home = "/homeless-shelter"; 60 }; 61 62 systemd.services.felix = { 63 description = "Felix server"; 64 wantedBy = [ "multi-user.target" ]; 65 66 preStart = '' 67 # Initialise felix instance on first startup 68 if [ ! -d /var/felix ] 69 then 70 # Symlink system files 71 72 mkdir -p /var/felix 73 chown ${cfg.user}:${cfg.group} /var/felix 74 75 for i in ${pkgs.felix}/* 76 do 77 if [ "$i" != "${pkgs.felix}/bundle" ] 78 then 79 ln -sfn $i /var/felix/$(basename $i) 80 fi 81 done 82 83 # Symlink bundles 84 mkdir -p /var/felix/bundle 85 chown ${cfg.user}:${cfg.group} /var/felix/bundle 86 87 for i in ${pkgs.felix}/bundle/* ${toString cfg.bundles} 88 do 89 if [ -f $i ] 90 then 91 ln -sfn $i /var/felix/bundle/$(basename $i) 92 elif [ -d $i ] 93 then 94 for j in $i/bundle/* 95 do 96 ln -sfn $j /var/felix/bundle/$(basename $j) 97 done 98 fi 99 done 100 fi 101 ''; 102 103 script = '' 104 cd /var/felix 105 ${pkgs.su}/bin/su -s ${pkgs.bash}/bin/sh ${cfg.user} -c '${pkgs.jre}/bin/java -jar bin/felix.jar' 106 ''; 107 }; 108 }; 109}