Merge pull request #12198 from mayflower/remove-upstart-layer

Remove upstart layer
This commit is contained in:
Daniel Peebles 2016-01-07 13:47:39 -05:00
commit 57cb5ab17a
54 changed files with 772 additions and 1645 deletions

View File

@ -149,8 +149,7 @@ in
# not be started by default on the installation CD because the # not be started by default on the installation CD because the
# default root password is empty. # default root password is empty.
services.openssh.enable = true; services.openssh.enable = true;
systemd.services.openssh.wantedBy = lib.mkOverride 50 [];
jobs.openssh.startOn = lib.mkOverride 50 "";
boot.loader.grub.enable = false; boot.loader.grub.enable = false;
boot.loader.generationsDir.enable = false; boot.loader.generationsDir.enable = false;

View File

@ -164,7 +164,7 @@ in
# not be started by default on the installation CD because the # not be started by default on the installation CD because the
# default root password is empty. # default root password is empty.
services.openssh.enable = true; services.openssh.enable = true;
jobs.openssh.startOn = lib.mkOverride 50 ""; systemd.services.openssh.wantedBy = lib.mkOverride 50 [];
# cpufrequtils fails to build on non-pc # cpufrequtils fails to build on non-pc
powerManagement.enable = false; powerManagement.enable = false;

View File

@ -100,8 +100,6 @@
./services/amqp/activemq/default.nix ./services/amqp/activemq/default.nix
./services/amqp/rabbitmq.nix ./services/amqp/rabbitmq.nix
./services/audio/alsa.nix ./services/audio/alsa.nix
# Disabled as fuppes no longer builds.
# ./services/audio/fuppes.nix
./services/audio/icecast.nix ./services/audio/icecast.nix
./services/audio/liquidsoap.nix ./services/audio/liquidsoap.nix
./services/audio/mpd.nix ./services/audio/mpd.nix
@ -477,7 +475,6 @@
./system/boot/timesyncd.nix ./system/boot/timesyncd.nix
./system/boot/tmp.nix ./system/boot/tmp.nix
./system/etc/etc.nix ./system/etc/etc.nix
./system/upstart/upstart.nix
./tasks/bcache.nix ./tasks/bcache.nix
./tasks/cpu-freq.nix ./tasks/cpu-freq.nix
./tasks/encrypted-devices.nix ./tasks/encrypted-devices.nix

View File

@ -1,115 +0,0 @@
{ config, lib, pkgs, ... }:
let
cfg = config.services.fuppesd;
in
with lib;
{
options = {
services.fuppesd = {
enable = mkOption {
default = false;
type = with types; bool;
description = ''
Enables Fuppes (UPnP A/V Media Server). Can be used to watch
photos, video and listen to music from a phone/tv connected to the
local network.
'';
};
name = mkOption {
example = "Media Center";
type = types.str;
description = ''
Enables Fuppes (UPnP A/V Media Server). Can be used to watch
photos, video and listen to music from a phone/tv connected to the
local network.
'';
};
log = {
level = mkOption {
default = 0;
example = 3;
type = with types; uniq int;
description = ''
Logging level of fuppes, An integer between 0 and 3.
'';
};
file = mkOption {
default = "/var/log/fuppes.log";
type = types.str;
description = ''
File which will contains the log produced by the daemon.
'';
};
};
config = mkOption {
example = "/etc/fuppes/fuppes.cfg";
type = types.str;
description = ''
Mutable configuration file which can be edited with the web
interface. Due to possible modification, double quote the full
path of the filename stored in your filesystem to avoid attempts
to modify the content of the nix store.
'';
};
vfolder = mkOption {
example = literalExample "/etc/fuppes/vfolder.cfg";
description = ''
XML file describing the layout of virtual folder visible by the
client.
'';
};
database = mkOption {
default = "/var/lib/fuppes/fuppes.db";
type = types.str;
description = ''
Database file which index all shared files.
'';
};
## At the moment, no plugins are packaged.
/*
plugins = mkOption {
type = with types; listOf package;
description = ''
List of Fuppes plugins.
'';
};
*/
user = mkOption {
default = "root"; # The default is not secure.
example = "fuppes";
type = types.str;
description = ''
Name of the user which own the configuration files and under which
the fuppes daemon will be executed.
'';
};
};
};
config = mkIf cfg.enable {
jobs.fuppesd = {
description = "UPnP A/V Media Server. (${cfg.name})";
startOn = "ip-up";
daemonType = "fork";
exec = ''/var/setuid-wrappers/sudo -u ${cfg.user} -- ${pkgs.fuppes}/bin/fuppesd --friendly-name ${cfg.name} --log-level ${toString cfg.log.level} --log-file ${cfg.log.file} --config-file ${cfg.config} --vfolder-config-file ${cfg.vfolder} --database-file ${cfg.database}'';
};
services.fuppesd.name = mkDefault config.networking.hostName;
services.fuppesd.vfolder = mkDefault ./fuppes/vfolder.cfg;
security.sudo.enable = true;
};
}

View File

@ -1,155 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<fuppes_vfolder_config version="0.2">
<vfolder_layout device="default" enabled="false">
<vfolder name="Genre">
<vfolders property="genre">
<items type="audioItem" />
</vfolders>
</vfolder>
<vfolder name="Genre/Artists">
<vfolders property="genre">
<vfolders property="artist">
<items type="audioItem" />
</vfolders>
</vfolders>
</vfolder>
<vfolder name="Artists/Albums">
<vfolders property="artist">
<vfolders property="album">
<items type="audioItem" />
</vfolders>
</vfolders>
</vfolder>
<vfolder name="ABC/Artists/Albums">
<vfolders split="ABC">
<vfolders property="artist">
<vfolders property="album">
<items type="audioItem" />
</vfolders>
</vfolders>
</vfolders>
</vfolder>
<vfolder name="Photos">
<vfolder name="All">
<items type="imageItem" />
</vfolder>
<vfolder name="Folders">
<folders filter="contains(imageItem)" />
</vfolder>
</vfolder>
<vfolder name="Videos">
<vfolder name="All">
<items type="videoItem" />
</vfolder>
<vfolder name="Folders">
<folders filter="contains(videoItem)" />
</vfolder>
</vfolder>
<vfolder name="shared dirs">
<shared_dirs full_extend="true" />
</vfolder>
</vfolder_layout>
<vfolder_layout device="Xbox 360" enabled="false">
<vfolder name="Music" id="1">
<vfolder name="Album" id="7">
<vfolders property="album">
<items type="audioItem" />
</vfolders>
</vfolder>
<vfolder name="All Music" id="4">
<items type="audioItem" />
</vfolder>
<vfolder name="Artist" id="6">
<vfolders property="artist">
<items type="audioItem" />
</vfolders>
</vfolder>
<vfolder name="Folders" id="20">
<folders filter="contains(audioItem)" />
</vfolder>
<vfolder name="Genre" id="5">
<vfolders property="genre">
<items type="audioItem" />
</vfolders>
</vfolder>
<vfolder name="Playlist" id="15" />
</vfolder>
<vfolder name="Pictures" id="3">
<vfolder name="Album" id="13" />
<vfolder name="All Pictures" id="11">
<items type="imageItem" />
</vfolder>
<vfolder name="Date Taken" id="12" />
<vfolder name="Folders" id="22">
<folders filter="contains(imageItem)" />
</vfolder>
</vfolder>
<vfolder name="Playlists" id="18">
<vfolder name="All Playlists" id="19" />
<vfolder name="Folders" id="23" />
</vfolder>
<vfolder name="Video" id="2">
<vfolder name="Actor" id="10" />
<vfolder name="Album" id="14" />
<vfolder name="All Video" id="8">
<items type="videoItem" />
</vfolder>
<vfolder name="Folders" id="21">
<folders filter="contains(videoItem)" />
</vfolder>
<vfolder name="Genre" id="9" />
</vfolder>
</vfolder_layout>
<vfolder_layout device="Yamaha" enabled="false" create_references="true" >
<vfolder name="Playlists" />
<vfolder name="Artists">
<vfolders property="artist">
<items type="audioItem" />
</vfolders>
</vfolder>
<vfolder name="Albums">
<vfolders property="album">
<items type="audioItem" />
</vfolders>
</vfolder>
<vfolder name="Songs">
<items type="audioItem" />
</vfolder>
<vfolder name="Genres">
<vfolders property="genre">
<items type="audioItem" />
</vfolders>
</vfolder>
</vfolder_layout>
</fuppes_vfolder_config>

View File

@ -60,11 +60,9 @@ with lib;
services.avahi.enable = true; services.avahi.enable = true;
jobs.fourStoreEndpoint = { systemd.services."4store-endpoint" = {
name = "4store-endpoint"; wantedBy = [ "ip-up.target" ];
startOn = "ip-up"; script = ''
exec = ''
${run} '${pkgs.rdf4store}/bin/4s-httpd -D ${cfg.options} ${if cfg.listenAddress!=null then "-H ${cfg.listenAddress}" else "" } -p ${toString cfg.port} ${cfg.database}' ${run} '${pkgs.rdf4store}/bin/4s-httpd -D ${cfg.options} ${if cfg.listenAddress!=null then "-H ${cfg.listenAddress}" else "" } -p ${toString cfg.port} ${cfg.database}'
''; '';
}; };

View File

@ -52,9 +52,8 @@ with lib;
services.avahi.enable = true; services.avahi.enable = true;
jobs.fourStore = { systemd.services."4store" = {
name = "4store"; wantedBy = [ "ip-up.target" ];
startOn = "ip-up";
preStart = '' preStart = ''
mkdir -p ${stateDir}/ mkdir -p ${stateDir}/
@ -64,11 +63,9 @@ with lib;
fi fi
''; '';
exec = '' script = ''
${run} -c '${pkgs.rdf4store}/bin/4s-backend -D ${cfg.options} ${cfg.database}' ${run} -c '${pkgs.rdf4store}/bin/4s-backend -D ${cfg.options} ${cfg.database}'
''; '';
}; };
}; };
} }

View File

@ -29,20 +29,20 @@ with lib;
}; };
listenAddress = mkOption { listenAddress = mkOption {
default = "1111"; default = "1111";
example = "myserver:1323"; example = "myserver:1323";
description = "ip:port or port to listen on."; description = "ip:port or port to listen on.";
}; };
httpListenAddress = mkOption { httpListenAddress = mkOption {
default = null; default = null;
example = "myserver:8080"; example = "myserver:8080";
description = "ip:port or port for Virtuoso HTTP server to listen on."; description = "ip:port or port for Virtuoso HTTP server to listen on.";
}; };
dirsAllowed = mkOption { dirsAllowed = mkOption {
default = null; default = null;
example = "/www, /home/"; example = "/www, /home/";
description = "A list of directories Virtuoso is allowed to access"; description = "A list of directories Virtuoso is allowed to access";
}; };
}; };
@ -61,18 +61,17 @@ with lib;
home = stateDir; home = stateDir;
}; };
jobs.virtuoso = { systemd.services.virtuoso = {
name = "virtuoso"; wantedBy = [ "ip-up.target" ];
startOn = "ip-up";
preStart = '' preStart = ''
mkdir -p ${stateDir} mkdir -p ${stateDir}
chown ${virtuosoUser} ${stateDir} chown ${virtuosoUser} ${stateDir}
''; '';
script = '' script = ''
cd ${stateDir} cd ${stateDir}
${pkgs.virtuoso}/bin/virtuoso-t +foreground +configfile ${pkgs.writeText "virtuoso.ini" cfg.config} ${pkgs.virtuoso}/bin/virtuoso-t +foreground +configfile ${pkgs.writeText "virtuoso.ini" cfg.config}
''; '';
}; };

View File

@ -78,8 +78,8 @@ in
bot_replaypath = replays bot_replaypath = replays
''; '';
jobs.ghostOne = { systemd.services."ghost-one" = {
name = "ghost-one"; wantedBy = [ "multi-user.target" ];
script = '' script = ''
mkdir -p ${stateDir} mkdir -p ${stateDir}
cd ${stateDir} cd ${stateDir}

View File

@ -98,22 +98,26 @@ in
config = mkIf config.services.acpid.enable { config = mkIf config.services.acpid.enable {
jobs.acpid = systemd.services.acpid = {
{ description = "ACPI Daemon"; description = "ACPI Daemon";
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];
after = [ "systemd-udev-settle.service" ]; after = [ "systemd-udev-settle.service" ];
path = [ pkgs.acpid ]; path = [ pkgs.acpid ];
daemonType = "fork"; serviceConfig = {
Type = "forking";
exec = "acpid --confdir ${acpiConfDir}";
unitConfig.ConditionVirtualization = "!systemd-nspawn";
unitConfig.ConditionPathExists = [ "/proc/acpi" ];
}; };
unitConfig = {
ConditionVirtualization = "!systemd-nspawn";
ConditionPathExists = [ "/proc/acpi" ];
};
script = "acpid --confdir ${acpiConfDir}";
};
}; };
} }

