From 83b76bc2cfd8d0d3d2205f08a73f36ab17d9ad3e Mon Sep 17 00:00:00 2001 From: Eelco Dolstra <eelco.dolstra@logicblox.com> Date: Mon, 15 Feb 2010 19:02:42 +0000 Subject: [PATCH] * Option `services.apache.phpIni' (which is of type derivation) replaced by `services.apache.phpOptions' (of type string). * Allow Apache subservices to add to phpOptions. * Set the TZ environment variable in Apache. * Updated the Zabbix web interface. svn path=/nixos/trunk/; revision=20023 --- modules/services/monitoring/zabbix-server.nix | 15 ++-- .../web-servers/apache-httpd/default.nix | 84 ++++++++----------- .../web-servers/apache-httpd/zabbix.nix | 26 +++--- 3 files changed, 58 insertions(+), 67 deletions(-) diff --git a/modules/services/monitoring/zabbix-server.nix b/modules/services/monitoring/zabbix-server.nix index d38e955ed4f4..fa38cc0a048f 100644 --- a/modules/services/monitoring/zabbix-server.nix +++ b/modules/services/monitoring/zabbix-server.nix @@ -45,6 +45,8 @@ in config = mkIf config.services.zabbixServer.enable { + services.postgresql.enable = true; + users.extraUsers = singleton { name = "zabbix"; uid = config.ids.uids.zabbix; @@ -52,7 +54,7 @@ in }; jobs.zabbix_server = - { #name = "zabbix-server"; !!! mkIf bug + { name = "zabbix-server"; description = "Zabbix server daemon"; @@ -67,18 +69,21 @@ in if ! test -e "${libDir}/db-created"; then ${pkgs.postgresql}/bin/createuser --no-superuser --no-createdb --no-createrole zabbix || true ${pkgs.postgresql}/bin/createdb --owner zabbix zabbix || true - cat ${pkgs.zabbixServer}/share/zabbix/db/schema/postgresql.sql | ${pkgs.su}/bin/su -s "$SHELL" zabbix -c 'psql zabbix' - cat ${pkgs.zabbixServer}/share/zabbix/db/data/data.sql | ${pkgs.su}/bin/su -s "$SHELL" zabbix -c 'psql zabbix' - cat ${pkgs.zabbixServer}/share/zabbix/db/data/images_pgsql.sql | ${pkgs.su}/bin/su -s "$SHELL" zabbix -c 'psql zabbix' + cat ${pkgs.zabbix.server}/share/zabbix/db/schema/postgresql.sql | ${pkgs.su}/bin/su -s "$SHELL" zabbix -c '${pkgs.postgresql}/bin/psql zabbix' + cat ${pkgs.zabbix.server}/share/zabbix/db/data/data.sql | ${pkgs.su}/bin/su -s "$SHELL" zabbix -c '${pkgs.postgresql}/bin/psql zabbix' + cat ${pkgs.zabbix.server}/share/zabbix/db/data/images_pgsql.sql | ${pkgs.su}/bin/su -s "$SHELL" zabbix -c '${pkgs.postgresql}/bin/psql zabbix' touch "${libDir}/db-created" fi export PATH=${pkgs.nettools}/bin:$PATH - ${pkgs.zabbixServer}/sbin/zabbix_server --config ${configFile} + ${pkgs.zabbix.server}/sbin/zabbix_server --config ${configFile} ''; postStop = '' + pid=$(cat ${pidFile}) + test -n "$pid" && kill "$pid" + # Wait until they're really gone. while ${pkgs.procps}/bin/pkill -u zabbix zabbix_server; do true; done ''; }; diff --git a/modules/services/web-servers/apache-httpd/default.nix b/modules/services/web-servers/apache-httpd/default.nix index 878e1c1f371a..3659b75f22d2 100644 --- a/modules/services/web-servers/apache-httpd/default.nix +++ b/modules/services/web-servers/apache-httpd/default.nix @@ -68,6 +68,7 @@ let globalEnvVars = []; robotsEntries = ""; startupScript = ""; + phpOptions = ""; options = {}; }; res = defaults // svcFunction {inherit config pkgs serverInfo servicesPath;}; @@ -358,7 +359,18 @@ let } ''; - + + # Generate the PHP configuration file. Should probably be factored + # out into a separate module. + phpIni = pkgs.runCommand "php.ini" + { options = concatStringsSep "\n" + ([ mainCfg.phpOptions ] ++ (map (svc: svc.phpOptions) allSubservices)); + } + '' + cat ${pkgs.php}/etc/php-recommended.ini > $out + echo "$options" >> $out + ''; + in @@ -464,54 +476,14 @@ in ''; }; - phpIni = mkOption { - default = pkgs.writeText "php.ini" '' - ; Needed for PHP's mail() function. - sendmail_path = sendmail -t -i - ''; - - example = '' - Example code (copy & paste): - - most simple: - phpIni pkgs.writeText "php.ini" ''' - ; Needed for PHP's mail() function. - sendmail_path = sendmail -t -i - '''; - - using recommended settings and enabling Xdebug: - phpIni = pkgs.phpIniBuilder.override { - appendLines = ''' - sendmail_path = sendmail -t -i - zend_extension="''\${pkgs.phpXdebug}/lib/xdebug.so" - zend_extension_ts="''\${pkgs.phpXdebug}/lib/xdebug.so" - zend_extension_debug="''\${pkgs.phpXdebug}/lib/xdebug.so" - xdebug.remote_enable=true - xdebug.remote_host=127.0.0.1 - xdebug.remote_port=9000 - xdebug.remote_handler=dbgp - xdebug.profiler_enable=0 - xdebug.profiler_output_dir="/tmp/xdebug" - xdebug.remote_mode=req - '''; - }; - ''; - - - description = '' - The contents of this option are used as global php.ini file by the - PHP interpreter used by Apache. You have to enable PHP explicitly. - See extraModules options. - - This file defaults to defining sendmail_path only. - - Note: Depending on your configuration you can set PHP ini values using .htaccess files and the - php_value option. - - The example shows how to enable Xdebug and use the recommended - php.ini values which are contained in the PHP distribution. - I don't know whether they are equal to defaults - ''; + phpOptions = mkOption { + default = ""; + example = + '' + date.timezone = "CET" + ''; + description = + "Options appended to the PHP configuration file <filename>php.ini</filename>."; }; } @@ -540,6 +512,15 @@ in environment.systemPackages = [httpd] ++ concatMap (svc: svc.extraPath) allSubservices; + services.httpd.phpOptions = + '' + ; Needed for PHP's mail() function. + sendmail_path = sendmail -t -i + + ; Apparently PHP doesn't use $TZ. + date.timezone = "${config.time.timeZone}" + ''; + jobs.httpd = { # Statically verify the syntactic correctness of the generated # httpd.conf. !!! this is impure! It doesn't just check for @@ -570,7 +551,9 @@ in optional config.networking.defaultMailServer.directDelivery "${pkgs.ssmtp}/sbin" ++ (concatMap (svc: svc.extraServerPath) allSubservices) ); - PHPRC = mainCfg.phpIni; + PHPRC = phpIni; + + TZ = config.time.timeZone; } // (listToAttrs (concatMap (svc: svc.globalEnvVars) allSubservices)); @@ -606,4 +589,3 @@ in }; } - diff --git a/modules/services/web-servers/apache-httpd/zabbix.nix b/modules/services/web-servers/apache-httpd/zabbix.nix index 2d9a80f69ede..608c3e48fd03 100644 --- a/modules/services/web-servers/apache-httpd/zabbix.nix +++ b/modules/services/web-servers/apache-httpd/zabbix.nix @@ -9,23 +9,27 @@ let # Note that different instances of the frontend will therefore end # up with their own copies of the PHP sources. !!! Alternatively, # we could generate zabbix.conf.php declaratively. - zabbixPHP = pkgs.runCommand "${pkgs.zabbixServer.name}-php" {} '' - cp -rs ${pkgs.zabbixServer}/share/zabbix/php $out - chmod -R u+w $out - #rm -rf $out/conf - ln -s ${config.stateDir}/zabbix.conf.php $out/conf/zabbix.conf.php - ''; + zabbixPHP = pkgs.runCommand "${pkgs.zabbix.server.name}-php" {} + '' + cp -rs ${pkgs.zabbix.server}/share/zabbix/php $out + chmod -R u+w $out + #rm -rf $out/conf + ln -s ${config.stateDir}/zabbix.conf.php $out/conf/zabbix.conf.php + ''; in { - extraModules = [ - { name = "php5"; path = "${pkgs.php}/modules/libphp5.so"; } - ]; + extraModules = + [ { name = "php5"; path = "${pkgs.php}/modules/libphp5.so"; } ]; - # !!! should also declare PHP options that Zabbix needs like the - # timezone and timeout. + phpOptions = + '' + post_max_size = 32M + max_execution_time = 300 + mbstring.func_overload = 2 + ''; extraConfig = '' Alias ${config.urlPrefix}/ ${zabbixPHP}/