Merge pull request #12198 from mayflower/remove-upstart-layer
Remove upstart layer
This commit is contained in:
commit
57cb5ab17a
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -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>
|
|
|
@ -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}'
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
|
@ -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}'
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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}
|
||||||
|
|
|
@ -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}";
|
||||||
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 ];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -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";
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -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";
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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))}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -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'
|
||||||
|
'';
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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}
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -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/";
|
||||||
};
|
};
|
||||||
|
|
|
@ -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
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
'';
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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'
|
||||||
|
'';
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 = {};
|
||||||
|
|
||||||
|
|
|
@ -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} "
|
||||||
|
|
|
@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 ];
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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";
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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";
|
||||||
|
|
|
@ -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
|
''; # */
|
||||||
''; # */
|
};
|
||||||
};
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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}";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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";
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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";
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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 = {};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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];
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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}";
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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}";
|
||||||
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -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}";
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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";
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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";
|
};
|
||||||
};
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
|
||||||
'';
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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}";
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
|
@ -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
|
|
||||||
'';
|
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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";
|
||||||
};
|
};
|
||||||
|
|
|
@ -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;
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -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;
|
|
|
@ -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 { };
|
||||||
|
|
Loading…
Reference in New Issue