View File

@ -35,18 +35,13 @@ with lib;
services.dbus.packages = [ pkgs.pommed ]; services.dbus.packages = [ pkgs.pommed ];
jobs.pommed = { name = "pommed"; systemd.services.pommed = {
description = "Pommed hotkey management"; description = "Pommed hotkey management";
wantedBy = [ "multi-user.target" ];
startOn = "started dbus"; after = [ "dbus.service" ];
postStop = "rm -f /var/run/pommed.pid"; postStop = "rm -f /var/run/pommed.pid";
script = "${pkgs.pommed}/bin/pommed";
exec = "${pkgs.pommed}/bin/pommed"; serviceConfig.Type = "forking";
daemonType = "fork";
path = [ pkgs.eject ]; path = [ pkgs.eject ];
}; };
}; };

View File

@ -24,21 +24,14 @@ with lib;
###### implementation ###### implementation
config = mkIf config.services.klogd.enable { config = mkIf config.services.klogd.enable {
systemd.services.klogd = {
jobs.klogd = description = "Kernel Log Daemon";
{ description = "Kernel Log Daemon"; wantedBy = [ "multi-user.target" ];
path = [ pkgs.sysklogd ];
wantedBy = [ "multi-user.target" ]; unitConfig.ConditionVirtualization = "!systemd-nspawn";
script =
path = [ pkgs.sysklogd ]; "klogd -c 1 -2 -n " +
"-k $(dirname $(readlink -f /run/booted-system/kernel))/System.map";
unitConfig.ConditionVirtualization = "!systemd-nspawn"; };
exec =
"klogd -c 1 -2 -n " +
"-k $(dirname $(readlink -f /run/booted-system/kernel))/System.map";
};
}; };
} }

View File

@ -72,15 +72,16 @@ in
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
jobs.freepopsd = { systemd.services.freepopsd = {
description = "Freepopsd (webmail over POP3)"; description = "Freepopsd (webmail over POP3)";
startOn = "ip-up"; wantedBy = [ "ip-up.target" ];
exec = ''${pkgs.freepops}/bin/freepopsd \ script = ''
-p ${toString cfg.port} \ ${pkgs.freepops}/bin/freepopsd \
-t ${toString cfg.threads} \ -p ${toString cfg.port} \
-b ${cfg.bind} \ -t ${toString cfg.threads} \
-vv -l ${cfg.logFile} \ -b ${cfg.bind} \
-s ${cfg.suid.user}.${cfg.suid.group} -vv -l ${cfg.logFile} \
-s ${cfg.suid.user}.${cfg.suid.group}
''; '';
}; };
}; };

View File

@ -50,15 +50,13 @@ in
gid = config.ids.gids.spamd; gid = config.ids.gids.spamd;
}; };
jobs.spamd = { systemd.services.spamd = {
description = "Spam Assassin Server"; description = "Spam Assassin Server";
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];
after = [ "network.target" ]; after = [ "network.target" ];
exec = "${pkgs.spamassassin}/bin/spamd ${optionalString cfg.debug "-D"} --username=spamd --groupname=spamd --nouser-config --virtual-config-dir=/var/lib/spamassassin/user-%u --allow-tell --pidfile=/var/run/spamd.pid"; script = "${pkgs.spamassassin}/bin/spamd ${optionalString cfg.debug "-D"} --username=spamd --groupname=spamd --nouser-config --virtual-config-dir=/var/lib/spamassassin/user-%u --allow-tell --pidfile=/var/run/spamd.pid";
}; };
}; };
} }

View File

@ -51,13 +51,12 @@ with lib;
gid = config.ids.gids.dictd; gid = config.ids.gids.dictd;
}; };
jobs.dictd = systemd.services.dictd = {
{ description = "DICT.org Dictionary Server"; description = "DICT.org Dictionary Server";
startOn = "startup"; wantedBy = [ "multi-user.target" ];
environment = { LOCALE_ARCHIVE = "/run/current-system/sw/lib/locale/locale-archive"; }; environment = { LOCALE_ARCHIVE = "/run/current-system/sw/lib/locale/locale-archive"; };
daemonType = "fork"; serviceConfig.Type = "forking";
exec = "${pkgs.dict}/sbin/dictd -s -c ${dictdb}/share/dictd/dictd.conf --locale en_US.UTF-8"; script = "${pkgs.dict}/sbin/dictd -s -c ${dictdb}/share/dictd/dictd.conf --locale en_US.UTF-8";
}; };
}; };
} }

View File

@ -91,7 +91,7 @@ in
( { hostname = config.networking.hostName; ( { hostname = config.networking.hostName;
#targetHost = config.deployment.targetHost; #targetHost = config.deployment.targetHost;
system = if config.nixpkgs.system == "" then builtins.currentSystem else config.nixpkgs.system; system = if config.nixpkgs.system == "" then builtins.currentSystem else config.nixpkgs.system;
supportedTypes = (import "${pkgs.stdenv.mkDerivation { supportedTypes = (import "${pkgs.stdenv.mkDerivation {
name = "supportedtypes"; name = "supportedtypes";
buildCommand = '' buildCommand = ''
@ -117,63 +117,61 @@ in
services.disnix.publishInfrastructure.enable = cfg.publishAvahi; services.disnix.publishInfrastructure.enable = cfg.publishAvahi;
jobs = { systemd.services = {
disnix = disnix = {
{ description = "Disnix server"; description = "Disnix server";
wants = [ "dysnomia.target" ];
wants = [ "dysnomia.target" ]; wantedBy = [ "multi-user.target" ];
wantedBy = [ "multi-user.target" ]; after = [ "dbus.service" ]
after = [ "dbus.service" ] ++ optional config.services.httpd.enable "httpd.service"
++ optional config.services.httpd.enable "httpd.service" ++ optional config.services.mysql.enable "mysql.service"
++ optional config.services.mysql.enable "mysql.service" ++ optional config.services.postgresql.enable "postgresql.service"
++ optional config.services.postgresql.enable "postgresql.service" ++ optional config.services.tomcat.enable "tomcat.service"
++ optional config.services.tomcat.enable "tomcat.service" ++ optional config.services.svnserve.enable "svnserve.service"
++ optional config.services.svnserve.enable "svnserve.service" ++ optional config.services.mongodb.enable "mongodb.service";
++ optional config.services.mongodb.enable "mongodb.service";
restartIfChanged = false; restartIfChanged = false;
path = [ pkgs.nix pkgs.disnix dysnomia "/run/current-system/sw" ];
environment = {
HOME = "/root";
};
preStart = ''
mkdir -p /etc/systemd-mutable/system
if [ ! -f /etc/systemd-mutable/system/dysnomia.target ]
then
( echo "[Unit]"
echo "Description=Services that are activated and deactivated by Dysnomia"
echo "After=final.target"
) > /etc/systemd-mutable/system/dysnomia.target
fi
'';
exec = "disnix-service"; path = [ pkgs.nix pkgs.disnix dysnomia "/run/current-system/sw" ];
environment = {
HOME = "/root";
}; };
preStart = ''
mkdir -p /etc/systemd-mutable/system
if [ ! -f /etc/systemd-mutable/system/dysnomia.target ]
then
( echo "[Unit]"
echo "Description=Services that are activated and deactivated by Dysnomia"
echo "After=final.target"
) > /etc/systemd-mutable/system/dysnomia.target
fi
'';
script = "disnix-service";
};
} // optionalAttrs cfg.publishAvahi { } // optionalAttrs cfg.publishAvahi {
disnixAvahi = disnixAvahi = {
{ description = "Disnix Avahi publisher"; description = "Disnix Avahi publisher";
wants = [ "avahi-daemon.service" ];
wantedBy = [ "multi-user.target" ];
startOn = "started avahi-daemon"; script = ''
${pkgs.avahi}/bin/avahi-publish-service disnix-${config.networking.hostName} _disnix._tcp 22 \
exec = "mem=$(grep 'MemTotal:' /proc/meminfo | sed -e 's/kB//' -e 's/MemTotal://' -e 's/ //g')" \
'' ${concatMapStrings (infrastructureAttrName:
${pkgs.avahi}/bin/avahi-publish-service disnix-${config.networking.hostName} _disnix._tcp 22 \ let infrastructureAttrValue = getAttr infrastructureAttrName (cfg.infrastructure);
"mem=$(grep 'MemTotal:' /proc/meminfo | sed -e 's/kB//' -e 's/MemTotal://' -e 's/ //g')" \ in
${concatMapStrings (infrastructureAttrName: if isInt infrastructureAttrValue then
let infrastructureAttrValue = getAttr infrastructureAttrName (cfg.infrastructure); ''${infrastructureAttrName}=${toString infrastructureAttrValue} \
in ''
if isInt infrastructureAttrValue then else
''${infrastructureAttrName}=${toString infrastructureAttrValue} \ ''${infrastructureAttrName}=\"${infrastructureAttrValue}\" \
'' ''
else ) (attrNames (cfg.infrastructure))}
''${infrastructureAttrName}=\"${infrastructureAttrValue}\" \ '';
'' };
) (attrNames (cfg.infrastructure))}
'';
};
}; };
}; };
} }

View File

@ -57,54 +57,51 @@ in
home = "/homeless-shelter"; home = "/homeless-shelter";
}; };
jobs.felix = systemd.services.felix = {
{ description = "Felix server"; description = "Felix server";
wantedBy = [ "multi-user.target" ];
preStart = preStart = ''
'' # Initialise felix instance on first startup
# Initialise felix instance on first startup if [ ! -d /var/felix ]
if [ ! -d /var/felix ] then
then # Symlink system files
# Symlink system files
mkdir -p /var/felix mkdir -p /var/felix
chown ${cfg.user}:${cfg.group} /var/felix chown ${cfg.user}:${cfg.group} /var/felix
for i in ${pkgs.felix}/* for i in ${pkgs.felix}/*
do do
if [ "$i" != "${pkgs.felix}/bundle" ] if [ "$i" != "${pkgs.felix}/bundle" ]
then then
ln -sfn $i /var/felix/$(basename $i) ln -sfn $i /var/felix/$(basename $i)
fi fi
done done
# Symlink bundles # Symlink bundles
mkdir -p /var/felix/bundle mkdir -p /var/felix/bundle
chown ${cfg.user}:${cfg.group} /var/felix/bundle chown ${cfg.user}:${cfg.group} /var/felix/bundle
for i in ${pkgs.felix}/bundle/* ${toString cfg.bundles} for i in ${pkgs.felix}/bundle/* ${toString cfg.bundles}
do do
if [ -f $i ] if [ -f $i ]
then then
ln -sfn $i /var/felix/bundle/$(basename $i) ln -sfn $i /var/felix/bundle/$(basename $i)
elif [ -d $i ] elif [ -d $i ]
then then
for j in $i/bundle/* for j in $i/bundle/*
do do
ln -sfn $j /var/felix/bundle/$(basename $j) ln -sfn $j /var/felix/bundle/$(basename $j)
done done
fi fi
done done
fi fi
''; '';
script =
''
cd /var/felix
${pkgs.su}/bin/su -s ${pkgs.bash}/bin/sh ${cfg.user} -c '${pkgs.jre}/bin/java -jar bin/felix.jar'
'';
};
script = ''
cd /var/felix
${pkgs.su}/bin/su -s ${pkgs.bash}/bin/sh ${cfg.user} -c '${pkgs.jre}/bin/java -jar bin/felix.jar'
'';
};
}; };
} }

View File

@ -49,26 +49,20 @@ in {
home = stateDir; home = stateDir;
}; };
jobs.foldingAtHome = systemd.services.foldingathome = {
{ name = "foldingathome"; after = [ "network-interfaces.target" ];
wantedBy = [ "multi-user.target" ];
startOn = "started network-interfaces"; preStart = ''
stopOn = "stopping network-interfaces"; mkdir -m 0755 -p ${stateDir}
chown ${fahUser} ${stateDir}
preStart = cp -f ${pkgs.writeText "client.cfg" cfg.config} ${stateDir}/client.cfg
''
mkdir -m 0755 -p ${stateDir}
chown ${fahUser} ${stateDir}
cp -f ${pkgs.writeText "client.cfg" cfg.config} ${stateDir}/client.cfg
'';
exec = "${pkgs.su}/bin/su -s ${pkgs.stdenv.shell} ${fahUser} -c 'cd ${stateDir}; ${pkgs.foldingathome}/bin/fah6'";
};
services.foldingAtHome.config = ''
[settings]
username=${cfg.nickname}
''; '';
script = "${pkgs.su}/bin/su -s ${pkgs.stdenv.shell} ${fahUser} -c 'cd ${stateDir}; ${pkgs.foldingathome}/bin/fah6'";
};
services.foldingAtHome.config = ''
[settings]
username=${cfg.nickname}
'';
}; };
} }

View File

@ -34,13 +34,11 @@ in
###### implementation ###### implementation
config = mkIf cfg.enable { config = mkIf cfg.enable {
jobs.svnserve = { systemd.services.svnserve = {
startOn = "started network-interfaces"; after = [ "network-interfaces.target" ];
stopOn = "stopping network-interfaces"; wantedBy = [ "multi-user.target" ];
preStart = "mkdir -p ${cfg.svnBaseDir}"; preStart = "mkdir -p ${cfg.svnBaseDir}";
script = "${pkgs.subversion}/bin/svnserve -r ${cfg.svnBaseDir} -d --foreground --pid-file=/var/run/svnserve.pid";
exec = "${pkgs.subversion}/bin/svnserve -r ${cfg.svnBaseDir} -d --foreground --pid-file=/var/run/svnserve.pid";
}; };
}; };
} }

View File

@ -19,10 +19,6 @@ in
default = ""; default = "";
description = "monit.conf content"; description = "monit.conf content";
}; };
startOn = mkOption {
default = "started network-interfaces";
description = "What Monit supposes to be already present";
};
}; };
}; };
@ -39,14 +35,12 @@ in
} }
]; ];
jobs.monit = { systemd.services.monit = {
description = "Monit system watcher"; description = "Monit system watcher";
after = [ "network-interfaces.target" ];
startOn = config.services.monit.startOn; wantedBy = [ "multi-user.target" ];
script = "${pkgs.monit}/bin/monit -I -c /etc/monit.conf";
exec = "${pkgs.monit}/bin/monit -I -c /etc/monit.conf"; serviceConfig.Restart = "always";
respawn = true;
}; };
}; };
} }

View File

@ -180,31 +180,36 @@ in
environment.systemPackages = [ pkgs.nut ]; environment.systemPackages = [ pkgs.nut ];
jobs.upsmon = { systemd.services.upsmon = {
description = "Uninterruptible Power Supplies (Monitor)"; description = "Uninterruptible Power Supplies (Monitor)";
startOn = "ip-up"; wantedBy = [ "ip-up.target" ];
daemonType = "fork"; serviceConfig.Type = "forking";
exec = ''${pkgs.nut}/sbin/upsmon''; script = "${pkgs.nut}/sbin/upsmon";
environment.NUT_CONFPATH = "/etc/nut/"; environment.NUT_CONFPATH = "/etc/nut/";
environment.NUT_STATEPATH = "/var/lib/nut/"; environment.NUT_STATEPATH = "/var/lib/nut/";
}; };
jobs.upsd = { systemd.services.upsd = {
description = "Uninterruptible Power Supplies (Daemon)"; description = "Uninterruptible Power Supplies (Daemon)";
startOn = "started network-interfaces and started upsmon"; wantedBy = [ "multi-user.target" ];
daemonType = "fork"; after = [ "network-interfaces.target" "upsmon.service" ];
serviceConfig.Type = "forking";
# TODO: replace 'root' by another username. # TODO: replace 'root' by another username.
exec = ''${pkgs.nut}/sbin/upsd -u root''; script = "${pkgs.nut}/sbin/upsd -u root";
environment.NUT_CONFPATH = "/etc/nut/"; environment.NUT_CONFPATH = "/etc/nut/";
environment.NUT_STATEPATH = "/var/lib/nut/"; environment.NUT_STATEPATH = "/var/lib/nut/";
}; };
jobs.upsdrv = { systemd.services.upsdrv = {
description = "Uninterruptible Power Supplies (Register all UPS)"; description = "Uninterruptible Power Supplies (Register all UPS)";
startOn = "started upsd"; wantedBy = [ "multi-user.target" ];
after = [ "upsd.service" ];
# TODO: replace 'root' by another username. # TODO: replace 'root' by another username.
exec = ''${pkgs.nut}/bin/upsdrvctl -u root start''; script = ''${pkgs.nut}/bin/upsdrvctl -u root start'';
task = true; serviceConfig = {
Type = "oneshot";
RemainAfterExit = true;
};
environment.NUT_CONFPATH = "/etc/nut/"; environment.NUT_CONFPATH = "/etc/nut/";
environment.NUT_STATEPATH = "/var/lib/nut/"; environment.NUT_STATEPATH = "/var/lib/nut/";
}; };

View File

@ -31,13 +31,13 @@ let cfg = config.services.drbd; in
}; };
###### implementation ###### implementation
config = mkIf cfg.enable { config = mkIf cfg.enable {
environment.systemPackages = [ pkgs.drbd ]; environment.systemPackages = [ pkgs.drbd ];
services.udev.packages = [ pkgs.drbd ]; services.udev.packages = [ pkgs.drbd ];
boot.kernelModules = [ "drbd" ]; boot.kernelModules = [ "drbd" ];
@ -52,26 +52,16 @@ let cfg = config.services.drbd; in
target = "drbd.conf"; target = "drbd.conf";
}; };
jobs.drbd_up = systemd.services.drbd = {
{ name = "drbd-up"; after = [ "systemd-udev.settle.service" ];
startOn = "stopped udevtrigger or ip-up"; wants = [ "systemd-udev.settle.service" ];
task = true; wantedBy = [ "ip-up.target" ];
script = script = ''
'' ${pkgs.drbd}/sbin/drbdadm up all
${pkgs.drbd}/sbin/drbdadm up all '';
''; serviceConfig.ExecStop = ''
}; ${pkgs.drbd}/sbin/drbdadm down all
'';
jobs.drbd_down = };
{ name = "drbd-down";
startOn = "starting shutdown";
task = true;
script =
''
${pkgs.drbd}/sbin/drbdadm down all
'';
};
}; };
} }

View File

@ -72,34 +72,28 @@ in
} }
]; ];
jobs.openafsClient = systemd.services.afsd = {
{ name = "afsd"; description = "AFS client";
wantedBy = [ "multi-user.target" ];
after = [ "network-interfaces.target" ];
description = "AFS client"; preStart = ''
mkdir -p -m 0755 /afs
startOn = "started network-interfaces"; mkdir -m 0700 -p ${cfg.cacheDirectory}
stopOn = "stopping network-interfaces"; ${pkgs.module_init_tools}/sbin/insmod ${openafsPkgs}/lib/openafs/libafs-*.ko || true
${openafsPkgs}/sbin/afsd -confdir ${afsConfig} -cachedir ${cfg.cacheDirectory} ${if cfg.sparse then "-dynroot-sparse" else "-dynroot"} -fakestat -afsdb
preStart = '' ${openafsPkgs}/bin/fs setcrypt ${if cfg.crypt then "on" else "off"}
mkdir -p -m 0755 /afs '';
mkdir -m 0700 -p ${cfg.cacheDirectory}
${pkgs.module_init_tools}/sbin/insmod ${openafsPkgs}/lib/openafs/libafs-*.ko || true
${openafsPkgs}/sbin/afsd -confdir ${afsConfig} -cachedir ${cfg.cacheDirectory} ${if cfg.sparse then "-dynroot-sparse" else "-dynroot"} -fakestat -afsdb
${openafsPkgs}/bin/fs setcrypt ${if cfg.crypt then "on" else "off"}
'';
# Doing this in preStop, because after these commands AFS is basically
# stopped, so systemd has nothing to do, just noticing it. If done in
# postStop, then we get a hang + kernel oops, because AFS can't be
# stopped simply by sending signals to processes.
preStop = ''
${pkgs.utillinux}/bin/umount /afs
${openafsPkgs}/sbin/afsd -shutdown
${pkgs.module_init_tools}/sbin/rmmod libafs
'';
};
# Doing this in preStop, because after these commands AFS is basically
# stopped, so systemd has nothing to do, just noticing it. If done in
# postStop, then we get a hang + kernel oops, because AFS can't be
# stopped simply by sending signals to processes.
preStop = ''
${pkgs.utillinux}/bin/umount /afs
${openafsPkgs}/sbin/afsd -shutdown
${pkgs.module_init_tools}/sbin/rmmod libafs
'';
};
}; };
} }

View File

@ -57,22 +57,19 @@ in
gid = config.ids.gids.amule; gid = config.ids.gids.amule;
} ]; } ];
jobs.amuled = systemd.services.amuled = {
{ description = "AMule daemon"; description = "AMule daemon";
wantedBy = [ "ip-up.target" ];
startOn = "ip-up"; preStart = ''
mkdir -p ${cfg.dataDir}
preStart = '' chown ${user} ${cfg.dataDir}
mkdir -p ${cfg.dataDir} '';
chown ${user} ${cfg.dataDir}
'';
exec = ''
${pkgs.su}/bin/su -s ${pkgs.stdenv.shell} ${user} \
-c 'HOME="${cfg.dataDir}" ${pkgs.amuleDaemon}/bin/amuled'
'';
};
script = ''
${pkgs.su}/bin/su -s ${pkgs.stdenv.shell} ${user} \
-c 'HOME="${cfg.dataDir}" ${pkgs.amuleDaemon}/bin/amuled'
'';
};
}; };
} }

View File

@ -142,20 +142,17 @@ in
description = "BIND daemon user"; description = "BIND daemon user";
}; };
jobs.bind = systemd.services.bind = {
{ description = "BIND name server job"; description = "BIND name server job";
after = [ "network-interfaces.target" ];
wantedBy = [ "multi-user.target" ];
startOn = "started network-interfaces"; preStart = ''
${pkgs.coreutils}/bin/mkdir -p /var/run/named
preStart = chown ${bindUser} /var/run/named
'' '';
${pkgs.coreutils}/bin/mkdir -p /var/run/named
chown ${bindUser} /var/run/named
'';
exec = "${pkgs.bind}/sbin/named -u ${bindUser} ${optionalString cfg.ipv4Only "-4"} -c ${cfg.configFile} -f";
};
script = "${pkgs.bind}/sbin/named -u ${bindUser} ${optionalString cfg.ipv4Only "-4"} -c ${cfg.configFile} -f";
};
}; };
} }

View File

@ -56,81 +56,73 @@ in
config = mkIf cfg.enable { config = mkIf cfg.enable {
environment.systemPackages = [ pkgs.ejabberd ]; environment.systemPackages = [ pkgs.ejabberd ];
jobs.ejabberd = systemd.services.ejabberd = {
{ description = "EJabberd server"; description = "EJabberd server";
after = [ "network-interfaces.target" ];
wantedBy = [ "multi-user.target" ];
path = with pkgs; [ ejabberd coreutils bash gnused ];
startOn = "started network-interfaces"; preStart = ''
stopOn = "stopping network-interfaces"; # Initialise state data
mkdir -p ${cfg.logsDir}
environment = { if ! test -d ${cfg.spoolDir}
PATH = "$PATH:${pkgs.ejabberd}/sbin:${pkgs.ejabberd}/bin:${pkgs.coreutils}/bin:${pkgs.bash}/bin:${pkgs.gnused}/bin"; then
}; initialize=1
cp -av ${pkgs.ejabberd}/var/lib/ejabberd /var/lib
fi
preStart = if ! test -d ${cfg.confDir}
then
mkdir -p ${cfg.confDir}
cp ${pkgs.ejabberd}/etc/ejabberd/* ${cfg.confDir}
sed -e 's|{hosts, \["localhost"\]}.|{hosts, \[${cfg.virtualHosts}\]}.|' ${pkgs.ejabberd}/etc/ejabberd/ejabberd.cfg > ${cfg.confDir}/ejabberd.cfg
fi
ejabberdctl --config-dir ${cfg.confDir} --logs ${cfg.logsDir} --spool ${cfg.spoolDir} start
${if cfg.loadDumps == [] then "" else
'' ''
PATH="$PATH:${pkgs.ejabberd}/sbin:${pkgs.ejabberd}/bin:${pkgs.coreutils}/bin:${pkgs.bash}/bin:${pkgs.gnused}/bin"; if [ "$initialize" = "1" ]
# Initialise state data
mkdir -p ${cfg.logsDir}
if ! test -d ${cfg.spoolDir}
then then
initialize=1 # Wait until the ejabberd server is available for use
cp -av ${pkgs.ejabberd}/var/lib/ejabberd /var/lib count=0
while ! ejabberdctl --config-dir ${cfg.confDir} --logs ${cfg.logsDir} --spool ${cfg.spoolDir} status
do
if [ $count -eq 30 ]
then
echo "Tried 30 times, giving up..."
exit 1
fi
echo "Ejabberd daemon not yet started. Waiting for 1 second..."
count=$((count++))
sleep 1
done
${concatMapStrings (dump:
''
echo "Importing dump: ${dump}"
if [ -f ${dump} ]
then
ejabberdctl --config-dir ${cfg.confDir} --logs ${cfg.logsDir} --spool ${cfg.spoolDir} load ${dump}
elif [ -d ${dump} ]
then
for i in ${dump}/ejabberd-dump/*
do
ejabberdctl --config-dir ${cfg.confDir} --logs ${cfg.logsDir} --spool ${cfg.spoolDir} load $i
done
fi
'') cfg.loadDumps}
fi fi
''}
'';
if ! test -d ${cfg.confDir} postStop = ''
then ejabberdctl --config-dir ${cfg.confDir} --logs ${cfg.logsDir} --spool ${cfg.spoolDir} stop
mkdir -p ${cfg.confDir} '';
cp ${pkgs.ejabberd}/etc/ejabberd/* ${cfg.confDir} };
sed -e 's|{hosts, \["localhost"\]}.|{hosts, \[${cfg.virtualHosts}\]}.|' ${pkgs.ejabberd}/etc/ejabberd/ejabberd.cfg > ${cfg.confDir}/ejabberd.cfg
fi
ejabberdctl --config-dir ${cfg.confDir} --logs ${cfg.logsDir} --spool ${cfg.spoolDir} start
${if cfg.loadDumps == [] then "" else
''
if [ "$initialize" = "1" ]
then
# Wait until the ejabberd server is available for use
count=0
while ! ejabberdctl --config-dir ${cfg.confDir} --logs ${cfg.logsDir} --spool ${cfg.spoolDir} status
do
if [ $count -eq 30 ]
then
echo "Tried 30 times, giving up..."
exit 1
fi
echo "Ejabberd daemon not yet started. Waiting for 1 second..."
count=$((count++))
sleep 1
done
${concatMapStrings (dump:
''
echo "Importing dump: ${dump}"
if [ -f ${dump} ]
then
ejabberdctl --config-dir ${cfg.confDir} --logs ${cfg.logsDir} --spool ${cfg.spoolDir} load ${dump}
elif [ -d ${dump} ]
then
for i in ${dump}/ejabberd-dump/*
do
ejabberdctl --config-dir ${cfg.confDir} --logs ${cfg.logsDir} --spool ${cfg.spoolDir} load $i
done
fi
'') cfg.loadDumps}
fi
''}
'';
postStop =
''
ejabberdctl --config-dir ${cfg.confDir} --logs ${cfg.logsDir} --spool ${cfg.spoolDir} stop
'';
};
security.pam.services.ejabberd = {}; security.pam.services.ejabberd = {};

View File

@ -16,7 +16,7 @@ in
type = types.bool; type = types.bool;
default = false; default = false;
description = '' description = ''
Enable Git daemon, which allows public hosting of git repositories Enable Git daemon, which allows public hosting of git repositories
without any access controls. This is mostly intended for read-only access. without any access controls. This is mostly intended for read-only access.
You can allow write access by setting daemon.receivepack configuration You can allow write access by setting daemon.receivepack configuration
@ -115,10 +115,9 @@ in
gid = config.ids.gids.git; gid = config.ids.gids.git;
}; };
jobs.gitDaemon = { systemd.services."git-daemon" = {
name = "git-daemon"; wantedBy = [ "ip-up.target" ];
startOn = "ip-up"; script = "${pkgs.git}/bin/git daemon --reuseaddr "
exec = "${pkgs.git}/bin/git daemon --reuseaddr "
+ (optionalString (cfg.basePath != "") "--base-path=${cfg.basePath} ") + (optionalString (cfg.basePath != "") "--base-path=${cfg.basePath} ")
+ (optionalString (cfg.listenAddress != "") "--listen=${cfg.listenAddress} ") + (optionalString (cfg.listenAddress != "") "--listen=${cfg.listenAddress} ")
+ "--port=${toString cfg.port} --user=${cfg.user} --group=${cfg.group} ${cfg.options} " + "--port=${toString cfg.port} --user=${cfg.user} --group=${cfg.group} ${cfg.options} "

View File

@ -37,13 +37,6 @@ let
''; '';
executable = true; executable = true;
}); });
exec = "${pkgs.gvpe}/sbin/gvpe -c /var/gvpe -D ${cfg.nodename} "
+ " ${cfg.nodename}.pid-file=/var/gvpe/gvpe.pid"
+ " ${cfg.nodename}.if-up=if-up"
+ " &> /var/log/gvpe";
inherit (cfg) startOn stopOn;
in in
{ {
@ -55,18 +48,6 @@ in
Whether to run gvpe Whether to run gvpe
''; '';
}; };
startOn = mkOption {
default = "started network-interfaces";
description = ''
Condition to start GVPE
'';
};
stopOn = mkOption {
default = "stopping network-interfaces";
description = ''
Condition to stop GVPE
'';
};
nodename = mkOption { nodename = mkOption {
default = null; default = null;
description ='' description =''
@ -122,10 +103,10 @@ in
}; };
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
jobs.gvpe = { systemd.services.gvpe = {
description = "GNU Virtual Private Ethernet node"; description = "GNU Virtual Private Ethernet node";
after = [ "network-interfaces.target" ];
inherit startOn stopOn; wantedBy = [ "multi-user.target" ];
preStart = '' preStart = ''
mkdir -p /var/gvpe mkdir -p /var/gvpe
@ -136,9 +117,12 @@ in
cp ${ifupScript} /var/gvpe/if-up cp ${ifupScript} /var/gvpe/if-up
''; '';
inherit exec; script = "${pkgs.gvpe}/sbin/gvpe -c /var/gvpe -D ${cfg.nodename} "
+ " ${cfg.nodename}.pid-file=/var/gvpe/gvpe.pid"
+ " ${cfg.nodename}.if-up=if-up"
+ " &> /var/log/gvpe";
respawn = true; serviceConfig.Restart = "always";
}; };
}; };
} }

View File

@ -66,23 +66,17 @@ in
###### implementation ###### implementation
config = mkIf cfg.enable { config = mkIf cfg.enable {
systemd.services.ifplugd = {
jobs.ifplugd = description = "Network interface connectivity monitor";
{ description = "Network interface connectivity monitor"; after = [ "network-interfaces.target" ];
wantedBy = [ "multi-user.target" ];
startOn = "started network-interfaces"; script = ''
stopOn = "stopping network-interfaces"; ${ifplugd}/sbin/ifplugd --no-daemon --no-startup --no-shutdown \
${if config.networking.interfaceMonitor.beep then "" else "--no-beep"} \
exec = --run ${plugScript}
'' '';
${ifplugd}/sbin/ifplugd --no-daemon --no-startup --no-shutdown \ };
${if config.networking.interfaceMonitor.beep then "" else "--no-beep"} \
--run ${plugScript}
'';
};
environment.systemPackages = [ ifplugd ]; environment.systemPackages = [ ifplugd ];
}; };
} }

View File

@ -121,17 +121,11 @@ in
users.extraGroups.ircd.gid = config.ids.gids.ircd; users.extraGroups.ircd.gid = config.ids.gids.ircd;
jobs.ircd_hybrid = systemd.services."ircd-hybrid" = {
{ name = "ircd-hybrid"; description = "IRCD Hybrid server";
after = [ "started networking" ];
description = "IRCD Hybrid server"; wantedBy = [ "multi-user.target" ];
script = "${ircdService}/bin/control start";
startOn = "started networking"; };
stopOn = "stopping networking";
exec = "${ircdService}/bin/control start";
};
}; };
} }

View File

@ -20,18 +20,17 @@ with lib;
}; };
###### implementation ###### implementation
config = mkIf config.services.oidentd.enable { config = mkIf config.services.oidentd.enable {
systemd.services.oidentd = {
jobs.oidentd = after = [ "network-interfaces.target" ];
{ startOn = "started network-interfaces"; wantedBy = [ "multi-user.target" ];
daemonType = "fork"; serviceConfig.Type = "forking";
exec = "${pkgs.oidentd}/sbin/oidentd -u oidentd -g nogroup" + script = "${pkgs.oidentd}/sbin/oidentd -u oidentd -g nogroup" +
optionalString config.networking.enableIPv6 " -a ::" optionalString config.networking.enableIPv6 " -a ::";
; };
};
users.extraUsers.oidentd = { users.extraUsers.oidentd = {
description = "Ident Protocol daemon user"; description = "Ident Protocol daemon user";

View File

@ -2,17 +2,7 @@
with lib; with lib;
let
inherit (pkgs) jre openfire coreutils which gnugrep gawk gnused;
extraStartDependency =
if config.services.openfire.usePostgreSQL then "and started postgresql" else "";
in
{ {
###### interface ###### interface
options = { options = {
@ -47,26 +37,24 @@ in
message = "OpenFire assertion failed."; message = "OpenFire assertion failed.";
}; };
jobs.openfire = systemd.services.openfire = {
{ description = "OpenFire XMPP server"; description = "OpenFire XMPP server";
wantedBy = [ "multi-user.target" ];
startOn = "started networking ${extraStartDependency}"; after = [ "networking.target" ] ++
optional config.services.openfire.usePostgreSQL "postgresql.service";
script = path = with pkgs; [ jre openfire coreutils which gnugrep gawk gnused ];
'' script = ''
export PATH=${jre}/bin:${openfire}/bin:${coreutils}/bin:${which}/bin:${gnugrep}/bin:${gawk}/bin:${gnused}/bin export HOME=/tmp
export HOME=/tmp mkdir /var/log/openfire || true
mkdir /var/log/openfire || true mkdir /etc/openfire || true
mkdir /etc/openfire || true for i in ${openfire}/conf.inst/*; do
for i in ${openfire}/conf.inst/*; do if ! test -f /etc/openfire/$(basename $i); then
if ! test -f /etc/openfire/$(basename $i); then cp $i /etc/openfire/
cp $i /etc/openfire/ fi
fi done
done openfire start
openfire start ''; # */
''; # */ };
};
}; };
} }

