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