From e7b7d62777ba701ed676a989ca714c95baad248c Mon Sep 17 00:00:00 2001 From: Marc Weber Date: Fri, 6 Mar 2009 12:26:41 +0000 Subject: [PATCH] Convert "httpd" and "apache-httpd" svn path=/nixos/branches/fix-style/; revision=14382 --- system/options.nix | 198 +---------------- upstart-jobs/apache-httpd/default.nix | 309 ++++++++++++++++++++++---- upstart-jobs/default.nix | 15 -- upstart-jobs/httpd.nix | 84 ++++--- 4 files changed, 316 insertions(+), 290 deletions(-) diff --git a/system/options.nix b/system/options.nix index 693e8ae777e..ad7f28c5484 100644 --- a/system/options.nix +++ b/system/options.nix @@ -479,202 +479,6 @@ in }; - - httpd = { - - enable = mkOption { - default = false; - description = " - Whether to enable the Apache httpd server. - "; - }; - - experimental = mkOption { - default = false; - description = " - Whether to use the new-style Apache configuration. - "; - }; - - extraConfig = mkOption { - default = ""; - description = " - These configuration lines will be passed verbatim to the apache config - "; - }; - - extraModules = mkOption { - default = []; - example = [ "proxy_connect" { name = "php5_module"; path = "${pkgs.php}/modules/libphp5.so"; } ]; - description = '' - Specifies additional Apache modules. These can be specified - as a string in the case of modules distributed with Apache, - or as an attribute set specifying the - name and path of the - module. - ''; - }; - - logPerVirtualHost = mkOption { - default = false; - description = " - If enabled, each virtual host gets its own - access_log and - error_log, namely suffixed by the - of the virtual host. - "; - }; - - user = mkOption { - default = "wwwrun"; - description = " - User account under which httpd runs. The account is created - automatically if it doesn't exist. - "; - }; - - group = mkOption { - default = "wwwrun"; - description = " - Group under which httpd runs. The account is created - automatically if it doesn't exist. - "; - }; - - logDir = mkOption { - default = "/var/log/httpd"; - description = " - Directory for Apache's log files. It is created automatically. - "; - }; - - stateDir = mkOption { - default = "/var/run/httpd"; - description = " - Directory for Apache's transient runtime state (such as PID - files). It is created automatically. Note that the default, - /var/run/httpd, is deleted at boot time. - "; - }; - - mod_php = mkOption { - default = false; - description = "Whether to enable the PHP module."; - }; - - mod_jk = { - enable = mkOption { - default = false; - description = "Whether to enable the Apache Tomcat connector."; - }; - - applicationMappings = mkOption { - default = []; - description = "List of Java webapplications that should be mapped to the servlet container (Tomcat/JBoss)"; - }; - }; - - virtualHosts = mkOption { - default = []; - example = [ - { hostName = "foo"; - documentRoot = "/data/webroot-foo"; - } - { hostName = "bar"; - documentRoot = "/data/webroot-bar"; - } - ]; - description = '' - Specification of the virtual hosts served by Apache. Each - element should be an attribute set specifying the - configuration of the virtual host. The available options - are the non-global options permissible for the main host. - ''; - }; - - subservices = { - - # !!! remove this - subversion = { - - enable = mkOption { - default = false; - description = " - Whether to enable the Subversion subservice in the webserver. - "; - }; - - notificationSender = mkOption { - default = "svn-server@example.org"; - example = "svn-server@example.org"; - description = " - The email address used in the Sender field of commit - notification messages sent by the Subversion subservice. - "; - }; - - userCreationDomain = mkOption { - default = "example.org"; - example = "example.org"; - description = " - The domain from which user creation is allowed. A client can - only create a new user account if its IP address resolves to - this domain. - "; - }; - - autoVersioning = mkOption { - default = false; - description = " - Whether you want the Subversion subservice to support - auto-versioning, which enables Subversion repositories to be - mounted as read/writable file systems on operating systems that - support WebDAV. - "; - }; - - dataDir = mkOption { - default = "/no/such/path/exists"; - description = " - Place to put SVN repository. - "; - }; - - organization = { - - name = mkOption { - default = null; - description = " - Name of the organization hosting the Subversion service. - "; - }; - - url = mkOption { - default = null; - description = " - URL of the website of the organization hosting the Subversion service. - "; - }; - - logo = mkOption { - default = null; - description = " - Logo the organization hosting the Subversion service. - "; - }; - - }; - - }; - - }; - - } // # Include the options shared between the main server and virtual hosts. - (import ../upstart-jobs/apache-httpd/per-server-options.nix { - inherit mkOption; - forMainServer = true; - }); - vsftpd = { enable = mkOption { default = false; @@ -1256,6 +1060,8 @@ in (import ../upstart-jobs/ejabberd.nix) # untested, dosen't compile on x86_64-linux (import ../upstart-jobs/jboss.nix) (import ../upstart-jobs/tomcat.nix) # untested, too lazy to get that jdk + (import ../upstart-jobs/httpd.nix) # Apache httpd (probably this can be removed ?) + (import ../upstart-jobs/apache-httpd) # Apache httpd (new style). # nix (import ../upstart-jobs/nix.nix) # nix options and daemon diff --git a/upstart-jobs/apache-httpd/default.nix b/upstart-jobs/apache-httpd/default.nix index ee15dc06f01..aab5d331d10 100644 --- a/upstart-jobs/apache-httpd/default.nix +++ b/upstart-jobs/apache-httpd/default.nix @@ -1,6 +1,209 @@ -{config, pkgs}: +{pkgs, config, ...}: +###### interface let + inherit (pkgs.lib) mkOption mkIf; + + options = { + services = { + httpd = { + + enable = mkOption { + default = false; + description = " + Whether to enable the Apache httpd server. + "; + }; + + experimental = mkOption { + default = false; + description = " + Whether to use the new-style Apache configuration. + "; + }; + + extraConfig = mkOption { + default = ""; + description = " + These configuration lines will be passed verbatim to the apache config + "; + }; + + extraModules = mkOption { + default = []; + example = [ "proxy_connect" { name = "php5_module"; path = "${pkgs.php}/modules/libphp5.so"; } ]; + description = '' + Specifies additional Apache modules. These can be specified + as a string in the case of modules distributed with Apache, + or as an attribute set specifying the + name and path of the + module. + ''; + }; + + logPerVirtualHost = mkOption { + default = false; + description = " + If enabled, each virtual host gets its own + access_log and + error_log, namely suffixed by the + of the virtual host. + "; + }; + + user = mkOption { + default = "wwwrun"; + description = " + User account under which httpd runs. The account is created + automatically if it doesn't exist. + "; + }; + + group = mkOption { + default = "wwwrun"; + description = " + Group under which httpd runs. The account is created + automatically if it doesn't exist. + "; + }; + + logDir = mkOption { + default = "/var/log/httpd"; + description = " + Directory for Apache's log files. It is created automatically. + "; + }; + + stateDir = mkOption { + default = "/var/run/httpd"; + description = " + Directory for Apache's transient runtime state (such as PID + files). It is created automatically. Note that the default, + /var/run/httpd, is deleted at boot time. + "; + }; + + mod_php = mkOption { + default = false; + description = "Whether to enable the PHP module."; + }; + + mod_jk = { + enable = mkOption { + default = false; + description = "Whether to enable the Apache Tomcat connector."; + }; + + applicationMappings = mkOption { + default = []; + description = "List of Java webapplications that should be mapped to the servlet container (Tomcat/JBoss)"; + }; + }; + + virtualHosts = mkOption { + default = []; + example = [ + { hostName = "foo"; + documentRoot = "/data/webroot-foo"; + } + { hostName = "bar"; + documentRoot = "/data/webroot-bar"; + } + ]; + description = '' + Specification of the virtual hosts served by Apache. Each + element should be an attribute set specifying the + configuration of the virtual host. The available options + are the non-global options permissible for the main host. + ''; + }; + + subservices = { + + # !!! remove this + subversion = { + + enable = mkOption { + default = false; + description = " + Whether to enable the Subversion subservice in the webserver. + "; + }; + + notificationSender = mkOption { + default = "svn-server@example.org"; + example = "svn-server@example.org"; + description = " + The email address used in the Sender field of commit + notification messages sent by the Subversion subservice. + "; + }; + + userCreationDomain = mkOption { + default = "example.org"; + example = "example.org"; + description = " + The domain from which user creation is allowed. A client can + only create a new user account if its IP address resolves to + this domain. + "; + }; + + autoVersioning = mkOption { + default = false; + description = " + Whether you want the Subversion subservice to support + auto-versioning, which enables Subversion repositories to be + mounted as read/writable file systems on operating systems that + support WebDAV. + "; + }; + + dataDir = mkOption { + default = "/no/such/path/exists"; + description = " + Place to put SVN repository. + "; + }; + + organization = { + + name = mkOption { + default = null; + description = " + Name of the organization hosting the Subversion service. + "; + }; + + url = mkOption { + default = null; + description = " + URL of the website of the organization hosting the Subversion service. + "; + }; + + logo = mkOption { + default = null; + description = " + Logo the organization hosting the Subversion service. + "; + }; + + }; + + }; + + }; + } // # Include the options shared between the main server and virtual hosts. + (import ../../upstart-jobs/apache-httpd/per-server-options.nix { + inherit mkOption; + forMainServer = true; + }); + }; + }; + + +###### implementation mainCfg = config.services.httpd; @@ -361,65 +564,75 @@ let in -{ - name = "httpd"; - - users = [ - { name = mainCfg.user; - description = "Apache httpd user"; - } +mkIf (config.services.httpd.enable && config.services.httpd.experimental) { + require = [ + options ]; - groups = [ - { name = mainCfg.group; - } - ]; + users = { + extraUsers = [ + { name = mainCfg.user; + description = "Apache httpd user"; + } + ]; + extraGroups = [ + { name = mainCfg.group; + } + ]; + }; - extraPath = [httpd] ++ concatMap (svc: svc.extraPath) allSubservices; + services = { + extraJobs = [{ + name = "httpd"; - # Statically verify the syntactic correctness of the generated - # httpd.conf. !!! this is impure! It doesn't just check for - # syntax, but also whether the Apache user/group exist, whether SSL - # keys exist, etc. - buildHook = '' - echo - echo '=== Checking the generated Apache configuration file ===' - ${httpd}/bin/httpd -f ${httpdConf} -t || true - ''; + extraPath = [httpd] ++ concatMap (svc: svc.extraPath) allSubservices; - job = '' - description "Apache HTTPD" + # Statically verify the syntactic correctness of the generated + # httpd.conf. !!! this is impure! It doesn't just check for + # syntax, but also whether the Apache user/group exist, whether SSL + # keys exist, etc. + buildHook = '' + echo + echo '=== Checking the generated Apache configuration file ===' + ${httpd}/bin/httpd -f ${httpdConf} -t || true + ''; - start on ${startingDependency}/started - stop on shutdown + job = '' + description "Apache HTTPD" - start script - mkdir -m 0700 -p ${mainCfg.stateDir} - mkdir -m 0700 -p ${mainCfg.logDir} + start on ${startingDependency}/started + stop on shutdown - # Get rid of old semaphores. These tend to accumulate across - # server restarts, eventually preventing it from restarting - # succesfully. - for i in $(${pkgs.utillinux}/bin/ipcs -s | grep ' ${mainCfg.user} ' | cut -f2 -d ' '); do - ${pkgs.utillinux}/bin/ipcrm -s $i - done + start script + mkdir -m 0700 -p ${mainCfg.stateDir} + mkdir -m 0700 -p ${mainCfg.logDir} - # Run the startup hooks for the subservices. - for i in ${toString (map (svn: svn.startupScript) allSubservices)}; do - echo Running Apache startup hook $i... - $i - done - end script + # Get rid of old semaphores. These tend to accumulate across + # server restarts, eventually preventing it from restarting + # succesfully. + for i in $(${pkgs.utillinux}/bin/ipcs -s | grep ' ${mainCfg.user} ' | cut -f2 -d ' '); do + ${pkgs.utillinux}/bin/ipcrm -s $i + done - ${ - let f = {name, value}: "env ${name}=${value}\n"; - in concatMapStrings f (pkgs.lib.concatMap (svc: svc.globalEnvVars) allSubservices) - } + # Run the startup hooks for the subservices. + for i in ${toString (map (svn: svn.startupScript) allSubservices)}; do + echo Running Apache startup hook $i... + $i + done + end script - env PATH=${pkgs.coreutils}/bin:${pkgs.gnugrep}/bin:${pkgs.lib.concatStringsSep ":" (pkgs.lib.concatMap (svc: svc.extraServerPath) allSubservices)} + ${ + let f = {name, value}: "env ${name}=${value}\n"; + in concatMapStrings f (pkgs.lib.concatMap (svc: svc.globalEnvVars) allSubservices) + } - respawn ${httpd}/bin/httpd -f ${httpdConf} -DNO_DETACH - ''; + env PATH=${pkgs.coreutils}/bin:${pkgs.gnugrep}/bin:${pkgs.lib.concatStringsSep ":" (pkgs.lib.concatMap (svc: svc.extraServerPath) allSubservices)} + respawn ${httpd}/bin/httpd -f ${httpdConf} -DNO_DETACH + ''; + + }]; + }; } + diff --git a/upstart-jobs/default.nix b/upstart-jobs/default.nix index e5a9cd6eba7..347af40204e 100644 --- a/upstart-jobs/default.nix +++ b/upstart-jobs/default.nix @@ -141,21 +141,6 @@ let inherit config; }) - # Apache httpd. - ++ optional (config.services.httpd.enable && !config.services.httpd.experimental) - (import ../upstart-jobs/httpd.nix { - inherit config pkgs; - inherit (pkgs) glibc; - extraConfig = pkgs.lib.concatStringsSep "\n" - (map (job: job.extraHttpdConfig) jobs); - }) - - # Apache httpd (new style). - ++ optional (config.services.httpd.enable && config.services.httpd.experimental) - (import ../upstart-jobs/apache-httpd { - inherit config pkgs; - }) - # MySQL server ++ optional config.services.mysql.enable (import ../upstart-jobs/mysql.nix { diff --git a/upstart-jobs/httpd.nix b/upstart-jobs/httpd.nix index f9613f931ff..1dd25afbf9c 100644 --- a/upstart-jobs/httpd.nix +++ b/upstart-jobs/httpd.nix @@ -1,4 +1,14 @@ -{config, pkgs, glibc, extraConfig}: +{pkgs, config, ...}: + +###### interface +let + inherit (pkgs.lib) mkOption mkIf; + + # options have been moved to the apache-httpd/default.nix file + +in + +###### implementation let @@ -21,6 +31,11 @@ let applicationMappings = cfg.mod_jk.applicationMappings; startingDependency = if config.services.gw6c.enable && config.services.gw6c.autorun then "gw6c" else "network-interfaces"; + + + extraConfig = pkgs.lib.concatStringsSep "\n" + (pkgs.lib.catAttrs "extraHttpdConfig" config.services.extraJobs); + webServer = import ../../services/apache-httpd { inherit (pkgs) apacheHttpd coreutils; @@ -32,6 +47,7 @@ let user group adminAddr logDir stateDir applicationMappings; noUserDir = !cfg.enableUserDir; + extraDirectories = extraConfig + "\n" + cfg.extraConfig; subServices = @@ -72,41 +88,47 @@ let ) ) ) - ) - /* ++ - - (optional cfg.extraSubservices.enable - (map (service : service webServer pkgs) cfg.extraSubservices.services) - ) */; + ); }; in -{ - name = "httpd"; - - users = [ - { name = user; - description = "Apache httpd user"; - } +mkIf (config.services.httpd.enable && !config.services.httpd.experimental) { + + require = [ + # options have been moved to the apache-httpd/default.nix file ]; - groups = [ - { name = group; - } - ]; - - job = " -description \"Apache HTTPD\" - -start on ${startingDependency}/started -stop on ${startingDependency}/stop - -start script - ${webServer}/bin/control prepare -end script - -respawn ${webServer}/bin/control run - "; + users = { + extraUsers = [ + { name = user; + description = "Apache httpd user"; + } + ]; + + extraGroups = [ + { name = group; + } + ]; + }; + + services = { + extraJobs = [{ + name = "httpd"; + + job = '' + description \"Apache HTTPD\" + + start on ${startingDependency}/started + stop on ${startingDependency}/stop + + start script + ${webServer}/bin/control prepare + end script + + respawn ${webServer}/bin/control run + ''; + }]; + }; }