View File

@ -83,21 +83,14 @@ in
gid = config.ids.gids.prayer; gid = config.ids.gids.prayer;
}; };
jobs.prayer = systemd.services.prayer = {
{ name = "prayer"; wantedBy = [ "multi-user.target" ];
serviceConfig.Type = "forking";
startOn = "startup"; preStart = ''
mkdir -m 0755 -p ${stateDir}
preStart = chown ${prayerUser}.${prayerGroup} ${stateDir}
'' '';
mkdir -m 0755 -p ${stateDir} script = "${prayer}/sbin/prayer --config-file=${prayerCfg}";
chown ${prayerUser}.${prayerGroup} ${stateDir} };
'';
daemonType = "daemon";
exec = "${prayer}/sbin/prayer --config-file=${prayerCfg}";
};
}; };
} }

View File

@ -33,16 +33,14 @@ in
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
environment.systemPackages = [ pkgs.pythonPackages.radicale ]; environment.systemPackages = [ pkgs.pythonPackages.radicale ];
jobs.radicale = { systemd.services.radicale = {
description = "A Simple Calendar and Contact Server"; description = "A Simple Calendar and Contact Server";
startOn = "started network-interfaces"; after = [ "network-interfaces.target" ];
exec = "${pkgs.pythonPackages.radicale}/bin/radicale -C ${confFile} -d"; wantedBy = [ "multi-user.target" ];
daemonType = "fork"; script = "${pkgs.pythonPackages.radicale}/bin/radicale -C ${confFile} -d";
serviceConfig.Type = "forking";
}; };
}; };
} }

View File

@ -61,9 +61,10 @@ in
dataDir = cfg.dataDir; dataDir = cfg.dataDir;
})) }))
]; ];
jobs.softether = { systemd.services.softether = {
description = "SoftEther VPN services initial job"; description = "SoftEther VPN services initial job";
startOn = "started network-interfaces"; after = [ "network-interfaces.target" ];
wantedBy = [ "multi-user.target" ];
preStart = '' preStart = ''
for d in vpnserver vpnbridge vpnclient vpncmd; do for d in vpnserver vpnbridge vpnclient vpncmd; do
if ! test -e ${cfg.dataDir}/$d; then if ! test -e ${cfg.dataDir}/$d; then
@ -74,7 +75,6 @@ in
rm -rf ${cfg.dataDir}/vpncmd/vpncmd rm -rf ${cfg.dataDir}/vpncmd/vpncmd
ln -s ${pkg}${cfg.dataDir}/vpncmd/vpncmd ${cfg.dataDir}/vpncmd/vpncmd ln -s ${pkg}${cfg.dataDir}/vpncmd/vpncmd ${cfg.dataDir}/vpncmd/vpncmd
''; '';
exec = "true";
}; };
} }

