| 
									
										
										
										
											2010-04-22 15:13:50 +00:00
										 |  |  | # Felix server | 
					
						
							| 
									
										
										
										
											2014-04-14 16:26:48 +02:00
										 |  |  | { config, lib, pkgs, ... }: | 
					
						
							| 
									
										
										
										
											2010-04-22 15:13:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-14 16:26:48 +02:00
										 |  |  | with lib; | 
					
						
							| 
									
										
										
										
											2010-04-22 15:13:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | let | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   cfg = config.services.felix; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | in | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   ###### interface | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-22 15:13:50 +00:00
										 |  |  |   options = { | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-22 15:13:50 +00:00
										 |  |  |     services.felix = { | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-22 15:13:50 +00:00
										 |  |  |       enable = mkOption { | 
					
						
							|  |  |  |         default = false; | 
					
						
							|  |  |  |         description = "Whether to enable the Apache Felix OSGi service"; | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-22 15:13:50 +00:00
										 |  |  |       bundles = mkOption { | 
					
						
							|  |  |  |         default = [ pkgs.felix_remoteshell ]; | 
					
						
							|  |  |  |         description = "List of bundles that should be activated on startup"; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       user = mkOption { | 
					
						
							|  |  |  |         default = "osgi"; | 
					
						
							|  |  |  |         description = "User account under which Apache Felix runs."; | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  |       }; | 
					
						
							| 
									
										
										
										
											2010-04-22 15:13:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |       group = mkOption { | 
					
						
							|  |  |  |         default = "osgi"; | 
					
						
							|  |  |  |         description = "Group account under which Apache Felix runs."; | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-22 15:13:50 +00:00
										 |  |  |     }; | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-22 15:13:50 +00:00
										 |  |  |   }; | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-22 15:13:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   ###### implementation | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   config = mkIf cfg.enable { | 
					
						
							|  |  |  |     users.extraGroups = singleton | 
					
						
							|  |  |  |       { name = "osgi"; | 
					
						
							|  |  |  |         gid = config.ids.gids.osgi; | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-22 15:13:50 +00:00
										 |  |  |     users.extraUsers = singleton | 
					
						
							|  |  |  |       { name = "osgi"; | 
					
						
							|  |  |  |         uid = config.ids.uids.osgi; | 
					
						
							|  |  |  |         description = "OSGi user"; | 
					
						
							|  |  |  |         home = "/homeless-shelter"; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     jobs.felix = | 
					
						
							|  |  |  |       { description = "Felix server"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  |         preStart = | 
					
						
							| 
									
										
										
										
											2010-04-22 15:13:50 +00:00
										 |  |  | 	  ''
 | 
					
						
							|  |  |  | 	    # Initialise felix instance on first startup | 
					
						
							|  |  |  | 	    if [ ! -d /var/felix ] | 
					
						
							|  |  |  | 	    then | 
					
						
							|  |  |  | 	        # Symlink system files | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-22 15:13:50 +00:00
										 |  |  | 	        mkdir -p /var/felix | 
					
						
							|  |  |  | 		chown ${cfg.user}:${cfg.group} /var/felix | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-22 15:13:50 +00:00
										 |  |  | 		for i in ${pkgs.felix}/*
 | 
					
						
							|  |  |  | 		do | 
					
						
							|  |  |  | 		    if [ "$i" != "${pkgs.felix}/bundle" ] | 
					
						
							|  |  |  | 		    then | 
					
						
							|  |  |  | 		        ln -sfn $i /var/felix/$(basename $i) | 
					
						
							|  |  |  | 		    fi | 
					
						
							|  |  |  | 		done | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-22 15:13:50 +00:00
										 |  |  | 		# Symlink bundles | 
					
						
							|  |  |  | 		mkdir -p /var/felix/bundle | 
					
						
							|  |  |  | 		chown ${cfg.user}:${cfg.group} /var/felix/bundle | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-22 15:13:50 +00:00
										 |  |  | 		for i in ${pkgs.felix}/bundle/* ${toString cfg.bundles}
 | 
					
						
							|  |  |  | 		do | 
					
						
							|  |  |  | 		    if [ -f $i ] | 
					
						
							|  |  |  | 		    then | 
					
						
							|  |  |  | 		        ln -sfn $i /var/felix/bundle/$(basename $i) | 
					
						
							|  |  |  | 		    elif [ -d $i ] | 
					
						
							|  |  |  | 		    then | 
					
						
							|  |  |  | 		        for j in $i/bundle/*
 | 
					
						
							|  |  |  | 			do | 
					
						
							|  |  |  | 			    ln -sfn $j /var/felix/bundle/$(basename $j) | 
					
						
							|  |  |  | 			done | 
					
						
							|  |  |  | 		    fi | 
					
						
							|  |  |  | 		done | 
					
						
							|  |  |  | 	    fi | 
					
						
							|  |  |  | 	  '';
 | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-22 15:13:50 +00:00
										 |  |  |         script = | 
					
						
							|  |  |  |           ''
 | 
					
						
							|  |  |  | 	    cd /var/felix | 
					
						
							|  |  |  |             ${pkgs.su}/bin/su -s ${pkgs.bash}/bin/sh ${cfg.user} -c '${pkgs.jre}/bin/java -jar bin/felix.jar' | 
					
						
							|  |  |  |           '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |