Add svnserve example service, allow Apache to run CGI scripts

This commit is contained in:
Sander van der Burg 2020-04-21 20:13:52 +02:00 committed by Sander van der Burg
parent 4b4250e0b6
commit 0c0fa7ff49
8 changed files with 85 additions and 10 deletions

View File

@ -53,4 +53,11 @@ in
enableSupervisordProgram = true;
});
};
svnserve = import ./svnserve.nix {
svnserveConstructorFun = constructors.svnserve;
dysnomia = pkgs.dysnomia.override (origArgs: {
enableSubversionRepository = true;
});
};
}

View File

@ -1,9 +1,9 @@
{apacheConstructorFun, dysnomia}:
{instanceSuffix ? "", port ? 80, modules ? [], serverName ? "localhost", serverAdmin, documentRoot ? ./webapp, extraConfig ? "", enablePHP ? false, filesetOwner ? null, type}:
{instanceSuffix ? "", port ? 80, modules ? [], serverName ? "localhost", serverAdmin, documentRoot ? ./webapp, extraConfig ? "", enableCGI ? false, enablePHP ? false, filesetOwner ? null, type}:
let
pkg = apacheConstructorFun {
inherit instanceSuffix port modules serverName serverAdmin documentRoot extraConfig enablePHP;
inherit instanceSuffix port modules serverName serverAdmin documentRoot extraConfig enableCGI enablePHP;
postInstall = ''
# Add Dysnomia container configuration file for the Apache HTTP server
mkdir -p $out/etc/dysnomia/containers

View File

@ -0,0 +1,27 @@
{svnserveConstructorFun, dysnomia}:
{instanceSuffix ? "", port ? 3690, svnBaseDir, svnGroup ? "root", type}:
let
instanceName = "svnserve${instanceSuffix}";
pkg = svnserveConstructorFun {
inherit instanceSuffix port svnBaseDir svnGroup;
postInstall = ''
# Add Dysnomia container configuration file for Subversion repositories
mkdir -p $out/etc/dysnomia/containers
cat > $out/etc/dysnomia/containers/subversion-repository${instanceSuffix} <<EOF
svnGroup=${svnGroup}
svnBaseDir=${svnBaseDir}
EOF
# Copy the Dysnomia module that manages a Subversion repository
mkdir -p $out/libexec/dysnomia
ln -s ${dysnomia}/libexec/dysnomia/subversion-repository $out/libexec/dysnomia
'';
};
in
{
name = instanceName;
inherit pkg type svnGroup svnBaseDir;
providesContainer = "subversion-repository";
}

View File

@ -1,4 +1,4 @@
{createManagedProcess, apacheHttpd}:
{createManagedProcess, apacheHttpd, cacheDir}:
{instanceSuffix ? "", configFile, initialize ? "", postInstall ? ""}:
let
@ -21,6 +21,7 @@ createManagedProcess {
users = {
"${user}" = {
inherit group;
homeDir = "${cacheDir}/${user}";
description = "Apache HTTP daemon user";
};
};

View File

@ -15,12 +15,12 @@ let
in
{
apache = import ./apache.nix {
inherit createManagedProcess;
inherit createManagedProcess cacheDir;
inherit (pkgs) apacheHttpd;
};
simpleWebappApache = import ./simple-webapp-apache.nix {
inherit createManagedProcess logDir runtimeDir forceDisableUserChange;
inherit createManagedProcess logDir cacheDir runtimeDir forceDisableUserChange;
inherit (pkgs) stdenv apacheHttpd php writeTextFile;
};
@ -83,4 +83,9 @@ in
inherit (pkgs) writeTextFile;
inherit (pkgs.pythonPackages) supervisor;
};
svnserve = import ./svnserve.nix {
inherit createManagedProcess runtimeDir forceDisableUserChange;
inherit (pkgs) stdenv subversion;
};
}

View File

@ -52,7 +52,14 @@ rec {
pkg = constructors.simpleMongodb {};
};*/
extendableSupervisord = rec {
extendableSupervisord = {
pkg = constructors.extendableSupervisord {};
};
svnserve = {
pkg = constructors.svnserve {
svnBaseDir = "/repos";
svnGroup = "root";
};
};
}

View File

@ -1,5 +1,5 @@
{createManagedProcess, stdenv, apacheHttpd, php, writeTextFile, logDir, runtimeDir, forceDisableUserChange}:
{instanceSuffix ? "", port ? 80, modules ? [], serverName ? "localhost", serverAdmin, documentRoot ? ./webapp, enablePHP ? false, extraConfig ? "", postInstall ? ""}:
{createManagedProcess, stdenv, apacheHttpd, php, writeTextFile, logDir, runtimeDir, cacheDir, forceDisableUserChange}:
{instanceSuffix ? "", port ? 80, modules ? [], serverName ? "localhost", serverAdmin, documentRoot ? ./webapp, enablePHP ? false, enableCGI ? false, extraConfig ? "", postInstall ? ""}:
let
instanceName = "httpd${instanceSuffix}";
@ -29,12 +29,13 @@ let
"autoindex"
"alias"
"dir"
];
]
++ stdenv.lib.optional enableCGI "cgi";
apacheLogDir = "${logDir}/${instanceName}";
in
import ./apache.nix {
inherit createManagedProcess apacheHttpd;
inherit createManagedProcess apacheHttpd cacheDir;
} {
inherit instanceSuffix postInstall;

View File

@ -0,0 +1,27 @@
{createManagedProcess, stdenv, subversion, runtimeDir, forceDisableUserChange}:
{instanceSuffix ? "", port ? 3690, svnBaseDir, svnGroup, postInstall ? ""}:
let
instanceName = "svnserve${instanceSuffix}";
pidFile = "${runtimeDir}/${instanceName}.pid";
in
createManagedProcess {
name = instanceName;
inherit instanceName postInstall;
initialize = ''
mkdir -p ${svnBaseDir}
${stdenv.lib.optionalString (!forceDisableUserChange) ''
chgrp ${svnGroup} ${svnBaseDir}
''}
'';
process = "${subversion.out}/bin/svnserve";
args = [ "-r" svnBaseDir "--listen-port" (toString port) ];
foregroundProcessExtraArgs = [ "--foreground" ];
daemonExtraArgs = [ "--daemon" "--pid-file" pidFile ];
overrides = {
sysvinit = {
runlevels = [ 3 4 5 ];
};
};
}