View File

@ -117,62 +117,60 @@ in
services.lshd.subsystems = [ ["sftp" "${pkgs.lsh}/sbin/sftp-server"] ]; services.lshd.subsystems = [ ["sftp" "${pkgs.lsh}/sbin/sftp-server"] ];
jobs.lshd = systemd.services.lshd = {
{ description = "GNU lshd SSH2 daemon"; description = "GNU lshd SSH2 daemon";
startOn = "started network-interfaces"; after = [ "network-interfaces.target" ];
stopOn = "stopping network-interfaces";
environment = wantedBy = [ "multi-user.target" ];
{ LD_LIBRARY_PATH = config.system.nssModules.path; };
preStart = environment = {
'' LD_LIBRARY_PATH = config.system.nssModules.path;
test -d /etc/lsh || mkdir -m 0755 -p /etc/lsh
test -d /var/spool/lsh || mkdir -m 0755 -p /var/spool/lsh
if ! test -f /var/spool/lsh/yarrow-seed-file
then
# XXX: It would be nice to provide feedback to the
# user when this fails, so that they can retry it
# manually.
${lsh}/bin/lsh-make-seed --sloppy \
-o /var/spool/lsh/yarrow-seed-file
fi
if ! test -f "${cfg.hostKey}"
then
${lsh}/bin/lsh-keygen --server | \
${lsh}/bin/lsh-writekey --server -o "${cfg.hostKey}"
fi
'';
exec = with cfg;
''
${lsh}/sbin/lshd --daemonic \
--password-helper="${lsh}/sbin/lsh-pam-checkpw" \
-p ${toString portNumber} \
${if interfaces == [] then ""
else (concatStrings (map (i: "--interface=\"${i}\"")
interfaces))} \
-h "${hostKey}" \
${if !syslog then "--no-syslog" else ""} \
${if passwordAuthentication then "--password" else "--no-password" } \
${if publicKeyAuthentication then "--publickey" else "--no-publickey" } \
${if rootLogin then "--root-login" else "--no-root-login" } \
${if loginShell != null then "--login-shell=\"${loginShell}\"" else "" } \
${if srpKeyExchange then "--srp-keyexchange" else "--no-srp-keyexchange" } \
${if !tcpForwarding then "--no-tcpip-forward" else "--tcpip-forward"} \
${if x11Forwarding then "--x11-forward" else "--no-x11-forward" } \
--subsystems=${concatStringsSep ","
(map (pair: (head pair) + "=" +
(head (tail pair)))
subsystems)}
'';
}; };
preStart = ''
test -d /etc/lsh || mkdir -m 0755 -p /etc/lsh
test -d /var/spool/lsh || mkdir -m 0755 -p /var/spool/lsh
if ! test -f /var/spool/lsh/yarrow-seed-file
then
# XXX: It would be nice to provide feedback to the
# user when this fails, so that they can retry it
# manually.
${lsh}/bin/lsh-make-seed --sloppy \
-o /var/spool/lsh/yarrow-seed-file
fi
if ! test -f "${cfg.hostKey}"
then
${lsh}/bin/lsh-keygen --server | \
${lsh}/bin/lsh-writekey --server -o "${cfg.hostKey}"
fi
'';
script = with cfg; ''
${lsh}/sbin/lshd --daemonic \
--password-helper="${lsh}/sbin/lsh-pam-checkpw" \
-p ${toString portNumber} \
${if interfaces == [] then ""
else (concatStrings (map (i: "--interface=\"${i}\"")
interfaces))} \
-h "${hostKey}" \
${if !syslog then "--no-syslog" else ""} \
${if passwordAuthentication then "--password" else "--no-password" } \
${if publicKeyAuthentication then "--publickey" else "--no-publickey" } \
${if rootLogin then "--root-login" else "--no-root-login" } \
${if loginShell != null then "--login-shell=\"${loginShell}\"" else "" } \
${if srpKeyExchange then "--srp-keyexchange" else "--no-srp-keyexchange" } \
${if !tcpForwarding then "--no-tcpip-forward" else "--tcpip-forward"} \
${if x11Forwarding then "--x11-forward" else "--no-x11-forward" } \
--subsystems=${concatStringsSep ","
(map (pair: (head pair) + "=" +
(head (tail pair)))
subsystems)}
'';
};
security.pam.services.lshd = {}; security.pam.services.lshd = {};
}; };
} }

View File

@ -35,11 +35,11 @@ in
description = "tcpcrypt daemon user"; description = "tcpcrypt daemon user";
}; };
jobs.tcpcrypt = { systemd.services.tcpcrypt = {
description = "tcpcrypt"; description = "tcpcrypt";
wantedBy = ["multi-user.target"]; wantedBy = [ "multi-user.target" ];
after = ["network-interfaces.target"]; after = [ "network-interfaces.target" ];
path = [ pkgs.iptables pkgs.tcpcrypt pkgs.procps ]; path = [ pkgs.iptables pkgs.tcpcrypt pkgs.procps ];
@ -58,7 +58,7 @@ in
iptables -t mangle -I POSTROUTING -j nixos-tcpcrypt iptables -t mangle -I POSTROUTING -j nixos-tcpcrypt
''; '';
exec = "tcpcryptd -x 0x10"; script = "tcpcryptd -x 0x10";
postStop = '' postStop = ''
if [ -f /run/pre-tcpcrypt-ecn-state ]; then if [ -f /run/pre-tcpcrypt-ecn-state ]; then

View File

@ -25,17 +25,13 @@ with lib;
environment.systemPackages = [pkgs.wicd]; environment.systemPackages = [pkgs.wicd];
jobs.wicd = systemd.services.wicd = {
{ startOn = "started network-interfaces"; after = [ "network-interfaces.target" ];
stopOn = "stopping network-interfaces"; wantedBy = [ "multi-user.target" ];
script = "${pkgs.wicd}/sbin/wicd -f";
script = };
"${pkgs.wicd}/sbin/wicd -f";
};
services.dbus.enable = true; services.dbus.enable = true;
services.dbus.packages = [pkgs.wicd]; services.dbus.packages = [pkgs.wicd];
}; };
} }

View File

@ -6,8 +6,6 @@ let
cfg = config.services.xinetd; cfg = config.services.xinetd;
inherit (pkgs) xinetd;
configFile = pkgs.writeText "xinetd.conf" configFile = pkgs.writeText "xinetd.conf"
'' ''
defaults defaults
@ -141,18 +139,12 @@ in
###### implementation ###### implementation
config = mkIf cfg.enable { config = mkIf cfg.enable {
systemd.services.xinetd = {
jobs.xinetd = description = "xinetd server";
{ description = "xinetd server"; after = [ "network-interfaces.target" ];
wantedBy = [ "multi-user.target" ];
startOn = "started network-interfaces"; path = [ pkgs.xinetd ];
stopOn = "stopping network-interfaces"; script = "xinetd -syslog daemon -dontfork -stayalive -f ${configFile}";
};
path = [ xinetd ];
exec = "xinetd -syslog daemon -dontfork -stayalive -f ${configFile}";
};
}; };
} }

View File

@ -66,49 +66,47 @@ in
gid = config.ids.gids.atd; gid = config.ids.gids.atd;
}; };
jobs.atd = systemd.services.atd = {
{ description = "Job Execution Daemon (atd)"; description = "Job Execution Daemon (atd)";
after = [ "systemd-udev-settle.service" ];
wants = [ "systemd-udev-settle.service" ];
wantedBy = [ "multi-user.target" ];
startOn = "stopped udevtrigger"; path = [ at ];
path = [ at ]; preStart = ''
# Snippets taken and adapted from the original `install' rule of
# the makefile.
preStart = # We assume these values are those actually used in Nixpkgs for
'' # `at'.
# Snippets taken and adapted from the original `install' rule of spooldir=/var/spool/atspool
# the makefile. jobdir=/var/spool/atjobs
etcdir=/etc/at
# We assume these values are those actually used in Nixpkgs for for dir in "$spooldir" "$jobdir" "$etcdir"; do
# `at'. if [ ! -d "$dir" ]; then
spooldir=/var/spool/atspool mkdir -p "$dir"
jobdir=/var/spool/atjobs chown atd:atd "$dir"
etcdir=/etc/at fi
done
chmod 1770 "$spooldir" "$jobdir"
${if cfg.allowEveryone then ''chmod a+rwxt "$spooldir" "$jobdir" '' else ""}
if [ ! -f "$etcdir"/at.deny ]; then
touch "$etcdir"/at.deny
chown root:atd "$etcdir"/at.deny
chmod 640 "$etcdir"/at.deny
fi
if [ ! -f "$jobdir"/.SEQ ]; then
touch "$jobdir"/.SEQ
chown atd:atd "$jobdir"/.SEQ
chmod 600 "$jobdir"/.SEQ
fi
'';
for dir in "$spooldir" "$jobdir" "$etcdir"; do script = "atd";
if [ ! -d "$dir" ]; then
mkdir -p "$dir"
chown atd:atd "$dir"
fi
done
chmod 1770 "$spooldir" "$jobdir"
${if cfg.allowEveryone then ''chmod a+rwxt "$spooldir" "$jobdir" '' else ""}
if [ ! -f "$etcdir"/at.deny ]; then
touch "$etcdir"/at.deny
chown root:atd "$etcdir"/at.deny
chmod 640 "$etcdir"/at.deny
fi
if [ ! -f "$jobdir"/.SEQ ]; then
touch "$jobdir"/.SEQ
chown atd:atd "$jobdir"/.SEQ
chmod 600 "$jobdir"/.SEQ
fi
'';
exec = "atd";
daemonType = "fork";
};
serviceConfig.Type = "forking";
};
}; };
} }

View File

@ -108,29 +108,25 @@ in
security.setuidPrograms = [ "fcrontab" ]; security.setuidPrograms = [ "fcrontab" ];
jobs.fcron = systemd.services.fcron = {
{ description = "fcron daemon"; description = "fcron daemon";
after = [ "local-fs.target" ];
wantedBy = [ "multi-user.target" ];
startOn = "startup"; # FIXME use specific path
environment = {
after = [ "local-fs.target" ]; PATH = "/run/current-system/sw/bin";
environment =
{ PATH = "/run/current-system/sw/bin";
};
preStart =
''
${pkgs.coreutils}/bin/mkdir -m 0700 -p /var/spool/fcron
# load system crontab file
${pkgs.fcron}/bin/fcrontab -u systab ${pkgs.writeText "systab" cfg.systab}
'';
daemonType = "fork";
exec = "${pkgs.fcron}/sbin/fcron -m ${toString cfg.maxSerialJobs} ${queuelen}";
}; };
}; preStart = ''
${pkgs.coreutils}/bin/mkdir -m 0700 -p /var/spool/fcron
# load system crontab file
${pkgs.fcron}/bin/fcrontab -u systab ${pkgs.writeText "systab" cfg.systab}
'';
serviceConfig.Type = "forking";
script = "${pkgs.fcron}/sbin/fcron -m ${toString cfg.maxSerialJobs} ${queuelen}";
};
};
} }

View File

@ -67,24 +67,22 @@ in {
services.cron.systemCronJobs = [ "*/${toString cfg.updater.frequency} * * * * root start fprot-updater" ]; services.cron.systemCronJobs = [ "*/${toString cfg.updater.frequency} * * * * root start fprot-updater" ];
jobs = { systemd.services."fprot-updater" = {
fprot_updater = { serviceConfig = {
name = "fprot-updater"; Type = "oneshot";
task = true; RemainAfterExit = false;
# have to copy fpupdate executable because it insists on storing the virus database in the same dir
preStart = ''
mkdir -m 0755 -p ${stateDir}
chown ${fprotUser}:${fprotGroup} ${stateDir}
cp ${pkgs.fprot}/opt/f-prot/fpupdate ${stateDir}
ln -sf ${cfg.updater.productData} ${stateDir}/product.data
'';
#setuid = fprotUser;
#setgid = fprotGroup;
exec = "/var/lib/fprot/fpupdate --keyfile ${cfg.updater.licenseKeyfile}";
}; };
wantedBy = [ "multi-user.target" ];
# have to copy fpupdate executable because it insists on storing the virus database in the same dir
preStart = ''
mkdir -m 0755 -p ${stateDir}
chown ${fprotUser}:${fprotGroup} ${stateDir}
cp ${pkgs.fprot}/opt/f-prot/fpupdate ${stateDir}
ln -sf ${cfg.updater.productData} ${stateDir}/product.data
'';
script = "/var/lib/fprot/fpupdate --keyfile ${cfg.updater.licenseKeyfile}";
}; };
}; };
} }

View File

@ -45,27 +45,20 @@ in
serverArgs = "${pkgs.heimdal}/sbin/kadmind"; serverArgs = "${pkgs.heimdal}/sbin/kadmind";
}; };
jobs.kdc = systemd.services.kdc = {
{ description = "Kerberos Domain Controller daemon"; description = "Kerberos Domain Controller daemon";
wantedBy = [ "multi-user.target" ];
preStart = ''
mkdir -m 0755 -p ${stateDir}
'';
script = "${heimdal}/sbin/kdc";
};
startOn = "ip-up"; systemd.services.kpasswdd = {
description = "Kerberos Domain Controller daemon";
preStart = wantedBy = [ "multi-user.target" ];
'' script = "${heimdal}/sbin/kpasswdd";
mkdir -m 0755 -p ${stateDir} };
'';
exec = "${heimdal}/sbin/kdc";
};
jobs.kpasswdd =
{ description = "Kerberos Domain Controller daemon";
startOn = "ip-up";
exec = "${heimdal}/sbin/kpasswdd";
};
}; };
} }

View File

@ -45,23 +45,21 @@ in
home = stateDir; home = stateDir;
}; };
jobs.uptimed = systemd.services.uptimed = {
{ description = "Uptimed daemon"; description = "Uptimed daemon";
wantedBy = [ "multi-user.target" ];
startOn = "startup"; preStart = ''
mkdir -m 0755 -p ${stateDir}
chown ${uptimedUser} ${stateDir}
preStart = if ! test -f ${stateDir}/bootid ; then
'' ${uptimed}/sbin/uptimed -b
mkdir -m 0755 -p ${stateDir} fi
chown ${uptimedUser} ${stateDir} '';
if ! test -f ${stateDir}/bootid ; then script = "${uptimed}/sbin/uptimed";
${uptimed}/sbin/uptimed -b };
fi
'';
exec = "${uptimed}/sbin/uptimed";
};
}; };

View File

@ -71,13 +71,10 @@ in
###### implementation ###### implementation
config = mkIf config.services.jboss.enable { config = mkIf config.services.jboss.enable {
systemd.services.jboss = {
jobs.jboss = description = "JBoss server";
{ description = "JBoss server"; script = "${jbossService}/bin/control start";
wantedBy = [ "multi-user.target" ];
exec = "${jbossService}/bin/control start"; };
};
}; };
} }

View File

@ -127,124 +127,205 @@ in
extraGroups = cfg.extraGroups; extraGroups = cfg.extraGroups;
}; };
jobs.tomcat = systemd.services.tomcat = {
{ description = "Apache Tomcat server"; description = "Apache Tomcat server";
wantedBy = [ "multi-user.target" ];
after = [ "network-interfaces.target" ];
serviceConfig.Type = "daemon";
startOn = "started network-interfaces"; preStart = ''
stopOn = "stopping network-interfaces"; # Create the base directory
mkdir -p ${cfg.baseDir}
daemonType = "daemon"; # Create a symlink to the bin directory of the tomcat component
ln -sfn ${tomcat}/bin ${cfg.baseDir}/bin
# Create a conf/ directory
mkdir -p ${cfg.baseDir}/conf
chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/conf
# Symlink the config files in the conf/ directory (except for catalina.properties and server.xml)
for i in $(ls ${tomcat}/conf | grep -v catalina.properties | grep -v server.xml)
do
ln -sfn ${tomcat}/conf/$i ${cfg.baseDir}/conf/`basename $i`
done
# Create subdirectory for virtual hosts
mkdir -p ${cfg.baseDir}/virtualhosts
# Create a modified catalina.properties file
# Change all references from CATALINA_HOME to CATALINA_BASE and add support for shared libraries
sed -e 's|''${catalina.home}|''${catalina.base}|g' \
-e 's|shared.loader=|shared.loader=''${catalina.base}/shared/lib/*.jar|' \
${tomcat}/conf/catalina.properties > ${cfg.baseDir}/conf/catalina.properties
# Create a modified server.xml which also includes all virtual hosts
sed -e "/<Engine name=\"Catalina\" defaultHost=\"localhost\">/a\ ${
toString (map (virtualHost: ''<Host name=\"${virtualHost.name}\" appBase=\"virtualhosts/${virtualHost.name}/webapps\" unpackWARs=\"true\" autoDeploy=\"true\" xmlValidation=\"false\" xmlNamespaceAware=\"false\" >${if cfg.logPerVirtualHost then ''<Valve className=\"org.apache.catalina.valves.AccessLogValve\" directory=\"logs/${virtualHost.name}\" prefix=\"${virtualHost.name}_access_log.\" pattern=\"combined\" resolveHosts=\"false\"/>'' else ""}</Host>'') cfg.virtualHosts)}" \
${tomcat}/conf/server.xml > ${cfg.baseDir}/conf/server.xml
# Create a logs/ directory
mkdir -p ${cfg.baseDir}/logs
chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/logs
${if cfg.logPerVirtualHost then
toString (map (h: ''
mkdir -p ${cfg.baseDir}/logs/${h.name}
chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/logs/${h.name}
'') cfg.virtualHosts) else ''''}
# Create a temp/ directory
mkdir -p ${cfg.baseDir}/temp
chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/temp
# Create a lib/ directory
mkdir -p ${cfg.baseDir}/lib
chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/lib
# Create a shared/lib directory
mkdir -p ${cfg.baseDir}/shared/lib
chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/shared/lib
# Create a webapps/ directory
mkdir -p ${cfg.baseDir}/webapps
chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/webapps
# Symlink all the given common libs files or paths into the lib/ directory
for i in ${tomcat} ${toString cfg.commonLibs}
do
if [ -f $i ]
then
# If the given web application is a file, symlink it into the common/lib/ directory
ln -sfn $i ${cfg.baseDir}/lib/`basename $i`
elif [ -d $i ]
then
# If the given web application is a directory, then iterate over the files
# in the special purpose directories and symlink them into the tomcat tree
for j in $i/lib/*
do
ln -sfn $j ${cfg.baseDir}/lib/`basename $j`
done
fi
done
# Symlink all the given shared libs files or paths into the shared/lib/ directory
for i in ${toString cfg.sharedLibs}
do
if [ -f $i ]
then
# If the given web application is a file, symlink it into the common/lib/ directory
ln -sfn $i ${cfg.baseDir}/shared/lib/`basename $i`
elif [ -d $i ]
then
# If the given web application is a directory, then iterate over the files
# in the special purpose directories and symlink them into the tomcat tree
for j in $i/shared/lib/*
do
ln -sfn $j ${cfg.baseDir}/shared/lib/`basename $j`
done
fi
done
# Symlink all the given web applications files or paths into the webapps/ directory
for i in ${toString cfg.webapps}
do
if [ -f $i ]
then
# If the given web application is a file, symlink it into the webapps/ directory
ln -sfn $i ${cfg.baseDir}/webapps/`basename $i`
elif [ -d $i ]
then
# If the given web application is a directory, then iterate over the files
# in the special purpose directories and symlink them into the tomcat tree
for j in $i/webapps/*
do
ln -sfn $j ${cfg.baseDir}/webapps/`basename $j`
done
# Also symlink the configuration files if they are included
if [ -d $i/conf/Catalina ]
then
for j in $i/conf/Catalina/*
do
mkdir -p ${cfg.baseDir}/conf/Catalina/localhost
ln -sfn $j ${cfg.baseDir}/conf/Catalina/localhost/`basename $j`
done
fi
fi
done
${toString (map (virtualHost: ''
# Create webapps directory for the virtual host
mkdir -p ${cfg.baseDir}/virtualhosts/${virtualHost.name}/webapps
# Modify ownership
chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/virtualhosts/${virtualHost.name}/webapps
# Symlink all the given web applications files or paths into the webapps/ directory
# of this virtual host
for i in "${if virtualHost ? webapps then toString virtualHost.webapps else ""}"
do
if [ -f $i ]
then
# If the given web application is a file, symlink it into the webapps/ directory
ln -sfn $i ${cfg.baseDir}/virtualhosts/${virtualHost.name}/webapps/`basename $i`
elif [ -d $i ]
then
# If the given web application is a directory, then iterate over the files
# in the special purpose directories and symlink them into the tomcat tree
for j in $i/webapps/*
do
ln -sfn $j ${cfg.baseDir}/virtualhosts/${virtualHost.name}/webapps/`basename $j`
done
# Also symlink the configuration files if they are included
if [ -d $i/conf/Catalina ]
then
for j in $i/conf/Catalina/*
do
mkdir -p ${cfg.baseDir}/conf/Catalina/${virtualHost.name}
ln -sfn $j ${cfg.baseDir}/conf/Catalina/${virtualHost.name}/`basename $j`
done
fi
fi
done
preStart =
'' ''
# Create the base directory ) cfg.virtualHosts) }
mkdir -p ${cfg.baseDir}
# Create a symlink to the bin directory of the tomcat component # Create a work/ directory
ln -sfn ${tomcat}/bin ${cfg.baseDir}/bin mkdir -p ${cfg.baseDir}/work
chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/work
# Create a conf/ directory ${if cfg.axis2.enable then
mkdir -p ${cfg.baseDir}/conf ''
chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/conf # Copy the Axis2 web application
cp -av ${pkgs.axis2}/webapps/axis2 ${cfg.baseDir}/webapps
# Symlink the config files in the conf/ directory (except for catalina.properties and server.xml) # Turn off addressing, which causes many errors
for i in $(ls ${tomcat}/conf | grep -v catalina.properties | grep -v server.xml) sed -i -e 's%<module ref="addressing"/>%<!-- <module ref="addressing"/> -->%' ${cfg.baseDir}/webapps/axis2/WEB-INF/conf/axis2.xml
do
ln -sfn ${tomcat}/conf/$i ${cfg.baseDir}/conf/`basename $i`
done
# Create subdirectory for virtual hosts # Modify permissions on the Axis2 application
mkdir -p ${cfg.baseDir}/virtualhosts chown -R ${cfg.user}:${cfg.group} ${cfg.baseDir}/webapps/axis2
# Create a modified catalina.properties file # Symlink all the given web service files or paths into the webapps/axis2/WEB-INF/services directory
# Change all references from CATALINA_HOME to CATALINA_BASE and add support for shared libraries for i in ${toString cfg.axis2.services}
sed -e 's|''${catalina.home}|''${catalina.base}|g' \
-e 's|shared.loader=|shared.loader=''${catalina.base}/shared/lib/*.jar|' \
${tomcat}/conf/catalina.properties > ${cfg.baseDir}/conf/catalina.properties
# Create a modified server.xml which also includes all virtual hosts
sed -e "/<Engine name=\"Catalina\" defaultHost=\"localhost\">/a\ ${
toString (map (virtualHost: ''<Host name=\"${virtualHost.name}\" appBase=\"virtualhosts/${virtualHost.name}/webapps\" unpackWARs=\"true\" autoDeploy=\"true\" xmlValidation=\"false\" xmlNamespaceAware=\"false\" >${if cfg.logPerVirtualHost then ''<Valve className=\"org.apache.catalina.valves.AccessLogValve\" directory=\"logs/${virtualHost.name}\" prefix=\"${virtualHost.name}_access_log.\" pattern=\"combined\" resolveHosts=\"false\"/>'' else ""}</Host>'') cfg.virtualHosts)}" \
${tomcat}/conf/server.xml > ${cfg.baseDir}/conf/server.xml
# Create a logs/ directory
mkdir -p ${cfg.baseDir}/logs
chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/logs
${if cfg.logPerVirtualHost then
toString (map (h: ''
mkdir -p ${cfg.baseDir}/logs/${h.name}
chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/logs/${h.name}
'') cfg.virtualHosts) else ''''}
# Create a temp/ directory
mkdir -p ${cfg.baseDir}/temp
chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/temp
# Create a lib/ directory
mkdir -p ${cfg.baseDir}/lib
chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/lib
# Create a shared/lib directory
mkdir -p ${cfg.baseDir}/shared/lib
chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/shared/lib
# Create a webapps/ directory
mkdir -p ${cfg.baseDir}/webapps
chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/webapps
# Symlink all the given common libs files or paths into the lib/ directory
for i in ${tomcat} ${toString cfg.commonLibs}
do do
if [ -f $i ] if [ -f $i ]
then then
# If the given web application is a file, symlink it into the common/lib/ directory # If the given web service is a file, symlink it into the webapps/axis2/WEB-INF/services
ln -sfn $i ${cfg.baseDir}/lib/`basename $i` ln -sfn $i ${cfg.baseDir}/webapps/axis2/WEB-INF/services/`basename $i`
elif [ -d $i ] elif [ -d $i ]
then then
# If the given web application is a directory, then iterate over the files # If the given web application is a directory, then iterate over the files
# in the special purpose directories and symlink them into the tomcat tree # in the special purpose directories and symlink them into the tomcat tree
for j in $i/lib/* for j in $i/webapps/axis2/WEB-INF/services/*
do do
ln -sfn $j ${cfg.baseDir}/lib/`basename $j` ln -sfn $j ${cfg.baseDir}/webapps/axis2/WEB-INF/services/`basename $j`
done
fi
done
# Symlink all the given shared libs files or paths into the shared/lib/ directory
for i in ${toString cfg.sharedLibs}
do
if [ -f $i ]
then
# If the given web application is a file, symlink it into the common/lib/ directory
ln -sfn $i ${cfg.baseDir}/shared/lib/`basename $i`
elif [ -d $i ]
then
# If the given web application is a directory, then iterate over the files
# in the special purpose directories and symlink them into the tomcat tree
for j in $i/shared/lib/*
do
ln -sfn $j ${cfg.baseDir}/shared/lib/`basename $j`
done
fi
done
# Symlink all the given web applications files or paths into the webapps/ directory
for i in ${toString cfg.webapps}
do
if [ -f $i ]
then
# If the given web application is a file, symlink it into the webapps/ directory
ln -sfn $i ${cfg.baseDir}/webapps/`basename $i`
elif [ -d $i ]
then
# If the given web application is a directory, then iterate over the files
# in the special purpose directories and symlink them into the tomcat tree
for j in $i/webapps/*
do
ln -sfn $j ${cfg.baseDir}/webapps/`basename $j`
done done
# Also symlink the configuration files if they are included # Also symlink the configuration files if they are included
@ -252,110 +333,25 @@ in
then then
for j in $i/conf/Catalina/* for j in $i/conf/Catalina/*
do do
mkdir -p ${cfg.baseDir}/conf/Catalina/localhost
ln -sfn $j ${cfg.baseDir}/conf/Catalina/localhost/`basename $j` ln -sfn $j ${cfg.baseDir}/conf/Catalina/localhost/`basename $j`
done done
fi fi
fi fi
done done
''
else ""}
'';
${toString (map (virtualHost: '' script = ''
# Create webapps directory for the virtual host ${pkgs.su}/bin/su -s ${pkgs.bash}/bin/sh ${cfg.user} -c 'CATALINA_BASE=${cfg.baseDir} JAVA_HOME=${cfg.jdk} JAVA_OPTS="${cfg.javaOpts}" CATALINA_OPTS="${cfg.catalinaOpts}" ${tomcat}/bin/startup.sh'
mkdir -p ${cfg.baseDir}/virtualhosts/${virtualHost.name}/webapps '';
# Modify ownership postStop = ''
chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/virtualhosts/${virtualHost.name}/webapps echo "Stopping tomcat..."
CATALINA_BASE=${cfg.baseDir} JAVA_HOME=${cfg.jdk} ${pkgs.su}/bin/su -s ${pkgs.bash}/bin/sh ${cfg.user} -c ${tomcat}/bin/shutdown.sh
'';
# Symlink all the given web applications files or paths into the webapps/ directory };
# of this virtual host
for i in "${if virtualHost ? webapps then toString virtualHost.webapps else ""}"
do
if [ -f $i ]
then
# If the given web application is a file, symlink it into the webapps/ directory
ln -sfn $i ${cfg.baseDir}/virtualhosts/${virtualHost.name}/webapps/`basename $i`
elif [ -d $i ]
then
# If the given web application is a directory, then iterate over the files
# in the special purpose directories and symlink them into the tomcat tree
for j in $i/webapps/*
do
ln -sfn $j ${cfg.baseDir}/virtualhosts/${virtualHost.name}/webapps/`basename $j`
done
# Also symlink the configuration files if they are included
if [ -d $i/conf/Catalina ]
then
for j in $i/conf/Catalina/*
do
mkdir -p ${cfg.baseDir}/conf/Catalina/${virtualHost.name}
ln -sfn $j ${cfg.baseDir}/conf/Catalina/${virtualHost.name}/`basename $j`
done
fi
fi
done
''
) cfg.virtualHosts) }
# Create a work/ directory
mkdir -p ${cfg.baseDir}/work
chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/work
${if cfg.axis2.enable then
''
# Copy the Axis2 web application
cp -av ${pkgs.axis2}/webapps/axis2 ${cfg.baseDir}/webapps
# Turn off addressing, which causes many errors
sed -i -e 's%<module ref="addressing"/>%<!-- <module ref="addressing"/> -->%' ${cfg.baseDir}/webapps/axis2/WEB-INF/conf/axis2.xml
# Modify permissions on the Axis2 application
chown -R ${cfg.user}:${cfg.group} ${cfg.baseDir}/webapps/axis2
# Symlink all the given web service files or paths into the webapps/axis2/WEB-INF/services directory
for i in ${toString cfg.axis2.services}
do
if [ -f $i ]
then
# If the given web service is a file, symlink it into the webapps/axis2/WEB-INF/services
ln -sfn $i ${cfg.baseDir}/webapps/axis2/WEB-INF/services/`basename $i`
elif [ -d $i ]
then
# If the given web application is a directory, then iterate over the files
# in the special purpose directories and symlink them into the tomcat tree
for j in $i/webapps/axis2/WEB-INF/services/*
do
ln -sfn $j ${cfg.baseDir}/webapps/axis2/WEB-INF/services/`basename $j`
done
# Also symlink the configuration files if they are included
if [ -d $i/conf/Catalina ]
then
for j in $i/conf/Catalina/*
do
ln -sfn $j ${cfg.baseDir}/conf/Catalina/localhost/`basename $j`
done
fi
fi
done
''
else ""}
'';
script = ''
${pkgs.su}/bin/su -s ${pkgs.bash}/bin/sh ${cfg.user} -c 'CATALINA_BASE=${cfg.baseDir} JAVA_HOME=${cfg.jdk} JAVA_OPTS="${cfg.javaOpts}" CATALINA_OPTS="${cfg.catalinaOpts}" ${tomcat}/bin/startup.sh'
'';
postStop =
''
echo "Stopping tomcat..."
CATALINA_BASE=${cfg.baseDir} JAVA_HOME=${cfg.jdk} ${pkgs.su}/bin/su -s ${pkgs.bash}/bin/sh ${cfg.user} -c ${tomcat}/bin/shutdown.sh
'';
};
}; };

View File

@ -30,20 +30,17 @@ in
###### implementation ###### implementation
config = mkIf config.services.xfs.enable { config = mkIf config.services.xfs.enable {
assertions = singleton assertions = singleton
{ assertion = config.fonts.enableFontDir; { assertion = config.fonts.enableFontDir;
message = "Please enable fonts.enableFontDir to use the X Font Server."; message = "Please enable fonts.enableFontDir to use the X Font Server.";
}; };
jobs.xfs = systemd.services.xfs = {
{ description = "X Font Server"; description = "X Font Server";
after = [ "network.target" ];
startOn = "started networking"; wantedBy = [ "multi-user.target" ];
path = [ pkgs.xorg.xfs ];
exec = "${pkgs.xorg.xfs}/bin/xfs -config ${configFile}"; script = "xfs -config ${configFile}";
}; };
}; };
} }

View File

@ -1,290 +0,0 @@
{ config, lib, pkgs, ... }:
with lib;
with import ../boot/systemd-unit-options.nix { inherit config lib; };
let
userExists = u:
(u == "") || any (uu: uu.name == u) (attrValues config.users.extraUsers);
groupExists = g:
(g == "") || any (gg: gg.name == g) (attrValues config.users.extraGroups);
makeJobScript = name: content: "${pkgs.writeScriptBin name content}/bin/${name}";
# From a job description, generate an systemd unit file.
makeUnit = job:
let
hasMain = job.script != "" || job.exec != "";
env = job.environment;
preStartScript = makeJobScript "${job.name}-pre-start"
''
#! ${pkgs.stdenv.shell} -e
${job.preStart}
'';
startScript = makeJobScript "${job.name}-start"
''
#! ${pkgs.stdenv.shell} -e
${if job.script != "" then job.script else ''
exec ${job.exec}
''}
'';
postStartScript = makeJobScript "${job.name}-post-start"
''
#! ${pkgs.stdenv.shell} -e
${job.postStart}
'';
preStopScript = makeJobScript "${job.name}-pre-stop"
''
#! ${pkgs.stdenv.shell} -e
${job.preStop}
'';
postStopScript = makeJobScript "${job.name}-post-stop"
''
#! ${pkgs.stdenv.shell} -e
${job.postStop}
'';
in {
inherit (job) description requires before partOf environment path restartIfChanged unitConfig;
after =
(if job.startOn == "stopped udevtrigger" then [ "systemd-udev-settle.service" ] else
if job.startOn == "started udev" then [ "systemd-udev.service" ] else
if job.startOn == "started network-interfaces" then [ "network-interfaces.target" ] else
if job.startOn == "started networking" then [ "network.target" ] else
if job.startOn == "ip-up" then [] else
if job.startOn == "" || job.startOn == "startup" then [] else
builtins.trace "Warning: job ${job.name} has unknown startOn value ${job.startOn}." []
) ++ job.after;
wants =
(if job.startOn == "stopped udevtrigger" then [ "systemd-udev-settle.service" ] else []
) ++ job.wants;
wantedBy =
(if job.startOn == "" then [] else
if job.startOn == "ip-up" then [ "ip-up.target" ] else
[ "multi-user.target" ]) ++ job.wantedBy;
serviceConfig =
job.serviceConfig
// optionalAttrs (job.preStart != "" && (job.script != "" || job.exec != ""))
{ ExecStartPre = preStartScript; }
// optionalAttrs (job.preStart != "" && job.script == "" && job.exec == "")
{ ExecStart = preStartScript; }
// optionalAttrs (job.script != "" || job.exec != "")
{ ExecStart = startScript; }
// optionalAttrs (job.postStart != "")
{ ExecStartPost = postStartScript; }
// optionalAttrs (job.preStop != "")
{ ExecStop = preStopScript; }
// optionalAttrs (job.postStop != "")
{ ExecStopPost = postStopScript; }
// (if job.script == "" && job.exec == "" then { Type = "oneshot"; RemainAfterExit = true; } else
if job.daemonType == "fork" || job.daemonType == "daemon" then { Type = "forking"; GuessMainPID = true; } else
if job.daemonType == "none" then { } else
throw "invalid daemon type `${job.daemonType}'")
// optionalAttrs (!job.task && !(job.script == "" && job.exec == "") && job.respawn)
{ Restart = "always"; }
// optionalAttrs job.task
{ Type = "oneshot"; RemainAfterExit = false; };
};
jobOptions = serviceOptions // {
name = mkOption {
# !!! The type should ensure that this could be a filename.
type = types.str;
example = "sshd";
description = ''
Name of the job, mapped to the systemd unit
<literal><replaceable>name</replaceable>.service</literal>.
'';
};
startOn = mkOption {
#type = types.str;
default = "";
description = ''
The Upstart event that triggers this job to be started. Some
are mapped to systemd dependencies; otherwise you will get a
warning. If empty, the job will not start automatically.
'';
};
stopOn = mkOption {
type = types.str;
default = "starting shutdown";
description = ''
Ignored; this was the Upstart event that triggers this job to be stopped.
'';
};
postStart = mkOption {
type = types.lines;
default = "";
description = ''
Shell commands executed after the job is started (i.e. after
the job's main process is started), but before the job is
considered running.
'';
};
preStop = mkOption {
type = types.lines;
default = "";
description = ''
Shell commands executed before the job is stopped
(i.e. before systemd kills the job's main process). This can
be used to cleanly shut down a daemon.
'';
};
postStop = mkOption {
type = types.lines;
default = "";
description = ''
Shell commands executed after the job has stopped
(i.e. after the job's main process has terminated).
'';
};
exec = mkOption {
type = types.str;
default = "";
description = ''
Command to start the job's main process. If empty, the
job has no main process, but can still have pre/post-start
and pre/post-stop scripts, and is considered running
until it is stopped.
'';
};
respawn = mkOption {
type = types.bool;
default = true;
description = ''
Whether to restart the job automatically if its process
ends unexpectedly.
'';
};
task = mkOption {
type = types.bool;
default = false;
description = ''
Whether this job is a task rather than a service. Tasks
are executed only once, while services are restarted when
they exit.
'';
};
daemonType = mkOption {
type = types.str;
default = "none";
description = ''
Determines how systemd detects when a daemon should be
considered running. The value <literal>none</literal> means
that the daemon is considered ready immediately. The value
<literal>fork</literal> means that the daemon will fork once.
The value <literal>daemon</literal> means that the daemon will
fork twice. The value <literal>stop</literal> means that the
daemon will raise the SIGSTOP signal to indicate readiness.
'';
};
setuid = mkOption {
type = types.addCheck types.str userExists;
default = "";
description = ''
Run the daemon as a different user.
'';
};
setgid = mkOption {
type = types.addCheck types.str groupExists;
default = "";
description = ''
Run the daemon as a different group.
'';
};
path = mkOption {
default = [];
description = ''
Packages added to the job's <envar>PATH</envar> environment variable.
Both the <filename>bin</filename> and <filename>sbin</filename>
subdirectories of each package are added.
'';
};
};
upstartJob = { name, config, ... }: {
options = {
unit = mkOption {
default = makeUnit config;
description = "Generated definition of the systemd unit corresponding to this job.";
};
};
config = {
# The default name is the name extracted from the attribute path.
name = mkDefault name;
};
};
in
{
###### interface
options = {
jobs = mkOption {
default = {};
description = ''
This option is a legacy method to define system services,
dating from the era where NixOS used Upstart instead of
systemd. You should use <option>systemd.services</option>
instead. Services defined using <option>jobs</option> are
mapped automatically to <option>systemd.services</option>, but
may not work perfectly; in particular, most
<option>startOn</option> conditions are not supported.
'';
type = types.loaOf types.optionSet;
options = [ jobOptions upstartJob ];
};
};
###### implementation
config = {
systemd.services =
flip mapAttrs' config.jobs (name: job:
nameValuePair job.name job.unit);
};
}

View File

@ -31,13 +31,5 @@ in
'' ''
btrfs device scan btrfs device scan
''; '';
# !!! This is broken. There should be a udev rule to do this when
# new devices are discovered.
jobs.udev.postStart =
''
${pkgs.btrfs-progs}/bin/btrfs device scan
'';
}; };
} }

View File

@ -166,33 +166,33 @@ in
''; '';
}; };
jobs."libvirt-guests" = systemd.services."libvirt-guests" = {
{ description = "Libvirt Virtual Machines"; description = "Libvirt Virtual Machines";
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];
wants = [ "libvirtd.service" ]; wants = [ "libvirtd.service" ];
after = [ "libvirtd.service" ]; after = [ "libvirtd.service" ];
restartIfChanged = false; restartIfChanged = false;
path = [ pkgs.gettext pkgs.libvirt pkgs.gawk ]; path = with pkgs; [ gettext libvirt gawk ];
preStart = preStart = ''
'' mkdir -p /var/lock/subsys -m 755
mkdir -p /var/lock/subsys -m 755 ${pkgs.libvirt}/etc/rc.d/init.d/libvirt-guests start || true
${pkgs.libvirt}/etc/rc.d/init.d/libvirt-guests start || true '';
'';
postStop = postStop = ''
'' export PATH=${pkgs.gettext}/bin:$PATH
export PATH=${pkgs.gettext}/bin:$PATH export ON_SHUTDOWN=${cfg.onShutdown}
export ON_SHUTDOWN=${cfg.onShutdown} ${pkgs.libvirt}/etc/rc.d/init.d/libvirt-guests stop
${pkgs.libvirt}/etc/rc.d/init.d/libvirt-guests stop '';
'';
serviceConfig.Type = "oneshot"; serviceConfig = {
serviceConfig.RemainAfterExit = true; Type = "oneshot";
RemainAfterExit = true;
}; };
};
users.extraGroups.libvirtd.gid = config.ids.gids.libvirtd; users.extraGroups.libvirtd.gid = config.ids.gids.libvirtd;

View File

@ -34,9 +34,9 @@ rec {
{ server = { server =
{ config, pkgs, ... }: { config, pkgs, ... }:
{ jobs."quake3-server" = { systemd.services."quake3-server" =
{ startOn = "startup"; { wantedBy = [ "multi-user.target" ];
exec = script =
"${pkgs.quake3demo}/bin/quake3-server '+set g_gametype 0' " + "${pkgs.quake3demo}/bin/quake3-server '+set g_gametype 0' " +
"'+map q3dm7' '+addbot grunt' '+addbot daemia' 2> /tmp/log"; "'+map q3dm7' '+addbot grunt' '+addbot daemia' 2> /tmp/log";
}; };

View File

@ -1,56 +0,0 @@
{stdenv, fetchurl, pkgconfig, pcre, libxml2, sqlite, ffmpeg, imagemagick,
exiv2, mp4v2, lame, libvorbis, flac, libmad, faad2}:
stdenv.mkDerivation rec {
name = "fuppes-0.660";
src = fetchurl {
url = mirror://sourceforge/project/fuppes/fuppes/SVN-660/fuppes-0.660.tar.gz;
sha256 = "1c385b29878927e5f1e55ae2c9ad284849d1522d9517a88e34feb92bd5195173";
};
patches = [
./fuppes-faad-exanpse-backward-symbols-macro.patch
];
buildInputs = [
pkgconfig pcre libxml2 sqlite ffmpeg imagemagick exiv2 mp4v2 lame
libvorbis flac libmad faad2
];
configureFlags = [
"--enable-ffmpegthumbnailer"
"--enable-magickwand"
"--enable-exiv2"
"--enable-transcoder-ffmpeg"
"--enable-mp4v2"
"--enable-lame"
"--enable-vorbis"
"--enable-flac"
"--enable-mad"
"--enable-faad"
];
postFixup = ''
patchelf --set-rpath "$(patchelf --print-rpath $out/bin/fuppes):${faad2}/lib" $out/bin/fuppes
patchelf --set-rpath "$(patchelf --print-rpath $out/bin/fuppesd):${faad2}/lib" $out/bin/fuppesd
'';
meta = {
description = "UPnP A/V Media Server";
longDescription = ''
FUPPES is a free, multiplatform UPnP A/V Media Server.
FUPPES supports a wide range of UPnP MediaRenderers as well as
on-the-fly transcoding of various audio, video and image formats.
FUPPES also includes basic DLNA support.
'';
homepage = http://fuppes.ulrich-voelkel.de/;
license = stdenv.lib.licenses.gpl2;
maintainers = [ stdenv.lib.maintainers.pierron ];
platforms = stdenv.lib.platforms.all;
broken = true;
};
}

View File

@ -1,91 +0,0 @@
diff -x _inst -x _build -x .svn -ur fuppes-0.660/src/lib/Transcoding/FaadWrapper.cpp fuppes-0.660.new/src/lib/Transcoding/FaadWrapper.cpp
--- fuppes-0.660/src/lib/Transcoding/FaadWrapper.cpp 2009-11-19 10:16:25.000000000 +0100
+++ fuppes-0.660.new/src/lib/Transcoding/FaadWrapper.cpp 2011-01-30 22:25:34.171263052 +0100
@@ -329,13 +329,19 @@
CloseFile();
}
-
+
+// These macros are used to convert old function names to new ones based on
+// the #define declared in faad headers. The two-level macro are used to
+// expanse the macro which are gave to to_str.
+#define to_str_(fun) #fun
+#define to_str(fun) to_str_(fun)
+
bool CFaadWrapper::LoadLib()
{
#ifdef WIN32
- std::string sLibName = "libfaad-0.dll";
+ std::string sLibName = "libfaad-2.dll";
#else
- std::string sLibName = "libfaad.so.0";
+ std::string sLibName = "libfaad.so.2";
#endif
if(!CSharedConfig::Shared()->FaadLibName().empty()) {
@@ -350,54 +356,54 @@
return false;
}
- m_faacDecOpen = (faacDecOpen_t)FuppesGetProcAddress(m_LibHandle, "faacDecOpen");
+ m_faacDecOpen = (faacDecOpen_t)FuppesGetProcAddress(m_LibHandle, to_str(faacDecOpen));
if(!m_faacDecOpen) {
CSharedLog::Shared()->Log(L_EXT, "cannot load symbol 'faacDecOpen'", __FILE__, __LINE__);
return false;
}
- m_faacDecGetErrorMessage = (faacDecGetErrorMessage_t)FuppesGetProcAddress(m_LibHandle, "faacDecGetErrorMessage");
+ m_faacDecGetErrorMessage = (faacDecGetErrorMessage_t)FuppesGetProcAddress(m_LibHandle, to_str(faacDecGetErrorMessage));
if(!m_faacDecGetErrorMessage) {
CSharedLog::Shared()->Log(L_EXT, "cannot load symbol 'faacDecGetErrorMessage'", __FILE__, __LINE__);
return false;
}
- m_faacDecGetCurrentConfiguration = (faacDecGetCurrentConfiguration_t)FuppesGetProcAddress(m_LibHandle, "faacDecGetCurrentConfiguration");
+ m_faacDecGetCurrentConfiguration = (faacDecGetCurrentConfiguration_t)FuppesGetProcAddress(m_LibHandle, to_str(faacDecGetCurrentConfiguration));
if(!m_faacDecGetCurrentConfiguration) {
CSharedLog::Shared()->Log(L_EXT, "cannot load symbol 'faacDecGetCurrentConfiguration'", __FILE__, __LINE__);
}
- m_faacDecSetConfiguration = (faacDecSetConfiguration_t)FuppesGetProcAddress(m_LibHandle, "faacDecSetConfiguration");
+ m_faacDecSetConfiguration = (faacDecSetConfiguration_t)FuppesGetProcAddress(m_LibHandle, to_str(faacDecSetConfiguration));
if(!m_faacDecSetConfiguration) {
CSharedLog::Shared()->Log(L_EXT, "cannot load symbol 'faacDecSetConfiguration'", __FILE__, __LINE__);
}
- m_faacDecInit = (faacDecInit_t)FuppesGetProcAddress(m_LibHandle, "faacDecInit");
+ m_faacDecInit = (faacDecInit_t)FuppesGetProcAddress(m_LibHandle, to_str(faacDecInit));
if(!m_faacDecInit) {
CSharedLog::Shared()->Log(L_EXT, "cannot load symbol 'faacDecInit'", __FILE__, __LINE__);
}
- m_faacDecInit2 = (faacDecInit2_t)FuppesGetProcAddress(m_LibHandle, "faacDecInit2");
+ m_faacDecInit2 = (faacDecInit2_t)FuppesGetProcAddress(m_LibHandle, to_str(faacDecInit2));
if(!m_faacDecInit2) {
CSharedLog::Shared()->Log(L_EXT, "cannot load symbol 'faacDecInit2'", __FILE__, __LINE__);
return false;
}
- m_faacDecDecode = (faacDecDecode_t)FuppesGetProcAddress(m_LibHandle, "faacDecDecode");
+ m_faacDecDecode = (faacDecDecode_t)FuppesGetProcAddress(m_LibHandle, to_str(faacDecDecode));
if(!m_faacDecDecode) {
CSharedLog::Shared()->Log(L_EXT, "cannot load symbol 'faacDecDecode'", __FILE__, __LINE__);
return false;
}
- m_faacDecClose = (faacDecClose_t)FuppesGetProcAddress(m_LibHandle, "faacDecClose");
+ m_faacDecClose = (faacDecClose_t)FuppesGetProcAddress(m_LibHandle, to_str(faacDecClose));
if(!m_faacDecClose) {
CSharedLog::Shared()->Log(L_EXT, "cannot load symbol 'faacDecClose'", __FILE__, __LINE__);
return false;
}
- m_AudioSpecificConfig = (AudioSpecificConfig_t)FuppesGetProcAddress(m_LibHandle, "AudioSpecificConfig");
+ m_AudioSpecificConfig = (AudioSpecificConfig_t)FuppesGetProcAddress(m_LibHandle, to_str(AudioSpecificConfig));
if(!m_AudioSpecificConfig) {
- m_AudioSpecificConfig = (AudioSpecificConfig_t)FuppesGetProcAddress(m_LibHandle, "faacDecAudioSpecificConfig");
+ m_AudioSpecificConfig = (AudioSpecificConfig_t)FuppesGetProcAddress(m_LibHandle, to_str(faacDecAudioSpecificConfig));
if(!m_AudioSpecificConfig) {
CSharedLog::Shared()->Log(L_EXT, "cannot load symbol '(faacDec)AudioSpecificConfig'", __FILE__, __LINE__);
return false;

View File

@ -1564,8 +1564,6 @@ let
ftop = callPackage ../os-specific/linux/ftop { }; ftop = callPackage ../os-specific/linux/ftop { };
fuppes = callPackage ../tools/networking/fuppes { };
fsfs = callPackage ../tools/filesystems/fsfs { }; fsfs = callPackage ../tools/filesystems/fsfs { };
fuseiso = callPackage ../tools/filesystems/fuseiso { }; fuseiso = callPackage ../tools/filesystems/fuseiso { };