From 177f08cb4d5a06995364f614741e41c7b6d66779 Mon Sep 17 00:00:00 2001 From: Dan Milon Date: Fri, 13 Nov 2015 23:55:03 +0200 Subject: [PATCH 1/8] add vagrant based on vccw --- .gitignore | 3 + vagrant/.rspec | 2 + vagrant/Gemfile | 4 + vagrant/Gemfile.lock | 47 + vagrant/LICENSE | 21 + vagrant/Movefile | 59 + vagrant/README.md | 42 + vagrant/Rakefile | 24 + vagrant/Vagrantfile | 201 ++ vagrant/provision/cookbooks/.gitkeep | 0 .../provision/cookbooks/apache2/.gitignore | 3 + .../provision/cookbooks/apache2/CHANGELOG.md | 183 ++ .../cookbooks/apache2/CONTRIBUTING.md | 257 +++ vagrant/provision/cookbooks/apache2/Gemfile | 10 + vagrant/provision/cookbooks/apache2/LICENSE | 201 ++ vagrant/provision/cookbooks/apache2/README.md | 583 +++++ .../cookbooks/apache2/attributes/default.rb | 168 ++ .../apache2/attributes/mod_auth_cas.rb | 2 + .../apache2/attributes/mod_auth_openid.rb | 32 + .../cookbooks/apache2/attributes/mod_ssl.rb | 19 + .../apache2/definitions/apache_conf.rb | 26 + .../apache2/definitions/apache_module.rb | 53 + .../apache2/definitions/apache_site.rb | 43 + .../cookbooks/apache2/definitions/web_app.rb | 50 + .../default/apache2_module_conf_generate.pl | 41 + .../default/tests/minitest/default_test.rb | 77 + .../tests/minitest/god_monitor_test.rb | 34 + .../default/tests/minitest/mod_apreq2_test.rb | 19 + .../tests/minitest/mod_auth_cas_test.rb | 11 + .../tests/minitest/mod_auth_openid_test.rb | 37 + .../default/tests/minitest/mod_cgi_test.rb | 13 + .../tests/minitest/mod_dav_svn_test.rb | 14 + .../default/tests/minitest/mod_fastcgi.rb | 11 + .../tests/minitest/mod_include_test.rb | 15 + .../default/tests/minitest/mod_perl_test.rb | 18 + .../default/tests/minitest/mod_php5_test.rb | 13 + .../default/tests/minitest/mod_python_test.rb | 10 + .../default/tests/minitest/mod_ssl_test.rb | 28 + .../default/tests/minitest/support/helpers.rb | 65 + .../provision/cookbooks/apache2/metadata.json | 1 + .../provision/cookbooks/apache2/metadata.rb | 213 ++ .../cookbooks/apache2/recipes/default.rb | 223 ++ .../cookbooks/apache2/recipes/god_monitor.rb | 33 + .../cookbooks/apache2/recipes/iptables.rb | 20 + .../cookbooks/apache2/recipes/logrotate.rb | 31 + .../cookbooks/apache2/recipes/mod_actions.rb | 20 + .../cookbooks/apache2/recipes/mod_alias.rb | 22 + .../cookbooks/apache2/recipes/mod_apreq2.rb | 54 + .../apache2/recipes/mod_auth_basic.rb | 20 + .../cookbooks/apache2/recipes/mod_auth_cas.rb | 59 + .../apache2/recipes/mod_auth_digest.rb | 20 + .../apache2/recipes/mod_auth_openid.rb | 125 ++ .../apache2/recipes/mod_authn_file.rb | 20 + .../apache2/recipes/mod_authnz_ldap.rb | 20 + .../apache2/recipes/mod_authz_default.rb | 20 + .../apache2/recipes/mod_authz_groupfile.rb | 20 + .../apache2/recipes/mod_authz_host.rb | 20 + .../apache2/recipes/mod_authz_user.rb | 20 + .../apache2/recipes/mod_autoindex.rb | 22 + .../cookbooks/apache2/recipes/mod_cgi.rb | 20 + .../cookbooks/apache2/recipes/mod_dav.rb | 20 + .../cookbooks/apache2/recipes/mod_dav_fs.rb | 21 + .../cookbooks/apache2/recipes/mod_dav_svn.rb | 41 + .../cookbooks/apache2/recipes/mod_deflate.rb | 22 + .../cookbooks/apache2/recipes/mod_dir.rb | 22 + .../cookbooks/apache2/recipes/mod_env.rb | 20 + .../cookbooks/apache2/recipes/mod_expires.rb | 20 + .../cookbooks/apache2/recipes/mod_fastcgi.rb | 26 + .../cookbooks/apache2/recipes/mod_fcgid.rb | 55 + .../cookbooks/apache2/recipes/mod_filter.rb | 20 + .../cookbooks/apache2/recipes/mod_headers.rb | 20 + .../cookbooks/apache2/recipes/mod_include.rb | 22 + .../cookbooks/apache2/recipes/mod_ldap.rb | 20 + .../apache2/recipes/mod_log_config.rb | 24 + .../cookbooks/apache2/recipes/mod_logio.rb | 24 + .../cookbooks/apache2/recipes/mod_mime.rb | 22 + .../apache2/recipes/mod_negotiation.rb | 22 + .../cookbooks/apache2/recipes/mod_perl.rb | 44 + .../cookbooks/apache2/recipes/mod_php5.rb | 78 + .../cookbooks/apache2/recipes/mod_proxy.rb | 22 + .../apache2/recipes/mod_proxy_ajp.rb | 21 + .../apache2/recipes/mod_proxy_balancer.rb | 20 + .../apache2/recipes/mod_proxy_connect.rb | 20 + .../apache2/recipes/mod_proxy_http.rb | 20 + .../cookbooks/apache2/recipes/mod_python.rb | 37 + .../cookbooks/apache2/recipes/mod_rewrite.rb | 20 + .../cookbooks/apache2/recipes/mod_setenvif.rb | 22 + .../cookbooks/apache2/recipes/mod_ssl.rb | 46 + .../cookbooks/apache2/recipes/mod_status.rb | 22 + .../cookbooks/apache2/recipes/mod_wsgi.rb | 38 + .../apache2/recipes/mod_xsendfile.rb | 38 + .../apache2/templates/default/a2dismod.erb | 22 + .../apache2/templates/default/a2dissite.erb | 29 + .../apache2/templates/default/a2enmod.erb | 37 + .../apache2/templates/default/a2ensite.erb | 38 + .../templates/default/apache2.conf.erb | 238 +++ .../apache2/templates/default/apache2.god.erb | 19 + .../apache2/templates/default/charset.erb | 6 + .../templates/default/default-site.erb | 57 + .../templates/default/etc-sysconfig-httpd.erb | 31 + .../apache2/templates/default/mods/README | 2 + .../templates/default/mods/alias.conf.erb | 24 + .../templates/default/mods/auth_cas.conf.erb | 1 + .../templates/default/mods/auth_cas.load.erb | 1 + .../default/mods/authopenid.load.erb | 1 + .../templates/default/mods/autoindex.conf.erb | 101 + .../templates/default/mods/deflate.conf.erb | 16 + .../templates/default/mods/dir.conf.erb | 5 + .../templates/default/mods/fastcgi.conf.erb | 5 + .../templates/default/mods/fcgid.conf.erb | 10 + .../templates/default/mods/include.conf.erb | 4 + .../templates/default/mods/include.erb | 4 + .../templates/default/mods/mime.conf.erb | 198 ++ .../default/mods/negotiation.conf.erb | 18 + .../templates/default/mods/php5.conf.erb | 16 + .../templates/default/mods/proxy.conf.erb | 19 + .../templates/default/mods/setenvif.conf.erb | 28 + .../templates/default/mods/ssl.conf.erb | 77 + .../templates/default/mods/status.conf.erb | 26 + .../apache2/templates/default/port_apache.erb | 3 + .../apache2/templates/default/ports.conf.erb | 6 + .../apache2/templates/default/security.erb | 50 + .../templates/default/web_app.conf.erb | 47 + .../cookbooks/build-essential/CHANGELOG.md | 54 + .../cookbooks/build-essential/README.md | 147 ++ .../build-essential/attributes/default.rb | 33 + .../cookbooks/build-essential/metadata.json | 1 + .../cookbooks/build-essential/metadata.rb | 15 + .../build-essential/recipes/debian.rb | 45 + .../build-essential/recipes/default.rb | 24 + .../build-essential/recipes/fedora.rb | 36 + .../build-essential/recipes/mac_os_x.rb | 39 + .../build-essential/recipes/omnios.rb | 39 + .../cookbooks/build-essential/recipes/rhel.rb | 43 + .../build-essential/recipes/smartos.rb | 29 + .../build-essential/recipes/solaris2.rb | 42 + .../cookbooks/build-essential/recipes/suse.rb | 36 + .../provision/cookbooks/mysql/CHANGELOG.md | 155 ++ vagrant/provision/cookbooks/mysql/README.md | 220 ++ .../cookbooks/mysql/attributes/client.rb | 52 + .../mysql/attributes/percona_repo.rb | 3 + .../cookbooks/mysql/attributes/server.rb | 254 +++ .../cookbooks/mysql/libraries/helpers.rb | 33 + .../provision/cookbooks/mysql/metadata.json | 168 ++ vagrant/provision/cookbooks/mysql/metadata.rb | 140 ++ .../cookbooks/mysql/recipes/client.rb | 59 + .../cookbooks/mysql/recipes/default.rb | 20 + .../cookbooks/mysql/recipes/percona_repo.rb | 48 + .../provision/cookbooks/mysql/recipes/ruby.rb | 31 + .../cookbooks/mysql/recipes/server.rb | 221 ++ .../cookbooks/mysql/recipes/server_ec2.rb | 51 + .../mysql/templates/default/debian.cnf.erb | 12 + .../mysql/templates/default/grants.sql.erb | 40 + .../mysql/templates/default/my.cnf.erb | 315 +++ .../templates/default/mysql-server.seed.erb | 10 + .../mysql/templates/default/port_mysql.erb | 3 + .../mysql/templates/windows/my.cnf.erb | 61 + .../provision/cookbooks/openssl/CHANGELOG.md | 13 + vagrant/provision/cookbooks/openssl/README.md | 38 + .../openssl/libraries/secure_password.rb | 37 + .../provision/cookbooks/openssl/metadata.json | 30 + .../provision/cookbooks/openssl/metadata.rb | 9 + .../cookbooks/openssl/recipes/default.rb | 19 + vagrant/provision/cookbooks/php/CHANGELOG.md | 63 + vagrant/provision/cookbooks/php/README.md | 233 ++ .../cookbooks/php/attributes/default.rb | 100 + .../cookbooks/php/libraries/helpers.rb | 23 + vagrant/provision/cookbooks/php/metadata.json | 52 + vagrant/provision/cookbooks/php/metadata.rb | 28 + .../provision/cookbooks/php/providers/pear.rb | 275 +++ .../cookbooks/php/providers/pear_channel.rb | 93 + .../cookbooks/php/recipes/default.rb | 31 + .../cookbooks/php/recipes/module_apc.rb | 37 + .../cookbooks/php/recipes/module_curl.rb | 29 + .../cookbooks/php/recipes/module_fpdf.rb | 35 + .../cookbooks/php/recipes/module_gd.rb | 32 + .../cookbooks/php/recipes/module_ldap.rb | 32 + .../cookbooks/php/recipes/module_memcache.rb | 37 + .../cookbooks/php/recipes/module_mysql.rb | 32 + .../cookbooks/php/recipes/module_pgsql.rb | 32 + .../cookbooks/php/recipes/module_sqlite3.rb | 30 + .../cookbooks/php/recipes/package.rb | 33 + .../provision/cookbooks/php/recipes/source.rb | 78 + .../provision/cookbooks/php/resources/pear.rb | 30 + .../cookbooks/php/resources/pear_channel.rb | 29 + .../php/templates/centos/php.ini.erb | 1225 +++++++++++ .../php/templates/debian/php.ini.erb | 1857 ++++++++++++++++ .../php/templates/default/extension.ini.erb | 7 + .../php/templates/default/php.ini.erb | 1900 +++++++++++++++++ .../php/templates/redhat/php.ini.erb | 1225 +++++++++++ .../php/templates/ubuntu/php.ini.erb | 1857 ++++++++++++++++ .../provision/cookbooks/rbenv/.kitchen.yml | 31 + vagrant/provision/cookbooks/rbenv/.rspec | 3 + vagrant/provision/cookbooks/rbenv/.travis.yml | 4 + vagrant/provision/cookbooks/rbenv/Berksfile | 11 + .../provision/cookbooks/rbenv/CHANGELOG.md | 119 ++ vagrant/provision/cookbooks/rbenv/Gemfile | 16 + vagrant/provision/cookbooks/rbenv/Guardfile | 5 + vagrant/provision/cookbooks/rbenv/README.md | 1094 ++++++++++ vagrant/provision/cookbooks/rbenv/Rakefile | 26 + .../cookbooks/rbenv/attributes/default.rb | 67 + .../chef_provider_package_rbenvrubygems.rb | 95 + .../rbenv/libraries/chef_rbenv_mixin.rb | 49 + .../libraries/chef_rbenv_recipe_helpers.rb | 103 + .../libraries/chef_rbenv_script_helpers.rb | 65 + .../cookbooks/rbenv/libraries/matchers.rb | 9 + vagrant/provision/cookbooks/rbenv/metadata.rb | 22 + .../cookbooks/rbenv/providers/global.rb | 51 + .../cookbooks/rbenv/providers/plugin.rb | 53 + .../cookbooks/rbenv/providers/rehash.rb | 43 + .../cookbooks/rbenv/providers/ruby.rb | 119 ++ .../cookbooks/rbenv/providers/script.rb | 75 + .../cookbooks/rbenv/recipes/default.rb | 23 + .../cookbooks/rbenv/recipes/system.rb | 54 + .../cookbooks/rbenv/recipes/system_install.rb | 43 + .../provision/cookbooks/rbenv/recipes/user.rb | 75 + .../cookbooks/rbenv/recipes/user_install.rb | 46 + .../cookbooks/rbenv/recipes/vagrant.rb | 19 + .../cookbooks/rbenv/resources/gem.rb | 40 + .../cookbooks/rbenv/resources/global.rb | 35 + .../cookbooks/rbenv/resources/plugin.rb | 13 + .../cookbooks/rbenv/resources/rehash.rb | 31 + .../cookbooks/rbenv/resources/ruby.rb | 38 + .../cookbooks/rbenv/resources/script.rb | 41 + .../rbenv/templates/default/rbenv.sh.erb | 15 + .../system_ruby/bats/global_ruby.bats | 43 + .../system_ruby/bats/installation.bats | 14 + .../integration/system_ruby/bats/plugins.bats | 9 + .../system_ruby/bats/ruby_envvars.bats | 27 + .../rbenv/test/unit/fixtures/metadata.rb | 4 + .../fixtures/recipes/rbenv_global_defaults.rb | 1 + .../fixtures/recipes/rbenv_global_full.rb | 5 + .../fixtures/recipes/rbenv_plugin_defaults.rb | 3 + .../fixtures/recipes/rbenv_plugin_full.rb | 7 + .../fixtures/recipes/rbenv_rehash_defaults.rb | 1 + .../fixtures/recipes/rbenv_rehash_full.rb | 4 + .../fixtures/recipes/rbenv_script_defaults.rb | 4 + .../fixtures/recipes/rbenv_script_full.rb | 13 + .../rbenv/test/unit/providers/global_spec.rb | 33 + .../rbenv/test/unit/providers/plugin_spec.rb | 50 + .../rbenv/test/unit/providers/rehash_spec.rb | 31 + .../rbenv/test/unit/providers/script_spec.rb | 80 + .../rbenv/test/unit/resources/gem_spec.rb | 111 + .../rbenv/test/unit/resources/global_spec.rb | 42 + .../rbenv/test/unit/resources/plugin_spec.rb | 60 + .../rbenv/test/unit/resources/rehash_spec.rb | 33 + .../rbenv/test/unit/resources/ruby_spec.rb | 55 + .../rbenv/test/unit/resources/script_spec.rb | 128 ++ .../cookbooks/rbenv/test/unit/spec_helper.rb | 31 + .../cookbooks/ruby_build/.kitchen.yml | 31 + .../cookbooks/ruby_build/.travis.yml | 4 + .../provision/cookbooks/ruby_build/Berksfile | 10 + .../cookbooks/ruby_build/CHANGELOG.md | 72 + .../provision/cookbooks/ruby_build/Gemfile | 14 + .../provision/cookbooks/ruby_build/README.md | 338 +++ .../provision/cookbooks/ruby_build/Rakefile | 21 + .../ruby_build/attributes/default.rb | 67 + .../provision/cookbooks/ruby_build/chefignore | 53 + .../libraries/ruby_build_recipe_helpers.rb | 40 + .../cookbooks/ruby_build/metadata.rb | 18 + .../cookbooks/ruby_build/providers/ruby.rb | 88 + .../cookbooks/ruby_build/recipes/default.rb | 69 + .../cookbooks/ruby_build/resources/ruby.rb | 33 + .../test/cookbooks/alltherubies/metadata.rb | 10 + .../cookbooks/alltherubies/recipes/default.rb | 59 + .../alltherubies/bats/_verify_tests.bash | 33 + .../alltherubies/bats/verify_1.8.7.bats | 29 + .../alltherubies/bats/verify_1.9.2.bats | 18 + .../alltherubies/bats/verify_1.9.3.bats | 18 + .../alltherubies/bats/verify_2.0.0.bats | 18 + .../alltherubies/bats/verify_jruby.bats | 20 + .../alltherubies/bats/verify_rbx.bats | 18 + .../alltherubies/bats/verify_ree.bats | 19 + .../installation/bats/installation.bats | 6 + vagrant/provision/cookbooks/xml/CHANGELOG.md | 18 + vagrant/provision/cookbooks/xml/CONTRIBUTING | 29 + vagrant/provision/cookbooks/xml/LICENSE | 201 ++ vagrant/provision/cookbooks/xml/README.md | 45 + .../cookbooks/xml/attributes/default.rb | 8 + vagrant/provision/cookbooks/xml/metadata.json | 41 + vagrant/provision/cookbooks/xml/metadata.rb | 14 + .../cookbooks/xml/recipes/default.rb | 24 + .../provision/cookbooks/xml/recipes/ruby.rb | 35 + vagrant/provision/cookbooks/yum/CHANGELOG.md | 112 + vagrant/provision/cookbooks/yum/README.md | 222 ++ .../cookbooks/yum/attributes/default.rb | 30 + .../cookbooks/yum/attributes/elrepo.rb | 24 + .../cookbooks/yum/attributes/epel.rb | 39 + .../cookbooks/yum/attributes/remi.rb | 30 + .../default/tests/minitest/default_test.rb | 28 + .../default/tests/minitest/support/helpers.rb | 37 + .../files/default/tests/minitest/test_test.rb | 66 + vagrant/provision/cookbooks/yum/metadata.json | 60 + vagrant/provision/cookbooks/yum/metadata.rb | 37 + .../provision/cookbooks/yum/providers/key.rb | 79 + .../cookbooks/yum/providers/repository.rb | 125 ++ .../cookbooks/yum/recipes/default.rb | 18 + .../provision/cookbooks/yum/recipes/elrepo.rb | 31 + .../provision/cookbooks/yum/recipes/epel.rb | 35 + .../provision/cookbooks/yum/recipes/ius.rb | 42 + .../provision/cookbooks/yum/recipes/remi.rb | 35 + .../cookbooks/yum/recipes/repoforge.rb | 41 + .../provision/cookbooks/yum/recipes/test.rb | 39 + .../provision/cookbooks/yum/recipes/yum.rb | 23 + .../provision/cookbooks/yum/resources/key.rb | 29 + .../cookbooks/yum/resources/repository.rb | 42 + .../cookbooks/yum/templates/default/repo.erb | 41 + .../yum/templates/default/yum-rhel5.conf.erb | 33 + .../yum/templates/default/yum-rhel6.conf.erb | 36 + vagrant/provision/default.yml | 108 + .../site-cookbooks/vccw/attributes/default.rb | 34 + .../provision/site-cookbooks/vccw/metadata.rb | 2 + .../site-cookbooks/vccw/recipes/default.rb | 210 ++ .../site-cookbooks/vccw/recipes/phpenv.rb | 114 + .../vccw/templates/default/Movefile.erb | 59 + .../default/default_configure_options.erb | 33 + .../vccw/templates/default/defaults.json.erb | 11 + .../vccw/templates/default/motd.erb | 16 + .../vccw/templates/default/phpenv.sh.erb | 6 + .../vccw/templates/default/sudoers.erb | 1 + .../vccw/templates/default/vccw.ini.erb | 3 + .../templates/default/wp-test-install.sh.erb | 89 + .../wpcli/attributes/default.rb | 58 + .../site-cookbooks/wpcli/metadata.rb | 4 + .../site-cookbooks/wpcli/recipes/default.rb | 59 + .../site-cookbooks/wpcli/recipes/install.rb | 287 +++ .../wpcli/templates/default/config.yml.erb | 5 + .../wpcli/templates/default/editorconfig.erb | 21 + .../wpcli/templates/default/gitignore.erb | 12 + .../wpcli/templates/default/grants.sql.erb | 5 + .../wpcli/templates/default/index.php.erb | 17 + .../templates/default/multisite.htaccess.erb | 13 + .../templates/default/wordpress.conf.erb | 63 + vagrant/spec/default/vccw_spec.rb | 84 + vagrant/spec/default/wp-cli_spec.rb | 128 ++ vagrant/spec/default/wp_spec.rb | 73 + vagrant/spec/spec_helper.rb | 43 + 337 files changed, 25245 insertions(+) create mode 100644 .gitignore create mode 100644 vagrant/.rspec create mode 100644 vagrant/Gemfile create mode 100644 vagrant/Gemfile.lock create mode 100644 vagrant/LICENSE create mode 100644 vagrant/Movefile create mode 100644 vagrant/README.md create mode 100644 vagrant/Rakefile create mode 100644 vagrant/Vagrantfile create mode 100755 vagrant/provision/cookbooks/.gitkeep create mode 100755 vagrant/provision/cookbooks/apache2/.gitignore create mode 100755 vagrant/provision/cookbooks/apache2/CHANGELOG.md create mode 100755 vagrant/provision/cookbooks/apache2/CONTRIBUTING.md create mode 100755 vagrant/provision/cookbooks/apache2/Gemfile create mode 100755 vagrant/provision/cookbooks/apache2/LICENSE create mode 100755 vagrant/provision/cookbooks/apache2/README.md create mode 100755 vagrant/provision/cookbooks/apache2/attributes/default.rb create mode 100755 vagrant/provision/cookbooks/apache2/attributes/mod_auth_cas.rb create mode 100755 vagrant/provision/cookbooks/apache2/attributes/mod_auth_openid.rb create mode 100755 vagrant/provision/cookbooks/apache2/attributes/mod_ssl.rb create mode 100755 vagrant/provision/cookbooks/apache2/definitions/apache_conf.rb create mode 100755 vagrant/provision/cookbooks/apache2/definitions/apache_module.rb create mode 100755 vagrant/provision/cookbooks/apache2/definitions/apache_site.rb create mode 100755 vagrant/provision/cookbooks/apache2/definitions/web_app.rb create mode 100755 vagrant/provision/cookbooks/apache2/files/default/apache2_module_conf_generate.pl create mode 100755 vagrant/provision/cookbooks/apache2/files/default/tests/minitest/default_test.rb create mode 100755 vagrant/provision/cookbooks/apache2/files/default/tests/minitest/god_monitor_test.rb create mode 100755 vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_apreq2_test.rb create mode 100755 vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_auth_cas_test.rb create mode 100755 vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_auth_openid_test.rb create mode 100755 vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_cgi_test.rb create mode 100755 vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_dav_svn_test.rb create mode 100755 vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_fastcgi.rb create mode 100755 vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_include_test.rb create mode 100755 vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_perl_test.rb create mode 100755 vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_php5_test.rb create mode 100755 vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_python_test.rb create mode 100755 vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_ssl_test.rb create mode 100755 vagrant/provision/cookbooks/apache2/files/default/tests/minitest/support/helpers.rb create mode 100755 vagrant/provision/cookbooks/apache2/metadata.json create mode 100755 vagrant/provision/cookbooks/apache2/metadata.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/default.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/god_monitor.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/iptables.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/logrotate.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_actions.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_alias.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_apreq2.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_auth_basic.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_auth_cas.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_auth_digest.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_auth_openid.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_authn_file.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_authnz_ldap.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_authz_default.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_authz_groupfile.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_authz_host.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_authz_user.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_autoindex.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_cgi.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_dav.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_dav_fs.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_dav_svn.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_deflate.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_dir.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_env.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_expires.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_fastcgi.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_fcgid.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_filter.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_headers.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_include.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_ldap.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_log_config.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_logio.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_mime.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_negotiation.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_perl.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_php5.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_proxy.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_proxy_ajp.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_proxy_balancer.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_proxy_connect.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_proxy_http.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_python.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_rewrite.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_setenvif.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_ssl.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_status.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_wsgi.rb create mode 100755 vagrant/provision/cookbooks/apache2/recipes/mod_xsendfile.rb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/a2dismod.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/a2dissite.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/a2enmod.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/a2ensite.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/apache2.conf.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/apache2.god.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/charset.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/default-site.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/etc-sysconfig-httpd.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/mods/README create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/mods/alias.conf.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/mods/auth_cas.conf.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/mods/auth_cas.load.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/mods/authopenid.load.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/mods/autoindex.conf.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/mods/deflate.conf.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/mods/dir.conf.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/mods/fastcgi.conf.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/mods/fcgid.conf.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/mods/include.conf.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/mods/include.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/mods/mime.conf.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/mods/negotiation.conf.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/mods/php5.conf.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/mods/proxy.conf.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/mods/setenvif.conf.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/mods/ssl.conf.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/mods/status.conf.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/port_apache.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/ports.conf.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/security.erb create mode 100755 vagrant/provision/cookbooks/apache2/templates/default/web_app.conf.erb create mode 100755 vagrant/provision/cookbooks/build-essential/CHANGELOG.md create mode 100755 vagrant/provision/cookbooks/build-essential/README.md create mode 100755 vagrant/provision/cookbooks/build-essential/attributes/default.rb create mode 100755 vagrant/provision/cookbooks/build-essential/metadata.json create mode 100755 vagrant/provision/cookbooks/build-essential/metadata.rb create mode 100755 vagrant/provision/cookbooks/build-essential/recipes/debian.rb create mode 100755 vagrant/provision/cookbooks/build-essential/recipes/default.rb create mode 100755 vagrant/provision/cookbooks/build-essential/recipes/fedora.rb create mode 100755 vagrant/provision/cookbooks/build-essential/recipes/mac_os_x.rb create mode 100755 vagrant/provision/cookbooks/build-essential/recipes/omnios.rb create mode 100755 vagrant/provision/cookbooks/build-essential/recipes/rhel.rb create mode 100755 vagrant/provision/cookbooks/build-essential/recipes/smartos.rb create mode 100755 vagrant/provision/cookbooks/build-essential/recipes/solaris2.rb create mode 100755 vagrant/provision/cookbooks/build-essential/recipes/suse.rb create mode 100755 vagrant/provision/cookbooks/mysql/CHANGELOG.md create mode 100755 vagrant/provision/cookbooks/mysql/README.md create mode 100755 vagrant/provision/cookbooks/mysql/attributes/client.rb create mode 100755 vagrant/provision/cookbooks/mysql/attributes/percona_repo.rb create mode 100755 vagrant/provision/cookbooks/mysql/attributes/server.rb create mode 100755 vagrant/provision/cookbooks/mysql/libraries/helpers.rb create mode 100755 vagrant/provision/cookbooks/mysql/metadata.json create mode 100755 vagrant/provision/cookbooks/mysql/metadata.rb create mode 100755 vagrant/provision/cookbooks/mysql/recipes/client.rb create mode 100755 vagrant/provision/cookbooks/mysql/recipes/default.rb create mode 100755 vagrant/provision/cookbooks/mysql/recipes/percona_repo.rb create mode 100755 vagrant/provision/cookbooks/mysql/recipes/ruby.rb create mode 100755 vagrant/provision/cookbooks/mysql/recipes/server.rb create mode 100755 vagrant/provision/cookbooks/mysql/recipes/server_ec2.rb create mode 100755 vagrant/provision/cookbooks/mysql/templates/default/debian.cnf.erb create mode 100755 vagrant/provision/cookbooks/mysql/templates/default/grants.sql.erb create mode 100755 vagrant/provision/cookbooks/mysql/templates/default/my.cnf.erb create mode 100755 vagrant/provision/cookbooks/mysql/templates/default/mysql-server.seed.erb create mode 100755 vagrant/provision/cookbooks/mysql/templates/default/port_mysql.erb create mode 100755 vagrant/provision/cookbooks/mysql/templates/windows/my.cnf.erb create mode 100755 vagrant/provision/cookbooks/openssl/CHANGELOG.md create mode 100755 vagrant/provision/cookbooks/openssl/README.md create mode 100755 vagrant/provision/cookbooks/openssl/libraries/secure_password.rb create mode 100755 vagrant/provision/cookbooks/openssl/metadata.json create mode 100755 vagrant/provision/cookbooks/openssl/metadata.rb create mode 100755 vagrant/provision/cookbooks/openssl/recipes/default.rb create mode 100755 vagrant/provision/cookbooks/php/CHANGELOG.md create mode 100755 vagrant/provision/cookbooks/php/README.md create mode 100755 vagrant/provision/cookbooks/php/attributes/default.rb create mode 100755 vagrant/provision/cookbooks/php/libraries/helpers.rb create mode 100755 vagrant/provision/cookbooks/php/metadata.json create mode 100755 vagrant/provision/cookbooks/php/metadata.rb create mode 100755 vagrant/provision/cookbooks/php/providers/pear.rb create mode 100755 vagrant/provision/cookbooks/php/providers/pear_channel.rb create mode 100755 vagrant/provision/cookbooks/php/recipes/default.rb create mode 100755 vagrant/provision/cookbooks/php/recipes/module_apc.rb create mode 100755 vagrant/provision/cookbooks/php/recipes/module_curl.rb create mode 100755 vagrant/provision/cookbooks/php/recipes/module_fpdf.rb create mode 100755 vagrant/provision/cookbooks/php/recipes/module_gd.rb create mode 100755 vagrant/provision/cookbooks/php/recipes/module_ldap.rb create mode 100755 vagrant/provision/cookbooks/php/recipes/module_memcache.rb create mode 100755 vagrant/provision/cookbooks/php/recipes/module_mysql.rb create mode 100755 vagrant/provision/cookbooks/php/recipes/module_pgsql.rb create mode 100755 vagrant/provision/cookbooks/php/recipes/module_sqlite3.rb create mode 100755 vagrant/provision/cookbooks/php/recipes/package.rb create mode 100755 vagrant/provision/cookbooks/php/recipes/source.rb create mode 100755 vagrant/provision/cookbooks/php/resources/pear.rb create mode 100755 vagrant/provision/cookbooks/php/resources/pear_channel.rb create mode 100755 vagrant/provision/cookbooks/php/templates/centos/php.ini.erb create mode 100755 vagrant/provision/cookbooks/php/templates/debian/php.ini.erb create mode 100755 vagrant/provision/cookbooks/php/templates/default/extension.ini.erb create mode 100755 vagrant/provision/cookbooks/php/templates/default/php.ini.erb create mode 100755 vagrant/provision/cookbooks/php/templates/redhat/php.ini.erb create mode 100755 vagrant/provision/cookbooks/php/templates/ubuntu/php.ini.erb create mode 100644 vagrant/provision/cookbooks/rbenv/.kitchen.yml create mode 100644 vagrant/provision/cookbooks/rbenv/.rspec create mode 100644 vagrant/provision/cookbooks/rbenv/.travis.yml create mode 100644 vagrant/provision/cookbooks/rbenv/Berksfile create mode 100644 vagrant/provision/cookbooks/rbenv/CHANGELOG.md create mode 100644 vagrant/provision/cookbooks/rbenv/Gemfile create mode 100644 vagrant/provision/cookbooks/rbenv/Guardfile create mode 100644 vagrant/provision/cookbooks/rbenv/README.md create mode 100644 vagrant/provision/cookbooks/rbenv/Rakefile create mode 100644 vagrant/provision/cookbooks/rbenv/attributes/default.rb create mode 100644 vagrant/provision/cookbooks/rbenv/libraries/chef_provider_package_rbenvrubygems.rb create mode 100644 vagrant/provision/cookbooks/rbenv/libraries/chef_rbenv_mixin.rb create mode 100644 vagrant/provision/cookbooks/rbenv/libraries/chef_rbenv_recipe_helpers.rb create mode 100644 vagrant/provision/cookbooks/rbenv/libraries/chef_rbenv_script_helpers.rb create mode 100644 vagrant/provision/cookbooks/rbenv/libraries/matchers.rb create mode 100644 vagrant/provision/cookbooks/rbenv/metadata.rb create mode 100644 vagrant/provision/cookbooks/rbenv/providers/global.rb create mode 100644 vagrant/provision/cookbooks/rbenv/providers/plugin.rb create mode 100644 vagrant/provision/cookbooks/rbenv/providers/rehash.rb create mode 100644 vagrant/provision/cookbooks/rbenv/providers/ruby.rb create mode 100644 vagrant/provision/cookbooks/rbenv/providers/script.rb create mode 100644 vagrant/provision/cookbooks/rbenv/recipes/default.rb create mode 100644 vagrant/provision/cookbooks/rbenv/recipes/system.rb create mode 100644 vagrant/provision/cookbooks/rbenv/recipes/system_install.rb create mode 100644 vagrant/provision/cookbooks/rbenv/recipes/user.rb create mode 100644 vagrant/provision/cookbooks/rbenv/recipes/user_install.rb create mode 100644 vagrant/provision/cookbooks/rbenv/recipes/vagrant.rb create mode 100644 vagrant/provision/cookbooks/rbenv/resources/gem.rb create mode 100644 vagrant/provision/cookbooks/rbenv/resources/global.rb create mode 100644 vagrant/provision/cookbooks/rbenv/resources/plugin.rb create mode 100644 vagrant/provision/cookbooks/rbenv/resources/rehash.rb create mode 100644 vagrant/provision/cookbooks/rbenv/resources/ruby.rb create mode 100644 vagrant/provision/cookbooks/rbenv/resources/script.rb create mode 100644 vagrant/provision/cookbooks/rbenv/templates/default/rbenv.sh.erb create mode 100644 vagrant/provision/cookbooks/rbenv/test/integration/system_ruby/bats/global_ruby.bats create mode 100644 vagrant/provision/cookbooks/rbenv/test/integration/system_ruby/bats/installation.bats create mode 100644 vagrant/provision/cookbooks/rbenv/test/integration/system_ruby/bats/plugins.bats create mode 100644 vagrant/provision/cookbooks/rbenv/test/integration/system_ruby/bats/ruby_envvars.bats create mode 100644 vagrant/provision/cookbooks/rbenv/test/unit/fixtures/metadata.rb create mode 100644 vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_global_defaults.rb create mode 100644 vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_global_full.rb create mode 100644 vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_plugin_defaults.rb create mode 100644 vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_plugin_full.rb create mode 100644 vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_rehash_defaults.rb create mode 100644 vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_rehash_full.rb create mode 100644 vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_script_defaults.rb create mode 100644 vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_script_full.rb create mode 100644 vagrant/provision/cookbooks/rbenv/test/unit/providers/global_spec.rb create mode 100644 vagrant/provision/cookbooks/rbenv/test/unit/providers/plugin_spec.rb create mode 100644 vagrant/provision/cookbooks/rbenv/test/unit/providers/rehash_spec.rb create mode 100644 vagrant/provision/cookbooks/rbenv/test/unit/providers/script_spec.rb create mode 100644 vagrant/provision/cookbooks/rbenv/test/unit/resources/gem_spec.rb create mode 100644 vagrant/provision/cookbooks/rbenv/test/unit/resources/global_spec.rb create mode 100644 vagrant/provision/cookbooks/rbenv/test/unit/resources/plugin_spec.rb create mode 100644 vagrant/provision/cookbooks/rbenv/test/unit/resources/rehash_spec.rb create mode 100644 vagrant/provision/cookbooks/rbenv/test/unit/resources/ruby_spec.rb create mode 100644 vagrant/provision/cookbooks/rbenv/test/unit/resources/script_spec.rb create mode 100644 vagrant/provision/cookbooks/rbenv/test/unit/spec_helper.rb create mode 100644 vagrant/provision/cookbooks/ruby_build/.kitchen.yml create mode 100644 vagrant/provision/cookbooks/ruby_build/.travis.yml create mode 100644 vagrant/provision/cookbooks/ruby_build/Berksfile create mode 100644 vagrant/provision/cookbooks/ruby_build/CHANGELOG.md create mode 100644 vagrant/provision/cookbooks/ruby_build/Gemfile create mode 100644 vagrant/provision/cookbooks/ruby_build/README.md create mode 100644 vagrant/provision/cookbooks/ruby_build/Rakefile create mode 100644 vagrant/provision/cookbooks/ruby_build/attributes/default.rb create mode 100644 vagrant/provision/cookbooks/ruby_build/chefignore create mode 100644 vagrant/provision/cookbooks/ruby_build/libraries/ruby_build_recipe_helpers.rb create mode 100644 vagrant/provision/cookbooks/ruby_build/metadata.rb create mode 100644 vagrant/provision/cookbooks/ruby_build/providers/ruby.rb create mode 100644 vagrant/provision/cookbooks/ruby_build/recipes/default.rb create mode 100644 vagrant/provision/cookbooks/ruby_build/resources/ruby.rb create mode 100644 vagrant/provision/cookbooks/ruby_build/test/cookbooks/alltherubies/metadata.rb create mode 100644 vagrant/provision/cookbooks/ruby_build/test/cookbooks/alltherubies/recipes/default.rb create mode 100644 vagrant/provision/cookbooks/ruby_build/test/integration/alltherubies/bats/_verify_tests.bash create mode 100644 vagrant/provision/cookbooks/ruby_build/test/integration/alltherubies/bats/verify_1.8.7.bats create mode 100644 vagrant/provision/cookbooks/ruby_build/test/integration/alltherubies/bats/verify_1.9.2.bats create mode 100644 vagrant/provision/cookbooks/ruby_build/test/integration/alltherubies/bats/verify_1.9.3.bats create mode 100644 vagrant/provision/cookbooks/ruby_build/test/integration/alltherubies/bats/verify_2.0.0.bats create mode 100644 vagrant/provision/cookbooks/ruby_build/test/integration/alltherubies/bats/verify_jruby.bats create mode 100644 vagrant/provision/cookbooks/ruby_build/test/integration/alltherubies/bats/verify_rbx.bats create mode 100644 vagrant/provision/cookbooks/ruby_build/test/integration/alltherubies/bats/verify_ree.bats create mode 100644 vagrant/provision/cookbooks/ruby_build/test/integration/installation/bats/installation.bats create mode 100755 vagrant/provision/cookbooks/xml/CHANGELOG.md create mode 100755 vagrant/provision/cookbooks/xml/CONTRIBUTING create mode 100755 vagrant/provision/cookbooks/xml/LICENSE create mode 100755 vagrant/provision/cookbooks/xml/README.md create mode 100755 vagrant/provision/cookbooks/xml/attributes/default.rb create mode 100755 vagrant/provision/cookbooks/xml/metadata.json create mode 100755 vagrant/provision/cookbooks/xml/metadata.rb create mode 100755 vagrant/provision/cookbooks/xml/recipes/default.rb create mode 100755 vagrant/provision/cookbooks/xml/recipes/ruby.rb create mode 100755 vagrant/provision/cookbooks/yum/CHANGELOG.md create mode 100755 vagrant/provision/cookbooks/yum/README.md create mode 100755 vagrant/provision/cookbooks/yum/attributes/default.rb create mode 100755 vagrant/provision/cookbooks/yum/attributes/elrepo.rb create mode 100755 vagrant/provision/cookbooks/yum/attributes/epel.rb create mode 100755 vagrant/provision/cookbooks/yum/attributes/remi.rb create mode 100755 vagrant/provision/cookbooks/yum/files/default/tests/minitest/default_test.rb create mode 100755 vagrant/provision/cookbooks/yum/files/default/tests/minitest/support/helpers.rb create mode 100755 vagrant/provision/cookbooks/yum/files/default/tests/minitest/test_test.rb create mode 100755 vagrant/provision/cookbooks/yum/metadata.json create mode 100755 vagrant/provision/cookbooks/yum/metadata.rb create mode 100755 vagrant/provision/cookbooks/yum/providers/key.rb create mode 100755 vagrant/provision/cookbooks/yum/providers/repository.rb create mode 100755 vagrant/provision/cookbooks/yum/recipes/default.rb create mode 100755 vagrant/provision/cookbooks/yum/recipes/elrepo.rb create mode 100755 vagrant/provision/cookbooks/yum/recipes/epel.rb create mode 100755 vagrant/provision/cookbooks/yum/recipes/ius.rb create mode 100755 vagrant/provision/cookbooks/yum/recipes/remi.rb create mode 100755 vagrant/provision/cookbooks/yum/recipes/repoforge.rb create mode 100755 vagrant/provision/cookbooks/yum/recipes/test.rb create mode 100755 vagrant/provision/cookbooks/yum/recipes/yum.rb create mode 100755 vagrant/provision/cookbooks/yum/resources/key.rb create mode 100755 vagrant/provision/cookbooks/yum/resources/repository.rb create mode 100755 vagrant/provision/cookbooks/yum/templates/default/repo.erb create mode 100755 vagrant/provision/cookbooks/yum/templates/default/yum-rhel5.conf.erb create mode 100755 vagrant/provision/cookbooks/yum/templates/default/yum-rhel6.conf.erb create mode 100644 vagrant/provision/default.yml create mode 100644 vagrant/provision/site-cookbooks/vccw/attributes/default.rb create mode 100644 vagrant/provision/site-cookbooks/vccw/metadata.rb create mode 100644 vagrant/provision/site-cookbooks/vccw/recipes/default.rb create mode 100644 vagrant/provision/site-cookbooks/vccw/recipes/phpenv.rb create mode 100644 vagrant/provision/site-cookbooks/vccw/templates/default/Movefile.erb create mode 100644 vagrant/provision/site-cookbooks/vccw/templates/default/default_configure_options.erb create mode 100644 vagrant/provision/site-cookbooks/vccw/templates/default/defaults.json.erb create mode 100644 vagrant/provision/site-cookbooks/vccw/templates/default/motd.erb create mode 100644 vagrant/provision/site-cookbooks/vccw/templates/default/phpenv.sh.erb create mode 100644 vagrant/provision/site-cookbooks/vccw/templates/default/sudoers.erb create mode 100644 vagrant/provision/site-cookbooks/vccw/templates/default/vccw.ini.erb create mode 100644 vagrant/provision/site-cookbooks/vccw/templates/default/wp-test-install.sh.erb create mode 100644 vagrant/provision/site-cookbooks/wpcli/attributes/default.rb create mode 100644 vagrant/provision/site-cookbooks/wpcli/metadata.rb create mode 100644 vagrant/provision/site-cookbooks/wpcli/recipes/default.rb create mode 100644 vagrant/provision/site-cookbooks/wpcli/recipes/install.rb create mode 100644 vagrant/provision/site-cookbooks/wpcli/templates/default/config.yml.erb create mode 100644 vagrant/provision/site-cookbooks/wpcli/templates/default/editorconfig.erb create mode 100644 vagrant/provision/site-cookbooks/wpcli/templates/default/gitignore.erb create mode 100644 vagrant/provision/site-cookbooks/wpcli/templates/default/grants.sql.erb create mode 100644 vagrant/provision/site-cookbooks/wpcli/templates/default/index.php.erb create mode 100644 vagrant/provision/site-cookbooks/wpcli/templates/default/multisite.htaccess.erb create mode 100644 vagrant/provision/site-cookbooks/wpcli/templates/default/wordpress.conf.erb create mode 100644 vagrant/spec/default/vccw_spec.rb create mode 100644 vagrant/spec/default/wp-cli_spec.rb create mode 100644 vagrant/spec/default/wp_spec.rb create mode 100644 vagrant/spec/spec_helper.rb diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..47efc8a --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +# Vagrant generated files +vagrant/.vagrant +vagrant/www diff --git a/vagrant/.rspec b/vagrant/.rspec new file mode 100644 index 0000000..16f9cdb --- /dev/null +++ b/vagrant/.rspec @@ -0,0 +1,2 @@ +--color +--format documentation diff --git a/vagrant/Gemfile b/vagrant/Gemfile new file mode 100644 index 0000000..992ada6 --- /dev/null +++ b/vagrant/Gemfile @@ -0,0 +1,4 @@ +source "https://rubygems.org" + +gem "rake" +gem "serverspec" diff --git a/vagrant/Gemfile.lock b/vagrant/Gemfile.lock new file mode 100644 index 0000000..2483cdc --- /dev/null +++ b/vagrant/Gemfile.lock @@ -0,0 +1,47 @@ +GEM + remote: https://rubygems.org/ + specs: + diff-lcs (1.2.5) + multi_json (1.11.2) + net-scp (1.2.1) + net-ssh (>= 2.6.5) + net-ssh (2.9.2) + net-telnet (0.1.1) + rake (10.4.2) + rspec (3.3.0) + rspec-core (~> 3.3.0) + rspec-expectations (~> 3.3.0) + rspec-mocks (~> 3.3.0) + rspec-core (3.3.2) + rspec-support (~> 3.3.0) + rspec-expectations (3.3.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.3.0) + rspec-its (1.2.0) + rspec-core (>= 3.0.0) + rspec-expectations (>= 3.0.0) + rspec-mocks (3.3.2) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.3.0) + rspec-support (3.3.0) + serverspec (2.24.1) + multi_json + rspec (~> 3.0) + rspec-its + specinfra (~> 2.43) + sfl (2.2) + specinfra (2.44.0) + net-scp + net-ssh (~> 2.7) + net-telnet + sfl + +PLATFORMS + ruby + +DEPENDENCIES + rake + serverspec + +BUNDLED WITH + 1.10.6 diff --git a/vagrant/LICENSE b/vagrant/LICENSE new file mode 100644 index 0000000..06c18c3 --- /dev/null +++ b/vagrant/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Takayuki Miyauchi + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vagrant/Movefile b/vagrant/Movefile new file mode 100644 index 0000000..6328d29 --- /dev/null +++ b/vagrant/Movefile @@ -0,0 +1,59 @@ +local: + vhost: "http://open-csa-wp.dev" + wordpress_path: "/var/www/wordpress" + + database: + name: "wordpress" + user: "wordpress" + password: "wordpress" + host: "localhost" + +staging: + vhost: "http://example.com" + wordpress_path: "/var/www/your_site" # use an absolute path here + + database: + name: "database_name" + user: "user" + password: "password" + host: "localhost" + charset: "utf8" + + exclude: + - ".git/" + - ".gitignore" + - ".sass-cache/" + - "bin/" + - "tmp/*" + - "Gemfile*" + - "Movefile" + - "wp-config.php" + - "wp-content/*.sql" + + # paths: # you can customize wordpress internal paths + # wp_content: "wp-content" + # uploads: "wp-content/uploads" + # plugins: "wp-content/plugins" + # themes: "wp-content/themes" + # languages: "wp-content/languages" + # themes: "wp-content/themes" + + # ssh: + # host: "host" + # user: "user" + # password: "password" # password is optional, will use public keys if available. + # port: 22 # Port is optional + # rsync_options: "--verbose" # Additional rsync options, optional + # gateway: # Gateway is optional + # host: "host" + # user: "user" + # password: "password" # password is optional, will use public keys if available. + + # ftp: + # user: "user" + # password: "password" + # host: "host" + # passive: true + +# production: # multiple environments can be specified +# [...] diff --git a/vagrant/README.md b/vagrant/README.md new file mode 100644 index 0000000..64cddc6 --- /dev/null +++ b/vagrant/README.md @@ -0,0 +1,42 @@ +# VCCW + +This is a Vagrant configuration designed for development of WordPress plugins, themes, or websites. + +To get started, check out + +## Configuration + +1. Copy `provision/default.yml` to `site.yml`. +1. Edit the `site.yml`. +1. Run `vagrant up`. + +### Note + +* The `site.yml` has to be in the same directory with Vagrantfile. +* You can put just difference to the `site.yml`. + +## Contribute + +### Setting up + +1. Clone this git repository on your local machine. +2. Run `bundle install` to fetch all dependencies. + +### Running and writing tests + +There is automated tests using [Serverspec](http://serverspec.org/). + +The tests files are in the `spec/` directory. + + +Before running the serverspec tests, you'll need some dependencies. + +``` +$ bundle install --path=vendor/bundle +``` + +Then to run the tests, just execute following. + +``` +$ bundle exec rake spec +``` diff --git a/vagrant/Rakefile b/vagrant/Rakefile new file mode 100644 index 0000000..1fbc054 --- /dev/null +++ b/vagrant/Rakefile @@ -0,0 +1,24 @@ +require 'rake' +require 'rspec/core/rake_task' + +task :spec => 'spec:all' +task :default => :spec + +namespace :spec do + targets = [] + Dir.glob('./spec/*').each do |dir| + next unless File.directory?(dir) + targets << File.basename(dir) + end + + task :all => targets + # task :default => :all + + targets.each do |target| + desc "Run serverspec tests to #{target}" + RSpec::Core::RakeTask.new(target.to_sym) do |t| + ENV['TARGET_HOST'] = target + t.pattern = "spec/#{target}/*_spec.rb" + end + end +end diff --git a/vagrant/Vagrantfile b/vagrant/Vagrantfile new file mode 100644 index 0000000..4c1e331 --- /dev/null +++ b/vagrant/Vagrantfile @@ -0,0 +1,201 @@ +# encoding: utf-8 +# vim: ft=ruby expandtab shiftwidth=2 tabstop=2 + +require 'yaml' + +Vagrant.require_version '>= 1.5' + +Vagrant.configure(2) do |config| + + vccw_version = '2.8.2'; + + _conf = YAML.load( + File.open( + File.join(File.dirname(__FILE__), 'provision/default.yml'), + File::RDONLY + ).read + ) + + if File.exists?(File.join(ENV["HOME"], '.vccw/config.yml')) + _custom = YAML.load( + File.open( + File.join(ENV["HOME"], '.vccw/config.yml'), + File::RDONLY + ).read + ) + _conf.merge!(_custom) if _custom.is_a?(Hash) + end + + if File.exists?(File.join(File.dirname(__FILE__), 'site.yml')) + _site = YAML.load( + File.open( + File.join(File.dirname(__FILE__), 'site.yml'), + File::RDONLY + ).read + ) + _conf.merge!(_site) if _site.is_a?(Hash) + end + + if File.exists?(_conf['chef_cookbook_path']) + chef_cookbooks_path = _conf['chef_cookbook_path'] + elsif File.exists?(File.join(File.dirname(__FILE__), _conf['chef_cookbook_path'])) + chef_cookbooks_path = File.join(File.dirname(__FILE__), _conf['chef_cookbook_path']) + else + puts "Can't find "+_conf['chef_cookbook_path']+'. Please check chef_cookbooks_path in the config.' + exit 1 + end + + config.vm.define _conf['hostname'] do |v| + end + + config.vm.box = ENV['wp_box'] || _conf['wp_box'] + config.ssh.forward_agent = true + + config.vm.box_check_update = true + + config.vm.hostname = _conf['hostname'] + config.vm.network :private_network, ip: _conf['ip'] + + config.vm.synced_folder ".", "/vagrant", :mount_options => ['dmode=755', 'fmode=644'] + config.vm.synced_folder _conf['sync_folder'], _conf['document_root'], :create => "true", :mount_options => ['dmode=755', 'fmode=644'] + config.vm.synced_folder "..", "/var/www/wordpress/wp-content/plugins/open-csa-wp" + + if Vagrant.has_plugin?('vagrant-hostsupdater') + config.hostsupdater.remove_on_suspend = true + end + + if Vagrant.has_plugin?('vagrant-vbguest') + config.vbguest.auto_update = false + end + + config.vm.provider :virtualbox do |vb| + vb.name = _conf['hostname'] + vb.memory = _conf['memory'].to_i + vb.cpus = _conf['cpus'].to_i + if 1 < _conf['cpus'].to_i + vb.customize ['modifyvm', :id, '--ioapic', 'on'] + end + vb.customize ['modifyvm', :id, '--natdnsproxy1', 'on'] + vb.customize ['modifyvm', :id, '--natdnshostresolver1', 'on'] + end + + if 'miya0001/vccw' != config.vm.box && 'provision' != ARGV[0] + config.vm.provision 'shell', + inline: 'curl -L https://www.opscode.com/chef/install.sh | sudo bash -s -- -v 11' + end + + if File.exists?(File.join(File.dirname(__FILE__), 'provision-pre.sh')) then + config.vm.provision :shell, :path => File.join( File.dirname(__FILE__), 'provision-pre.sh' ) + end + + config.vm.provision :chef_solo do |chef| + + chef.cookbooks_path = [ + File.join(chef_cookbooks_path, 'cookbooks'), + File.join(chef_cookbooks_path, 'site-cookbooks') + ] + + chef.json = { + :apache => { + :docroot_dir => _conf['document_root'], + :user => _conf['user'], + :group => _conf['group'], + :listen_ports => ['80', '443'] + }, + :php => { + :packages => %w(php php-cli php-devel php-mbstring php-gd php-xml php-mysql php-pecl-xdebug), + :directives => { + 'default_charset' => 'UTF-8', + 'mbstring.language' => 'neutral', + 'mbstring.internal_encoding' => 'UTF-8', + 'date.timezone' => 'UTC', + 'short_open_tag' => 'Off', + 'session.save_path' => '/tmp' + } + }, + :mysql => { + :bind_address => '0.0.0.0', + :server_debian_password => 'wordpress', + :server_root_password => 'wordpress', + :server_repl_password => 'wordpress' + }, + 'wpcli' => { + :user => _conf['user'], + :group => _conf['group'], + :wp_version => ENV['wp_version'] || _conf['version'], + :wp_host => _conf['hostname'], + :wp_home => _conf['wp_home'], + :wp_siteurl => _conf['wp_siteurl'], + :wp_docroot => _conf['document_root'], + :locale => ENV['wp_lang'] || _conf['lang'], + :admin_user => _conf['admin_user'], + :admin_password => _conf['admin_pass'], + :admin_email => _conf['admin_email'], + :default_plugins => _conf['plugins'], + :default_theme => _conf['theme'], + :title => _conf['title'], + :is_multisite => _conf['multisite'], + :force_ssl_admin => _conf['force_ssl_admin'], + :debug_mode => _conf['wp_debug'], + :savequeries => _conf['savequeries'], + :theme_unit_test => _conf['theme_unit_test'], + :theme_unit_test_data_url => _conf['theme_unit_test_uri'], + :gitignore => File.join(_conf['document_root'], ".gitignore"), + :always_reset => _conf['reset_db'], + :dbhost => _conf['db_host'], + :dbprefix => _conf['db_prefix'], + :options => _conf['options'], + :rewrite_structure => _conf['rewrite_structure'] + }, + :vccw => { + :version => vccw_version, + :user => _conf['user'], + :group => _conf['group'], + :wordmove => { + :movefile => File.join('/vagrant', 'Movefile'), + :url => 'http://' << File.join(_conf['hostname'], _conf['wp_home']), + :wpdir => File.join(_conf['document_root'], _conf['wp_siteurl']), + :dbhost => _conf['db_host'] + }, + :phpenv => { + :php_version => _conf['php_version'] + } + }, + :rbenv => { + 'rubies' => ['2.1.2'], + 'global' => '2.1.2', + 'gems' => { + '2.1.2' => [ + { + name: 'bundler', + options: '--no-ri --no-rdoc' + }, + { + name: 'sass', + options: '--no-ri --no-rdoc' + }, + { + name: 'wordmove', + options: '--no-ri --no-rdoc' + }, + { + name: 'mailcatcher', + options: '--no-ri --no-rdoc' + } + ] + } + } + } + + chef.add_recipe 'wpcli' + chef.add_recipe 'wpcli::install' + if true != _conf['disable_vccw_cookbook'] + chef.add_recipe 'vccw' + end + + end + + if File.exists?(File.join(File.dirname(__FILE__), 'provision-post.sh')) then + config.vm.provision :shell, :path => File.join( File.dirname(__FILE__), 'provision-post.sh' ) + end +end diff --git a/vagrant/provision/cookbooks/.gitkeep b/vagrant/provision/cookbooks/.gitkeep new file mode 100755 index 0000000..e69de29 diff --git a/vagrant/provision/cookbooks/apache2/.gitignore b/vagrant/provision/cookbooks/apache2/.gitignore new file mode 100755 index 0000000..47e51f5 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/.gitignore @@ -0,0 +1,3 @@ +test/kitchen/.kitchen/ + +Gemfile.lock diff --git a/vagrant/provision/cookbooks/apache2/CHANGELOG.md b/vagrant/provision/cookbooks/apache2/CHANGELOG.md new file mode 100755 index 0000000..f574307 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/CHANGELOG.md @@ -0,0 +1,183 @@ +## v1.7.0: + +### Improvement + +- [COOK-3073]: make access.log location configurable per-platform +- [COOK-3074]: don't hardcode the error.log location in the default site config +- [COOK-3268]: don't hardcode DocumentRoot and cgi-bin locations in `default_site` + +### New Feature + +- [COOK-3184]: Add `mod_filter` recipe to Apache2-cookbook +- [COOK-3236]: Add `mod_action` recipe to Apache2-cookbook + +## v1.6.6: + +1.6.4 had a missed step in the automated release, long live 1.6.6. + +### Bug + +- [COOK-3018]: apache2_module does duplicate delayed restart of + apache2 service when conf = true +- [COOK-3027]: Default site enable true, then false, does not disable + default site +- [COOK-3109]: fix apache lib_dir arch attribute regexp + +## v1.6.2 + +* [COOK-2535] - `mod_auth_openid` requires libtool to run autogen.sh +* [COOK-2667] - Typo in usage documentation +* [COOK-2461] - `apache2::mod_auth_openid` fails on some ubuntu systems +* [COOK-2720] - Apache2 minitest helper function `ran_recipe` is not + portable + +## v1.6.0: + +* [COOK-2372] - apache2 mpm_worker: add ServerLimit attribute (default + to 16) + +## v1.5.0: + +**NOTE** The `mod_auth_openid` attributes are changed. The upstream + maintainer deprecated the older release versions, and the source + repository has releases available at specific SHA1SUM references. + The new attribute, `node['apache']['mod_auth_openid']['ref']` is + used to set this. + +* [COOK-2198] - `apache::mod_auth_openid` compiles from source, but + does not install make on debian/ubuntu +* [COOK-2224] - version conflict between cucumber and other gems +* [COOK-2248] - `apache2::mod_php5` uses `not_if` "which php" without + ensuring package 'which' is installed +* [COOK-2269] - Set allow list for mod_status incase external monitor scripts need +* [COOK-2276] - cookbook apache2 documentation regarding listening + ports doesn't match default attributes +* [COOK-2296] - `mod_auth_openid` doesn't have tags/releases for the + version I need for features and fixes +* [COOK-2323] - Add Oracle linux support + +## v1.4.2: + +* [COOK-1721] - fix logrotate recipe + +## v1.4.0: + +* [COOK-1456] - iptables enhancements +* [COOK-1473] - apache2 does not disable default site when setting + "`default_site_enabled`" back to false +* [COOK-1824] - the apache2 cookbook needs to specify which binary is + used on rhel platform +* [COOK-1916] - Download location wrong for apache2 `mod_auth_openid` + >= 0.7 +* [COOK-1917] - Improve `mod_auth_openid` recipe to handle module + upgrade more gracefully +* [COOK-2029] - apache2 restarts on every run on RHEL and friends, + generate-module-list on every run. +* [COOK-2036] - apache2: Cookbook style + +## v1.3.2: + +* [COOK-1804] - fix `web_app` definition parameter so site can be + disabled. + +## v1.3.0: + +* [COOK-1738] - Better configuration for `mod_include` and some + overrides in `web_app` definition +* [COOK-1470] - Change SSL Ciphers to Mitigate BEAST attack + +## v1.2.0: + +* [COOK-692] - delete package conf.d files in module recipes, for EL +* [COOK-1693] - Foodcritic finding for unnecessary string interpolation +* [COOK-1757] - platform_family and better style / usage practices + +## v1.1.16: + +re-releasing as .16 due to error on tag 1.1.14 + +* [COOK-1466] - add `mod_auth_cas` recipe +* [COOK-1609] - apache2 changes ports.conf twice per run when using + apache2::mod_ssl + +## v1.1.12: + +* [COOK-1436] - restore apache2 web_app definition +* [COOK-1356] - allow ExtendedStatus via attribute +* [COOK-1403] - add mod_fastcgi recipe + +## v1.1.10: + +* [COOK-1315] - allow the default site to not be enabled +* [COOK-1328] - cookbook tests (minitest, cucumber) + +## v1.1.8: + +* Some platforms with minimal installations that don't have perl won't + have a `node['languages']['perl']` attribute, so remove the + conditional and rely on the power of idempotence in the package + resource. +* [COOK-1214] - address foodcritic warnings +* [COOK-1180] - add `mod_logio` and fix `mod_proxy` + +## v1.1.6: + +FreeBSD users: This release requires the `freebsd` cookbook. See README.md. + +* [COOK-1025] - freebsd support in mod_php5 recipe + +## v1.1.4: + +* [COOK-1100] - support amazon linux + +## v1.1.2: + +* [COOK-996] - apache2::mod_php5 can cause PHP and module API mismatches +* [COOK-1083] - return string for v_f_p and use correct value for + default + +## v1.1.0: + +* [COOK-861] - Add `mod_perl` and apreq2 +* [COOK-941] - fix `mod_auth_openid` on FreeBSD +* [COOK-1021] - add a commented-out LoadModule directive to keep apxs happy +* [COOK-1022] - consistency for icondir attribute +* [COOK-1023] - fix platform test for attributes +* [COOK-1024] - fix a2enmod script so it runs cleanly on !bash +* [COOK-1026] - fix `error_log` location on FreeBSD + +## v1.0.8: + +* COOK-548 - directory resource doesn't have backup parameter + +## v1.0.6: + +* COOK-915 - update to `mod_auth_openid` version 0.6, see __Recipes/mod_auth_openid__ below. +* COOK-548 - Add support for FreeBSD. + +## v1.0.4: + +* COOK-859 - don't hardcode module paths + +## v1.0.2 + +* Tickets resolved in this release: COOK-788, COOK-782, COOK-780 + +## v1.0.0 + +* Red Hat family support is greatly improved, all recipes except `god_monitor` converge. +* Recipe `mod_auth_openid` now works on RHEL family distros +* Recipe `mod_php5` will now remove config from package on RHEL family so it doesn't conflict with the cookbook's. +* Added `php5.conf.erb` template for `mod_php5` recipe. +* Create the run state directory for `mod_fcgid` to prevent a startup error on RHEL version 6. +* New attribute `node['apache']['lib_dir']` to handle lib vs lib64 on RHEL family distributions. +* New attribute `node['apache']['group']`. +* Scientific Linux support added. +* Use a file resource instead of the generate-module-list executed perl script on RHEL family. +* "default" site can now be disabled. +* web_app now has an "enable" parameter. +* Support for dav_fs apache module. +* Tickets resolved in this release: COOK-754, COOK-753, COOK-665, COOK-624, COOK-579, COOK-519, COOK-518 +* Fix node references in template for a2dissite +* Use proper user and group attributes on files and templates. +* Replace the anemic README.rdoc with this new and improved superpowered README.md :). diff --git a/vagrant/provision/cookbooks/apache2/CONTRIBUTING.md b/vagrant/provision/cookbooks/apache2/CONTRIBUTING.md new file mode 100755 index 0000000..3a99897 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/CONTRIBUTING.md @@ -0,0 +1,257 @@ +# Contributing to Opscode Cookbooks + +We are glad you want to contribute to Opscode Cookbooks! The first +step is the desire to improve the project. + +You can find the answers to additional frequently asked questions +[on the wiki](http://wiki.opscode.com/display/chef/How+to+Contribute). + +You can find additional information about +[contributing to cookbooks](http://wiki.opscode.com/display/chef/How+to+Contribute+to+Opscode+Cookbooks) +on the wiki as well. + +## Quick-contribute + +* Create an account on our [bug tracker](http://tickets.opscode.com) +* Sign our contributor agreement (CLA) +[ online](https://secure.echosign.com/public/hostedForm?formid=PJIF5694K6L) +(keep reading if you're contributing on behalf of your employer) +* Create a ticket for your change on the + [bug tracker](http://tickets.opscode.com) +* Link to your patch as a rebased git branch or pull request from the + ticket +* Resolve the ticket as fixed + +We regularly review contributions and will get back to you if we have +any suggestions or concerns. + +## The Apache License and the CLA/CCLA + +Licensing is very important to open source projects, it helps ensure +the software continues to be available under the terms that the author +desired. Chef uses the Apache 2.0 license to strike a balance between +open contribution and allowing you to use the software however you +would like to. + +The license tells you what rights you have that are provided by the +copyright holder. It is important that the contributor fully +understands what rights they are licensing and agrees to them. +Sometimes the copyright holder isn't the contributor, most often when +the contributor is doing work for a company. + +To make a good faith effort to ensure these criteria are met, Opscode +requires a Contributor License Agreement (CLA) or a Corporate +Contributor License Agreement (CCLA) for all contributions. This is +without exception due to some matters not being related to copyright +and to avoid having to continually check with our lawyers about small +patches. + +It only takes a few minutes to complete a CLA, and you retain the +copyright to your contribution. + +You can complete our contributor agreement (CLA) +[ online](https://secure.echosign.com/public/hostedForm?formid=PJIF5694K6L). +If you're contributing on behalf of your employer, have your employer +fill out our +[Corporate CLA](https://secure.echosign.com/public/hostedForm?formid=PIE6C7AX856) +instead. + +## Ticket Tracker (JIRA) + +The [ticket tracker](http://tickets.opscode.com) is the most important +documentation for the code base. It provides significant historical +information, such as: + +* Which release a bug fix is included in +* Discussion regarding the design and merits of features +* Error output to aid in finding similar bugs + +Each ticket should aim to fix one bug or add one feature. + +## Using git + +You can get a quick copy of the repository for this cookbook by +running `git clone +git://github.com/opscode-coobkooks/COOKBOOKNAME.git`. + +For collaboration purposes, it is best if you create a Github account +and fork the repository to your own account. Once you do this you will +be able to push your changes to your Github repository for others to +see and use. + +If you have another repository in your GitHub account named the same +as the cookbook, we suggest you suffix the repository with -cookbook. + +### Branches and Commits + +You should submit your patch as a git branch named after the ticket, +such as COOK-1337. This is called a _topic branch_ and allows users to +associate a branch of code with the ticket. + +It is a best practice to have your commit message have a _summary +line_ that includes the ticket number, followed by an empty line and +then a brief description of the commit. This also helps other +contributors understand the purpose of changes to the code. + + [COOK-1757] - platform_family and style + + * use platform_family for platform checking + * update notifies syntax to "resource_type[resource_name]" instead of + resources() lookup + * COOK-692 - delete config files dropped off by packages in conf.d + * dropped debian 4 support because all other platforms have the same + values, and it is older than "old stable" debian release + +Remember that not all users use Chef in the same way or on the same +operating systems as you, so it is helpful to be clear about your use +case and change so they can understand it even when it doesn't apply +to them. + +### Github and Pull Requests + +All of Opscode's open source cookbook projects are available on +[Github](http://www.github.com/opscode-cookbooks). + +We don't require you to use Github, and we will even take patch diffs +attached to tickets on the tracker. However Github has a lot of +convenient features, such as being able to see a diff of changes +between a pull request and the main repository quickly without +downloading the branch. + +If you do choose to use a pull request, please provide a link to the +pull request from the ticket __and__ a link to the ticket from the +pull request. Because pull requests only have two states, open and +closed, we can't easily filter pull requests that are waiting for a +reply from the author for various reasons. + +### More information + +Additional help with git is available on the +[Working with Git](http://wiki.opscode.com/display/chef/Working+with+Git) +wiki page. + +## Functional and Unit Tests + +This cookbook is set up to run tests under +[Opscode's test-kitchen](https://github.com/opscode/test-kitchen). It +uses minitest-chef to run integration tests after the node has been +converged to verify that the state of the node. + +Test kitchen should run completely without exception using the default +[baseboxes provided by Opscode](https://github.com/opscode/bento). +Because Test Kitchen creates VirtualBox machines and runs through +every configuration in the Kitchenfile, it may take some time for +these tests to complete. + +If your changes are only for a specific recipe, run only its +configuration with Test Kitchen. If you are adding a new recipe, or +other functionality such as a LWRP or definition, please add +appropriate tests and ensure they run with Test Kitchen. + +If any don't pass, investigate them before submitting your patch. + +Any new feature should have unit tests included with the patch with +good code coverage to help protect it from future changes. Similarly, +patches that fix a bug or regression should have a _regression test_. +Simply put, this is a test that would fail without your patch but +passes with it. The goal is to ensure this bug doesn't regress in the +future. Consider a regular expression that doesn't match a certain +pattern that it should, so you provide a patch and a test to ensure +that the part of the code that uses this regular expression works as +expected. Later another contributor may modify this regular expression +in a way that breaks your use cases. The test you wrote will fail, +signalling to them to research your ticket and use case and accounting +for it. + +If you need help writing tests, please ask on the Chef Developer's +mailing list, or the #chef-hacking IRC channel. + +## Code Review + +Opscode regularly reviews code contributions and provides suggestions +for improvement in the code itself or the implementation. + +We find contributions by searching the ticket tracker for _resolved_ +tickets with a status of _fixed_. If we have feedback we will reopen +the ticket and you should resolve it again when you've made the +changes or have a response to our feedback. When we believe the patch +is ready to be merged, we will tag the _Code Reviewed_ field with +_Reviewed_. + +Depending on the project, these tickets are then merged within a week +or two, depending on the current release cycle. + +## Release Cycle + +The versioning for Opscode Cookbook projects is X.Y.Z. + +* X is a major release, which may not be fully compatible with prior + major releases +* Y is a minor release, which adds both new features and bug fixes +* Z is a patch release, which adds just bug fixes + +A released version of a cookbook will end in an even number, e.g. +"1.2.4" or "0.8.0". When development for the next version of the +cookbook begins, the "Z" patch number is incremented to the next odd +number, however the next release of the cookbook may be a major or +minor incrementing version. + +Releases of Opscode's cookbooks are usually announced on the Chef user +mailing list. Releases of several cookbooks may be batched together +and announced on the [Opscode Blog](http://www.opscode.com/blog). + +## Working with the community + +These resources will help you learn more about Chef and connect to +other members of the Chef community: + +* [chef](http://lists.opscode.com/sympa/info/chef) and + [chef-dev](http://lists.opscode.com/sympa/info/chef-dev) mailing + lists +* #chef and #chef-hacking IRC channels on irc.freenode.net +* [Community Cookbook site](http://community.opscode.com) +* [Chef wiki](http://wiki.opscode.com/display/chef) +* Opscode Chef [product page](http://www.opscode.com/chef) + + +## Cookbook Contribution Do's and Don't's + +Please do include tests for your contribution. If you need help, ask +on the +[chef-dev mailing list](http://lists.opscode.com/sympa/info/chef-dev) +or the +[#chef-hacking IRC channel](http://community.opscode.com/chat/chef-hacking). +Not all platforms that a cookbook supports may be supported by Test +Kitchen. Please provide evidence of testing your contribution if it +isn't trivial so we don't have to duplicate effort in testing. Chef +10.14+ "doc" formatted output is sufficient. + +Please do indicate new platform (families) or platform versions in the +commit message, and update the relevant ticket. + +If a contribution adds new platforms or platform versions, indicate +such in the body of the commit message(s), and update the relevant +COOK ticket. When writing commit messages, it is helpful for others if +you indicate the COOK ticket. For example: + + git commit -m '[COOK-1041] - Updated pool resource to correctly + delete.' + +Please do use [foodcritic](http://acrmp.github.com/foodcritic) to +lint-check the cookbook. Except FC007, it should pass all correctness +rules. FC007 is okay as long as the dependent cookbooks are *required* +for the default behavior of the cookbook, such as to support an +uncommon platform, secondary recipe, etc. + +Please do ensure that your changes do not break or modify behavior for +other platforms supported by the cookbook. For example if your changes +are for Debian, make sure that they do not break on CentOS. + +Please do not modify the version number in the metadata.rb, Opscode +will select the appropriate version based on the release cycle +information above. + +Please do not update the CHANGELOG.md for a new version. Not all +changes to a cookbook may be merged and released in the same versions. +Opscode will update the CHANGELOG.md when releasing a new version of +the cookbook. diff --git a/vagrant/provision/cookbooks/apache2/Gemfile b/vagrant/provision/cookbooks/apache2/Gemfile new file mode 100755 index 0000000..9dad052 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/Gemfile @@ -0,0 +1,10 @@ +source "https://rubygems.org" + +gem 'cucumber', '~> 1.2.0' +gem 'httparty', '~> 0.8.3' +gem 'minitest', '~> 3.0.0' +gem 'nokogiri', '~> 1.5.0' + +group :kitchen do + gem 'test-kitchen', '< 1.0' +end diff --git a/vagrant/provision/cookbooks/apache2/LICENSE b/vagrant/provision/cookbooks/apache2/LICENSE new file mode 100755 index 0000000..11069ed --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/vagrant/provision/cookbooks/apache2/README.md b/vagrant/provision/cookbooks/apache2/README.md new file mode 100755 index 0000000..d594bc1 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/README.md @@ -0,0 +1,583 @@ +Description +=========== + +This cookbook provides a complete Debian/Ubuntu style Apache HTTPD +configuration. Non-Debian based distributions such as Red Hat/CentOS, +ArchLinux and others supported by this cookbook will have a +configuration that mimics Debian/Ubuntu style as it is easier to +manage with Chef. + +Debian-style Apache configuration uses scripts to manage modules and +sites (vhosts). The scripts are: + +* a2ensite +* a2dissite +* a2enmod +* a2dismod + +This cookbook ships with templates of these scripts for non +Debian/Ubuntu platforms. The scripts are used in the __Definitions__ +below. + +Requirements +============ + +## Ohai and Chef: + +* Ohai: 0.6.12+ +* Chef: 0.10.10+ + +As of v1.2.0, this cookbook makes use of `node['platform_family']` to +simplify platform selection logic. This attribute was introduced in +Ohai v0.6.12. The recipe methods were introduced in Chef v0.10.10. If +you must run an older version of Chef or Ohai, use [version 1.1.16 of +this cookbook](http://community.opscode.com/cookbooks/apache2/versions/1_1_16/downloads). + +## Cookbooks: + +This cookbook doesn't have direct dependencies on other cookbooks, as +none are needed for the default recipe or the general use cases. + +Depending on your OS configuration and security policy, you may need +additional recipes or cookbooks for this cookbook's recipes to +converge on the node. In particular, the following Operating System +settings may affect the behavior of this cookbook: + +* apt cache outdated +* SELinux enabled +* IPtables +* Compile tools +* 3rd party repositories + +On Ubuntu/Debian, use Opscode's `apt` cookbook to ensure the package +cache is updated so Chef can install packages, or consider putting +apt-get in your bootstrap process or +[knife bootstrap template](http://wiki.opscode.com/display/chef/Knife+Bootstrap). + +On RHEL, SELinux is enabled by default. The `selinux` cookbook +contains a `permissive` recipe that can be used to set SELinux to +"Permissive" state. Otherwise, additional recipes need to be created +by the user to address SELinux permissions. + +The easiest but **certainly not ideal way** to deal with IPtables is +to flush all rules. Opscode does provide an `iptables` cookbook but is +migrating from the approach used there to a more robust solution +utilizing a general "firewall" LWRP that would have an "iptables" +provider. Alternately, you can use ufw, with Opscode's `ufw` and +`firewall` cookbooks to set up rules. See those cookbooks' READMEs for +documentation. + +Build/compile tools may not be installed on the system by default. +Some recipes (e.g., `apache2::mod_auth_openid`) build the module from +source. Use Opscode's `build-essential` cookbook to get essential +build packages installed. + +On ArchLinux, if you are using the `apache2::mod_auth_openid` recipe, +you also need the `pacman` cookbook for the `pacman_aur` LWRP. Put +`recipe[pacman]` on the node's expanded run list (on the node or in a +role). This is not an explicit dependency because it is only required +for this single recipe and platform; the pacman default recipe +performs `pacman -Sy` to keep pacman's package cache updated. + +The `apache2::god_monitor` recipe uses a definition from the `god` +cookbook. Include `recipe[god]` in the node's expanded run list to +ensure that the cookbook is available to the node, and to set up `god`. + +## Platforms: + +The following platforms and versions are tested and supported using +Opscode's [test-kitchen](http://github.com/opscode/test-kitchen). + +* Ubuntu 10.04, 12.04 +* CentOS 5.8, 6.3 + +The following platform families are supported in the code, and are +assumed to work based on the successful testing on Ubuntu and CentOS. + +* Debian +* Red Hat (rhel) +* Fedora +* Amazon Linux + +The following platforms are also supported in the code, have been +tested manually but are not tested under test-kitchen. + +* SUSE/OpenSUSE +* ArchLinux +* FreeBSD + +### Notes for RHEL Family: + +On Red Hat Enterprise Linux and derivatives, the EPEL repository may +be necessary to install packages used in certain recipes. The +`apache2::default` recipe, however, does not require any additional +repositories. Opscode's `yum` cookbook contains a recipe to add the +EPEL repository. See __Examples__ for more information. + +### Notes for FreeBSD: + +The `apache2::mod_php5` recipe depends on the `freebsd` cookbook, +which it uses to set the correct options for compiling the `php5` port +from sources. You need to ensure the `freebsd` is in the expanded run +list, or this recipe will fail. We don't set an explicit dependency +because we feel the `freebsd` cookbook is something users would want +on their nodes, and due to the generality of this cookbook we don't +want additional specific dependencies. + +Tests +===== + +This cookbook in the +[source repository](https://github.com/opscode-cookbooks/apache2) +contains minitest and cucumber tests. This is an initial proof of +concept that will be fleshed out with more supporting infrastructure +at a future time. + +Please see the CONTRIBUTING file for information on how to add tests +for your contributions. + +Attributes +========== + +This cookbook uses many attributes, broken up into a few different +kinds. + +Platform specific +----------------- + +In order to support the broadest number of platforms, several +attributes are determined based on the node's platform. See the +attributes/default.rb file for default values in the case statement at +the top of the file. + +* `node['apache']['dir']` - Location for the Apache configuration +* `node['apache']['log_dir']` - Location for Apache logs +* `node['apache']['error_log']` - Location for the default error log +* `node['apache']['access_log']` - Location for the default access log +* `node['apache']['user']` - User Apache runs as +* `node['apache']['group']` - Group Apache runs as +* `node['apache']['binary']` - Apache httpd server daemon +* `node['apache']['icondir']` - Location for icons +* `node['apache']['cache_dir']` - Location for cached files used by Apache itself or recipes +* `node['apache']['pid_file']` - Location of the PID file for Apache httpd +* `node['apache']['lib_dir']` - Location for shared libraries +* `node['apache']['default_site_enabled']` - Default site enabled. Defaults to true on redhat-family platforms +* `node['apache']['ext_status']` - if true, enables ExtendedStatus for `mod_status` + +General settings +---------------- + +These are general settings used in recipes and templates. Default +values are noted. + +* `node['apache']['listen_ports']` - Ports that httpd should listen on. Default is port 80. +* `node['apache']['contact']` - Value for ServerAdmin directive. Default "ops@example.com". +* `node['apache']['timeout']` - Value for the Timeout directive. Default is 300. +* `node['apache']['keepalive']` - Value for the KeepAlive directive. Default is On. +* `node['apache']['keepaliverequests']` - Value for MaxKeepAliveRequests. Default is 100. +* `node['apache']['keepalivetimeout']` - Value for the KeepAliveTimeout directive. Default is 5. +* `node['apache']['default_modules']` - Array of module names. Can take "mod_FOO" or "FOO" as names, where FOO is the apache module, e.g. "`mod_status`" or "`status`". + +The modules listed in `default_modules` will be included as recipes in `recipe[apache::default]`. + +Prefork attributes +------------------ + +Prefork attributes are used for tuning the Apache HTTPD prefork MPM +configuration. + +* `node['apache']['prefork']['startservers']` - initial number of server processes to start. Default is 16. +* `node['apache']['prefork']['minspareservers']` - minimum number of spare server processes. Default 16. +* `node['apache']['prefork']['maxspareservers']` - maximum number of spare server processes. Default 32. +* `node['apache']['prefork']['serverlimit']` - upper limit on configurable server processes. Default 400. +* `node['apache']['prefork']['maxclients']` - Maximum number of simultaneous connections. +* `node['apache']['prefork']['maxrequestsperchild']` - Maximum number of request a child process will handle. Default 10000. + +Worker attributes +----------------- + +Worker attributes are used for tuning the Apache HTTPD worker MPM +configuration. + +* `node['apache']['worker']['startservers']` - Initial number of server processes to start. Default 4 +* `node['apache']['worker']['serverlimit']` - upper limit on configurable server processes. Default 16. +* `node['apache']['worker']['maxclients']` - Maximum number of simultaneous connections. Default 1024. +* `node['apache']['worker']['minsparethreads']` - Minimum number of spare worker threads. Default 64 +* `node['apache']['worker']['maxsparethreads']` - Maximum number of spare worker threads. Default 192. +* `node['apache']['worker']['maxrequestsperchild']` - Maximum number of requests a child process will handle. + +mod\_auth\_openid attributes +---------------------------- + +The following attributes are in the `attributes/mod_auth_openid.rb` +file. Like all Chef attributes files, they are loaded as well, but +they're logistically unrelated to the others, being specific to the +`mod_auth_openid` recipe. + +* `node['apache']['mod_auth_openid']['checksum']` - sha256sum of the tarball containing the source. +* `node['apache']['mod_auth_openid']['ref']` - Any sha, tag, or branch found from https://github.com/bmuller/mod_auth_openid +* `node['apache']['mod_auth_openid']['cache_dir']` - the cache directory is where the sqlite3 database is stored. It is separate so it can be managed as a directory resource. +* `node['apache']['mod_auth_openid']['dblocation']` - filename of the sqlite3 database used for directive `AuthOpenIDDBLocation`, stored in the `cache_dir` by default. +* `node['apache']['mod_auth_openid']['configure_flags']` - optional array of configure flags passed to the `./configure` step in the compilation of the module. + +mod\_ssl attributes +------------------- + +* `node['apache']['mod_ssl']['cipher_suite']` - sets the + SSLCiphersuite value to the specified string. The default is + considered "sane" but you may need to change it for your local + security policy, e.g. if you have PCI-DSS requirements. Additional + commentary on the + [original pull request](https://github.com/opscode-cookbooks/apache2/pull/15#commitcomment-1605406). + +Recipes +======= + +Most of the recipes in the cookbook are for enabling Apache modules. +Where additional configuration or behavior is used, it is documented +below in more detail. + +The following recipes merely enable the specified module: `mod_alias`, +`mod_basic`, `mod_digest`, `mod_authn_file`, `mod_authnz_ldap`, +`mod_authz_default`, `mod_authz_groupfile`, `mod_authz_host`, +`mod_authz_user`, `mod_autoindex`, `mod_cgi`, `mod_dav_fs`, +`mod_dav_svn`, `mod_deflate`, `mod_dir`, `mod_env`, `mod_expires`, +`mod_headers`, `mod_ldap`, `mod_log_config`, `mod_mime`, +`mod_negotiation`, `mod_proxy`, `mod_proxy_ajp`, `mod_proxy_balancer`, +`mod_proxy_connect`, `mod_proxy_http`, `mod_python`, `mod_rewrite`, +`mod_setenvif`, `mod_status`, `mod_wsgi`, `mod_xsendfile`. + +On RHEL Family distributions, certain modules ship with a config file +with the package. The recipes here may delete those configuration +files to ensure they don't conflict with the settings from the +cookbook, which will use per-module configuration in +`/etc/httpd/mods-enabled`. + +default +------- + +The default recipe does a number of things to set up Apache HTTPd. It +also includes a number of modules based on the attribute +`node['apache']['default_modules']` as recipes. + +logrotate +--------- + +Logrotate adds a logrotate entry for your apache2 logs. This recipe +requires the `logrotate` cookbook; ensure that `recipe[logrotate]` is +in the node's expanded run list. + +mod\_auth\_cas +-------------- + +This recipe installs the proper package and enables the `auth_cas` +module. It can install from source or package. Package is the default, +set the attribute `node['apache']['mod_auth_cas']['from_source']` to +true to enable source installation. Modify the version to install by +changing the attribute +`node['apache']['mod_auth_cas']['source_revision']`. It is a version +tag by default, but could be master, or another tag, or branch. + +The module configuration is written out with the `CASCookiePath` set, +otherwise an error loading the module may cause Apache to not start. + +**Note**: This recipe does not work on EL 6 platforms unless +epel-testing repository is enabled (outside the scope of this +cookbook), or the package version 1.0.8.1-3.el6 or higher is otherwise +available to the system due to this bug: + +https://bugzilla.redhat.com/show_bug.cgi?format=multiple&id=708550 + +mod\_auth\_openid +----------------- + +**Changed via COOK-915** + +This recipe compiles the module from source. In addition to +`build-essential`, some other packages are included for installation +like the GNU C++ compiler and development headers. + +To use the module in your own cookbooks to authenticate systems using +OpenIDs, specify an array of OpenIDs that are allowed to authenticate +with the attribute `node['apache']['allowed_openids']`. Use the +following in a vhost to protect with OpenID authentication: + + AuthType OpenID require user <%= node['apache']['allowed_openids'].join(' ') %> + AuthOpenIDDBLocation <%= node['apache']['mod_auth_openid']['dblocation'] %> + +Change the DBLocation with the attribute as required; this file is in +a different location than previous versions, see below. It should be a +sane default for most platforms, though, see +`attributes/mod_auth_openid.rb`. + +### Changes from COOK-915: + +* `AuthType OpenID` instead of `AuthOpenIDEnabled On`. +* `require user` instead of `AuthOpenIDUserProgram`. +* A bug(?) in `mod_auth_openid` causes it to segfault when attempting + to update the database file if the containing directory is not + writable by the HTTPD process owner (e.g., www-data), even if the + file is writable. In order to not interfere with other settings from + the default recipe in this cookbook, the db file is moved. + +mod\_fastcgi +------------ + +Install the fastcgi package and enable the module. + +Only work on Debian/Ubuntu + +mod\_fcgid +---------- + +Installs the fcgi package and enables the module. Requires EPEL on +RHEL family. + +On RHEL family, this recipe will delete the fcgid.conf and on version +6+, create the /var/run/httpd/mod_fcgid` directory, which prevents the +emergency error: + + [emerg] (2)No such file or directory: mod_fcgid: Can't create shared memory for size XX bytes + +mod\_php5 +-------- + +Simply installs the appropriate package on Debian, Ubuntu and +ArchLinux. + +On Red Hat family distributions including Fedora, the php.conf that +comes with the package is removed. On RHEL platforms less than v6, the +`php53` package is used. + +mod\_ssl +-------- + +Besides installing and enabling `mod_ssl`, this recipe will append +port 443 to the `node['apache']['listen_ports']` attribute array and +update the ports.conf. + +god\_monitor +------------ + +Sets up a `god` monitor for Apache. External requirements are the +`god` and `runit` cookbooks from Opscode. When using this recipe, +include `recipe[god]` in the node's expanded run list to ensure the +client downloads it; `god` depends on runit so that will also be +downloaded. + +**Note** This recipe is not tested under test-kitchen yet and is + pending fix in COOK-744. + +Definitions +=========== + +The cookbook provides a few definitions. At some point in the future +these definitions may be refactored into lightweight resources and +providers as suggested by +[foodcritic rule FC015](http://acrmp.github.com/foodcritic/#FC015). + +apache\_conf +------------ + +Sets up configuration file for an Apache module from a template. The +template should be in the same cookbook where the definition is used. +This is used by the `apache_module` definition and is not often used +directly. + +This will use a template resource to write the module's configuration +file in the `mods-available` under the Apache configuration directory +(`node['apache']['dir']`). This is a platform-dependent location. See +__apache\_module__. + +### Parameters: + +* `name` - Name of the template. When used from the `apache_module`, + it will use the same name as the module. + +### Examples: + +Create `#{node['apache']['dir']}/mods-available/alias.conf`. + + apache_conf "alias" + +apache\_module +-------------- + +Enable or disable an Apache module in +`#{node['apache']['dir']}/mods-available` by calling `a2enmod` or +`a2dismod` to manage the symbolic link in +`#{node['apache']['dir']}/mods-enabled`. If the module has a +configuration file, a template should be created in the cookbook where +the definition is used. See __Examples__. + +### Parameters: + +* `name` - Name of the module enabled or disabled with the `a2enmod` or `a2dismod` scripts. +* `enable` - Default true, which uses `a2enmod` to enable the module. If false, the module will be disabled with `a2dismod`. +* `conf` - Default false. Set to true if the module has a config file, which will use `apache_conf` for the file. +* `filename` - specify the full name of the file, e.g. + +### Examples: + +Enable the ssl module, which also has a configuration template in `templates/default/ssl.conf.erb`. + + apache_module "ssl" do + conf true + end + +Enable the php5 module, which has a different filename than the module default: + + apache_module "php5" do + filename "libphp5.so" + end + +Disable a module: + + apache_module "disabled_module" do + enable false + end + +See the recipes directory for many more examples of `apache_module`. + +apache\_site +------------ + +Enable or disable a VirtualHost in +`#{node['apache']['dir']}/sites-available` by calling a2ensite or +a2dissite to manage the symbolic link in +`#{node['apache']['dir']}/sites-enabled`. + +The template for the site must be managed as a separate resource. To +combine the template with enabling a site, see `web_app`. + +### Parameters: + +* `name` - Name of the site. +* `enable` - Default true, which uses `a2ensite` to enable the site. If false, the site will be disabled with `a2dissite`. + +web\_app +-------- + +Manage a template resource for a VirtualHost site, and enable it with +`apache_site`. This is commonly done for managing web applications +such as Ruby on Rails, PHP or Django, and the default behavior +reflects that. However it is flexible. + +This definition includes some recipes to make sure the system is +configured to have Apache and some sane default modules: + +* `apache2` +* `apache2::mod_rewrite` +* `apache2::mod_deflate` +* `apache2::mod_headers` + +It will then configure the template (see __Parameters__ and +__Examples__ below), and enable or disable the site per the `enable` +parameter. + +### Parameters: + +Current parameters used by the definition: + +* `name` - The name of the site. The template will be written to + `#{node['apache']['dir']}/sites-available/#{params['name']}.conf` +* `cookbook` - Optional. Cookbook where the source template is. If + this is not defined, Chef will use the named template in the + cookbook where the definition is used. +* `template` - Default `web_app.conf.erb`, source template file. +* `enable` - Default true. Passed to the `apache_site` definition. + +Additional parameters can be defined when the definition is called in +a recipe, see __Examples__. + +### Examples: + +All parameters are passed into the template. You can use whatever you +like. The apache2 cookbook comes with a `web_app.conf.erb` template as +an example. The following parameters are used in the template: + +* `server_name` - ServerName directive. +* `server_aliases` - ServerAlias directive. Must be an array of aliases. +* `docroot` - DocumentRoot directive. +* `application_name` - Used in RewriteLog directive. Will be set to the `name` parameter. +* `directory_index` - Allow overriding the default DirectoryIndex setting, optional +* `directory_options` - Override Options on the docroot, for example to add parameters like Includes or Indexes, optional. +* `allow_override` - Modify the AllowOverride directive on the docroot to support apps that need .htaccess to modify configuration or require authentication. + +To use the default web_app, for example: + + web_app "my_site" do + server_name node['hostname'] + server_aliases [node['fqdn'], "my-site.example.com"] + docroot "/srv/www/my_site" + end + +The parameters specified will be used as: + +* `@params[:server_name]` +* `@params[:server_aliases]` +* `@params[:docroot]` + +In the template. When you write your own, the `@` is significant. + +For more information about Definitions and parameters, see the +[Chef Wiki](http://wiki.opscode.com/display/chef/Definitions) + +Usage +===== + +Using this cookbook is relatively straightforward. Add the desired +recipes to the run list of a node, or create a role. Depending on your +environment, you may have multiple roles that use different recipes +from this cookbook. Adjust any attributes as desired. For example, to +create a basic role for web servers that provide both HTTP and HTTPS: + + % cat roles/webserver.rb + name "webserver" + description "Systems that serve HTTP and HTTPS" + run_list( + "recipe[apache2]", + "recipe[apache2::mod_ssl]" + ) + default_attributes( + "apache" => { + "listen_ports" => ["80", "443"] + } + ) + +For examples of using the definitions in your own recipes, see their +respective sections above. + +License and Authors +=================== + +* Author:: Adam Jacob +* Author:: Joshua Timberman +* Author:: Bryan McLellan +* Author:: Dave Esposito +* Author:: David Abdemoulaie +* Author:: Edmund Haselwanter +* Author:: Eric Rochester +* Author:: Jim Browne +* Author:: Matthew Kent +* Author:: Nathen Harvey +* Author:: Ringo De Smet +* Author:: Sean OMeara +* Author:: Seth Chisamore +* Author:: Gilles Devaux + +* Copyright:: 2009-2012, Opscode, Inc +* Copyright:: 2011, Atriso +* Copyright:: 2011, CustomInk, LLC. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/vagrant/provision/cookbooks/apache2/attributes/default.rb b/vagrant/provision/cookbooks/apache2/attributes/default.rb new file mode 100755 index 0000000..2fed820 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/attributes/default.rb @@ -0,0 +1,168 @@ +# +# Cookbook Name:: apache2 +# Attributes:: apache +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +default['apache']['root_group'] = "root" + +# Where the various parts of apache are +case platform +when "redhat", "centos", "scientific", "fedora", "suse", "amazon", "oracle" + default['apache']['package'] = "httpd" + default['apache']['dir'] = "/etc/httpd" + default['apache']['log_dir'] = "/var/log/httpd" + default['apache']['error_log'] = "error.log" + default['apache']['access_log'] = "access.log" + default['apache']['user'] = "apache" + default['apache']['group'] = "apache" + default['apache']['binary'] = "/usr/sbin/httpd" + default['apache']['docroot_dir'] = "/var/www/html" + default['apache']['cgibin_dir'] = "/var/www/cgi-bin" + default['apache']['icondir'] = "/var/www/icons" + default['apache']['cache_dir'] = "/var/cache/httpd" + if node['platform_version'].to_f >= 6 then + default['apache']['pid_file'] = "/var/run/httpd/httpd.pid" + else + default['apache']['pid_file'] = "/var/run/httpd.pid" + end + default['apache']['lib_dir'] = node['kernel']['machine'] =~ /^i[36]86$/ ? "/usr/lib/httpd" : "/usr/lib64/httpd" + default['apache']['libexecdir'] = "#{node['apache']['lib_dir']}/modules" + default['apache']['default_site_enabled'] = false +when "debian", "ubuntu" + default['apache']['package'] = "apache2" + default['apache']['dir'] = "/etc/apache2" + default['apache']['log_dir'] = "/var/log/apache2" + default['apache']['error_log'] = "error.log" + default['apache']['access_log'] = "access.log" + default['apache']['user'] = "www-data" + default['apache']['group'] = "www-data" + default['apache']['binary'] = "/usr/sbin/apache2" + default['apache']['docroot_dir'] = "/var/www" + default['apache']['cgibin_dir'] = "/usr/lib/cgi-bin" + default['apache']['icondir'] = "/usr/share/apache2/icons" + default['apache']['cache_dir'] = "/var/cache/apache2" + default['apache']['pid_file'] = "/var/run/apache2.pid" + default['apache']['lib_dir'] = "/usr/lib/apache2" + default['apache']['libexecdir'] = "#{node['apache']['lib_dir']}/modules" + default['apache']['default_site_enabled'] = false +when "arch" + default['apache']['package'] = "apache" + default['apache']['dir'] = "/etc/httpd" + default['apache']['log_dir'] = "/var/log/httpd" + default['apache']['error_log'] = "error.log" + default['apache']['access_log'] = "access.log" + default['apache']['user'] = "http" + default['apache']['group'] = "http" + default['apache']['binary'] = "/usr/sbin/httpd" + default['apache']['docroot_dir'] = "/srv/http" + default['apache']['cgibin_dir'] = "/usr/share/httpd/cgi-bin" + default['apache']['icondir'] = "/usr/share/httpd/icons" + default['apache']['cache_dir'] = "/var/cache/httpd" + default['apache']['pid_file'] = "/var/run/httpd/httpd.pid" + default['apache']['lib_dir'] = "/usr/lib/httpd" + default['apache']['libexecdir'] = "#{node['apache']['lib_dir']}/modules" + default['apache']['default_site_enabled'] = false +when "freebsd" + default['apache']['package'] = "apache22" + default['apache']['dir'] = "/usr/local/etc/apache22" + default['apache']['log_dir'] = "/var/log" + default['apache']['error_log'] = "httpd-error.log" + default['apache']['access_log'] = "httpd-access.log" + default['apache']['root_group'] = "wheel" + default['apache']['user'] = "www" + default['apache']['group'] = "www" + default['apache']['binary'] = "/usr/local/sbin/httpd" + default['apache']['docroot_dir'] = "/usr/local/www/apache22/data" + default['apache']['cgibin_dir'] = "/usr/local/www/apache22/cgi-bin" + default['apache']['icondir'] = "/usr/local/www/apache22/icons" + default['apache']['cache_dir'] = "/var/run/apache22" + default['apache']['pid_file'] = "/var/run/httpd.pid" + default['apache']['lib_dir'] = "/usr/local/libexec/apache22" + default['apache']['libexecdir'] = node['apache']['lib_dir'] + default['apache']['default_site_enabled'] = false +else + default['apache']['dir'] = "/etc/apache2" + default['apache']['log_dir'] = "/var/log/apache2" + default['apache']['error_log'] = "error.log" + default['apache']['access_log'] = "access.log" + default['apache']['user'] = "www-data" + default['apache']['group'] = "www-data" + default['apache']['binary'] = "/usr/sbin/apache2" + default['apache']['docroot_dir'] = "/var/www" + default['apache']['cgibin_dir'] = "/usr/lib/cgi-bin" + default['apache']['icondir'] = "/usr/share/apache2/icons" + default['apache']['cache_dir'] = "/var/cache/apache2" + default['apache']['pid_file'] = "logs/httpd.pid" + default['apache']['lib_dir'] = "/usr/lib/apache2" + default['apache']['libexecdir'] = "#{node['apache']['lib_dir']}/modules" + default['apache']['default_site_enabled'] = false +end + +### +# These settings need the unless, since we want them to be tunable, +# and we don't want to override the tunings. +### + +# General settings +default['apache']['listen_ports'] = ["80"] +default['apache']['contact'] = "ops@example.com" +default['apache']['timeout'] = 300 +default['apache']['keepalive'] = "On" +default['apache']['keepaliverequests'] = 100 +default['apache']['keepalivetimeout'] = 5 + +# Security +default['apache']['servertokens'] = "Prod" +default['apache']['serversignature'] = "On" +default['apache']['traceenable'] = "On" + +# mod_auth_openids +default['apache']['allowed_openids'] = Array.new + +# mod_status Allow list, space seprated list of allowed entries. +default['apache']['status_allow_list'] = "localhost ip6-localhost" + +# mod_status ExtendedStatus, set to 'true' to enable +default['apache']['ext_status'] = false + +# Prefork Attributes +default['apache']['prefork']['startservers'] = 16 +default['apache']['prefork']['minspareservers'] = 16 +default['apache']['prefork']['maxspareservers'] = 32 +default['apache']['prefork']['serverlimit'] = 400 +default['apache']['prefork']['maxclients'] = 400 +default['apache']['prefork']['maxrequestsperchild'] = 10000 + +# Worker Attributes +default['apache']['worker']['startservers'] = 4 +default['apache']['worker']['serverlimit'] = 16 +default['apache']['worker']['maxclients'] = 1024 +default['apache']['worker']['minsparethreads'] = 64 +default['apache']['worker']['maxsparethreads'] = 192 +default['apache']['worker']['threadsperchild'] = 64 +default['apache']['worker']['maxrequestsperchild'] = 0 + +# Default modules to enable via include_recipe + +default['apache']['default_modules'] = %w{ + status alias auth_basic authn_file authz_default authz_groupfile authz_host authz_user autoindex + dir env mime negotiation setenvif +} + +%w{ log_config logio }.each do |log_mod| + default['apache']['default_modules'] << log_mod if ["rhel", "fedora", "suse", "arch", "freebsd"].include?(node['platform_family']) +end diff --git a/vagrant/provision/cookbooks/apache2/attributes/mod_auth_cas.rb b/vagrant/provision/cookbooks/apache2/attributes/mod_auth_cas.rb new file mode 100755 index 0000000..a5cc262 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/attributes/mod_auth_cas.rb @@ -0,0 +1,2 @@ +default['apache']['mod_auth_cas']['from_source'] = false +default['apache']['mod_auth_cas']['source_revision'] = "v1.0.8.1" diff --git a/vagrant/provision/cookbooks/apache2/attributes/mod_auth_openid.rb b/vagrant/provision/cookbooks/apache2/attributes/mod_auth_openid.rb new file mode 100755 index 0000000..d6b8f1e --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/attributes/mod_auth_openid.rb @@ -0,0 +1,32 @@ +# +# Author:: Joshua Timberman +# Copyright:: Copyright (c) 2011, Opscode, Inc. +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +default['apache']['mod_auth_openid']['ref'] = "95043901eab868400937642d9bc55d17e9dd069f" +default['apache']['mod_auth_openid']['source_url'] = "https://github.com/bmuller/mod_auth_openid/archive/#{node['apache']['mod_auth_openid']['ref']}.tar.gz" +default['apache']['mod_auth_openid']['cache_dir'] = "/var/cache/mod_auth_openid" +default['apache']['mod_auth_openid']['dblocation'] = "#{node['apache']['mod_auth_openid']['cache_dir']}/mod_auth_openid.db" + +case node['platform_family'] +when "freebsd" + default['apache']['mod_auth_openid']['configure_flags'] = [ + "CPPFLAGS=-I/usr/local/include", + "LDFLAGS=-I/usr/local/lib -lsqlite3" + ] +else + default['apache']['mod_auth_openid']['configure_flags'] = [] +end diff --git a/vagrant/provision/cookbooks/apache2/attributes/mod_ssl.rb b/vagrant/provision/cookbooks/apache2/attributes/mod_ssl.rb new file mode 100755 index 0000000..c744cb4 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/attributes/mod_ssl.rb @@ -0,0 +1,19 @@ +# +# Author:: Nathan L Smith +# Copyright:: Copyright (c) 2012, Opscode, Inc. +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +default['apache']['mod_ssl']['cipher_suite'] = 'RC4-SHA:HIGH:!ADH' diff --git a/vagrant/provision/cookbooks/apache2/definitions/apache_conf.rb b/vagrant/provision/cookbooks/apache2/definitions/apache_conf.rb new file mode 100755 index 0000000..5a62158 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/definitions/apache_conf.rb @@ -0,0 +1,26 @@ +# +# Cookbook Name:: apache2 +# Definition:: apache_conf +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +define :apache_conf do + template "#{node['apache']['dir']}/mods-available/#{params[:name]}.conf" do + source "mods/#{params[:name]}.conf.erb" + notifies :restart, "service[apache2]" + mode 0644 + end +end diff --git a/vagrant/provision/cookbooks/apache2/definitions/apache_module.rb b/vagrant/provision/cookbooks/apache2/definitions/apache_module.rb new file mode 100755 index 0000000..99ca29c --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/definitions/apache_module.rb @@ -0,0 +1,53 @@ +# +# Cookbook Name:: apache2 +# Definition:: apache_module +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +define :apache_module, :enable => true, :conf => false do + include_recipe "apache2" + + params[:filename] = params[:filename] || "mod_#{params[:name]}.so" + params[:module_path] = params[:module_path] || "#{node['apache']['libexecdir']}/#{params[:filename]}" + + if params[:conf] + apache_conf params[:name] + end + + if platform_family?("rhel", "fedora", "arch", "suse", "freebsd") + file "#{node['apache']['dir']}/mods-available/#{params[:name]}.load" do + content "LoadModule #{params[:name]}_module #{params[:module_path]}\n" + mode 0644 + end + end + + if params[:enable] + execute "a2enmod #{params[:name]}" do + command "/usr/sbin/a2enmod #{params[:name]}" + notifies :restart, "service[apache2]" + not_if do (::File.symlink?("#{node['apache']['dir']}/mods-enabled/#{params[:name]}.load") and + ((::File.exists?("#{node['apache']['dir']}/mods-available/#{params[:name]}.conf"))? + (::File.symlink?("#{node['apache']['dir']}/mods-enabled/#{params[:name]}.conf")):(true))) + end + end + else + execute "a2dismod #{params[:name]}" do + command "/usr/sbin/a2dismod #{params[:name]}" + notifies :restart, "service[apache2]" + only_if do ::File.symlink?("#{node['apache']['dir']}/mods-enabled/#{params[:name]}.load") end + end + end +end diff --git a/vagrant/provision/cookbooks/apache2/definitions/apache_site.rb b/vagrant/provision/cookbooks/apache2/definitions/apache_site.rb new file mode 100755 index 0000000..1bc2870 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/definitions/apache_site.rb @@ -0,0 +1,43 @@ +# +# Cookbook Name:: apache2 +# Definition:: apache_site +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +define :apache_site, :enable => true do + include_recipe "apache2" + + if params[:enable] + execute "a2ensite #{params[:name]}" do + command "/usr/sbin/a2ensite #{params[:name]}" + notifies :restart, resources(:service => "apache2") + not_if do + ::File.symlink?("#{node['apache']['dir']}/sites-enabled/#{params[:name]}") or + ::File.symlink?("#{node['apache']['dir']}/sites-enabled/000-#{params[:name]}") + end + only_if do ::File.exists?("#{node['apache']['dir']}/sites-available/#{params[:name]}") end + end + else + execute "a2dissite #{params[:name]}" do + command "/usr/sbin/a2dissite #{params[:name]}" + notifies :restart, resources(:service => "apache2") + only_if do + ::File.symlink?("#{node['apache']['dir']}/sites-enabled/#{params[:name]}") or + ::File.symlink?("#{node['apache']['dir']}/sites-enabled/000-#{params[:name]}") + end + end + end +end diff --git a/vagrant/provision/cookbooks/apache2/definitions/web_app.rb b/vagrant/provision/cookbooks/apache2/definitions/web_app.rb new file mode 100755 index 0000000..2547e30 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/definitions/web_app.rb @@ -0,0 +1,50 @@ +# +# Cookbook Name:: apache2 +# Definition:: web_app +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +define :web_app, :template => "web_app.conf.erb", :enable => true do + + application_name = params[:name] + + include_recipe "apache2" + include_recipe "apache2::mod_rewrite" + include_recipe "apache2::mod_deflate" + include_recipe "apache2::mod_headers" + + template "#{node['apache']['dir']}/sites-available/#{application_name}.conf" do + source params[:template] + owner "root" + group node['apache']['root_group'] + mode 0644 + if params[:cookbook] + cookbook params[:cookbook] + end + variables( + :application_name => application_name, + :params => params + ) + if ::File.exists?("#{node['apache']['dir']}/sites-enabled/#{application_name}.conf") + notifies :reload, resources(:service => "apache2"), :delayed + end + end + + site_enabled = params[:enable] + apache_site "#{params[:name]}.conf" do + enable site_enabled + end +end diff --git a/vagrant/provision/cookbooks/apache2/files/default/apache2_module_conf_generate.pl b/vagrant/provision/cookbooks/apache2/files/default/apache2_module_conf_generate.pl new file mode 100755 index 0000000..83f849e --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/files/default/apache2_module_conf_generate.pl @@ -0,0 +1,41 @@ +#!/usr/bin/perl + +=begin + +Generates Ubuntu style module.load files. + +./apache2_module_conf_generate.pl /usr/lib64/httpd/modules /etc/httpd/mods-available + +ARGV[0] is the apache modules directory, ARGV[1] is where you want 'em. + +=cut + +use File::Find; + +use strict; +use warnings; + +die "Must have '/path/to/modules' and '/path/to/modules.load'" + unless $ARGV[0] && $ARGV[1]; + +find( + { + wanted => sub { + return 1 if $File::Find::name !~ /\.so$/; + my $modfile = $_; + $modfile =~ /(lib|mod_)(.+)\.so$/; + my $modname = $2; + my $filename = "$ARGV[1]/$modname.load"; + unless ( -f $filename ) { + open( FILE, ">", $filename ) or die "Cannot open $filename"; + print FILE "LoadModule " . $modname . "_module $File::Find::name\n"; + close(FILE); + } + }, + follow => 1, + }, + $ARGV[0] +); + +exit 0; + diff --git a/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/default_test.rb b/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/default_test.rb new file mode 100755 index 0000000..0093d23 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/default_test.rb @@ -0,0 +1,77 @@ +require File.expand_path('../support/helpers', __FILE__) + +describe 'apache2::default' do + include Helpers::Apache + + it 'installs apache' do + package(node['apache']['package']).must_be_installed + end + + it 'starts apache' do + apache_service.must_be_running + end + + it 'enables apache' do + apache_service.must_be_enabled + end + + it 'creates the conf.d directory' do + directory("#{node['apache']['dir']}/conf.d").must_exist.with(:mode, "755") + end + + it 'creates the logs directory' do + directory(node['apache']['log_dir']).must_exist + end + + it 'enables the default site unless it is disabled' do + skip unless node['apache']['default_site_enabled'] + file("#{node['apache']['dir']}/sites-enabled/000-default").must_exist + file("#{node['apache']['dir']}/sites-available/default").must_exist + end + + it 'ensures the debian-style apache module scripts are present' do + %w{a2ensite a2dissite a2enmod a2dismod}.each do |mod_script| + file("/usr/sbin/#{mod_script}").must_exist + end + end + + it 'reports server name only, not detailed version info' do + assert_match(/^ServerTokens Prod *$/, File.read("#{node['apache']['dir']}/conf.d/security")) + end + + it 'listens on port 80' do + apache_configured_ports.must_include(80) + end + + it 'only listens on port 443 when SSL is enabled' do + unless ran_recipe?('apache2::mod_ssl') + apache_configured_ports.wont_include(443) + end + end + + it 'reports server name only, not detailed version info' do + file("#{node['apache']['dir']}/conf.d/security").must_match(/^ServerTokens Prod *$/) + end + + it "enables default_modules" do + node['apache']['default_modules'].each do |a2mod| + apache_enabled_modules.must_include "#{a2mod}_module" + end + end + + describe 'centos' do + it 'ensures no modules are loaded in conf.d' do + Dir["#{node['apache']['dir']}/conf.d/*"].each do |f| + file(f).wont_include 'LoadModule' + end + end + end + + describe 'configuration' do + it { config.must_include '# Generated by Chef' } + it { config.must_include %Q{ServerRoot "#{node['apache']['dir']}"} } + it { config.must_include "Include #{node['apache']['dir']}/conf.d/" } + it { apache_config_parses? } + end + +end diff --git a/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/god_monitor_test.rb b/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/god_monitor_test.rb new file mode 100755 index 0000000..5c0d7a0 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/god_monitor_test.rb @@ -0,0 +1,34 @@ +# +# Author:: Joshua Timberman +# Copyright:: Copyright (c) 2012, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +require File.expand_path('../support/helpers', __FILE__) + +describe "apache2::god_monitor" do + include Helpers::Apache + + it 'starts god service to supervise apache2' do + service("god").must_be_running + end + + it 'creates the god service template for apache' do + file("/etc/god/conf.d/apache2.god").must_exist + end + + it 'starts an apache2 service that works like a regular service' do + # to be implemented when COOK-744 is fixed + end +end diff --git a/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_apreq2_test.rb b/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_apreq2_test.rb new file mode 100755 index 0000000..8679b4e --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_apreq2_test.rb @@ -0,0 +1,19 @@ +require File.expand_path('../support/helpers', __FILE__) + +describe 'apache2::mod_apreq2' do + include Helpers::Apache + + it 'enables apreq_module' do + apache_enabled_modules.must_include "apreq_module" + end + + it 'symlinks the module on EL' do + skip unless %w{rhel fedora}.include?(node['platform_family']) + libdir = node['kernel']['machine'] == 'x86_64' ? "lib64" : "lib" + link( + "/usr/#{libdir}/httpd/modules/mod_apreq.so" + ).must_exist.with( + :link_type, :symbolic).and(:to, "/usr/#{libdir}/httpd/modules/mod_apreq2.so" + ) + end +end diff --git a/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_auth_cas_test.rb b/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_auth_cas_test.rb new file mode 100755 index 0000000..f7e06ea --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_auth_cas_test.rb @@ -0,0 +1,11 @@ +require File.expand_path('../support/helpers', __FILE__) + +describe "apache2::mod_auth_cas" do + include Helpers::Apache + + it 'enables auth_cas_module' do + skip if %w{rhel fedora}.include?(node['platform_family']) && node['platform_version'].to_f > 6.0 + apache_enabled_modules.must_include "auth_cas_module" + end + +end diff --git a/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_auth_openid_test.rb b/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_auth_openid_test.rb new file mode 100755 index 0000000..7793a44 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_auth_openid_test.rb @@ -0,0 +1,37 @@ +require File.expand_path('../support/helpers', __FILE__) +require 'pathname' + +describe 'apache2::mod_auth_openid' do + include Helpers::Apache + + it "installs the opekele library" do + lib_dir = Pathname.new(node['apache']['lib_dir']).dirname.to_s + file("#{lib_dir}/libopkele.so").must_exist + end + + it "does not add the module to httpd.conf" do + conffile = case node['platform'] + when 'debian', 'ubuntu' + "apache2.conf" + when "redhat", "centos", "scientific", "fedora", "arch", "amazon" + "conf/httpd.conf" + when "freebsd" + "httpd.conf" + end + httpd_config = File.read(File.join(node['apache']['dir'], conffile)) + refute_match /^LoadModule authopenid_module /, httpd_config + end + + it "creates a cache directory for the module" do + directory(node['apache']['mod_auth_openid']['cache_dir']).must_exist.with(:owner, node['apache']['user']) + end + + it "ensures the db file is writable by apache" do + file(node['apache']['mod_auth_openid']['dblocation']).must_exist.with(:owner, node['apache']['user']).and(:mode, "644") + end + + it 'enables authopenid_module' do + apache_enabled_modules.must_include "authopenid_module" + end + +end diff --git a/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_cgi_test.rb b/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_cgi_test.rb new file mode 100755 index 0000000..1391240 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_cgi_test.rb @@ -0,0 +1,13 @@ +require File.expand_path('../support/helpers', __FILE__) + +describe 'apache2::mod_cgi' do + include Helpers::Apache + + # the cgi module can be either cgi or cgid + it 'enables cgi or cgid_module' do + assert(apache_enabled_modules.include?('cgi_module') || + apache_enabled_modules.include?('cgid_module') + ) + end + +end diff --git a/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_dav_svn_test.rb b/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_dav_svn_test.rb new file mode 100755 index 0000000..cfc1f61 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_dav_svn_test.rb @@ -0,0 +1,14 @@ +require File.expand_path('../support/helpers', __FILE__) + +describe 'apache2::mod_dav_svn' do + include Helpers::Apache + + it 'enables dav_svn_module' do + apache_enabled_modules.must_include "dav_svn_module" + end + + it 'enables dav_module' do + apache_enabled_modules.must_include "dav_module" + end + +end diff --git a/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_fastcgi.rb b/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_fastcgi.rb new file mode 100755 index 0000000..1c404f8 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_fastcgi.rb @@ -0,0 +1,11 @@ +require File.expand_path('../support/helpers', __FILE__) + +describe "apache2::mod_fastcgi" do + include Helpers::Apache + + it 'enables fastcgi_module' do + skip if %w{rhel fedora}.include?(node['platform_family']) + apache_enabled_modules.must_include "fastcgi_module" + end + +end diff --git a/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_include_test.rb b/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_include_test.rb new file mode 100755 index 0000000..c0c4944 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_include_test.rb @@ -0,0 +1,15 @@ +require File.expand_path('../support/helpers', __FILE__) + +describe 'apache2::mod_include' do + include Helpers::Apache + + it 'enables include_module' do + apache_enabled_modules.must_include "include_module" + end + + it 'drops off the include module configuration' do + assert_match(/AddType text\/html .shtml/, File.read("#{node['apache']['dir']}/mods-enabled/include.conf")) + assert_match(/AddOutputFilter INCLUDES .shtml/, File.read("#{node['apache']['dir']}/mods-enabled/include.conf")) + end + +end diff --git a/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_perl_test.rb b/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_perl_test.rb new file mode 100755 index 0000000..c51341a --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_perl_test.rb @@ -0,0 +1,18 @@ +require File.expand_path('../support/helpers', __FILE__) + +describe 'apache2::mod_perl' do + include Helpers::Apache + + it 'enables perl_module' do + apache_enabled_modules.must_include "perl_module" + end + + it 'installs the apache request library' do + req_pkg = case node['platform'] + when 'debian', 'ubuntu' then 'libapache2-request-perl' + else 'perl-libapreq2' + end + package(req_pkg).must_be_installed + end + +end diff --git a/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_php5_test.rb b/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_php5_test.rb new file mode 100755 index 0000000..33220b9 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_php5_test.rb @@ -0,0 +1,13 @@ +require File.expand_path('../support/helpers', __FILE__) + +describe 'apache2::mod_php5' do + include Helpers::Apache + + it 'enables php5_module' do + apache_enabled_modules.must_include "php5_module" + end + + it "deletes the packaged php config if any" do + file("#{node['apache']['dir']}/conf.d/php.conf").wont_exist + end +end diff --git a/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_python_test.rb b/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_python_test.rb new file mode 100755 index 0000000..5b5f2b7 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_python_test.rb @@ -0,0 +1,10 @@ +require File.expand_path('../support/helpers', __FILE__) + +describe 'apache2::mod_python' do + include Helpers::Apache + + it 'enables python_module' do + apache_enabled_modules.must_include "python_module" + end + +end diff --git a/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_ssl_test.rb b/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_ssl_test.rb new file mode 100755 index 0000000..035f652 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/mod_ssl_test.rb @@ -0,0 +1,28 @@ +require File.expand_path('../support/helpers', __FILE__) + +describe 'apache2::mod_ssl' do + include Helpers::Apache + + it 'installs the mod_ssl package on RHEL distributions' do + skip unless ["rhel", "fedora"].include? node['platform_family'] + package("mod_ssl").must_be_installed + end + + it 'enables ssl_module' do + apache_enabled_modules.must_include "ssl_module" + end + + it 'does not store SSL config in conf.d' do + file("#{node['apache']['dir']}/conf.d/ssl.conf").wont_exist + end + + it "is configured to listen on port 443" do + apache_configured_ports.must_include(443) + end + + it 'configures SSLCiphersuit from an attribute' do + assert_match(/^SSLCipherSuite #{node['apache']['mod_ssl']['cipher_suite']}$/, + File.read("#{node['apache']['dir']}/mods-enabled/ssl.conf")) + end + +end diff --git a/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/support/helpers.rb b/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/support/helpers.rb new file mode 100755 index 0000000..707fcf2 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/files/default/tests/minitest/support/helpers.rb @@ -0,0 +1,65 @@ +module Helpers + module Apache + require 'chef/mixin/shell_out' + include Chef::Mixin::ShellOut + include MiniTest::Chef::Assertions + include MiniTest::Chef::Context + include MiniTest::Chef::Resources + + def apache_config_parses? + acp = shell_out("#{node['apache']['binary']} -t") + acp.exitstatus == 0 + end + + def apache_configured_ports + port_config = File.read("#{node['apache']['dir']}/ports.conf") + port_config.scan(/^Listen ([0-9]+)/).flatten.map { |p| p.to_i } + end + + def apache_enabled_modules + apache_modules = shell_out("#{node['apache']['binary']} -M") + apache_modules.send( + if node['platform_family'] == 'rhel' && node['platform_version'].to_f < 6.0 + :stderr + else + :stdout + end + ).split.select! { |i| i =~ /_module$/ } + end + + def apache_service + service( + case node['platform'] + when "debian", "ubuntu" then "apache2" + when "freebsd" then "apache22" + else "httpd" + end + ) + end + + def config + file( + case node['platform'] + when "debian", "ubuntu" then "#{node['apache']['dir']}/apache2.conf" + when "freebsd" then "#{node['apache']['dir']}/httpd.conf" + else "#{node['apache']['dir']}/conf/httpd.conf" + end + ) + end + + def ran_recipe?(recipe) + if Chef::VERSION < "11.0" + seen_recipes = node.run_state[:seen_recipes] + recipes = seen_recipes.keys.each { |i| i } + else + recipes = run_context.loaded_recipes + end + if recipes.empty? and Chef::Config[:solo] + #If you have roles listed in your run list they are NOT expanded + recipes = node.run_list.map {|item| item.name if item.type == :recipe } + end + recipes.include?(recipe) + end + + end +end diff --git a/vagrant/provision/cookbooks/apache2/metadata.json b/vagrant/provision/cookbooks/apache2/metadata.json new file mode 100755 index 0000000..641df2b --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/metadata.json @@ -0,0 +1 @@ +{"name":"apache2","description":"Installs and configures all aspects of apache2 using Debian style symlinks with helper definitions","long_description":"Description\n===========\n\nThis cookbook provides a complete Debian/Ubuntu style Apache HTTPD\nconfiguration. Non-Debian based distributions such as Red Hat/CentOS,\nArchLinux and others supported by this cookbook will have a\nconfiguration that mimics Debian/Ubuntu style as it is easier to\nmanage with Chef.\n\nDebian-style Apache configuration uses scripts to manage modules and\nsites (vhosts). The scripts are:\n\n* a2ensite\n* a2dissite\n* a2enmod\n* a2dismod\n\nThis cookbook ships with templates of these scripts for non\nDebian/Ubuntu platforms. The scripts are used in the __Definitions__\nbelow.\n\nRequirements\n============\n\n## Ohai and Chef:\n\n* Ohai: 0.6.12+\n* Chef: 0.10.10+\n\nAs of v1.2.0, this cookbook makes use of `node['platform_family']` to\nsimplify platform selection logic. This attribute was introduced in\nOhai v0.6.12. The recipe methods were introduced in Chef v0.10.10. If\nyou must run an older version of Chef or Ohai, use [version 1.1.16 of\nthis cookbook](http://community.opscode.com/cookbooks/apache2/versions/1_1_16/downloads).\n\n## Cookbooks:\n\nThis cookbook doesn't have direct dependencies on other cookbooks, as\nnone are needed for the default recipe or the general use cases.\n\nDepending on your OS configuration and security policy, you may need\nadditional recipes or cookbooks for this cookbook's recipes to\nconverge on the node. In particular, the following Operating System\nsettings may affect the behavior of this cookbook:\n\n* apt cache outdated\n* SELinux enabled\n* IPtables\n* Compile tools\n* 3rd party repositories\n\nOn Ubuntu/Debian, use Opscode's `apt` cookbook to ensure the package\ncache is updated so Chef can install packages, or consider putting\napt-get in your bootstrap process or\n[knife bootstrap template](http://wiki.opscode.com/display/chef/Knife+Bootstrap).\n\nOn RHEL, SELinux is enabled by default. The `selinux` cookbook\ncontains a `permissive` recipe that can be used to set SELinux to\n\"Permissive\" state. Otherwise, additional recipes need to be created\nby the user to address SELinux permissions.\n\nThe easiest but **certainly not ideal way** to deal with IPtables is\nto flush all rules. Opscode does provide an `iptables` cookbook but is\nmigrating from the approach used there to a more robust solution\nutilizing a general \"firewall\" LWRP that would have an \"iptables\"\nprovider. Alternately, you can use ufw, with Opscode's `ufw` and\n`firewall` cookbooks to set up rules. See those cookbooks' READMEs for\ndocumentation.\n\nBuild/compile tools may not be installed on the system by default.\nSome recipes (e.g., `apache2::mod_auth_openid`) build the module from\nsource. Use Opscode's `build-essential` cookbook to get essential\nbuild packages installed.\n\nOn ArchLinux, if you are using the `apache2::mod_auth_openid` recipe,\nyou also need the `pacman` cookbook for the `pacman_aur` LWRP. Put\n`recipe[pacman]` on the node's expanded run list (on the node or in a\nrole). This is not an explicit dependency because it is only required\nfor this single recipe and platform; the pacman default recipe\nperforms `pacman -Sy` to keep pacman's package cache updated.\n\nThe `apache2::god_monitor` recipe uses a definition from the `god`\ncookbook. Include `recipe[god]` in the node's expanded run list to\nensure that the cookbook is available to the node, and to set up `god`.\n\n## Platforms:\n\nThe following platforms and versions are tested and supported using\nOpscode's [test-kitchen](http://github.com/opscode/test-kitchen).\n\n* Ubuntu 10.04, 12.04\n* CentOS 5.8, 6.3\n\nThe following platform families are supported in the code, and are\nassumed to work based on the successful testing on Ubuntu and CentOS.\n\n* Debian\n* Red Hat (rhel)\n* Fedora\n* Amazon Linux\n\nThe following platforms are also supported in the code, have been\ntested manually but are not tested under test-kitchen.\n\n* SUSE/OpenSUSE\n* ArchLinux\n* FreeBSD\n\n### Notes for RHEL Family:\n\nOn Red Hat Enterprise Linux and derivatives, the EPEL repository may\nbe necessary to install packages used in certain recipes. The\n`apache2::default` recipe, however, does not require any additional\nrepositories. Opscode's `yum` cookbook contains a recipe to add the\nEPEL repository. See __Examples__ for more information.\n\n### Notes for FreeBSD:\n\nThe `apache2::mod_php5` recipe depends on the `freebsd` cookbook,\nwhich it uses to set the correct options for compiling the `php5` port\nfrom sources. You need to ensure the `freebsd` is in the expanded run\nlist, or this recipe will fail. We don't set an explicit dependency\nbecause we feel the `freebsd` cookbook is something users would want\non their nodes, and due to the generality of this cookbook we don't\nwant additional specific dependencies.\n\nTests\n=====\n\nThis cookbook in the\n[source repository](https://github.com/opscode-cookbooks/apache2)\ncontains minitest and cucumber tests. This is an initial proof of\nconcept that will be fleshed out with more supporting infrastructure\nat a future time.\n\nPlease see the CONTRIBUTING file for information on how to add tests\nfor your contributions.\n\nAttributes\n==========\n\nThis cookbook uses many attributes, broken up into a few different\nkinds.\n\nPlatform specific\n-----------------\n\nIn order to support the broadest number of platforms, several\nattributes are determined based on the node's platform. See the\nattributes/default.rb file for default values in the case statement at\nthe top of the file.\n\n* `node['apache']['dir']` - Location for the Apache configuration\n* `node['apache']['log_dir']` - Location for Apache logs\n* `node['apache']['error_log']` - Location for the default error log\n* `node['apache']['access_log']` - Location for the default access log\n* `node['apache']['user']` - User Apache runs as\n* `node['apache']['group']` - Group Apache runs as\n* `node['apache']['binary']` - Apache httpd server daemon\n* `node['apache']['icondir']` - Location for icons\n* `node['apache']['cache_dir']` - Location for cached files used by Apache itself or recipes\n* `node['apache']['pid_file']` - Location of the PID file for Apache httpd\n* `node['apache']['lib_dir']` - Location for shared libraries\n* `node['apache']['default_site_enabled']` - Default site enabled. Defaults to true on redhat-family platforms\n* `node['apache']['ext_status']` - if true, enables ExtendedStatus for `mod_status`\n\nGeneral settings\n----------------\n\nThese are general settings used in recipes and templates. Default\nvalues are noted.\n\n* `node['apache']['listen_ports']` - Ports that httpd should listen on. Default is port 80.\n* `node['apache']['contact']` - Value for ServerAdmin directive. Default \"ops@example.com\".\n* `node['apache']['timeout']` - Value for the Timeout directive. Default is 300.\n* `node['apache']['keepalive']` - Value for the KeepAlive directive. Default is On.\n* `node['apache']['keepaliverequests']` - Value for MaxKeepAliveRequests. Default is 100.\n* `node['apache']['keepalivetimeout']` - Value for the KeepAliveTimeout directive. Default is 5.\n* `node['apache']['default_modules']` - Array of module names. Can take \"mod_FOO\" or \"FOO\" as names, where FOO is the apache module, e.g. \"`mod_status`\" or \"`status`\".\n\nThe modules listed in `default_modules` will be included as recipes in `recipe[apache::default]`.\n\nPrefork attributes\n------------------\n\nPrefork attributes are used for tuning the Apache HTTPD prefork MPM\nconfiguration.\n\n* `node['apache']['prefork']['startservers']` - initial number of server processes to start. Default is 16.\n* `node['apache']['prefork']['minspareservers']` - minimum number of spare server processes. Default 16.\n* `node['apache']['prefork']['maxspareservers']` - maximum number of spare server processes. Default 32.\n* `node['apache']['prefork']['serverlimit']` - upper limit on configurable server processes. Default 400.\n* `node['apache']['prefork']['maxclients']` - Maximum number of simultaneous connections.\n* `node['apache']['prefork']['maxrequestsperchild']` - Maximum number of request a child process will handle. Default 10000.\n\nWorker attributes\n-----------------\n\nWorker attributes are used for tuning the Apache HTTPD worker MPM\nconfiguration.\n\n* `node['apache']['worker']['startservers']` - Initial number of server processes to start. Default 4\n* `node['apache']['worker']['serverlimit']` - upper limit on configurable server processes. Default 16.\n* `node['apache']['worker']['maxclients']` - Maximum number of simultaneous connections. Default 1024.\n* `node['apache']['worker']['minsparethreads']` - Minimum number of spare worker threads. Default 64\n* `node['apache']['worker']['maxsparethreads']` - Maximum number of spare worker threads. Default 192.\n* `node['apache']['worker']['maxrequestsperchild']` - Maximum number of requests a child process will handle.\n\nmod\\_auth\\_openid attributes\n----------------------------\n\nThe following attributes are in the `attributes/mod_auth_openid.rb`\nfile. Like all Chef attributes files, they are loaded as well, but\nthey're logistically unrelated to the others, being specific to the\n`mod_auth_openid` recipe.\n\n* `node['apache']['mod_auth_openid']['checksum']` - sha256sum of the tarball containing the source.\n* `node['apache']['mod_auth_openid']['ref']` - Any sha, tag, or branch found from https://github.com/bmuller/mod_auth_openid\n* `node['apache']['mod_auth_openid']['cache_dir']` - the cache directory is where the sqlite3 database is stored. It is separate so it can be managed as a directory resource.\n* `node['apache']['mod_auth_openid']['dblocation']` - filename of the sqlite3 database used for directive `AuthOpenIDDBLocation`, stored in the `cache_dir` by default.\n* `node['apache']['mod_auth_openid']['configure_flags']` - optional array of configure flags passed to the `./configure` step in the compilation of the module.\n\nmod\\_ssl attributes\n-------------------\n\n* `node['apache']['mod_ssl']['cipher_suite']` - sets the\n SSLCiphersuite value to the specified string. The default is\n considered \"sane\" but you may need to change it for your local\n security policy, e.g. if you have PCI-DSS requirements. Additional\n commentary on the\n [original pull request](https://github.com/opscode-cookbooks/apache2/pull/15#commitcomment-1605406).\n\nRecipes\n=======\n\nMost of the recipes in the cookbook are for enabling Apache modules.\nWhere additional configuration or behavior is used, it is documented\nbelow in more detail.\n\nThe following recipes merely enable the specified module: `mod_alias`,\n`mod_basic`, `mod_digest`, `mod_authn_file`, `mod_authnz_ldap`,\n`mod_authz_default`, `mod_authz_groupfile`, `mod_authz_host`,\n`mod_authz_user`, `mod_autoindex`, `mod_cgi`, `mod_dav_fs`,\n`mod_dav_svn`, `mod_deflate`, `mod_dir`, `mod_env`, `mod_expires`,\n`mod_headers`, `mod_ldap`, `mod_log_config`, `mod_mime`,\n`mod_negotiation`, `mod_proxy`, `mod_proxy_ajp`, `mod_proxy_balancer`,\n`mod_proxy_connect`, `mod_proxy_http`, `mod_python`, `mod_rewrite`,\n`mod_setenvif`, `mod_status`, `mod_wsgi`, `mod_xsendfile`.\n\nOn RHEL Family distributions, certain modules ship with a config file\nwith the package. The recipes here may delete those configuration\nfiles to ensure they don't conflict with the settings from the\ncookbook, which will use per-module configuration in\n`/etc/httpd/mods-enabled`.\n\ndefault\n-------\n\nThe default recipe does a number of things to set up Apache HTTPd. It\nalso includes a number of modules based on the attribute\n`node['apache']['default_modules']` as recipes.\n\nlogrotate\n---------\n\nLogrotate adds a logrotate entry for your apache2 logs. This recipe\nrequires the `logrotate` cookbook; ensure that `recipe[logrotate]` is\nin the node's expanded run list.\n\nmod\\_auth\\_cas\n--------------\n\nThis recipe installs the proper package and enables the `auth_cas`\nmodule. It can install from source or package. Package is the default,\nset the attribute `node['apache']['mod_auth_cas']['from_source']` to\ntrue to enable source installation. Modify the version to install by\nchanging the attribute\n`node['apache']['mod_auth_cas']['source_revision']`. It is a version\ntag by default, but could be master, or another tag, or branch.\n\nThe module configuration is written out with the `CASCookiePath` set,\notherwise an error loading the module may cause Apache to not start.\n\n**Note**: This recipe does not work on EL 6 platforms unless\nepel-testing repository is enabled (outside the scope of this\ncookbook), or the package version 1.0.8.1-3.el6 or higher is otherwise\navailable to the system due to this bug:\n\nhttps://bugzilla.redhat.com/show_bug.cgi?format=multiple&id=708550\n\nmod\\_auth\\_openid\n-----------------\n\n**Changed via COOK-915**\n\nThis recipe compiles the module from source. In addition to\n`build-essential`, some other packages are included for installation\nlike the GNU C++ compiler and development headers.\n\nTo use the module in your own cookbooks to authenticate systems using\nOpenIDs, specify an array of OpenIDs that are allowed to authenticate\nwith the attribute `node['apache']['allowed_openids']`. Use the\nfollowing in a vhost to protect with OpenID authentication:\n\n AuthType OpenID require user <%= node['apache']['allowed_openids'].join(' ') %>\n AuthOpenIDDBLocation <%= node['apache']['mod_auth_openid']['dblocation'] %>\n\nChange the DBLocation with the attribute as required; this file is in\na different location than previous versions, see below. It should be a\nsane default for most platforms, though, see\n`attributes/mod_auth_openid.rb`.\n\n### Changes from COOK-915:\n\n* `AuthType OpenID` instead of `AuthOpenIDEnabled On`.\n* `require user` instead of `AuthOpenIDUserProgram`.\n* A bug(?) in `mod_auth_openid` causes it to segfault when attempting\n to update the database file if the containing directory is not\n writable by the HTTPD process owner (e.g., www-data), even if the\n file is writable. In order to not interfere with other settings from\n the default recipe in this cookbook, the db file is moved.\n\nmod\\_fastcgi\n------------\n\nInstall the fastcgi package and enable the module.\n\nOnly work on Debian/Ubuntu\n\nmod\\_fcgid\n----------\n\nInstalls the fcgi package and enables the module. Requires EPEL on\nRHEL family.\n\nOn RHEL family, this recipe will delete the fcgid.conf and on version\n6+, create the /var/run/httpd/mod_fcgid` directory, which prevents the\nemergency error:\n\n [emerg] (2)No such file or directory: mod_fcgid: Can't create shared memory for size XX bytes\n\nmod\\_php5\n--------\n\nSimply installs the appropriate package on Debian, Ubuntu and\nArchLinux.\n\nOn Red Hat family distributions including Fedora, the php.conf that\ncomes with the package is removed. On RHEL platforms less than v6, the\n`php53` package is used.\n\nmod\\_ssl\n--------\n\nBesides installing and enabling `mod_ssl`, this recipe will append\nport 443 to the `node['apache']['listen_ports']` attribute array and\nupdate the ports.conf.\n\ngod\\_monitor\n------------\n\nSets up a `god` monitor for Apache. External requirements are the\n`god` and `runit` cookbooks from Opscode. When using this recipe,\ninclude `recipe[god]` in the node's expanded run list to ensure the\nclient downloads it; `god` depends on runit so that will also be\ndownloaded.\n\n**Note** This recipe is not tested under test-kitchen yet and is\n pending fix in COOK-744.\n\nDefinitions\n===========\n\nThe cookbook provides a few definitions. At some point in the future\nthese definitions may be refactored into lightweight resources and\nproviders as suggested by\n[foodcritic rule FC015](http://acrmp.github.com/foodcritic/#FC015).\n\napache\\_conf\n------------\n\nSets up configuration file for an Apache module from a template. The\ntemplate should be in the same cookbook where the definition is used.\nThis is used by the `apache_module` definition and is not often used\ndirectly.\n\nThis will use a template resource to write the module's configuration\nfile in the `mods-available` under the Apache configuration directory\n(`node['apache']['dir']`). This is a platform-dependent location. See\n__apache\\_module__.\n\n### Parameters:\n\n* `name` - Name of the template. When used from the `apache_module`,\n it will use the same name as the module.\n\n### Examples:\n\nCreate `#{node['apache']['dir']}/mods-available/alias.conf`.\n\n apache_conf \"alias\"\n\napache\\_module\n--------------\n\nEnable or disable an Apache module in\n`#{node['apache']['dir']}/mods-available` by calling `a2enmod` or\n`a2dismod` to manage the symbolic link in\n`#{node['apache']['dir']}/mods-enabled`. If the module has a\nconfiguration file, a template should be created in the cookbook where\nthe definition is used. See __Examples__.\n\n### Parameters:\n\n* `name` - Name of the module enabled or disabled with the `a2enmod` or `a2dismod` scripts.\n* `enable` - Default true, which uses `a2enmod` to enable the module. If false, the module will be disabled with `a2dismod`.\n* `conf` - Default false. Set to true if the module has a config file, which will use `apache_conf` for the file.\n* `filename` - specify the full name of the file, e.g.\n\n### Examples:\n\nEnable the ssl module, which also has a configuration template in `templates/default/ssl.conf.erb`.\n\n apache_module \"ssl\" do\n conf true\n end\n\nEnable the php5 module, which has a different filename than the module default:\n\n apache_module \"php5\" do\n filename \"libphp5.so\"\n end\n\nDisable a module:\n\n apache_module \"disabled_module\" do\n enable false\n end\n\nSee the recipes directory for many more examples of `apache_module`.\n\napache\\_site\n------------\n\nEnable or disable a VirtualHost in\n`#{node['apache']['dir']}/sites-available` by calling a2ensite or\na2dissite to manage the symbolic link in\n`#{node['apache']['dir']}/sites-enabled`.\n\nThe template for the site must be managed as a separate resource. To\ncombine the template with enabling a site, see `web_app`.\n\n### Parameters:\n\n* `name` - Name of the site.\n* `enable` - Default true, which uses `a2ensite` to enable the site. If false, the site will be disabled with `a2dissite`.\n\nweb\\_app\n--------\n\nManage a template resource for a VirtualHost site, and enable it with\n`apache_site`. This is commonly done for managing web applications\nsuch as Ruby on Rails, PHP or Django, and the default behavior\nreflects that. However it is flexible.\n\nThis definition includes some recipes to make sure the system is\nconfigured to have Apache and some sane default modules:\n\n* `apache2`\n* `apache2::mod_rewrite`\n* `apache2::mod_deflate`\n* `apache2::mod_headers`\n\nIt will then configure the template (see __Parameters__ and\n__Examples__ below), and enable or disable the site per the `enable`\nparameter.\n\n### Parameters:\n\nCurrent parameters used by the definition:\n\n* `name` - The name of the site. The template will be written to\n `#{node['apache']['dir']}/sites-available/#{params['name']}.conf`\n* `cookbook` - Optional. Cookbook where the source template is. If\n this is not defined, Chef will use the named template in the\n cookbook where the definition is used.\n* `template` - Default `web_app.conf.erb`, source template file.\n* `enable` - Default true. Passed to the `apache_site` definition.\n\nAdditional parameters can be defined when the definition is called in\na recipe, see __Examples__.\n\n### Examples:\n\nAll parameters are passed into the template. You can use whatever you\nlike. The apache2 cookbook comes with a `web_app.conf.erb` template as\nan example. The following parameters are used in the template:\n\n* `server_name` - ServerName directive.\n* `server_aliases` - ServerAlias directive. Must be an array of aliases.\n* `docroot` - DocumentRoot directive.\n* `application_name` - Used in RewriteLog directive. Will be set to the `name` parameter.\n* `directory_index` - Allow overriding the default DirectoryIndex setting, optional\n* `directory_options` - Override Options on the docroot, for example to add parameters like Includes or Indexes, optional.\n* `allow_override` - Modify the AllowOverride directive on the docroot to support apps that need .htaccess to modify configuration or require authentication.\n\nTo use the default web_app, for example:\n\n web_app \"my_site\" do\n server_name node['hostname']\n server_aliases [node['fqdn'], \"my-site.example.com\"]\n docroot \"/srv/www/my_site\"\n end\n\nThe parameters specified will be used as:\n\n* `@params[:server_name]`\n* `@params[:server_aliases]`\n* `@params[:docroot]`\n\nIn the template. When you write your own, the `@` is significant.\n\nFor more information about Definitions and parameters, see the\n[Chef Wiki](http://wiki.opscode.com/display/chef/Definitions)\n\nUsage\n=====\n\nUsing this cookbook is relatively straightforward. Add the desired\nrecipes to the run list of a node, or create a role. Depending on your\nenvironment, you may have multiple roles that use different recipes\nfrom this cookbook. Adjust any attributes as desired. For example, to\ncreate a basic role for web servers that provide both HTTP and HTTPS:\n\n % cat roles/webserver.rb\n name \"webserver\"\n description \"Systems that serve HTTP and HTTPS\"\n run_list(\n \"recipe[apache2]\",\n \"recipe[apache2::mod_ssl]\"\n )\n default_attributes(\n \"apache\" => {\n \"listen_ports\" => [\"80\", \"443\"]\n }\n )\n\nFor examples of using the definitions in your own recipes, see their\nrespective sections above.\n\nLicense and Authors\n===================\n\n* Author:: Adam Jacob \n* Author:: Joshua Timberman \n* Author:: Bryan McLellan \n* Author:: Dave Esposito \n* Author:: David Abdemoulaie \n* Author:: Edmund Haselwanter \n* Author:: Eric Rochester \n* Author:: Jim Browne \n* Author:: Matthew Kent \n* Author:: Nathen Harvey \n* Author:: Ringo De Smet \n* Author:: Sean OMeara \n* Author:: Seth Chisamore \n* Author:: Gilles Devaux \n\n* Copyright:: 2009-2012, Opscode, Inc\n* Copyright:: 2011, Atriso\n* Copyright:: 2011, CustomInk, LLC.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n","maintainer":"Opscode, Inc.","maintainer_email":"cookbooks@opscode.com","license":"Apache 2.0","platforms":{"redhat":">= 0.0.0","centos":">= 0.0.0","scientific":">= 0.0.0","fedora":">= 0.0.0","debian":">= 0.0.0","ubuntu":">= 0.0.0","arch":">= 0.0.0","freebsd":">= 0.0.0","amazon":">= 0.0.0"},"dependencies":{},"recommendations":{},"suggestions":{},"conflicting":{},"providing":{},"replacing":{},"attributes":{"apache":{"display_name":"Apache Hash","description":"Hash of Apache attributes","type":"hash","choice":[],"calculated":false,"required":"optional","recipes":[]},"apache/dir":{"display_name":"Apache Directory","description":"Location for Apache configuration","default":"/etc/apache2","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apache/log_dir":{"display_name":"Apache Log Directory","description":"Location for Apache logs","default":"/etc/apache2","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apache/user":{"display_name":"Apache User","description":"User Apache runs as","default":"www-data","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apache/binary":{"display_name":"Apache Binary","description":"Apache server daemon program","default":"/usr/sbin/apache2","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apache/icondir":{"display_name":"Apache Icondir","description":"Directory location for icons","default":"/usr/share/apache2/icons","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apache/listen_ports":{"display_name":"Apache Listen Ports","description":"Ports that Apache should listen on","type":"array","default":["80","443"],"choice":[],"calculated":false,"required":"optional","recipes":[]},"apache/contact":{"display_name":"Apache Contact","description":"Email address of webmaster","default":"ops@example.com","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apache/timeout":{"display_name":"Apache Timeout","description":"Connection timeout value","default":"300","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apache/keepalive":{"display_name":"Apache Keepalive","description":"HTTP persistent connections","default":"On","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apache/keepaliverequests":{"display_name":"Apache Keepalive Requests","description":"Number of requests allowed on a persistent connection","default":"100","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apache/keepalivetimeout":{"display_name":"Apache Keepalive Timeout","description":"Time to wait for requests on persistent connection","default":"5","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apache/servertokens":{"display_name":"Apache Server Tokens","description":"Server response header","default":"Prod","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apache/serversignature":{"display_name":"Apache Server Signature","description":"Configure footer on server-generated documents","default":"On","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apache/traceenable":{"display_name":"Apache Trace Enable","description":"Determine behavior of TRACE requests","default":"On","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apache/allowed_openids":{"display_name":"Apache Allowed OpenIDs","description":"Array of OpenIDs allowed to authenticate","default":"","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apache/prefork":{"display_name":"Apache Prefork","description":"Hash of Apache prefork tuning attributes.","type":"hash","choice":[],"calculated":false,"required":"optional","recipes":[]},"apache/prefork/startservers":{"display_name":"Apache Prefork MPM StartServers","description":"Number of MPM servers to start","default":"16","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apache/prefork/minspareservers":{"display_name":"Apache Prefork MPM MinSpareServers","description":"Minimum number of spare server processes","default":"16","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apache/prefork/maxspareservers":{"display_name":"Apache Prefork MPM MaxSpareServers","description":"Maximum number of spare server processes","default":"32","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apache/prefork/serverlimit":{"display_name":"Apache Prefork MPM ServerLimit","description":"Upper limit on configurable server processes","default":"400","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apache/prefork/maxclients":{"display_name":"Apache Prefork MPM MaxClients","description":"Maximum number of simultaneous connections","default":"400","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apache/prefork/maxrequestsperchild":{"display_name":"Apache Prefork MPM MaxRequestsPerChild","description":"Maximum number of request a child process will handle","default":"10000","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apache/worker":{"display_name":"Apache Worker","description":"Hash of Apache prefork tuning attributes.","type":"hash","choice":[],"calculated":false,"required":"optional","recipes":[]},"apache/worker/startservers":{"display_name":"Apache Worker MPM StartServers","description":"Initial number of server processes to start","default":"4","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apache/worker/maxclients":{"display_name":"Apache Worker MPM MaxClients","description":"Maximum number of simultaneous connections","default":"1024","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apache/worker/minsparethreads":{"display_name":"Apache Worker MPM MinSpareThreads","description":"Minimum number of spare worker threads","default":"64","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apache/worker/maxsparethreads":{"display_name":"Apache Worker MPM MaxSpareThreads","description":"Maximum number of spare worker threads","default":"192","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apache/worker/threadsperchild":{"display_name":"Apache Worker MPM ThreadsPerChild","description":"Constant number of worker threads in each server process","default":"64","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apache/worker/maxrequestsperchild":{"display_name":"Apache Worker MPM MaxRequestsPerChild","description":"Maximum number of request a child process will handle","default":"0","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apache/default_modules":{"display_name":"Apache Default Modules","description":"Default modules to enable via recipes","default":"status alias auth_basic authn_file authz_default authz_groupfile authz_host authz_user autoindex dir env mime negotiation setenvif","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apache/mod_ssl/cipher_suite":{"display_name":"Apache mod_ssl Cipher Suite","description":"String of SSL ciphers to use for SSLCipherSuite","default":"RC4-SHA:HIGH:!ADH","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]}},"groupings":{},"recipes":{"apache2":"Main Apache configuration","apache2::logrotate":"Rotate apache2 logs. Requires logrotate cookbook","apache2::mod_alias":"Apache module 'alias' with config file","apache2::mod_apreq2":"Apache module 'apreq'","apache2::mod_auth_basic":"Apache module 'auth_basic'","apache2::mod_auth_digest":"Apache module 'auth_digest'","apache2::mod_auth_openid":"Apache module 'authopenid'","apache2::mod_authn_file":"Apache module 'authn_file'","apache2::mod_authnz_ldap":"Apache module 'authnz_ldap'","apache2::mod_authz_default":"Apache module 'authz_default'","apache2::mod_authz_groupfile":"Apache module 'authz_groupfile'","apache2::mod_authz_host":"Apache module 'authz_host'","apache2::mod_authz_user":"Apache module 'authz_user'","apache2::mod_autoindex":"Apache module 'autoindex' with config file","apache2::mod_cgi":"Apache module 'cgi'","apache2::mod_dav":"Apache module 'dav'","apache2::mod_dav_svn":"Apache module 'dav_svn'","apache2::mod_deflate":"Apache module 'deflate' with config file","apache2::mod_dir":"Apache module 'dir' with config file","apache2::mod_env":"Apache module 'env'","apache2::mod_expires":"Apache module 'expires'","apache2::mod_fcgid":"Apache module 'fcgid', package on ubuntu/debian, rhel/centos, compile source on suse; with config file","apache2::mod_headers":"Apache module 'headers'","apache2::mod_include":"Apache module 'include'","apache2::mod_ldap":"Apache module 'ldap'","apache2::mod_log_config":"Apache module 'log_config'","apache2::mod_mime":"Apache module 'mime' with config file","apache2::mod_negotiation":"Apache module 'negotiation' with config file","apache2::mod_perl":"Apache module 'perl'","apache2::mod_php5":"Apache module 'php5'","apache2::mod_proxy":"Apache module 'proxy' with config file","apache2::mod_proxy_ajp":"Apache module 'proxy_ajp'","apache2::mod_proxy_balancer":"Apache module 'proxy_balancer'","apache2::mod_proxy_connect":"Apache module 'proxy_connect'","apache2::mod_proxy_http":"Apache module 'proxy_http'","apache2::mod_python":"Apache module 'python'","apache2::mod_rewrite":"Apache module 'rewrite'","apache2::mod_setenvif":"Apache module 'setenvif' with config file","apache2::mod_ssl":"Apache module 'ssl' with config file, adds port 443 to listen_ports","apache2::mod_status":"Apache module 'status' with config file","apache2::mod_xsendfile":"Apache module 'xsendfile'"},"version":"1.7.0"} \ No newline at end of file diff --git a/vagrant/provision/cookbooks/apache2/metadata.rb b/vagrant/provision/cookbooks/apache2/metadata.rb new file mode 100755 index 0000000..a5aa510 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/metadata.rb @@ -0,0 +1,213 @@ +name "apache2" +maintainer "Opscode, Inc." +maintainer_email "cookbooks@opscode.com" +license "Apache 2.0" +description "Installs and configures all aspects of apache2 using Debian style symlinks with helper definitions" +long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) +version "1.7.0" +recipe "apache2", "Main Apache configuration" +recipe "apache2::logrotate", "Rotate apache2 logs. Requires logrotate cookbook" +recipe "apache2::mod_alias", "Apache module 'alias' with config file" +recipe "apache2::mod_apreq2", "Apache module 'apreq'" +recipe "apache2::mod_auth_basic", "Apache module 'auth_basic'" +recipe "apache2::mod_auth_digest", "Apache module 'auth_digest'" +recipe "apache2::mod_auth_openid", "Apache module 'authopenid'" +recipe "apache2::mod_authn_file", "Apache module 'authn_file'" +recipe "apache2::mod_authnz_ldap", "Apache module 'authnz_ldap'" +recipe "apache2::mod_authz_default", "Apache module 'authz_default'" +recipe "apache2::mod_authz_groupfile", "Apache module 'authz_groupfile'" +recipe "apache2::mod_authz_host", "Apache module 'authz_host'" +recipe "apache2::mod_authz_user", "Apache module 'authz_user'" +recipe "apache2::mod_autoindex", "Apache module 'autoindex' with config file" +recipe "apache2::mod_cgi", "Apache module 'cgi'" +recipe "apache2::mod_dav", "Apache module 'dav'" +recipe "apache2::mod_dav_svn", "Apache module 'dav_svn'" +recipe "apache2::mod_deflate", "Apache module 'deflate' with config file" +recipe "apache2::mod_dir", "Apache module 'dir' with config file" +recipe "apache2::mod_env", "Apache module 'env'" +recipe "apache2::mod_expires", "Apache module 'expires'" +recipe "apache2::mod_fcgid", "Apache module 'fcgid', package on ubuntu/debian, rhel/centos, compile source on suse; with config file" +recipe "apache2::mod_headers", "Apache module 'headers'" +recipe "apache2::mod_include", "Apache module 'include'" +recipe "apache2::mod_ldap", "Apache module 'ldap'" +recipe "apache2::mod_log_config", "Apache module 'log_config'" +recipe "apache2::mod_mime", "Apache module 'mime' with config file" +recipe "apache2::mod_negotiation", "Apache module 'negotiation' with config file" +recipe "apache2::mod_perl", "Apache module 'perl'" +recipe "apache2::mod_php5", "Apache module 'php5'" +recipe "apache2::mod_proxy", "Apache module 'proxy' with config file" +recipe "apache2::mod_proxy_ajp", "Apache module 'proxy_ajp'" +recipe "apache2::mod_proxy_balancer", "Apache module 'proxy_balancer'" +recipe "apache2::mod_proxy_connect", "Apache module 'proxy_connect'" +recipe "apache2::mod_proxy_http", "Apache module 'proxy_http'" +recipe "apache2::mod_python", "Apache module 'python'" +recipe "apache2::mod_rewrite", "Apache module 'rewrite'" +recipe "apache2::mod_setenvif", "Apache module 'setenvif' with config file" +recipe "apache2::mod_ssl", "Apache module 'ssl' with config file, adds port 443 to listen_ports" +recipe "apache2::mod_status", "Apache module 'status' with config file" +recipe "apache2::mod_xsendfile", "Apache module 'xsendfile'" + +%w{redhat centos scientific fedora debian ubuntu arch freebsd amazon}.each do |os| + supports os +end + +attribute "apache", + :display_name => "Apache Hash", + :description => "Hash of Apache attributes", + :type => "hash" + +attribute "apache/dir", + :display_name => "Apache Directory", + :description => "Location for Apache configuration", + :default => "/etc/apache2" + +attribute "apache/log_dir", + :display_name => "Apache Log Directory", + :description => "Location for Apache logs", + :default => "/etc/apache2" + +attribute "apache/user", + :display_name => "Apache User", + :description => "User Apache runs as", + :default => "www-data" + +attribute "apache/binary", + :display_name => "Apache Binary", + :description => "Apache server daemon program", + :default => "/usr/sbin/apache2" + +attribute "apache/icondir", + :display_name => "Apache Icondir", + :description => "Directory location for icons", + :default => "/usr/share/apache2/icons" + +attribute "apache/listen_ports", + :display_name => "Apache Listen Ports", + :description => "Ports that Apache should listen on", + :type => "array", + :default => ["80", "443"] + +attribute "apache/contact", + :display_name => "Apache Contact", + :description => "Email address of webmaster", + :default => "ops@example.com" + +attribute "apache/timeout", + :display_name => "Apache Timeout", + :description => "Connection timeout value", + :default => "300" + +attribute "apache/keepalive", + :display_name => "Apache Keepalive", + :description => "HTTP persistent connections", + :default => "On" + +attribute "apache/keepaliverequests", + :display_name => "Apache Keepalive Requests", + :description => "Number of requests allowed on a persistent connection", + :default => "100" + +attribute "apache/keepalivetimeout", + :display_name => "Apache Keepalive Timeout", + :description => "Time to wait for requests on persistent connection", + :default => "5" + +attribute "apache/servertokens", + :display_name => "Apache Server Tokens", + :description => "Server response header", + :default => "Prod" + +attribute "apache/serversignature", + :display_name => "Apache Server Signature", + :description => "Configure footer on server-generated documents", + :default => "On" + +attribute "apache/traceenable", + :display_name => "Apache Trace Enable", + :description => "Determine behavior of TRACE requests", + :default => "On" + +attribute "apache/allowed_openids", + :display_name => "Apache Allowed OpenIDs", + :description => "Array of OpenIDs allowed to authenticate", + :default => "" + +attribute "apache/prefork", + :display_name => "Apache Prefork", + :description => "Hash of Apache prefork tuning attributes.", + :type => "hash" + +attribute "apache/prefork/startservers", + :display_name => "Apache Prefork MPM StartServers", + :description => "Number of MPM servers to start", + :default => "16" + +attribute "apache/prefork/minspareservers", + :display_name => "Apache Prefork MPM MinSpareServers", + :description => "Minimum number of spare server processes", + :default => "16" + +attribute "apache/prefork/maxspareservers", + :display_name => "Apache Prefork MPM MaxSpareServers", + :description => "Maximum number of spare server processes", + :default => "32" + +attribute "apache/prefork/serverlimit", + :display_name => "Apache Prefork MPM ServerLimit", + :description => "Upper limit on configurable server processes", + :default => "400" + +attribute "apache/prefork/maxclients", + :display_name => "Apache Prefork MPM MaxClients", + :description => "Maximum number of simultaneous connections", + :default => "400" + +attribute "apache/prefork/maxrequestsperchild", + :display_name => "Apache Prefork MPM MaxRequestsPerChild", + :description => "Maximum number of request a child process will handle", + :default => "10000" + +attribute "apache/worker", + :display_name => "Apache Worker", + :description => "Hash of Apache prefork tuning attributes.", + :type => "hash" + +attribute "apache/worker/startservers", + :display_name => "Apache Worker MPM StartServers", + :description => "Initial number of server processes to start", + :default => "4" + +attribute "apache/worker/maxclients", + :display_name => "Apache Worker MPM MaxClients", + :description => "Maximum number of simultaneous connections", + :default => "1024" + +attribute "apache/worker/minsparethreads", + :display_name => "Apache Worker MPM MinSpareThreads", + :description => "Minimum number of spare worker threads", + :default => "64" + +attribute "apache/worker/maxsparethreads", + :display_name => "Apache Worker MPM MaxSpareThreads", + :description => "Maximum number of spare worker threads", + :default => "192" + +attribute "apache/worker/threadsperchild", + :display_name => "Apache Worker MPM ThreadsPerChild", + :description => "Constant number of worker threads in each server process", + :default => "64" + +attribute "apache/worker/maxrequestsperchild", + :display_name => "Apache Worker MPM MaxRequestsPerChild", + :description => "Maximum number of request a child process will handle", + :default => "0" + +attribute "apache/default_modules", + :display_name => "Apache Default Modules", + :description => "Default modules to enable via recipes", + :default => "status alias auth_basic authn_file authz_default authz_groupfile authz_host authz_user autoindex dir env mime negotiation setenvif" + +attribute "apache/mod_ssl/cipher_suite", + :display_name => "Apache mod_ssl Cipher Suite", + :description => "String of SSL ciphers to use for SSLCipherSuite", + :default => "RC4-SHA:HIGH:!ADH" diff --git a/vagrant/provision/cookbooks/apache2/recipes/default.rb b/vagrant/provision/cookbooks/apache2/recipes/default.rb new file mode 100755 index 0000000..f5cb6e6 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/default.rb @@ -0,0 +1,223 @@ +# +# Cookbook Name:: apache2 +# Recipe:: default +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package "apache2" do + package_name node['apache']['package'] +end + +service "apache2" do + case node['platform_family'] + when "rhel", "fedora", "suse" + service_name "httpd" + # If restarted/reloaded too quickly httpd has a habit of failing. + # This may happen with multiple recipes notifying apache to restart - like + # during the initial bootstrap. + restart_command "/sbin/service httpd restart && sleep 1" + reload_command "/sbin/service httpd reload && sleep 1" + when "debian" + service_name "apache2" + restart_command "/usr/sbin/invoke-rc.d apache2 restart && sleep 1" + reload_command "/usr/sbin/invoke-rc.d apache2 reload && sleep 1" + when "arch" + service_name "httpd" + when "freebsd" + service_name "apache22" + end + supports [:restart, :reload, :status] + action :enable +end + +if platform_family?("rhel", "fedora", "arch", "suse", "freebsd") + directory node['apache']['log_dir'] do + mode 00755 + end + + package "perl" + + cookbook_file "/usr/local/bin/apache2_module_conf_generate.pl" do + source "apache2_module_conf_generate.pl" + mode 00755 + owner "root" + group node['apache']['root_group'] + end + + %w{sites-available sites-enabled mods-available mods-enabled}.each do |dir| + directory "#{node['apache']['dir']}/#{dir}" do + mode 00755 + owner "root" + group node['apache']['root_group'] + end + end + + execute "generate-module-list" do + command "/usr/local/bin/apache2_module_conf_generate.pl #{node['apache']['lib_dir']} #{node['apache']['dir']}/mods-available" + action :nothing + end + + %w{a2ensite a2dissite a2enmod a2dismod}.each do |modscript| + template "/usr/sbin/#{modscript}" do + source "#{modscript}.erb" + mode 00700 + owner "root" + group node['apache']['root_group'] + end + end + + # installed by default on centos/rhel, remove in favour of mods-enabled + %w{ proxy_ajp auth_pam authz_ldap webalizer ssl welcome }.each do |f| + file "#{node['apache']['dir']}/conf.d/#{f}.conf" do + action :delete + backup false + end + end + + # installed by default on centos/rhel, remove in favour of mods-enabled + file "#{node['apache']['dir']}/conf.d/README" do + action :delete + backup false + end + + # enable mod_deflate for consistency across distributions + include_recipe "apache2::mod_deflate" +end + +if platform_family?("freebsd") + + file "#{node['apache']['dir']}/Includes/no-accf.conf" do + action :delete + backup false + end + + directory "#{node['apache']['dir']}/Includes" do + action :delete + end + + %w{ + httpd-autoindex.conf httpd-dav.conf httpd-default.conf httpd-info.conf + httpd-languages.conf httpd-manual.conf httpd-mpm.conf + httpd-multilang-errordoc.conf httpd-ssl.conf httpd-userdir.conf + httpd-vhosts.conf + }.each do |f| + + file "#{node['apache']['dir']}/extra/#{f}" do + action :delete + backup false + end + + end + + directory "#{node['apache']['dir']}/extra" do + action :delete + end + +end + +directory "#{node['apache']['dir']}/ssl" do + mode 00755 + owner "root" + group node['apache']['root_group'] +end + +directory "#{node['apache']['dir']}/conf.d" do + mode 00755 + owner "root" + group node['apache']['root_group'] +end + +directory node['apache']['cache_dir'] do + mode 00755 + owner "root" + group node['apache']['root_group'] +end + +# Set the preferred execution binary - prefork or worker +template "/etc/sysconfig/httpd" do + source "etc-sysconfig-httpd.erb" + owner "root" + group node['apache']['root_group'] + mode 00644 + notifies :restart, "service[apache2]" + only_if { platform_family?("rhel", "fedora") } +end + +template "apache2.conf" do + case node['platform_family'] + when "rhel", "fedora", "arch" + path "#{node['apache']['dir']}/conf/httpd.conf" + when "debian" + path "#{node['apache']['dir']}/apache2.conf" + when "freebsd" + path "#{node['apache']['dir']}/httpd.conf" + end + source "apache2.conf.erb" + owner "root" + group node['apache']['root_group'] + mode 00644 + notifies :restart, "service[apache2]" +end + +template "apache2-conf-security" do + path "#{node['apache']['dir']}/conf.d/security" + source "security.erb" + owner "root" + group node['apache']['root_group'] + mode 00644 + backup false + notifies :restart, "service[apache2]" +end + +template "apache2-conf-charset" do + path "#{node['apache']['dir']}/conf.d/charset" + source "charset.erb" + owner "root" + group node['apache']['root_group'] + mode 00644 + backup false + notifies :restart, "service[apache2]" +end + +template "#{node['apache']['dir']}/ports.conf" do + source "ports.conf.erb" + owner "root" + group node['apache']['root_group'] + variables :apache_listen_ports => node['apache']['listen_ports'].map { |p| p.to_i }.uniq + mode 00644 + notifies :restart, "service[apache2]" +end + +template "#{node['apache']['dir']}/sites-available/default" do + source "default-site.erb" + owner "root" + group node['apache']['root_group'] + mode 00644 + notifies :restart, "service[apache2]" +end + +node['apache']['default_modules'].each do |mod| + module_recipe_name = mod =~ /^mod_/ ? mod : "mod_#{mod}" + include_recipe "apache2::#{module_recipe_name}" +end + +apache_site "default" do + enable node['apache']['default_site_enabled'] +end + +service "apache2" do + action :start +end diff --git a/vagrant/provision/cookbooks/apache2/recipes/god_monitor.rb b/vagrant/provision/cookbooks/apache2/recipes/god_monitor.rb new file mode 100755 index 0000000..b3c49eb --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/god_monitor.rb @@ -0,0 +1,33 @@ +# +# Cookbook Name:: apache2 +# Recipe:: god_monitor +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_service = service "apache2" do + action :nothing +end + +start_command = apache_service.start_command +stop_command = apache_service.stop_command +restart_command = apache_service.restart_command + +god_monitor "apache2" do + config "apache2.god.erb" + start (start_command)?start_command : "/etc/init.d/#{apache_service.service_name} start" + restart (restart_command)?restart_command : "/etc/init.d/#{apache_service.service_name} restart" + stop (stop_command)?stop_command : "/etc/init.d/#{apache_service.service_name} stop" +end diff --git a/vagrant/provision/cookbooks/apache2/recipes/iptables.rb b/vagrant/provision/cookbooks/apache2/recipes/iptables.rb new file mode 100755 index 0000000..fbf1eba --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/iptables.rb @@ -0,0 +1,20 @@ +# +# Cookbook Name:: apache2 +# Recipe:: iptables +# +# Copyright 2012, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +iptables_rule "port_apache" diff --git a/vagrant/provision/cookbooks/apache2/recipes/logrotate.rb b/vagrant/provision/cookbooks/apache2/recipes/logrotate.rb new file mode 100755 index 0000000..d90b0fb --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/logrotate.rb @@ -0,0 +1,31 @@ +# +# Cookbook Name:: apache2 +# Recipe:: logrotate +# +# Copyright 2012, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_service = service "apache2" do + action :nothing +end + +begin + include_recipe 'logrotate' +rescue + Chef::Log.warn("The apache::logrotate recipe requires the logrotate cookbook. Install the cookbook with `knife cookbook site install logrotate`.") +end +logrotate_app apache_service.service_name do + path node['apache']['log_dir'] +end diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_actions.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_actions.rb new file mode 100755 index 0000000..da13b77 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_actions.rb @@ -0,0 +1,20 @@ +# +# Cookbook Name:: apache2 +# Recipe:: actions +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "actions" diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_alias.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_alias.rb new file mode 100755 index 0000000..a4618ed --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_alias.rb @@ -0,0 +1,22 @@ +# +# Cookbook Name:: apache2 +# Recipe:: alias +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "alias" do + conf true +end diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_apreq2.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_apreq2.rb new file mode 100755 index 0000000..c13ca10 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_apreq2.rb @@ -0,0 +1,54 @@ +# +# Cookbook Name:: apache2 +# Recipe:: apreq2 +# +# modified from the python recipe by Jeremy Bingham +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +include_recipe "apache2" + +case node['platform_family'] +when "debian" + + package "libapache2-mod-apreq2" + +when "rhel", "fedora" + + package "libapreq2" do + notifies :run, "execute[generate-module-list]", :immediately + end + + # seems that the apreq lib is weirdly broken or something - it needs to be + # loaded as "apreq", but on RHEL & derivitatives the file needs a symbolic + # link to mod_apreq.so. + link "/usr/lib64/httpd/modules/mod_apreq.so" do + to "/usr/lib64/httpd/modules/mod_apreq2.so" + only_if "test -f /usr/lib64/httpd/modules/mod_apreq2.so" + end + + link "/usr/lib/httpd/modules/mod_apreq.so" do + to "/usr/lib/httpd/modules/mod_apreq2.so" + only_if "test -f /usr/lib/httpd/modules/mod_apreq2.so" + end +end + +file "#{node['apache']['dir']}/conf.d/apreq.conf" do + action :delete + backup false +end + +apache_module "apreq" diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_auth_basic.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_auth_basic.rb new file mode 100755 index 0000000..d30264f --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_auth_basic.rb @@ -0,0 +1,20 @@ +# +# Cookbook Name:: apache2 +# Recipe:: auth_basic +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "auth_basic" diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_auth_cas.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_auth_cas.rb new file mode 100755 index 0000000..87096d7 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_auth_cas.rb @@ -0,0 +1,59 @@ +include_recipe "apache2" + +if node['apache']['mod_auth_cas']['from_source'] + + package "httpd-devel" do + package_name value_for_platform_family( + ["rhel", "fedora", "suse"] => "httpd-devel", + "debian" => "apache2-dev" + ) + end + + git '/tmp/mod_auth_cas' do + repository 'git://github.com/Jasig/mod_auth_cas.git' + revision node['apache']['mod_auth_cas']['source_revision'] + notifies :run, 'execute[compile mod_auth_cas]', :immediately + end + + execute 'compile mod_auth_cas' do + command './configure && make && make install' + cwd '/tmp/mod_auth_cas' + not_if "test -f #{node['apache']['libexecdir']}/mod_auth_cas.so" + end + + template "#{node['apache']['dir']}/mods-available/auth_cas.load" do + source 'mods/auth_cas.load.erb' + owner 'root' + group node['apache']['root_group'] + mode 00644 + end + +else + case node['platform_family'] + when "debian" + + package "libapache2-mod-auth-cas" + + when "rhel", "fedora" + + yum_package "mod_auth_cas" do + notifies :run, "execute[generate-module-list]", :immediately + end + + file "#{node['apache']['dir']}/conf.d/auth_cas.conf" do + action :delete + backup false + end + + end +end + +apache_module 'auth_cas' do + conf true +end + +directory "#{node['apache']['cache_dir']}/mod_auth_cas" do + owner node['apache']['user'] + group node['apache']['group'] + mode 00700 +end diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_auth_digest.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_auth_digest.rb new file mode 100755 index 0000000..5aef926 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_auth_digest.rb @@ -0,0 +1,20 @@ +# +# Cookbook Name:: apache2 +# Recipe:: auth_digest +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "auth_digest" diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_auth_openid.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_auth_openid.rb new file mode 100755 index 0000000..2aa6614 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_auth_openid.rb @@ -0,0 +1,125 @@ +# +# Cookbook Name:: apache2 +# Recipe:: mod_auth_openid +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +openid_dev_pkgs = value_for_platform_family( + ["debian"] => %w{automake make g++ apache2-prefork-dev libopkele-dev libopkele3 libtool}, + ["rhel", "fedora"] => %w{gcc-c++ httpd-devel curl-devel libtidy libtidy-devel sqlite-devel pcre-devel openssl-devel make libtool}, + "arch" => ["libopkele"], + "freebsd" => %w{libopkele pcre sqlite3} +) + +make_cmd = value_for_platform_family( + "freebsd" => { "default" => "gmake" }, + "default" => "make" +) + +case node['platform_family'] +when "arch" + + include_recipe "pacman" + package "tidyhtml" + pacman_aur openid_dev_pkgs.first do + action [:build, :install] + end + +else + openid_dev_pkgs.each do |pkg| + + package pkg + + end +end + +case node['platform_family'] +when "rhel", "fedora" + remote_file "#{Chef::Config['file_cache_path']}/libopkele-2.0.4.tar.gz" do + source "http://kin.klever.net/dist/libopkele-2.0.4.tar.gz" + mode 00644 + checksum "57a5bc753b7e80c5ece1e5968b2051b0ce7ed9ce4329d17122c61575a9ea7648" + end + + bash "install libopkele" do + cwd Chef::Config['file_cache_path'] + # Ruby 1.8.6 does not have rpartition, unfortunately + syslibdir = node['apache']['lib_dir'][0..node['apache']['lib_dir'].rindex("/")] + code <<-EOH + tar zxvf libopkele-2.0.4.tar.gz + cd libopkele-2.0.4 && ./configure --prefix=/usr --libdir=#{syslibdir} + #{make_cmd} && #{make_cmd} install + EOH + creates "#{syslibdir}/libopkele.a" + end +end + +version = node['apache']['mod_auth_openid']['ref'] +configure_flags = node['apache']['mod_auth_openid']['configure_flags'] + +remote_file "#{Chef::Config['file_cache_path']}/mod_auth_openid-#{version}.tar.gz" do + source node['apache']['mod_auth_openid']['source_url'] + mode 00644 + action :create_if_missing +end + +file "mod_auth_openid_dblocation" do + path node['apache']['mod_auth_openid']['dblocation'] + action :nothing +end + +bash "untar mod_auth_openid" do + cwd Chef::Config['file_cache_path'] + code <<-EOH + tar zxvf mod_auth_openid-#{version}.tar.gz + EOH +end + +bash "compile mod_auth_openid" do + cwd "#{Chef::Config['file_cache_path']}/mod_auth_openid-#{version}" + code <<-EOH + ./autogen.sh + ./configure #{configure_flags.join(' ')} + perl -pi -e "s/-i -a -n 'authopenid'/-i -n 'authopenid'/g" Makefile + #{make_cmd} && #{make_cmd} install + EOH + creates "#{node['apache']['libexecdir']}/mod_auth_openid.so" + notifies :delete, "file[mod_auth_openid_dblocation]", :immediately + notifies :restart, "service[apache2]" +end + +directory node['apache']['mod_auth_openid']['cache_dir'] do + owner node['apache']['user'] + group node['apache']['group'] + mode 00700 +end + +file node['apache']['mod_auth_openid']['dblocation'] do + owner node['apache']['user'] + group node['apache']['group'] + mode 00644 +end + +template "#{node['apache']['dir']}/mods-available/authopenid.load" do + source "mods/authopenid.load.erb" + owner "root" + group node['apache']['root_group'] + mode 00644 +end + +apache_module "authopenid" do + filename "mod_auth_openid.so" +end diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_authn_file.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_authn_file.rb new file mode 100755 index 0000000..872caa7 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_authn_file.rb @@ -0,0 +1,20 @@ +# +# Cookbook Name:: apache2 +# Recipe:: authn_file +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "authn_file" diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_authnz_ldap.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_authnz_ldap.rb new file mode 100755 index 0000000..0310d24 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_authnz_ldap.rb @@ -0,0 +1,20 @@ +# +# Cookbook Name:: apache2 +# Recipe:: authnz_ldap +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "authnz_ldap" diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_authz_default.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_authz_default.rb new file mode 100755 index 0000000..123536d --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_authz_default.rb @@ -0,0 +1,20 @@ +# +# Cookbook Name:: apache2 +# Recipe:: authz_default +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "authz_default" diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_authz_groupfile.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_authz_groupfile.rb new file mode 100755 index 0000000..b2833b2 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_authz_groupfile.rb @@ -0,0 +1,20 @@ +# +# Cookbook Name:: apache2 +# Recipe:: authz_groupfile +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "authz_groupfile" diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_authz_host.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_authz_host.rb new file mode 100755 index 0000000..87c1a4b --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_authz_host.rb @@ -0,0 +1,20 @@ +# +# Cookbook Name:: apache2 +# Recipe:: authz_host +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "authz_host" diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_authz_user.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_authz_user.rb new file mode 100755 index 0000000..8dd46df --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_authz_user.rb @@ -0,0 +1,20 @@ +# +# Cookbook Name:: apache2 +# Recipe:: authz_user +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "authz_user" diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_autoindex.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_autoindex.rb new file mode 100755 index 0000000..622a66e --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_autoindex.rb @@ -0,0 +1,22 @@ +# +# Cookbook Name:: apache2 +# Recipe:: autoindex +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "autoindex" do + conf true +end diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_cgi.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_cgi.rb new file mode 100755 index 0000000..a151d07 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_cgi.rb @@ -0,0 +1,20 @@ +# +# Cookbook Name:: apache2 +# Recipe:: cgi +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "cgi" diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_dav.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_dav.rb new file mode 100755 index 0000000..94f7c1a --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_dav.rb @@ -0,0 +1,20 @@ +# +# Cookbook Name:: apache2 +# Recipe:: dav +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "dav" diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_dav_fs.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_dav_fs.rb new file mode 100755 index 0000000..bd3e74b --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_dav_fs.rb @@ -0,0 +1,21 @@ +# +# Cookbook Name:: apache2 +# Recipe:: dav_fs +# +# Copyright 2011, Atriso +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +include_recipe "apache2::mod_dav" +apache_module "dav_fs" diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_dav_svn.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_dav_svn.rb new file mode 100755 index 0000000..3a1d0fc --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_dav_svn.rb @@ -0,0 +1,41 @@ +# +# Cookbook Name:: apache2 +# Recipe:: dav_svn +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +include_recipe "apache2::mod_dav" + +package "libapache2-svn" do + case node['platform_family'] + when "rhel", "fedora", "suse" + package_name "mod_dav_svn" + else + package_name "libapache2-svn" + end +end + +case node['platform_family'] +when "rhel", "fedora", "suse" + + file "#{node['apache']['conf']}/conf.d/subversion.conf" do + action :delete + backup false + end + +end + +apache_module "dav_svn" diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_deflate.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_deflate.rb new file mode 100755 index 0000000..b568f30 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_deflate.rb @@ -0,0 +1,22 @@ +# +# Cookbook Name:: apache2 +# Recipe:: deflate +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "deflate" do + conf true +end diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_dir.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_dir.rb new file mode 100755 index 0000000..e59b36b --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_dir.rb @@ -0,0 +1,22 @@ +# +# Cookbook Name:: apache2 +# Recipe:: dir +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "dir" do + conf true +end diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_env.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_env.rb new file mode 100755 index 0000000..d345503 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_env.rb @@ -0,0 +1,20 @@ +# +# Cookbook Name:: apache2 +# Recipe:: env +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "env" diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_expires.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_expires.rb new file mode 100755 index 0000000..9e5042e --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_expires.rb @@ -0,0 +1,20 @@ +# +# Cookbook Name:: apache2 +# Recipe:: expires +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "expires" diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_fastcgi.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_fastcgi.rb new file mode 100755 index 0000000..a0a4d95 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_fastcgi.rb @@ -0,0 +1,26 @@ +# +# Cookbook Name:: apache2 +# Recipe:: fastcgi +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +if platform_family?("debian") + package "libapache2-mod-fastcgi" + + apache_module "fastcgi" do + conf true + end +end diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_fcgid.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_fcgid.rb new file mode 100755 index 0000000..b82dc95 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_fcgid.rb @@ -0,0 +1,55 @@ +# +# Cookbook Name:: apache2 +# Recipe:: fcgid +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +if platform_family?("debian") + package "libapache2-mod-fcgid" +elsif platform_family?("rhel", "fedora") + + package "mod_fcgid" do + notifies :run, resources(:execute => "generate-module-list"), :immediately + end + + file "#{node['apache']['dir']}/conf.d/fcgid.conf" do + action :delete + backup false + end + + directory "/var/run/httpd/mod_fcgid" do + recursive true + only_if { node['platform_version'].to_i >= 6 } + end + +elsif platform_family?("suse") + apache_lib_path = node['apache']['lib_dir'] + + package "httpd-devel" + + bash "install-fcgid" do + code <<-EOH +(cd #{Chef::Config['file_cache_path']}; wget http://superb-east.dl.sourceforge.net/sourceforge/mod-fcgid/mod_fcgid.2.2.tgz) +(cd #{Chef::Config['file_cache_path']}; tar zxvf mod_fcgid.2.2.tgz) +(cd #{Chef::Config['file_cache_path']}; perl -pi -e 's!/usr/local/apache2!#{apache_lib_path}!g' ./mod_fcgid.2.2/Makefile) +(cd #{Chef::Config['file_cache_path']}/mod_fcgid.2.2; make install) +EOH + end +end + +apache_module "fcgid" do + conf true +end diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_filter.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_filter.rb new file mode 100755 index 0000000..148ef7d --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_filter.rb @@ -0,0 +1,20 @@ +# +# Cookbook Name:: apache2 +# Recipe:: filter +# +# Copyright 2008-2013, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "filter" diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_headers.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_headers.rb new file mode 100755 index 0000000..5e6b94d --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_headers.rb @@ -0,0 +1,20 @@ +# +# Cookbook Name:: apache2 +# Recipe:: headers +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "headers" diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_include.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_include.rb new file mode 100755 index 0000000..e46d81f --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_include.rb @@ -0,0 +1,22 @@ +# +# Cookbook Name:: apache2 +# Recipe:: include +# +# Copyright 2012, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "include" do + conf true +end diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_ldap.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_ldap.rb new file mode 100755 index 0000000..0877694 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_ldap.rb @@ -0,0 +1,20 @@ +# +# Cookbook Name:: apache2 +# Recipe:: ldap +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "ldap" diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_log_config.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_log_config.rb new file mode 100755 index 0000000..4ab653f --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_log_config.rb @@ -0,0 +1,24 @@ +# +# Cookbook Name:: apache2 +# Recipe:: log_config +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +if platform_family?("rhel", "fedora", "suse", "arch", "freebsd") + apache_module "log_config" +else + include_recipe "apache2" +end diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_logio.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_logio.rb new file mode 100755 index 0000000..74f1350 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_logio.rb @@ -0,0 +1,24 @@ +# +# Cookbook Name:: apache2 +# Recipe:: logio +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +if platform_family?("rhel", "fedora", "suse", "arch", "freebsd") + apache_module "logio" +else + include_recipe "apache2" +end diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_mime.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_mime.rb new file mode 100755 index 0000000..16aee1a --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_mime.rb @@ -0,0 +1,22 @@ +# +# Cookbook Name:: apache2 +# Recipe:: mime +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "mime" do + conf true +end diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_negotiation.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_negotiation.rb new file mode 100755 index 0000000..348e11f --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_negotiation.rb @@ -0,0 +1,22 @@ +# +# Cookbook Name:: apache2 +# Recipe:: negotiation +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "negotiation" do + conf true +end diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_perl.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_perl.rb new file mode 100755 index 0000000..b4d2a74 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_perl.rb @@ -0,0 +1,44 @@ +# +# Cookbook Name:: apache2 +# Recipe:: perl +# +# adapted from the mod_python recipe by Jeremy Bingham +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +case node['platform_family'] +when "debian" + %w{libapache2-mod-perl2 libapache2-request-perl apache2-mpm-prefork}.each do |pkg| + + package pkg + + end +when "rhel", "fedora" + + package "mod_perl" do + notifies :run, "execute[generate-module-list]", :immediately + end + + package "perl-libapreq2" + +end + +file "#{node['apache']['dir']}/conf.d/perl.conf" do + action :delete + backup false +end + +apache_module "perl" diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_php5.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_php5.rb new file mode 100755 index 0000000..63cc0ce --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_php5.rb @@ -0,0 +1,78 @@ +# +# Cookbook Name:: apache2 +# Recipe:: php5 +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +case node['platform_family'] +when "debian" + + package "libapache2-mod-php5" + +when "arch" + + package "php-apache" do + notifies :run, "execute[generate-module-list]", :immediately + end + +when "rhel" + + package "which" + package "php package" do + if node['platform_version'].to_f < 6.0 + package_name "php53" + else + package_name "php" + end + notifies :run, "execute[generate-module-list]", :immediately + not_if "which php" + end + +when "fedora" + + package "php package" do + package_name "php" + notifies :run, "execute[generate-module-list]", :immediately + not_if "which php" + end + +when "freebsd" + + freebsd_port_options "php5" do + options "APACHE" => true + action :create + end + + package "php package" do + package_name "php5" + source "ports" + notifies :run, "execute[generate-module-list]", :immediately + end + +end + +file "#{node['apache']['dir']}/conf.d/php.conf" do + action :delete + backup false +end + +apache_module "php5" do + case node['platform_family'] + when "rhel", "fedora", "freebsd" + conf true + filename "libphp5.so" + end +end diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_proxy.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_proxy.rb new file mode 100755 index 0000000..fff7627 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_proxy.rb @@ -0,0 +1,22 @@ +# +# Cookbook Name:: apache2 +# Recipe:: proxy +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "proxy" do + conf true +end diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_proxy_ajp.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_proxy_ajp.rb new file mode 100755 index 0000000..61bc078 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_proxy_ajp.rb @@ -0,0 +1,21 @@ +# +# Cookbook Name:: apache2 +# Recipe:: proxy +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +include_recipe "apache2::mod_proxy" +apache_module "proxy_ajp" diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_proxy_balancer.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_proxy_balancer.rb new file mode 100755 index 0000000..dc62a71 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_proxy_balancer.rb @@ -0,0 +1,20 @@ +# +# Cookbook Name:: apache2 +# Recipe:: proxy +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "proxy_balancer" diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_proxy_connect.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_proxy_connect.rb new file mode 100755 index 0000000..f41954f --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_proxy_connect.rb @@ -0,0 +1,20 @@ +# +# Cookbook Name:: apache2 +# Recipe:: proxy +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "proxy_connect" diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_proxy_http.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_proxy_http.rb new file mode 100755 index 0000000..ddff3ea --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_proxy_http.rb @@ -0,0 +1,20 @@ +# +# Cookbook Name:: apache2 +# Recipe:: proxy_http +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "proxy_http" diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_python.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_python.rb new file mode 100755 index 0000000..bfa684a --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_python.rb @@ -0,0 +1,37 @@ +# +# Cookbook Name:: apache2 +# Recipe:: python +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +case node['platform_family'] +when "debian" + + package "libapache2-mod-python" + +when "rhel", "fedora" + + package "mod_python" do + notifies :run, "execute[generate-module-list]", :immediately + end +end + +file "#{node['apache']['dir']}/conf.d/python.conf" do + action :delete + backup false +end + +apache_module "python" diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_rewrite.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_rewrite.rb new file mode 100755 index 0000000..df388a6 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_rewrite.rb @@ -0,0 +1,20 @@ +# +# Cookbook Name:: apache2 +# Recipe:: rewrite +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "rewrite" diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_setenvif.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_setenvif.rb new file mode 100755 index 0000000..4048a5f --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_setenvif.rb @@ -0,0 +1,22 @@ +# +# Cookbook Name:: apache2 +# Recipe:: setenvif +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "setenvif" do + conf true +end diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_ssl.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_ssl.rb new file mode 100755 index 0000000..d5095ec --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_ssl.rb @@ -0,0 +1,46 @@ +# +# Cookbook Name:: apache2 +# Recipe:: ssl +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +unless node['apache']['listen_ports'].include?("443") + node.set['apache']['listen_ports'] = node['apache']['listen_ports'] + ["443"] +end + +ports = node['apache']['listen_ports'] + +if platform_family?("rhel", "fedora", "suse") + + package "mod_ssl" do + notifies :run, "execute[generate-module-list]", :immediately + end + + file "#{node['apache']['dir']}/conf.d/ssl.conf" do + action :delete + backup false + end +end + +template "#{node['apache']['dir']}/ports.conf" do + source "ports.conf.erb" + variables :apache_listen_ports => ports.map { |p| p.to_i }.uniq + notifies :restart, "service[apache2]" + mode 00644 +end + +apache_module "ssl" do + conf true +end diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_status.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_status.rb new file mode 100755 index 0000000..3e71727 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_status.rb @@ -0,0 +1,22 @@ +# +# Cookbook Name:: apache2 +# Recipe:: status +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apache_module "status" do + conf true +end diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_wsgi.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_wsgi.rb new file mode 100755 index 0000000..fef91bb --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_wsgi.rb @@ -0,0 +1,38 @@ +# +# Cookbook Name:: apache2 +# Recipe:: mod_wsgi +# +# Copyright 2008-2012, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +case node['platform_family'] +when "debian" + + package "libapache2-mod-wsgi" + +when "rhel", "fedora", "arch" + + package "mod_wsgi" do + notifies :run, "execute[generate-module-list]", :immediately + end + +end + +file "#{node['apache']['dir']}/conf.d/wsgi.conf" do + action :delete + backup false +end + +apache_module "wsgi" diff --git a/vagrant/provision/cookbooks/apache2/recipes/mod_xsendfile.rb b/vagrant/provision/cookbooks/apache2/recipes/mod_xsendfile.rb new file mode 100755 index 0000000..9d4c60f --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/recipes/mod_xsendfile.rb @@ -0,0 +1,38 @@ +# +# Cookbook Name:: apache2 +# Recipe:: mod_xsendfile +# +# Copyright 2011, CustomInk, LLC. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +case node['platform_family'] +when "debian" + + package "libapache2-mod-xsendfile" + +when "rhel", "fedora" + + package "mod_xsendfile" do + notifies :run, "execute[generate-module-list]", :immediately + end + +end + +file "#{node['apache']['dir']}/conf.d/xsendfile.conf" do + action :delete + backup false +end + +apache_module "xsendfile" diff --git a/vagrant/provision/cookbooks/apache2/templates/default/a2dismod.erb b/vagrant/provision/cookbooks/apache2/templates/default/a2dismod.erb new file mode 100755 index 0000000..e66a292 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/a2dismod.erb @@ -0,0 +1,22 @@ +#!/bin/sh -e + +SYSCONFDIR='<%= node['apache']['dir'] %>' + +if [ -z $1 ]; then + echo "Which module would you like to disable?" + echo -n "Your choices are: " + ls $SYSCONFDIR/mods-enabled/*.load | \ + sed -e "s,$SYSCONFDIR/mods-enabled/,,g" | sed -e 's/\.load$//g;' | xargs echo + echo -n "Module name? " + read MODNAME +else + MODNAME=$1 +fi + +if ! [ -e $SYSCONFDIR/mods-enabled/$MODNAME.load ]; then + echo "This module is already disabled, or does not exist!" + exit 1 +fi + +rm -f $SYSCONFDIR/mods-enabled/$MODNAME.* +echo "Module $MODNAME disabled; reload apache to fully disable." \ No newline at end of file diff --git a/vagrant/provision/cookbooks/apache2/templates/default/a2dissite.erb b/vagrant/provision/cookbooks/apache2/templates/default/a2dissite.erb new file mode 100755 index 0000000..9e074c5 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/a2dissite.erb @@ -0,0 +1,29 @@ +#!/bin/sh -e + +SYSCONFDIR='<%= node['apache']['dir'] %>' + +if [ -z $1 ]; then + echo "Which site would you like to disable?" + echo -n "Your choices are: " + ls $SYSCONFDIR/sites-enabled/* | \ + sed -e "s,$SYSCONFDIR/sites-enabled/,,g" | xargs echo + echo -n "Site name? " + read SITENAME +else + SITENAME=$1 +fi + +if [ $SITENAME = "default" ]; then + PRIORITY="000" +fi + +if ! [ -e $SYSCONFDIR/sites-enabled/$SITENAME -o \ + -e $SYSCONFDIR/sites-enabled/"$PRIORITY"-"$SITENAME" ]; then + echo "This site is already disabled, or does not exist!" + exit 1 +fi + +if ! rm $SYSCONFDIR/sites-enabled/$SITENAME 2>/dev/null; then + rm -f $SYSCONFDIR/sites-enabled/"$PRIORITY"-"$SITENAME" +fi +echo "Site $SITENAME disabled; reload apache to disable." diff --git a/vagrant/provision/cookbooks/apache2/templates/default/a2enmod.erb b/vagrant/provision/cookbooks/apache2/templates/default/a2enmod.erb new file mode 100755 index 0000000..fe641df --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/a2enmod.erb @@ -0,0 +1,37 @@ +#!/bin/sh -e + +SYSCONFDIR='<%= node['apache']['dir'] %>' + +if [ -z $1 ]; then + echo "Which module would you like to enable?" + echo -n "Your choices are: " + ls $SYSCONFDIR/mods-available/*.load | \ + sed -e "s,$SYSCONFDIR/mods-available/,,g" | sed -e 's/\.load$//g;' | xargs echo + echo -n "Module name? " + read MODNAME +else + MODNAME=$1 +fi + +#figure out if we're on a prefork or threaded mpm +if [ -x /usr/sbin/apache2 ]; then + PREFORK=`/usr/sbin/apache2 -l | grep prefork || true` +fi + +if [ -e $SYSCONFDIR/mods-enabled/$MODNAME.load -a -e $SYSCONFDIR/mods-enabled/$MODNAME.conf ]; then + echo "This module is already enabled!" + exit 0 +fi + +if ! [ -e $SYSCONFDIR/mods-available/$MODNAME.load ]; then + echo "This module does not exist!" + exit 1 +fi + +for i in conf load; do + if [ -e $SYSCONFDIR/mods-available/$MODNAME.$i -a ! -e $SYSCONFDIR/mods-enabled/$MODNAME.$i ]; then + ln -sf $SYSCONFDIR/mods-available/$MODNAME.$i $SYSCONFDIR/mods-enabled/$MODNAME.$i; + fi +done + +echo "Module $MODNAME installed; reload apache to enable." diff --git a/vagrant/provision/cookbooks/apache2/templates/default/a2ensite.erb b/vagrant/provision/cookbooks/apache2/templates/default/a2ensite.erb new file mode 100755 index 0000000..3a7c628 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/a2ensite.erb @@ -0,0 +1,38 @@ +#!/bin/sh -e + +SYSCONFDIR='<%= node['apache']['dir'] %>' + +if [ -z $1 ]; then + echo "Which site would you like to enable?" + echo -n "Your choices are: " + ls $SYSCONFDIR/sites-available/* | \ + sed -e "s,$SYSCONFDIR/sites-available/,,g" | xargs echo + echo -n "Site name? " + read SITENAME +else + SITENAME=$1 +fi + +if [ $SITENAME = "default" ]; then + PRIORITY="000" +fi + +if [ -e $SYSCONFDIR/sites-enabled/$SITENAME -o \ + -e $SYSCONFDIR/sites-enabled/"$PRIORITY"-"$SITENAME" ]; then + echo "This site is already enabled!" + exit 0 +fi + +if ! [ -e $SYSCONFDIR/sites-available/$SITENAME ]; then + echo "This site does not exist!" + exit 1 +fi + +if [ $SITENAME = "default" ]; then + ln -sf $SYSCONFDIR/sites-available/$SITENAME \ + $SYSCONFDIR/sites-enabled/"$PRIORITY"-"$SITENAME" +else + ln -sf $SYSCONFDIR/sites-available/$SITENAME $SYSCONFDIR/sites-enabled/$SITENAME +fi + +echo "Site $SITENAME installed; reload apache to enable." \ No newline at end of file diff --git a/vagrant/provision/cookbooks/apache2/templates/default/apache2.conf.erb b/vagrant/provision/cookbooks/apache2/templates/default/apache2.conf.erb new file mode 100755 index 0000000..bea4993 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/apache2.conf.erb @@ -0,0 +1,238 @@ +# +# Generated by Chef +# +# Based on the Ubuntu apache2.conf + +ServerRoot "<%= node['apache']['dir'] %>" + +# +# The accept serialization lock file MUST BE STORED ON A LOCAL DISK. +# +<% if %w{debian}.include?(node['platform_family']) -%> +LockFile /var/lock/apache2/accept.lock +<% elsif %w{freebsd}.include?(node['platform_family']) -%> +LockFile /var/log/accept.lock +<% else %> +LockFile logs/accept.lock +<% end -%> + +# +# PidFile: The file in which the server should record its process +# identification number when it starts. +# +PidFile <%= node['apache']['pid_file'] %> + +# +# Timeout: The number of seconds before receives and sends time out. +# +Timeout <%= node['apache']['timeout'] %> + +# +# KeepAlive: Whether or not to allow persistent connections (more than +# one request per connection). Set to "Off" to deactivate. +# +KeepAlive <%= node['apache']['keepalive'] %> + +# +# MaxKeepAliveRequests: The maximum number of requests to allow +# during a persistent connection. Set to 0 to allow an unlimited amount. +# We recommend you leave this number high, for maximum performance. +# +MaxKeepAliveRequests <%= node['apache']['keepaliverequests'] %> + +# +# KeepAliveTimeout: Number of seconds to wait for the next request from the +# same client on the same connection. +# +KeepAliveTimeout <%= node['apache']['keepalivetimeout'] %> + +## +## Server-Pool Size Regulation (MPM specific) +## + +# prefork MPM +# StartServers: number of server processes to start +# MinSpareServers: minimum number of server processes which are kept spare +# MaxSpareServers: maximum number of server processes which are kept spare +# MaxClients: maximum number of server processes allowed to start +# MaxRequestsPerChild: maximum number of requests a server process serves + + StartServers <%= node['apache']['prefork']['startservers'] %> + MinSpareServers <%= node['apache']['prefork']['minspareservers'] %> + MaxSpareServers <%= node['apache']['prefork']['maxspareservers'] %> + ServerLimit <%= node['apache']['prefork']['serverlimit'] %> + MaxClients <%= node['apache']['prefork']['maxclients'] %> + MaxRequestsPerChild <%= node['apache']['prefork']['maxrequestsperchild'] %> + + +# worker MPM +# StartServers: initial number of server processes to start +# MaxClients: maximum number of simultaneous client connections +# MinSpareThreads: minimum number of worker threads which are kept spare +# MaxSpareThreads: maximum number of worker threads which are kept spare +# ThreadsPerChild: constant number of worker threads in each server process +# MaxRequestsPerChild: maximum number of requests a server process serves + + StartServers <%= node['apache']['worker']['startservers'] %> + ServerLimit <%= node['apache']['worker']['serverlimit'] %> + MaxClients <%= node['apache']['worker']['maxclients'] %> + MinSpareThreads <%= node['apache']['worker']['minsparethreads'] %> + MaxSpareThreads <%= node['apache']['worker']['maxsparethreads'] %> + ThreadsPerChild <%= node['apache']['worker']['threadsperchild'] %> + MaxRequestsPerChild <%= node['apache']['worker']['maxrequestsperchild'] %> + + +User <%= node['apache']['user'] %> +Group <%= node['apache']['group'] %> + +# +# AccessFileName: The name of the file to look for in each directory +# for additional configuration directives. See also the AllowOverride +# directive. +# + +AccessFileName .htaccess + +# +# The following lines prevent .htaccess and .htpasswd files from being +# viewed by Web clients. +# + + Order allow,deny + Deny from all + + +# +# DefaultType is the default MIME type the server will use for a document +# if it cannot otherwise determine one, such as from filename extensions. +# If your server contains mostly text or HTML documents, "text/plain" is +# a good value. If most of your content is binary, such as applications +# or images, you may want to use "application/octet-stream" instead to +# keep browsers from trying to display binary files as though they are +# text. +# +DefaultType text/plain + + +# +# HostnameLookups: Log the names of clients or just their IP addresses +# e.g., www.apache.org (on) or 204.62.129.132 (off). +# The default is off because it'd be overall better for the net if people +# had to knowingly turn this feature on, since enabling it means that +# each client request will result in AT LEAST one lookup request to the +# nameserver. +# +HostnameLookups Off + +# ErrorLog: The location of the error log file. +# If you do not specify an ErrorLog directive within a +# container, error messages relating to that virtual host will be +# logged here. If you *do* define an error logfile for a +# container, that host's errors will be logged there and not here. +# +ErrorLog <%= node['apache']['log_dir'] %>/<%= node['apache']['error_log'] %> + +# +# LogLevel: Control the number of messages logged to the error_log. +# Possible values include: debug, info, notice, warn, error, crit, +# alert, emerg. +# +LogLevel warn + +# COOK-1021: Dummy LoadModule directive to aid module installations +#LoadModule dummy_module modules/mod_dummy.so + +# Include module configuration: +Include <%= node['apache']['dir'] %>/mods-enabled/*.load +Include <%= node['apache']['dir'] %>/mods-enabled/*.conf + +<% if %w{freebsd}.include?(node['platform_family']) -%> + + AcceptFilter http none + AcceptFilter https none + +<% end %> + +# Include ports listing +Include <%= node['apache']['dir'] %>/ports.conf + +# +# The following directives define some format nicknames for use with +# a CustomLog directive (see below). +# +LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined +LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined +LogFormat "%h %l %u %t \"%r\" %>s %b" common +LogFormat "%{Referer}i -> %U" referer +LogFormat "%{User-agent}i" agent +# + +# Customizable error responses come in three flavors: +# 1) plain text 2) local redirects 3) external redirects +# +# Some examples: +#ErrorDocument 500 "The server made a boo boo." +#ErrorDocument 404 /missing.html +#ErrorDocument 404 "/cgi-bin/missing_handler.pl" +#ErrorDocument 402 http://www.example.com/subscription_info.html +# + +# +# Putting this all together, we can internationalize error responses. +# +# We use Alias to redirect any /error/HTTP_.html.var response to +# our collection of by-error message multi-language collections. We use +# includes to substitute the appropriate text. +# +# You can modify the messages' appearance without changing any of the +# default HTTP_.html.var files by adding the line: +# +# Alias /error/include/ "/your/include/path/" +# +# which allows you to create your own set of files by starting with the +# /usr/share/apache2/error/include/ files and copying them to /your/include/path/, +# even on a per-VirtualHost basis. The default include files will display +# your Apache version number and your ServerAdmin email address regardless +# of the setting of ServerSignature. +# +# The internationalized error documents require mod_alias, mod_include +# and mod_negotiation. To activate them, uncomment the following 30 lines. + +# Alias /error/ "/usr/share/apache2/error/" +# +# +# AllowOverride None +# Options IncludesNoExec +# AddOutputFilter Includes html +# AddHandler type-map var +# Order allow,deny +# Allow from all +# LanguagePriority en cs de es fr it nl sv pt-br ro +# ForceLanguagePriority Prefer Fallback +# +# +# ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var +# ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var +# ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var +# ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var +# ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var +# ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var +# ErrorDocument 410 /error/HTTP_GONE.html.var +# ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var +# ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var +# ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var +# ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var +# ErrorDocument 415 /error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var +# ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var +# ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var +# ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var +# ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var +# ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var + + + +# Include generic snippets of statements +Include <%= node['apache']['dir'] %>/conf.d/ + +# Include the virtual host configurations: +Include <%= node['apache']['dir'] %>/sites-enabled/ diff --git a/vagrant/provision/cookbooks/apache2/templates/default/apache2.god.erb b/vagrant/provision/cookbooks/apache2/templates/default/apache2.god.erb new file mode 100755 index 0000000..86947f5 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/apache2.god.erb @@ -0,0 +1,19 @@ +God.watch do |w| + w.name = "apache2" + w.interval = 30.seconds # default + w.start = "<%= @params[:start] %>" + w.stop = "<%= @params[:stop] %>" + w.restart = "<%= @params[:restart] %>" + w.start_grace = 10.seconds + w.restart_grace = 10.seconds + w.pid_file = "/var/run/apache2.pid" + w.behavior(:clean_pid_file) + + w.start_if do |start| + start.condition(:process_running) do |c| + c.interval = 5.seconds + c.running = false + c.notify = 'admin' + end + end +end diff --git a/vagrant/provision/cookbooks/apache2/templates/default/charset.erb b/vagrant/provision/cookbooks/apache2/templates/default/charset.erb new file mode 100755 index 0000000..40d7198 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/charset.erb @@ -0,0 +1,6 @@ +# Read the documentation before enabling AddDefaultCharset. +# In general, it is only a good idea if you know that all your files +# have this encoding. It will override any encoding given in the files +# in meta http-equiv or xml encoding tags. + +#AddDefaultCharset UTF-8 diff --git a/vagrant/provision/cookbooks/apache2/templates/default/default-site.erb b/vagrant/provision/cookbooks/apache2/templates/default/default-site.erb new file mode 100755 index 0000000..a65ab53 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/default-site.erb @@ -0,0 +1,57 @@ + + ServerAdmin <%= node['apache']['contact'] %> + + DocumentRoot <%= node['apache']['docroot_dir'] %>/ + + Options FollowSymLinks + AllowOverride None + + /> + Options Indexes FollowSymLinks MultiViews + AllowOverride None + Order allow,deny + allow from all + # This directive allows us to have apache2's default start page + # in /apache2-default/, but still have / go to the right place + #RedirectMatch ^/$ /apache2-default/ + + + ScriptAlias /cgi-bin/ <%= node['apache']['cgibin_dir'] %>/ + "> + AllowOverride None + Options ExecCGI -MultiViews +SymLinksIfOwnerMatch + Order allow,deny + Allow from all + + + ErrorLog <%= node['apache']['log_dir'] %>/<%= node['apache']['error_log'] %> + + # Possible values include: debug, info, notice, warn, error, crit, + # alert, emerg. + LogLevel warn + + CustomLog <%= node['apache']['log_dir'] %>/<%= node['apache']['access_log'] %> combined + ServerSignature On + + Alias /doc/ "/usr/share/doc/" + + Options Indexes MultiViews FollowSymLinks + AllowOverride None + Order deny,allow + Deny from all + Allow from 127.0.0.0/255.0.0.0 ::1/128 + + + <% if %w{ rhel fedora }.include?(node['platform_family']) -%> + # + # This configuration file enables the default "Welcome" + # page if there is no default index page present for + # the root URL. To disable the Welcome page, comment + # out all the lines below. + # + + Options -Indexes + ErrorDocument 403 /error/noindex.html + + <% end -%> + diff --git a/vagrant/provision/cookbooks/apache2/templates/default/etc-sysconfig-httpd.erb b/vagrant/provision/cookbooks/apache2/templates/default/etc-sysconfig-httpd.erb new file mode 100755 index 0000000..dd1c2a7 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/etc-sysconfig-httpd.erb @@ -0,0 +1,31 @@ +# This file managed by Chef. Changes will be overwritten. + +# +# The default processing model (MPM) is the process-based +# 'prefork' model. A thread-based model, 'worker', is also +# available, but does not work with some modules (such as PHP). +# The service must be stopped before changing this variable. +# +HTTPD=<%= node['apache']['binary'] %> + +# +# To pass additional options (for instance, -D definitions) to the +# httpd binary at startup, set OPTIONS here. +# +#OPTIONS= + +# +# By default, the httpd process is started in the C locale; to +# change the locale in which the server runs, the HTTPD_LANG +# variable can be set. +# +#HTTPD_LANG=C + +# +# By default, the httpd process will create the file +# /var/run/httpd/httpd.pid in which it records its process +# identification number when it starts. If an alternate location is +# specified in httpd.conf (via the PidFile directive), the new +# location needs to be reported in the PIDFILE. +# +#PIDFILE=<%= node['apache']['pid_file'] %> diff --git a/vagrant/provision/cookbooks/apache2/templates/default/mods/README b/vagrant/provision/cookbooks/apache2/templates/default/mods/README new file mode 100755 index 0000000..df9f0bc --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/mods/README @@ -0,0 +1,2 @@ +These configs are taken from a Debian apache2.2-common 2.2.11-3 install. They +work on CentOS 5.3 with a few conditions using erb. diff --git a/vagrant/provision/cookbooks/apache2/templates/default/mods/alias.conf.erb b/vagrant/provision/cookbooks/apache2/templates/default/mods/alias.conf.erb new file mode 100755 index 0000000..5ab139e --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/mods/alias.conf.erb @@ -0,0 +1,24 @@ + +# +# Aliases: Add here as many aliases as you need (with no limit). The format is +# Alias fakename realname +# +# Note that if you include a trailing / on fakename then the server will +# require it to be present in the URL. So "/icons" isn't aliased in this +# example, only "/icons/". If the fakename is slash-terminated, then the +# realname must also be slash terminated, and if the fakename omits the +# trailing slash, the realname must also omit it. +# +# We include the /icons/ alias for FancyIndexed directory listings. If +# you do not use FancyIndexing, you may comment this out. +# +Alias /icons/ "<%= node['apache']['icondir'] %>/" + +"> + Options Indexes MultiViews + AllowOverride None + Order allow,deny + Allow from all + + + diff --git a/vagrant/provision/cookbooks/apache2/templates/default/mods/auth_cas.conf.erb b/vagrant/provision/cookbooks/apache2/templates/default/mods/auth_cas.conf.erb new file mode 100755 index 0000000..80efafe --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/mods/auth_cas.conf.erb @@ -0,0 +1 @@ +CASCookiePath <%= node['apache']['cache_dir'] %>/mod_auth_cas/ \ No newline at end of file diff --git a/vagrant/provision/cookbooks/apache2/templates/default/mods/auth_cas.load.erb b/vagrant/provision/cookbooks/apache2/templates/default/mods/auth_cas.load.erb new file mode 100755 index 0000000..0e3a002 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/mods/auth_cas.load.erb @@ -0,0 +1 @@ +LoadModule auth_cas_module <%= node['apache']['libexecdir'] %>/mod_auth_cas.so diff --git a/vagrant/provision/cookbooks/apache2/templates/default/mods/authopenid.load.erb b/vagrant/provision/cookbooks/apache2/templates/default/mods/authopenid.load.erb new file mode 100755 index 0000000..d226ecf --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/mods/authopenid.load.erb @@ -0,0 +1 @@ +LoadModule authopenid_module <%= node['apache']['libexecdir'] %>/mod_auth_openid.so diff --git a/vagrant/provision/cookbooks/apache2/templates/default/mods/autoindex.conf.erb b/vagrant/provision/cookbooks/apache2/templates/default/mods/autoindex.conf.erb new file mode 100755 index 0000000..3839093 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/mods/autoindex.conf.erb @@ -0,0 +1,101 @@ + +# +# Directives controlling the display of server-generated directory listings. +# + +# +# IndexOptions: Controls the appearance of server-generated directory +# listings. +# Remove/replace the "Charset=UTF-8" if you don't use UTF-8 for your filenames. +# +IndexOptions FancyIndexing VersionSort HTMLTable NameWidth=* DescriptionWidth=* Charset=UTF-8 + +# +# AddIcon* directives tell the server which icon to show for different +# files or filename extensions. These are only displayed for +# FancyIndexed directories. +# +AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip x-bzip2 + +AddIconByType (TXT,/icons/text.gif) text/* +AddIconByType (IMG,/icons/image2.gif) image/* +AddIconByType (SND,/icons/sound2.gif) audio/* +AddIconByType (VID,/icons/movie.gif) video/* + +AddIcon /icons/binary.gif .bin .exe +AddIcon /icons/binhex.gif .hqx +AddIcon /icons/tar.gif .tar +AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv +AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip +AddIcon /icons/a.gif .ps .ai .eps +AddIcon /icons/layout.gif .html .shtml .htm .pdf +AddIcon /icons/text.gif .txt +AddIcon /icons/c.gif .c +AddIcon /icons/p.gif .pl .py +AddIcon /icons/f.gif .for +AddIcon /icons/dvi.gif .dvi +AddIcon /icons/uuencoded.gif .uu +AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl +AddIcon /icons/tex.gif .tex +# It's a suffix rule, so simply matching "core" matches "score" as well ! +AddIcon /icons/bomb.gif /core +AddIcon (SND,/icons/sound2.gif) .ogg +AddIcon (VID,/icons/movie.gif) .ogm + +AddIcon /icons/back.gif .. +AddIcon /icons/hand.right.gif README +AddIcon /icons/folder.gif ^^DIRECTORY^^ +AddIcon /icons/blank.gif ^^BLANKICON^^ + +# Default icons for OpenDocument format +AddIcon /icons/odf6odt-20x22.png .odt +AddIcon /icons/odf6ods-20x22.png .ods +AddIcon /icons/odf6odp-20x22.png .odp +AddIcon /icons/odf6odg-20x22.png .odg +AddIcon /icons/odf6odc-20x22.png .odc +AddIcon /icons/odf6odf-20x22.png .odf +AddIcon /icons/odf6odb-20x22.png .odb +AddIcon /icons/odf6odi-20x22.png .odi +AddIcon /icons/odf6odm-20x22.png .odm + +AddIcon /icons/odf6ott-20x22.png .ott +AddIcon /icons/odf6ots-20x22.png .ots +AddIcon /icons/odf6otp-20x22.png .otp +AddIcon /icons/odf6otg-20x22.png .otg +AddIcon /icons/odf6otc-20x22.png .otc +AddIcon /icons/odf6otf-20x22.png .otf +AddIcon /icons/odf6oti-20x22.png .oti +AddIcon /icons/odf6oth-20x22.png .oth + +# +# DefaultIcon is which icon to show for files which do not have an icon +# explicitly set. +# +DefaultIcon /icons/unknown.gif + +# +# AddDescription allows you to place a short description after a file in +# server-generated indexes. These are only displayed for FancyIndexed +# directories. +# Format: AddDescription "description" filename +# +#AddDescription "GZIP compressed document" .gz +#AddDescription "tar archive" .tar +#AddDescription "GZIP compressed tar archive" .tgz + +# +# ReadmeName is the name of the README file the server will look for by +# default, and append to directory listings. +# +# HeaderName is the name of a file which should be prepended to +# directory indexes. +ReadmeName README.html +HeaderName HEADER.html + +# +# IndexIgnore is a set of filenames which directory indexing should ignore +# and not include in the listing. Shell-style wildcarding is permitted. +# +IndexIgnore .??* *~ *# RCS CVS *,v *,t + + diff --git a/vagrant/provision/cookbooks/apache2/templates/default/mods/deflate.conf.erb b/vagrant/provision/cookbooks/apache2/templates/default/mods/deflate.conf.erb new file mode 100755 index 0000000..2e41975 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/mods/deflate.conf.erb @@ -0,0 +1,16 @@ + + AddOutputFilterByType DEFLATE text/html + AddOutputFilterByType DEFLATE text/css + AddOutputFilterByType DEFLATE text/plain + AddOutputFilterByType DEFLATE text/xml + AddOutputFilterByType DEFLATE application/xhtml+xml + AddOutputFilterByType DEFLATE application/xml + AddOutputFilterByType DEFLATE image/svg+xml + AddOutputFilterByType DEFLATE application/rss+xml + AddOutputFilterByType DEFLATE application/atom_xml + AddOutputFilterByType DEFLATE application/javascript + AddOutputFilterByType DEFLATE application/x-javascript + AddOutputFilterByType DEFLATE application/x-httpd-php + AddOutputFilterByType DEFLATE application/x-httpd-fastphp + AddOutputFilterByType DEFLATE application/x-httpd-eruby + diff --git a/vagrant/provision/cookbooks/apache2/templates/default/mods/dir.conf.erb b/vagrant/provision/cookbooks/apache2/templates/default/mods/dir.conf.erb new file mode 100755 index 0000000..e16fcb3 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/mods/dir.conf.erb @@ -0,0 +1,5 @@ + + + DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm + + diff --git a/vagrant/provision/cookbooks/apache2/templates/default/mods/fastcgi.conf.erb b/vagrant/provision/cookbooks/apache2/templates/default/mods/fastcgi.conf.erb new file mode 100755 index 0000000..a252609 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/mods/fastcgi.conf.erb @@ -0,0 +1,5 @@ + + AddHandler fastcgi-script .fcgi + #FastCgiWrapper /usr/lib/apache2/suexec + FastCgiIpcDir /var/lib/apache2/fastcgi + diff --git a/vagrant/provision/cookbooks/apache2/templates/default/mods/fcgid.conf.erb b/vagrant/provision/cookbooks/apache2/templates/default/mods/fcgid.conf.erb new file mode 100755 index 0000000..b314292 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/mods/fcgid.conf.erb @@ -0,0 +1,10 @@ + + AddHandler fcgid-script .fcgi + IPCConnectTimeout 20 + + +<% if %w{ rhel fedora }.include?(node['platform_family']) -%> +# Sane place to put sockets and shared memory file +SocketPath run/mod_fcgid +SharememPath run/mod_fcgid/fcgid_shm +<% end -%> diff --git a/vagrant/provision/cookbooks/apache2/templates/default/mods/include.conf.erb b/vagrant/provision/cookbooks/apache2/templates/default/mods/include.conf.erb new file mode 100755 index 0000000..46f5547 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/mods/include.conf.erb @@ -0,0 +1,4 @@ + + AddType text/html .shtml + AddOutputFilter INCLUDES .shtml + \ No newline at end of file diff --git a/vagrant/provision/cookbooks/apache2/templates/default/mods/include.erb b/vagrant/provision/cookbooks/apache2/templates/default/mods/include.erb new file mode 100755 index 0000000..d5fbbed --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/mods/include.erb @@ -0,0 +1,4 @@ + + AddType text/html .shtml + AddOutputFilter INCLUDES .shtml + \ No newline at end of file diff --git a/vagrant/provision/cookbooks/apache2/templates/default/mods/mime.conf.erb b/vagrant/provision/cookbooks/apache2/templates/default/mods/mime.conf.erb new file mode 100755 index 0000000..3f21225 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/mods/mime.conf.erb @@ -0,0 +1,198 @@ + + +# +# TypesConfig points to the file containing the list of mappings from +# filename extension to MIME-type. +# +<% case node['platform_family'] -%> +<% when "arch" -%> +TypesConfig <%= node['apache']['dir'] %>/conf/mime.types +<% when "freebsd" -%> +TypesConfig <%= node['apache']['dir'] %>/mime.types +<% else -%> +TypesConfig /etc/mime.types +<% end -%> + +# +# AddType allows you to add to or override the MIME configuration +# file mime.types for specific file types. +# +#AddType application/x-gzip .tgz +# +# AddEncoding allows you to have certain browsers uncompress +# information on the fly. Note: Not all browsers support this. +# Despite the name similarity, the following Add* directives have +# nothing to do with the FancyIndexing customization directives above. +# +#AddEncoding x-compress .Z +#AddEncoding x-gzip .gz .tgz +#AddEncoding x-bzip2 .bz2 +# +# If the AddEncoding directives above are commented-out, then you +# probably should define those extensions to indicate media types: +# +AddType application/x-compress .Z +AddType application/x-gzip .gz .tgz +AddType application/x-bzip2 .bz2 + +# +# DefaultLanguage and AddLanguage allows you to specify the language of +# a document. You can then use content negotiation to give a browser a +# file in a language the user can understand. +# +# Specify a default language. This means that all data +# going out without a specific language tag (see below) will +# be marked with this one. You probably do NOT want to set +# this unless you are sure it is correct for all cases. +# +# * It is generally better to not mark a page as +# * being a certain language than marking it with the wrong +# * language! +# +# DefaultLanguage nl +# +# Note 1: The suffix does not have to be the same as the language +# keyword --- those with documents in Polish (whose net-standard +# language code is pl) may wish to use "AddLanguage pl .po" to +# avoid the ambiguity with the common suffix for perl scripts. +# +# Note 2: The example entries below illustrate that in some cases +# the two character 'Language' abbreviation is not identical to +# the two character 'Country' code for its country, +# E.g. 'Danmark/dk' versus 'Danish/da'. +# +# Note 3: In the case of 'ltz' we violate the RFC by using a three char +# specifier. There is 'work in progress' to fix this and get +# the reference data for rfc1766 cleaned up. +# +# Catalan (ca) - Croatian (hr) - Czech (cs) - Danish (da) - Dutch (nl) +# English (en) - Esperanto (eo) - Estonian (et) - French (fr) - German (de) +# Greek-Modern (el) - Hebrew (he) - Italian (it) - Japanese (ja) +# Korean (ko) - Luxembourgeois* (ltz) - Norwegian Nynorsk (nn) +# Norwegian (no) - Polish (pl) - Portugese (pt) +# Brazilian Portuguese (pt-BR) - Russian (ru) - Swedish (sv) +# Simplified Chinese (zh-CN) - Spanish (es) - Traditional Chinese (zh-TW) +# +AddLanguage ca .ca +AddLanguage cs .cz .cs +AddLanguage da .dk +AddLanguage de .de +AddLanguage el .el +AddLanguage en .en +AddLanguage eo .eo +# See README.Debian for Spanish +AddLanguage es .es +AddLanguage et .et +AddLanguage fr .fr +AddLanguage he .he +AddLanguage hr .hr +AddLanguage it .it +AddLanguage ja .ja +AddLanguage ko .ko +AddLanguage ltz .ltz +AddLanguage nl .nl +AddLanguage nn .nn +AddLanguage no .no +AddLanguage pl .po +AddLanguage pt .pt +AddLanguage pt-BR .pt-br +AddLanguage ru .ru +AddLanguage sv .sv +# See README.Debian for Turkish +AddLanguage tr .tr +AddLanguage zh-CN .zh-cn +AddLanguage zh-TW .zh-tw + +# +# Commonly used filename extensions to character sets. You probably +# want to avoid clashes with the language extensions, unless you +# are good at carefully testing your setup after each change. +# See http://www.iana.org/assignments/character-sets for the +# official list of charset names and their respective RFCs. +# +AddCharset us-ascii .ascii .us-ascii +AddCharset ISO-8859-1 .iso8859-1 .latin1 +AddCharset ISO-8859-2 .iso8859-2 .latin2 .cen +AddCharset ISO-8859-3 .iso8859-3 .latin3 +AddCharset ISO-8859-4 .iso8859-4 .latin4 +AddCharset ISO-8859-5 .iso8859-5 .cyr .iso-ru +AddCharset ISO-8859-6 .iso8859-6 .arb .arabic +AddCharset ISO-8859-7 .iso8859-7 .grk .greek +AddCharset ISO-8859-8 .iso8859-8 .heb .hebrew +AddCharset ISO-8859-9 .iso8859-9 .latin5 .trk +AddCharset ISO-8859-10 .iso8859-10 .latin6 +AddCharset ISO-8859-13 .iso8859-13 +AddCharset ISO-8859-14 .iso8859-14 .latin8 +AddCharset ISO-8859-15 .iso8859-15 .latin9 +AddCharset ISO-8859-16 .iso8859-16 .latin10 +AddCharset ISO-2022-JP .iso2022-jp .jis +AddCharset ISO-2022-KR .iso2022-kr .kis +AddCharset ISO-2022-CN .iso2022-cn .cis +AddCharset Big5 .Big5 .big5 .b5 +AddCharset cn-Big5 .cn-big5 +# For russian, more than one charset is used (depends on client, mostly): +AddCharset WINDOWS-1251 .cp-1251 .win-1251 +AddCharset CP866 .cp866 +AddCharset KOI8 .koi8 +AddCharset KOI8-E .koi8-e +AddCharset KOI8-r .koi8-r .koi8-ru +AddCharset KOI8-U .koi8-u +AddCharset KOI8-ru .koi8-uk .ua +AddCharset ISO-10646-UCS-2 .ucs2 +AddCharset ISO-10646-UCS-4 .ucs4 +AddCharset UTF-7 .utf7 +AddCharset UTF-8 .utf8 +AddCharset UTF-16 .utf16 +AddCharset UTF-16BE .utf16be +AddCharset UTF-16LE .utf16le +AddCharset UTF-32 .utf32 +AddCharset UTF-32BE .utf32be +AddCharset UTF-32LE .utf32le +AddCharset euc-cn .euc-cn +AddCharset euc-gb .euc-gb +AddCharset euc-jp .euc-jp +AddCharset euc-kr .euc-kr +#Not sure how euc-tw got in - IANA doesn't list it??? +AddCharset EUC-TW .euc-tw +AddCharset gb2312 .gb2312 .gb +AddCharset iso-10646-ucs-2 .ucs-2 .iso-10646-ucs-2 +AddCharset iso-10646-ucs-4 .ucs-4 .iso-10646-ucs-4 +AddCharset shift_jis .shift_jis .sjis + +# +# AddHandler allows you to map certain file extensions to "handlers": +# actions unrelated to filetype. These can be either built into the server +# or added with the Action directive (see below) +# +# To use CGI scripts outside of ScriptAliased directories: +# (You will also need to add "ExecCGI" to the "Options" directive.) +# +#AddHandler cgi-script .cgi + +# +# For files that include their own HTTP headers: +# +#AddHandler send-as-is asis + +# +# For server-parsed imagemap files: +# +#AddHandler imap-file map + +# +# For type maps (negotiated resources): +# (This is enabled by default to allow the Apache "It Worked" page +# to be distributed in multiple languages.) +# +AddHandler type-map var + +# +# Filters allow you to process content before it is sent to the client. +# +# To parse .shtml files for server-side includes (SSI): +# (You will also need to add "Includes" to the "Options" directive.) +# +AddType text/html .shtml +AddOutputFilter INCLUDES .shtml + + diff --git a/vagrant/provision/cookbooks/apache2/templates/default/mods/negotiation.conf.erb b/vagrant/provision/cookbooks/apache2/templates/default/mods/negotiation.conf.erb new file mode 100755 index 0000000..0e3455b --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/mods/negotiation.conf.erb @@ -0,0 +1,18 @@ + +# +# LanguagePriority allows you to give precedence to some languages +# in case of a tie during content negotiation. +# +# Just list the languages in decreasing order of preference. We have +# more or less alphabetized them here. You probably want to change this. +# +LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv tr zh-CN zh-TW + +# +# ForceLanguagePriority allows you to serve a result page rather than +# MULTIPLE CHOICES (Prefer) [in case of a tie] or NOT ACCEPTABLE (Fallback) +# [in case no accepted languages matched the available variants] +# +ForceLanguagePriority Prefer Fallback + + diff --git a/vagrant/provision/cookbooks/apache2/templates/default/mods/php5.conf.erb b/vagrant/provision/cookbooks/apache2/templates/default/mods/php5.conf.erb new file mode 100755 index 0000000..5d2f911 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/mods/php5.conf.erb @@ -0,0 +1,16 @@ + + + SetHandler application/x-httpd-php + + + SetHandler application/x-httpd-php-source + + # To re-enable php in user directories comment the following lines + # (from to .) Do NOT set it to On as it + # prevents .htaccess files from disabling it. + + + php_admin_value engine Off + + + diff --git a/vagrant/provision/cookbooks/apache2/templates/default/mods/proxy.conf.erb b/vagrant/provision/cookbooks/apache2/templates/default/mods/proxy.conf.erb new file mode 100755 index 0000000..46407a1 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/mods/proxy.conf.erb @@ -0,0 +1,19 @@ + + #turning ProxyRequests on and allowing proxying from all may allow + #spammers to use your proxy to send email. + + ProxyRequests Off + + + AddDefaultCharset off + Order deny,allow + Deny from all + #Allow from .example.com + + + # Enable/disable the handling of HTTP/1.1 "Via:" headers. + # ("Full" adds the server version; "Block" removes all outgoing Via: headers) + # Set to one of: Off | On | Full | Block + + ProxyVia On + diff --git a/vagrant/provision/cookbooks/apache2/templates/default/mods/setenvif.conf.erb b/vagrant/provision/cookbooks/apache2/templates/default/mods/setenvif.conf.erb new file mode 100755 index 0000000..6b7d6e2 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/mods/setenvif.conf.erb @@ -0,0 +1,28 @@ + + +# +# The following directives modify normal HTTP response behavior to +# handle known problems with browser implementations. +# +BrowserMatch "Mozilla/2" nokeepalive +BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0 +BrowserMatch "RealPlayer 4\.0" force-response-1.0 +BrowserMatch "Java/1\.0" force-response-1.0 +BrowserMatch "JDK/1\.0" force-response-1.0 + +# +# The following directive disables redirects on non-GET requests for +# a directory that does not include the trailing slash. This fixes a +# problem with Microsoft WebFolders which does not appropriately handle +# redirects for folders with DAV methods. +# Same deal with Apple's DAV filesystem and Gnome VFS support for DAV. +# +BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully +BrowserMatch "MS FrontPage" redirect-carefully +BrowserMatch "^WebDrive" redirect-carefully +BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully +BrowserMatch "^gnome-vfs/1.0" redirect-carefully +BrowserMatch "^XML Spy" redirect-carefully +BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully + + diff --git a/vagrant/provision/cookbooks/apache2/templates/default/mods/ssl.conf.erb b/vagrant/provision/cookbooks/apache2/templates/default/mods/ssl.conf.erb new file mode 100755 index 0000000..2582f30 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/mods/ssl.conf.erb @@ -0,0 +1,77 @@ + +# +# Pseudo Random Number Generator (PRNG): +# Configure one or more sources to seed the PRNG of the SSL library. +# The seed data should be of good random quality. +# WARNING! On some platforms /dev/random blocks if not enough entropy +# is available. This means you then cannot use the /dev/random device +# because it would lead to very long connection times (as long as +# it requires to make more entropy available). But usually those +# platforms additionally provide a /dev/urandom device which doesn't +# block. So, if available, use this one instead. Read the mod_ssl User +# Manual for more details. +# +SSLRandomSeed startup builtin +SSLRandomSeed startup file:/dev/urandom 512 +SSLRandomSeed connect builtin +SSLRandomSeed connect file:/dev/urandom 512 + +## +## SSL Global Context +## +## All SSL configuration in this context applies both to +## the main server and all SSL-enabled virtual hosts. +## + +# +# Some MIME-types for downloading Certificates and CRLs +# +AddType application/x-x509-ca-cert .crt +AddType application/x-pkcs7-crl .crl + +# Pass Phrase Dialog: +# Configure the pass phrase gathering process. +# The filtering dialog program (`builtin' is a internal +# terminal dialog) has to provide the pass phrase on stdout. +SSLPassPhraseDialog builtin + +# Inter-Process Session Cache: +# Configure the SSL Session Cache: First the mechanism +# to use and second the expiring timeout (in seconds). +#SSLSessionCache dbm:/var/run/apache2/ssl_scache +<% if %w{ rhel fedora suse }.include?(node['platform_family']) -%> +SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000) +<% elsif %w{ freebsd }.include?(node['platform_family']) -%> +SSLSessionCache shmcb:/var/run/ssl_scache(512000) +<% else -%> +SSLSessionCache shmcb:/var/run/apache2/ssl_scache +<% end -%> +SSLSessionCacheTimeout 300 + +# Semaphore: +# Configure the path to the mutual exclusion semaphore the +# SSL engine uses internally for inter-process synchronization. +<% if %w{ rhel fedora suse }.include?(node['platform_family']) -%> +SSLMutex default +<% elsif %w{ freebsd }.include?(node['platform_family']) -%> +SSLMutex file:/var/run/ssl_mutex +<% else -%> +SSLMutex file:/var/run/apache2/ssl_mutex +<% end -%> + +SSLHonorCipherOrder On +# SSL Cipher Suite: +# List the ciphers that the client is permitted to negotiate. +# See the mod_ssl documentation for a complete list. +# enable only secure ciphers: +SSLCipherSuite <%= node['apache']['mod_ssl']['cipher_suite'] %> +# Use this instead if you want to allow cipher upgrades via SGC facility. +# In this case you also have to use something like +# SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 128 +# see http://httpd.apache.org/docs/2.2/ssl/ssl_howto.html.en#upgradeenc +#SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL + +# enable only secure protocols: SSLv3 and TLSv1, but not SSLv2 +SSLProtocol all -SSLv2 + + diff --git a/vagrant/provision/cookbooks/apache2/templates/default/mods/status.conf.erb b/vagrant/provision/cookbooks/apache2/templates/default/mods/status.conf.erb new file mode 100755 index 0000000..8bafc52 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/mods/status.conf.erb @@ -0,0 +1,26 @@ + +# +# Allow server status reports generated by mod_status, +# with the URL of http://servername/server-status +# Uncomment and change the ".example.com" to allow +# access from other hosts. +# + + SetHandler server-status + Order deny,allow + Deny from all + Allow from <%=node['apache']['status_allow_list']%> +# Allow from .example.com + +# +# ExtendedStatus controls whether Apache will generate "full" status +# information (ExtendedStatus On) or just basic information (ExtendedStatus +# Off) when the "server-status" handler is called. The default is Off. +# +<% if node['apache']['ext_status'] %> +ExtendedStatus On +<% else -%> +ExtendedStatus Off +<% end -%> +# + diff --git a/vagrant/provision/cookbooks/apache2/templates/default/port_apache.erb b/vagrant/provision/cookbooks/apache2/templates/default/port_apache.erb new file mode 100755 index 0000000..45aa56e --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/port_apache.erb @@ -0,0 +1,3 @@ +<% node['apache']['listen_ports'].each do |port| -%> +-A FWR -p tcp -m tcp --dport <%= port %> -j ACCEPT +<% end %> \ No newline at end of file diff --git a/vagrant/provision/cookbooks/apache2/templates/default/ports.conf.erb b/vagrant/provision/cookbooks/apache2/templates/default/ports.conf.erb new file mode 100755 index 0000000..cc3631e --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/ports.conf.erb @@ -0,0 +1,6 @@ +#This file generated via template by Chef. +<% @apache_listen_ports.each do |port| -%> +Listen <%= port %> +NameVirtualHost *:<%= port %> + +<% end -%> diff --git a/vagrant/provision/cookbooks/apache2/templates/default/security.erb b/vagrant/provision/cookbooks/apache2/templates/default/security.erb new file mode 100755 index 0000000..d40dbb4 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/security.erb @@ -0,0 +1,50 @@ +# +# Disable access to the entire file system except for the directories that +# are explicitly allowed later. +# +# This currently breaks the configurations that come with some web application +# Debian packages. It will be made the default for the release after lenny. +# +# +# AllowOverride None +# Order Deny,Allow +# Deny from all +# + + +# Changing the following options will not really affect the security of the +# server, but might make attacks slightly more difficult in some cases. + +# +# ServerTokens +# This directive configures what you return as the Server HTTP response +# Header. The default is 'Full' which sends information about the OS-Type +# and compiled in modules. +# Set to one of: Full | OS | Minimal | Minor | Major | Prod +# where Full conveys the most information, and Prod the least. +# +#ServerTokens Minimal +ServerTokens <%= node['apache']['servertokens'] %> + +# +# Optionally add a line containing the server version and virtual host +# name to server-generated pages (internal error documents, FTP directory +# listings, mod_status and mod_info output etc., but not CGI generated +# documents or custom error documents). +# Set to "EMail" to also include a mailto: link to the ServerAdmin. +# Set to one of: On | Off | EMail +# +#ServerSignature Off +ServerSignature <%= node['apache']['serversignature'] %> + +# +# Allow TRACE method +# +# Set to "extended" to also reflect the request body (only for testing and +# diagnostic purposes). +# +# Set to one of: On | Off | extended +# +#TraceEnable Off +TraceEnable <%= node['apache']['traceenable'] %> + diff --git a/vagrant/provision/cookbooks/apache2/templates/default/web_app.conf.erb b/vagrant/provision/cookbooks/apache2/templates/default/web_app.conf.erb new file mode 100755 index 0000000..c5d9f95 --- /dev/null +++ b/vagrant/provision/cookbooks/apache2/templates/default/web_app.conf.erb @@ -0,0 +1,47 @@ + + ServerName <%= @params[:server_name] %> + ServerAlias <% @params[:server_aliases].each do |a| %><%= a %> <% end %> + DocumentRoot <%= @params[:docroot] %> + RewriteEngine On + + > + Options <%= [@params[:directory_options] || "FollowSymLinks" ].flatten.join " " %> + AllowOverride <%= [@params[:allow_override] || "None" ].flatten.join " " %> + Order allow,deny + Allow from all + + + + Options FollowSymLinks + AllowOverride None + + + + SetHandler server-status + + Order Deny,Allow + Deny from all + Allow from 127.0.0.1 + + + LogLevel info + ErrorLog <%= node['apache']['log_dir'] %>/<%= @params[:name] %>-error.log + CustomLog <%= node['apache']['log_dir'] %>/<%= @params[:name] %>-access.log combined + + <% if @params[:directory_index] -%> + DirectoryIndex <%= [@params[:directory_index]].flatten.join " " %> + <% end -%> + + RewriteEngine On + RewriteLog <%= node['apache']['log_dir'] %>/<%= @application_name %>-rewrite.log + RewriteLogLevel 0 + + # Canonical host, <%= @params[:server_name] %> + RewriteCond %{HTTP_HOST} !^<%= @params[:server_name] %> [NC] + RewriteCond %{HTTP_HOST} !^$ + RewriteRule ^/(.*)$ http://<%= @params[:server_name] %>/$1 [L,R=301] + + RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f + RewriteCond %{SCRIPT_FILENAME} !maintenance.html + RewriteRule ^.*$ /system/maintenance.html [L] + diff --git a/vagrant/provision/cookbooks/build-essential/CHANGELOG.md b/vagrant/provision/cookbooks/build-essential/CHANGELOG.md new file mode 100755 index 0000000..966a596 --- /dev/null +++ b/vagrant/provision/cookbooks/build-essential/CHANGELOG.md @@ -0,0 +1,54 @@ +build-essential Cookbook CHANGELOG +================================== +This file is used to list changes made in each version of the build-essential cookbook. + +v1.4.2 +------ +### Bug +- **[COOK-3318](https://tickets.opscode.com/browse/COOK-3318)** - Use Mixlib::ShellOut instead of Chef::ShellOut + +### New Feature +- **[COOK-3093](https://tickets.opscode.com/browse/COOK-3093)** - Add OmniOS support + +### Improvement +- **[COOK-3024](https://tickets.opscode.com/browse/COOK-3024)** - Use newer package on SmartOS + +v1.4.0 +------ +This version splits up the default recipe into recipes included based on the node's platform_family. + +- [COOK-2505] - backport omnibus builder improvements + +v1.3.4 +------ +- [COOK-2272] - Complete `platform_family` conversion in build-essential + +v1.3.2 +------ +- [COOK-2069] - build-essential will install osx-gcc-installer when XCode is present + +v1.3.0 +------ +- [COOK-1895] - support smartos + +v1.2.0 +------ +- Add test-kitchen support (source repo only) +- [COOK-1677] - build-essential cookbook support for OpenSuse and SLES +- [COOK-1718] - build-essential cookbook metadata should include scientific +- [COOK-1768] - The apt-get update in build-essentials needs to be renamed + +v1.1.2 +------ +- [COOK-1620] - support OS X 10.8 + +v1.1.0 +------ +- [COOK-1098] - support amazon linux +- [COOK-1149] - support Mac OS X +- [COOK-1296] - allow for compile-time installation of packages through an attribute (see README) + +v1.0.2 +------ +- [COOK-1098] - Add Amazon Linux platform support +- [COOK-1149] - Add OS X platform support diff --git a/vagrant/provision/cookbooks/build-essential/README.md b/vagrant/provision/cookbooks/build-essential/README.md new file mode 100755 index 0000000..95a3acb --- /dev/null +++ b/vagrant/provision/cookbooks/build-essential/README.md @@ -0,0 +1,147 @@ +Description +=========== + +Installs packages required for compiling C software from source. Use +this cookbook if you wish to compile C programs, or install RubyGems +with native extensions. + +Requirements +============ + +Chef version 0.10.10+ and Ohai 0.6.12+ are required. + +## Platform + +Supported platforms by platform family: + +* debian (debian, ubuntu) +* fedora +* mac_os_x (10.6+) +* rhel (centos, redhat, amazon, scientific) +* smartos +* solaris2 +* omnios + +**Note for OmniOS**: Currently, OmniOS's Ruby package is built with +GCC 4.6.3, and the path is hardcoded, as the gcc binaries are not +installed in the default $PATH. This means that in order to install +RubyGems into the "system" Ruby, one must install `developer/gcc46`. +[An issue](https://github.com/omniti-labs/omnios-build/issues/19) is +open upstream w/ OmniOS to rebuild the Ruby package with GCC 4.7.2. + +## Cookbooks + +This cookbook suggests the following external cookbooks: + +* [pkgin](http://community.opscode.com/cookbooks/pkgin) (someara) - SmartOS only +* [pkgutil](http://community.opscode.com/cookbooks/pkgutil) (marthag) - Solaris 2 only + +Attributes +========== + +* `node['build_essential']['compiletime']` - Whether the resources in +the default recipe should be configured at the "Compile" phase of the +Chef run. Defaults to false, see __Usage__ for more information. +* `node['build_essential']['osx']['gcc_installer_url']` - The URL of + the OS X GCC package installer (.pkg). +* `node['build_essential']['osx']['gcc_installer_checksum']` - The + SHA256 checksum of the OS X GCC installer. + +Recipes +======= + +The main entrypoint for this cookbook is the `default` recipe. This +recipe includes a platform specific recipe based on the node's platform +family. + +On Linux platforms (see __Platform__ above for a supported list of +families), packages required to build C source projects are installed. +This includes GCC, make, autconf and others. On Debian-family +distributions, the apt-cache may need to be updated, especially during +compile time installation. See __Usage__ for further information. + +On Mac OS X, the GCC standalone installer by Kenneth Reitz is +installed. Note that this is *not* the Xcode CLI package, as that does +not include all programs and headers required to build some common +GNU-style C projects, such as those that are available from projects +such as MacPorts or Homebrew. Changing the attributes for the GCC +installer URL and checksum to the Xcode values may work, but this is +untested. + +Usage +===== + +Simply include the `build-essential` and the required tools will be +installed to the system, and later recipes will be able to compile +software from C source code. + +For RubyGems that include native C extensions you wish to use with +Chef, you should do two things. + +0. Ensure that the C libraries, include files and other assorted "dev" +type packages are installed. You should do this in the compile phase +after the build-essential recipe. +1. Use the `chef_gem` resource in your recipes. This requires Chef version 0.10.10+. +2. Set the `compiletime` attribute in roles where such recipes are +required. This will ensure that the build tools are available to +compile the RubyGems' extensions, as `chef_gem` happens during the +compile phase, too. + +Example installation of a devel package at compile-time in a recipe: + + package "mypackage-dev" do + action :nothing + end.run_action(:install) + +Example use of `chef_gem`: + + chef_gem "mygem" + +Example role: + + name "myapp" + run_list( + "recipe[build-essential]", + "recipe[myapp]" + ) + default_attributes( + "build_essential" => { + "compiletime" => true + } + ) + +The compile time option (via the attribute) is to ensure that the +proper packages are available at the right time in the Chef run. It is +recommended that the build-essential recipe appear early in the run +list. + +The Chef wiki has documentation on +[the anatomy of a chef run](http://wiki.opscode.com/display/chef/Anatomy+of+a+Chef+Run). + +Limitations +=========== + +It is not in the scope of this cookbook to handle installing the +required headers for individual software projects in order to compile +them, or to compile RubyGems with native C extensions. You should +create a cookbook for handling that. + +License and Author +================== + +Author:: Joshua Timberman () +Author:: Seth Chisamore () + +Copyright 2009-2011, Opscode, Inc. () + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/vagrant/provision/cookbooks/build-essential/attributes/default.rb b/vagrant/provision/cookbooks/build-essential/attributes/default.rb new file mode 100755 index 0000000..f45750f --- /dev/null +++ b/vagrant/provision/cookbooks/build-essential/attributes/default.rb @@ -0,0 +1,33 @@ +# +# Cookbook Name:: build-essential +# Attributes:: default +# +# Copyright 2008-2012, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +default['build_essential']['compiletime'] = false + +case node['platform_family'] +when "mac_os_x" + case + when Chef::VersionConstraint.new("~> 10.7.0").include?(node['platform_version']), + Chef::VersionConstraint.new("~> 10.8.0").include?(node['platform_version']) + default['build_essential']['osx']['gcc_installer_url'] = "https://github.com/downloads/kennethreitz/osx-gcc-installer/GCC-10.7-v2.pkg" + default['build_essential']['osx']['gcc_installer_checksum'] = "df36aa87606feb99d0db9ac9a492819e" + when Chef::VersionConstraint.new("~> 10.6.0").include?(node['platform_version']) + default['build_essential']['osx']['gcc_installer_url'] = "https://github.com/downloads/kennethreitz/osx-gcc-installer/GCC-10.6.pkg" + default['build_essential']['osx']['gcc_installer_checksum'] = "d1db5bab6a3f6b9f3b5577a130baeefa" + end +end diff --git a/vagrant/provision/cookbooks/build-essential/metadata.json b/vagrant/provision/cookbooks/build-essential/metadata.json new file mode 100755 index 0000000..5d2a556 --- /dev/null +++ b/vagrant/provision/cookbooks/build-essential/metadata.json @@ -0,0 +1 @@ +{"name":"build-essential","description":"Installs C compiler / build tools","long_description":"","maintainer":"Opscode, Inc.","maintainer_email":"cookbooks@opscode.com","license":"Apache 2.0","platforms":{"fedora":">= 0.0.0","redhat":">= 0.0.0","centos":">= 0.0.0","ubuntu":">= 0.0.0","debian":">= 0.0.0","amazon":">= 0.0.0","suse":">= 0.0.0","scientific":">= 0.0.0","oracle":">= 0.0.0","smartos":">= 0.0.0","mac_os_x":">= 10.6.0","mac_os_x_server":">= 10.6.0"},"dependencies":{},"recommendations":{},"suggestions":{"pkgutil":">= 0.0.0"},"conflicting":{},"providing":{},"replacing":{},"attributes":{},"groupings":{},"recipes":{"build-essential":"Installs packages required for compiling C software from source."},"version":"1.4.2"} \ No newline at end of file diff --git a/vagrant/provision/cookbooks/build-essential/metadata.rb b/vagrant/provision/cookbooks/build-essential/metadata.rb new file mode 100755 index 0000000..ac1ac4e --- /dev/null +++ b/vagrant/provision/cookbooks/build-essential/metadata.rb @@ -0,0 +1,15 @@ +name "build-essential" +maintainer "Opscode, Inc." +maintainer_email "cookbooks@opscode.com" +license "Apache 2.0" +description "Installs C compiler / build tools" +version "1.4.2" +recipe "build-essential", "Installs packages required for compiling C software from source." + +%w{ fedora redhat centos ubuntu debian amazon suse scientific oracle smartos}.each do |os| + supports os +end + +supports "mac_os_x", ">= 10.6.0" +supports "mac_os_x_server", ">= 10.6.0" +suggests "pkgutil" # Solaris 2 diff --git a/vagrant/provision/cookbooks/build-essential/recipes/debian.rb b/vagrant/provision/cookbooks/build-essential/recipes/debian.rb new file mode 100755 index 0000000..39df6c3 --- /dev/null +++ b/vagrant/provision/cookbooks/build-essential/recipes/debian.rb @@ -0,0 +1,45 @@ +# +# Cookbook Name:: build-essential +# Recipe:: debian +# +# Copyright 2008-2013, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# on apt-based platforms when first provisioning we need to force +# apt-get update at compiletime if we are going to try to install at compiletime +execute "apt-get-update-build-essentials" do + command "apt-get update" + action :nothing + # tip: to suppress this running every time, just use the apt cookbook + not_if do + ::File.exists?('/var/lib/apt/periodic/update-success-stamp') && + ::File.mtime('/var/lib/apt/periodic/update-success-stamp') > Time.now - 86400*2 + end +end.run_action(:run) if node['build_essential']['compiletime'] + +%w{ + autoconf + binutils-doc + bison + build-essential + flex +}.each do |pkg| + + r = package pkg do + action( node['build_essential']['compiletime'] ? :nothing : :install ) + end + r.run_action(:install) if node['build_essential']['compiletime'] + +end diff --git a/vagrant/provision/cookbooks/build-essential/recipes/default.rb b/vagrant/provision/cookbooks/build-essential/recipes/default.rb new file mode 100755 index 0000000..75e8f00 --- /dev/null +++ b/vagrant/provision/cookbooks/build-essential/recipes/default.rb @@ -0,0 +1,24 @@ +# +# Cookbook Name:: build-essential +# Recipe:: default +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +begin + include_recipe "build-essential::#{node['platform_family']}" +rescue Chef::Exceptions::RecipeNotFound + Chef::Log.warn "A build-essential recipe does not exist for the platform_family: #{node['platform_family']}" +end diff --git a/vagrant/provision/cookbooks/build-essential/recipes/fedora.rb b/vagrant/provision/cookbooks/build-essential/recipes/fedora.rb new file mode 100755 index 0000000..88c0d97 --- /dev/null +++ b/vagrant/provision/cookbooks/build-essential/recipes/fedora.rb @@ -0,0 +1,36 @@ +# +# Cookbook Name:: build-essential +# Recipe:: fedora +# +# Copyright 2008-2013, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +%w{ + autoconf + bison + flex + gcc + gcc-c++ + kernel-devel + make + m4 +}.each do |pkg| + + r = package pkg do + action( node['build_essential']['compiletime'] ? :nothing : :install ) + end + r.run_action(:install) if node['build_essential']['compiletime'] + +end diff --git a/vagrant/provision/cookbooks/build-essential/recipes/mac_os_x.rb b/vagrant/provision/cookbooks/build-essential/recipes/mac_os_x.rb new file mode 100755 index 0000000..14c6b1a --- /dev/null +++ b/vagrant/provision/cookbooks/build-essential/recipes/mac_os_x.rb @@ -0,0 +1,39 @@ +# +# Cookbook Name:: build-essential +# Recipe:: mac_os_x +# +# Copyright 2008-2013, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + + +result = Mixlib::ShellOut.new("pkgutil --pkgs").run_command +osx_gcc_installer_installed = result.stdout.split("\n").include?("com.apple.pkg.gcc4.2Leo") +developer_tools_cli_installed = result.stdout.split("\n").include?("com.apple.pkg.DeveloperToolsCLI") +pkg_filename = ::File.basename(node['build_essential']['osx']['gcc_installer_url']) +pkg_path = "#{Chef::Config[:file_cache_path]}/#{pkg_filename}" + +r = remote_file pkg_path do + source node['build_essential']['osx']['gcc_installer_url'] + checksum node['build_essential']['osx']['gcc_installer_checksum'] + action( node['build_essential']['compiletime'] ? :nothing : :create ) + not_if { osx_gcc_installer_installed or developer_tools_cli_installed } +end +r.run_action(:create) if node['build_essential']['compiletime'] + +r = execute "sudo installer -pkg \"#{pkg_path}\" -target /" do + action( node['build_essential']['compiletime'] ? :nothing : :run ) + not_if { osx_gcc_installer_installed or developer_tools_cli_installed } +end +r.run_action(:run) if node['build_essential']['compiletime'] diff --git a/vagrant/provision/cookbooks/build-essential/recipes/omnios.rb b/vagrant/provision/cookbooks/build-essential/recipes/omnios.rb new file mode 100755 index 0000000..e5484a0 --- /dev/null +++ b/vagrant/provision/cookbooks/build-essential/recipes/omnios.rb @@ -0,0 +1,39 @@ +# +# Cookbook Name:: build-essential +# Recipe:: omnios +# +# Copyright 2013, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +%w{ + developer/gcc47 + developer/object-file + developer/linker + developer/library/lint + developer/build/gnu-make + system/header + system/library/math/header-math +}.each do |pkg| + + r = package pkg do + action( node['build_essential']['compiletime'] ? :nothing : :install ) + end + r.run_action(:install) if node['build_essential']['compiletime'] + + # Per OmniOS documentation, the gcc bin dir isn't in the default + # $PATH, so add it to the running process environment + # http://omnios.omniti.com/wiki.php/DevEnv + ENV['PATH'] = "#{ENV['PATH']}:/opt/gcc-4.7.2/bin" +end diff --git a/vagrant/provision/cookbooks/build-essential/recipes/rhel.rb b/vagrant/provision/cookbooks/build-essential/recipes/rhel.rb new file mode 100755 index 0000000..0d1fbac --- /dev/null +++ b/vagrant/provision/cookbooks/build-essential/recipes/rhel.rb @@ -0,0 +1,43 @@ +# +# Cookbook Name:: build-essential +# Recipe:: rhel +# +# Copyright 2008-2013, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +pkgs = %w{ + autoconf + bison + flex + gcc + gcc-c++ + kernel-devel + make + m4 +} + +# ensure GCC 4 is available on older pre-6 EL +if node['platform_version'].to_i < 6 + pkgs.unshift %w{ gcc44 gcc44-c++ } +end + +pkgs.flatten.each do |pkg| + + r = package pkg do + action( node['build_essential']['compiletime'] ? :nothing : :install ) + end + r.run_action(:install) if node['build_essential']['compiletime'] + +end diff --git a/vagrant/provision/cookbooks/build-essential/recipes/smartos.rb b/vagrant/provision/cookbooks/build-essential/recipes/smartos.rb new file mode 100755 index 0000000..a3563eb --- /dev/null +++ b/vagrant/provision/cookbooks/build-essential/recipes/smartos.rb @@ -0,0 +1,29 @@ +# +# Cookbook Name:: build-essential +# Recipe:: smartos +# +# Copyright 2008-2013, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +%w{ + build-essential +}.each do |pkg| + + r = package pkg do + action( node['build_essential']['compiletime'] ? :nothing : :install ) + end + r.run_action(:install) if node['build_essential']['compiletime'] + +end diff --git a/vagrant/provision/cookbooks/build-essential/recipes/solaris2.rb b/vagrant/provision/cookbooks/build-essential/recipes/solaris2.rb new file mode 100755 index 0000000..83e4e5e --- /dev/null +++ b/vagrant/provision/cookbooks/build-essential/recipes/solaris2.rb @@ -0,0 +1,42 @@ +# +# Cookbook Name:: build-essential +# Recipe:: solaris2 +# +# Copyright 2013, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +%w{ + autoconf + automake + bison + coreutils + flex + gcc4core + gcc4g++ + gcc4objc + gcc3core + gcc3g++ + ggrep + gmake + gtar + pkgconfig +}.each do |pkg| + + r = pkgutil_package pkg do + action( node['build_essential']['compiletime'] ? :nothing : :install ) + end + r.run_action(:install) if node['build_essential']['compiletime'] + +end diff --git a/vagrant/provision/cookbooks/build-essential/recipes/suse.rb b/vagrant/provision/cookbooks/build-essential/recipes/suse.rb new file mode 100755 index 0000000..914ccd6 --- /dev/null +++ b/vagrant/provision/cookbooks/build-essential/recipes/suse.rb @@ -0,0 +1,36 @@ +# +# Cookbook Name:: build-essential +# Recipe:: suse +# +# Copyright 2008-2013, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +%w{ + autoconf + bison + flex + gcc + gcc-c++ + kernel-default-devel + make + m4 +}.each do |pkg| + + r = package pkg do + action( node['build_essential']['compiletime'] ? :nothing : :install ) + end + r.run_action(:install) if node['build_essential']['compiletime'] + +end diff --git a/vagrant/provision/cookbooks/mysql/CHANGELOG.md b/vagrant/provision/cookbooks/mysql/CHANGELOG.md new file mode 100755 index 0000000..73aff60 --- /dev/null +++ b/vagrant/provision/cookbooks/mysql/CHANGELOG.md @@ -0,0 +1,155 @@ +mysql Cookbook CHANGELOG +======================== +This file is used to list changes made in each version of the mysql cookbook. + +v3.0.4 +------ +### Bug +- **[COOK-3310](https://tickets.opscode.com/browse/COOK-3310)** - Fix missing `GRANT` option +- **[COOK-3233](https://tickets.opscode.com/browse/COOK-3233)** - Fix escaping special characters +- **[COOK-3156](https://tickets.opscode.com/browse/COOK-3156)** - Fix GRANTS file when `remote_root_acl` is specified +- **[COOK-3134](https://tickets.opscode.com/browse/COOK-3134)** - Fix Chef 11 support +- **[COOK-2318](https://tickets.opscode.com/browse/COOK-2318)** - Remove redundant `if` block around `node.mysql.tunable.log_bin` + +v3.0.2 +------ +### Bug +- [COOK-2158]: apt-get update is run twice at compile time +- [COOK-2832]: mysql grants.sql file has errors depending on attrs +- [COOK-2995]: server.rb is missing a platform_family comparison value + +### Sub-task +- [COOK-2102]: `innodb_flush_log_at_trx_commit` value is incorrectly set based on CPU count + +v3.0.0 +------ +**Note** This is a backwards incompatible version with previous versions of the cookbook. Tickets that introduce incompatibility are COOK-2615 and COOK-2617. + +- [COOK-2478] - Duplicate 'read_only' server attribute in base and tunable +- [COOK-2471] - Add tunable to set slave_compressed_protocol for reduced network traffic +- [COOK-1059] - Update attributes in mysql cookbook to support missing options for my.cnf usable by Percona +- [COOK-2590] - Typo in server recipe to do with conf_dir and confd_dir +- [COOK-2602] - Add `lower_case_table_names` tunable +- [COOK-2430] - Add a tunable to create a network ACL when allowing `remote_root_access` +- [COOK-2619] - mysql: isamchk deprecated +- [COOK-2515] - Better support for SUSE distribution for mysql cookbook +- [COOK-2557] - mysql::percona_repo attributes missing and key server typo +- [COOK-2614] - Duplicate `innodb_file_per_table` +- [COOK-2145] - MySQL cookbook should remove anonymous and password less accounts +- [COOK-2553] - Enable include directory in my.cnf template for any platform +- [COOK-2615] - Rename `key_buffer` to `key_buffer_size` +- [COOK-2626] - Percona repo URL is being constructed incorrectly +- [COOK-2616] - Unneeded attribute thread_cache +- [COOK-2618] - myisam-recover not using attribute value +- [COOK-2617] - open-files is a duplicate of open-files-limit + +v2.1.2 +------ +- [COOK-2172] - Mysql cookbook duplicates `binlog_format` configuration + +v2.1.0 +------ +- [COOK-1669] - Using platform("ubuntu") in default attributes always returns true +- [COOK-1694] - Added additional my.cnf fields and reorganized cookbook to avoid race conditions with mysql startup and sql script execution +- [COOK-1851] - Support server-id and binlog_format settings +- [COOK-1929] - Update msyql server attributes file because setting attributes without specifying a precedence is deprecated +- [COOK-1999] - Add read_only tunable useful for replication slave servers + +v2.0.2 +------ +- [COOK-1967] - mysql: trailing comma in server.rb platform family + +v2.0.0 +------ +**Important note for this release** + +Under Chef Solo, you must set the node attributes for the root, debian and repl passwords or the run will completely fail. See COOK-1737 for background on this. + +- [COOK-1390] - MySQL service cannot start after reboot +- [COOK-1610] - Set root password outside preseed (blocker for drop-in mysql replacements) +- [COOK-1624] - Mysql cookbook fails to even compile on windows +- [COOK-1669] - Using platform("ubuntu") in default attributes always returns true +- [COOK-1686] - Add mysql service start +- [COOK-1687] - duplicate `innodb_buffer_pool_size` attribute +- [COOK-1704] - mysql cookbook fails spec tests when minitest-handler cookbook enabled +- [COOK-1737] - Fail a chef-solo run when `server_root_password`, `server_debian_password`, and/or `server_repl_password` is not set +- [COOK-1769] - link to database recipe in mysql README goes to old opscode/cookbooks repo instead of opscode-cookbook organization +- [COOK-1963] - use `platform_family` + +v1.3.0 +------ +**Important note for this release** + +This version no longer installs Ruby bindings in the client recipe by default. Use the ruby recipe if you'd like the RubyGem. If you'd like packages from your distribution, use them in your application's specific cookbook/recipe, or modify the client packages attribute. This resolves the following tickets: + +- COOK-932 +- COOK-1009 +- COOK-1384 + +Additionally, this cookbook now has tests (COOK-1439) for use under test-kitchen. + +The following issues are also addressed in this release. + +- [COOK-1443] - MySQL (>= 5.1.24) does not support `innodb_flush_method` = fdatasync +- [COOK-1175] - Add Mac OS X support +- [COOK-1289] - handle additional tunable attributes +- [COOK-1305] - add auto-increment-increment and auto-increment-offset attributes +- [COOK-1397] - make the port an attribute +- [COOK-1439] - Add MySQL cookbook tests for test-kitchen support +- [COOK-1236] - Move package names into attributes to allow percona to free-ride +- [COOK-934] - remove deprecated mysql/libraries/database.rb, use the database cookbook instead. +- [COOK-1475] - fix restart on config change + +v1.2.6 +------ +- [COOK-1113] - Use an attribute to determine if upstart is used +- [COOK-1121] - Add support for Windows +- [COOK-1140] - Fix conf.d on Debian +- [COOK-1151] - Fix server_ec2 handling /var/lib/mysql bind mount +- [COOK-1321] - Document setting password attributes for solo + +v1.2.4 +------ +- [COOK-992] - fix FATAL nameerror +- [COOK-827] - `mysql:server_ec2` recipe can't mount `data_dir` +- [COOK-945] - FreeBSD support + +v1.2.2 +------ +- [COOK-826] mysql::server recipe doesn't quote password string +- [COOK-834] Add 'scientific' and 'amazon' platforms to mysql cookbook + +v1.2.1 +------ +- [COOK-644] Mysql client cookbook 'package missing' error message is confusing +- [COOK-645] RHEL6/CentOS6 - mysql cookbook contains 'skip-federated' directive which is unsupported on MySQL 5.1 + +v1.2.0 +------ +- [COOK-684] remove mysql_database LWRP + +v1.0.8 +------ +- [COOK-633] ensure "cloud" attribute is available + +v1.0.7 +------ +- [COOK-614] expose all mysql tunable settings in config +- [COOK-617] bind to private IP if available + +v1.0.6 +------ +- [COOK-605] install mysql-client package on ubuntu/debian + +v1.0.5 +------ +- [COOK-465] allow optional remote root connections to mysql +- [COOK-455] improve platform version handling +- externalize conf_dir attribute for easier cross platform support +- change datadir attribute to data_dir for consistency + +v1.0.4 +------ +- fix regressions on debian platform +- [COOK-578] wrap root password in quotes +- [COOK-562] expose all tunables in my.cnf diff --git a/vagrant/provision/cookbooks/mysql/README.md b/vagrant/provision/cookbooks/mysql/README.md new file mode 100755 index 0000000..9c935d5 --- /dev/null +++ b/vagrant/provision/cookbooks/mysql/README.md @@ -0,0 +1,220 @@ +mysql Cookbook +============== +Installs and configures MySQL client or server. + + +Requirements +------------ +Chef 0.10.10+. + + +Platform +-------- +- Debian, Ubuntu +- CentOS, Red Hat, Fedora +- Mac OS X (Using homebrew) + +Tested on: + +- Debian 5.0, 6.0 +- Ubuntu 10.04-12.04 +- CentOS 5.5-5.8, 6.2-6.3 +- Mac OS X 10.7.2 + +See TESTING.md for information about running tests in Opscode's Test Kitchen. + + +Cookbooks +--------- +Requires Opscode's openssl cookbook for secure password generation. See _Attributes_ and _Usage_ for more information. + +The RubyGem installation in the `mysql::ruby` recipe requires a C compiler and Ruby development headers to be installed in order to build the mysql gem. + +Requires `homebrew` [cookbook](http://community.opscode.com/cookbooks/homebrew) on Mac OS X. + + +Resources and Providers +----------------------- +The LWRP that used to ship as part of this cookbook has been refactored into the +[database](http://community.opscode.com/cookbooks/database) cookbook. Please see the README for details on updated usage. + + +Attributes +---------- +See the `attributes/server.rb` or `attributes/client.rb` for default values. Several attributes have values that vary based on the node's platform and version. + +* `node['mysql']['client']['packages']` - An array of package names + that should be installed on "client" systems. This can be modified, + e.g., to specify packages for Percona. +* `node['mysql']['server']['packages']` - An array of package names + that should be installed on "server" systems. This can be modified, + e.g., to specify packages for Percona. + +* `node['mysql']['auto-increment-increment']` - + auto-increment-increment value in my.cnf +* `node['mysql']['auto-increment-offset]` - auto-increment-offset + value in my.cnf +* `node['mysql']['basedir']` - Base directory where MySQL is installed +* `node['mysql']['bind_address']` - Listen address for MySQLd +* `node['mysql']['conf_dir']` - Location for mysql conf directory +* `node['mysql']['confd_dir']` - Location for mysql conf.d style + include directory +* `node['mysql']['data_dir']` - Location for mysql data directory +* `node['mysql']['ec2_path']` - location of mysql data_dir on EC2 + nodes +* `node['mysql']['grants_path']` - Path where the grants.sql should be + written +* `node['mysql']['mysqladmin_bin']` - Path to the mysqladmin binary +* `node['mysql']['old_passwords']` - Sets the `old_passwords` value in + my.cnf. +* `node['mysql']['pid_file']` - Path to the mysqld.pid file +* `node['mysql']['port']` - Liten port for MySQLd +* `node['mysql']['reload_action']` - Action to take when mysql conf + files are modified. Also allows "reload" and "none". +* `node['mysql']['root_group']` - The default group of the "root" user +* `node['mysql']['service_name']` - The name of the mysqld service +* `node['mysql']['socket']` - Path to the mysqld.sock file +* `node['mysql']['use_upstart']` - Whether to use upstart for the + service provider +* `mysql['root_network_acl']` - Set define the network the root user will be able to login from, default is nil + +Performance and other "tunable" attributes are under the `node['mysql']['tunable']` attribute, corresponding to the same-named parameter in my.cnf, and the default values are used. See `attributes/server.rb`. + +By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. + +* `node['mysql']['remove_anonymous_users']` - Remove anonymous users + +Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. + +* `node['mysql']['allow_remote_root']` - If true Sets root access from '%'. If false deletes any non-localhost root users. + +By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. This will also drop any user privileges to the test databae and any DB named test_% . + +* `node['mysql']['remove_test_database']` - Delete the test database and access to it. + +The following attributes are randomly generated passwords handled in the `mysql::server` recipe, using the OpenSSL cookbook's `secure_password` helper method. These are set using the `set_unless` node attribute method, which allows them to be easily overridden e.g. +in a role. + +* `node['mysql']['server_root_password']` - Set the server's root + password +* `node['mysql']['server_repl_password']` - Set the replication user + 'repl' password +* `node['mysql']['server_debian_password']` - Set the debian-sys-maint + user password + +### Windows Specific + +The following attributes are specific to Windows platforms. + +* `node['mysql']['client']['version']` - The version of MySQL + connector to install. +* `node['mysql']['client']['arch']` - Force 32 bit to work with the + mysql gem +* `node['mysql']['client']['package_file']` - The MSI file for the + mysql connector. +* `node['mysql']['client']['url']` - URL to download the mysql + connector. +* `node['mysql']['client']['packages']` - Similar to other platforms, + this is the name of the client package. +* `node['mysql']['client']['basedir']` - Base installation location +* `node['mysql']['client']['lib_dir']` - Libraries under the base location +* `node['mysql']['client']['bin_dir']` - binary directory under base location +* `node['mysql']['client']['ruby_dir']` - location where the Ruby + binaries will be + + +Usage +----- +On client nodes, use the client (or default) recipe: + +```javascript +{ "run_list": ["recipe[mysql::client]"] } +``` + +This will install the MySQL client libraries and development headers on the system. + +On nodes which may use the `database` cookbook's mysql resources, also use the ruby recipe. This installs the mysql RubyGem in the Ruby environment Chef is using via `chef_gem`. + +```javascript +{ "run_list": ["recipe[mysql::client]", "recipe[mysql::ruby]"] } +``` + +If you need to install the mysql Ruby library as a package for your system, override the client packages attribute in your node or role. For example, on an Ubuntu system: + +```javascript +{ + "mysql": { + "client": { + "packages": ["mysql-client", "libmysqlclient-dev","ruby-mysql"] + } + } +} +``` + +This creates a resource object for the package and does the installation before other recipes are parsed. You'll need to have the C compiler and such (ie, build-essential on Ubuntu) before running the recipes, but we already do that when installing Chef :-). + +On server nodes, use the server recipe: + +```javascript +{ "run_list": ["recipe[mysql::server]"] } +``` + +On Debian and Ubuntu, this will preseed the mysql-server package with the randomly generated root password in the recipe file. On other platforms, it simply installs the required packages. It will also create an SQL file, `/etc/mysql/grants.sql`, that will be used to set up grants for the root, repl and debian-sys-maint users. + +The recipe will perform a `node.save` unless it is run under `chef-solo` after the password attributes are used to ensure that in the event of a failed run, the saved attributes would be used. + +On EC2 nodes, use the `server_ec2` recipe and the mysql data dir will be set up in the ephmeral storage. + +```javascript +{ "run_list": ["recipe[mysql::server_ec2]"] } +``` + +When the `ec2_path` doesn't exist we look for a mounted filesystem (eg, EBS) and move the data_dir there. + +The client recipe is already included by server and 'default' recipes. + +For more infromation on the compile vs execution phase of a Chef run: + +- http://wiki.opscode.com/display/chef/Anatomy+of+a+Chef+Run + + +Chef Solo Note +-------------- +These node attributes are stored on the Chef server when using `chef-client`. Because `chef-solo` does not connect to a server or save the node object at all, to have the same passwords persist across `chef-solo` runs, you must specify them in the `json_attribs` file used. For example: + +```javascript +{ + "mysql": { + "server_root_password": "iloverandompasswordsbutthiswilldo", + "server_repl_password": "iloverandompasswordsbutthiswilldo", + "server_debian_password": "iloverandompasswordsbutthiswilldo" + }, + "run_list":["recipe[mysql::server]"] +} +``` + + +License & Authors +----------------- +- Author:: Joshua Timberman () +- Author:: AJ Christensen () +- Author:: Seth Chisamore () +- Author:: Brian Bianco () +- Author:: Jesse Howarth () +- Author:: Andrew Crump () + +```text +Copyright:: 2009-2013 Opscode, Inc + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +``` diff --git a/vagrant/provision/cookbooks/mysql/attributes/client.rb b/vagrant/provision/cookbooks/mysql/attributes/client.rb new file mode 100755 index 0000000..fcaa1da --- /dev/null +++ b/vagrant/provision/cookbooks/mysql/attributes/client.rb @@ -0,0 +1,52 @@ +# +# Cookbook Name:: mysql +# Attributes:: client +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Include Opscode helper in Node class to get access +# to debian_before_squeeze? and ubuntu_before_lucid? +::Chef::Node.send(:include, Opscode::Mysql::Helpers) + +case node['platform_family'] +when "rhel", "fedora" + default['mysql']['client']['packages'] = %w{mysql mysql-devel} +when "suse" + default['mysql']['client']['packages'] = %w{mysql-community-server-client libmysqlclient-devel} +when "debian" + if debian_before_squeeze? || ubuntu_before_lucid? + default['mysql']['client']['packages'] = %w{mysql-client libmysqlclient15-dev} + else + default['mysql']['client']['packages'] = %w{mysql-client libmysqlclient-dev} + end +when "freebsd" + default['mysql']['client']['packages'] = %w{mysql55-client} +when "windows" + default['mysql']['client']['version'] = "6.0.2" + default['mysql']['client']['arch'] = "win32" # force 32 bit to work with mysql gem + default['mysql']['client']['package_file'] = "mysql-connector-c-#{mysql['client']['version']}-#{mysql['client']['arch']}.msi" + default['mysql']['client']['url'] = "http://www.mysql.com/get/Downloads/Connector-C/#{mysql['client']['package_file']}/from/http://mysql.mirrors.pair.com/" + default['mysql']['client']['packages'] = ["MySQL Connector C #{mysql['client']['version']}"] + + default['mysql']['client']['basedir'] = "#{ENV['SYSTEMDRIVE']}\\Program Files (x86)\\MySQL\\#{mysql['client']['packages'].first}" + default['mysql']['client']['lib_dir'] = "#{mysql['client']['basedir']}\\lib/opt" + default['mysql']['client']['bin_dir'] = "#{mysql['client']['basedir']}\\bin" + default['mysql']['client']['ruby_dir'] = RbConfig::CONFIG['bindir'] +when "mac_os_x" + default['mysql']['client']['packages'] = %w{mysql-connector-c} +else + default['mysql']['client']['packages'] = %w{mysql-client libmysqlclient-dev} +end + diff --git a/vagrant/provision/cookbooks/mysql/attributes/percona_repo.rb b/vagrant/provision/cookbooks/mysql/attributes/percona_repo.rb new file mode 100755 index 0000000..80650a6 --- /dev/null +++ b/vagrant/provision/cookbooks/mysql/attributes/percona_repo.rb @@ -0,0 +1,3 @@ +default['mysql']['percona']['apt_key_id'] = 'CD2EFD2A' +default['mysql']['percona']['apt_uri'] = "http://repo.percona.com/apt" +default['mysql']['percona']['apt_keyserver'] = "keys.gnupg.net" diff --git a/vagrant/provision/cookbooks/mysql/attributes/server.rb b/vagrant/provision/cookbooks/mysql/attributes/server.rb new file mode 100755 index 0000000..77fca39 --- /dev/null +++ b/vagrant/provision/cookbooks/mysql/attributes/server.rb @@ -0,0 +1,254 @@ +# +# Cookbook Name:: mysql +# Attributes:: server +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +default['mysql']['bind_address'] = node.attribute?('cloud') ? node.cloud['local_ipv4'] : node['ipaddress'] +default['mysql']['port'] = 3306 +default['mysql']['nice'] = 0 + +case node["platform_family"] +when "debian" + default['mysql']['server']['packages'] = %w{mysql-server} + default['mysql']['service_name'] = "mysql" + default['mysql']['basedir'] = "/usr" + default['mysql']['data_dir'] = "/var/lib/mysql" + default['mysql']['root_group'] = "root" + default['mysql']['mysqladmin_bin'] = "/usr/bin/mysqladmin" + default['mysql']['mysql_bin'] = "/usr/bin/mysql" + + default['mysql']['conf_dir'] = '/etc/mysql' + default['mysql']['confd_dir'] = '/etc/mysql/conf.d' + default['mysql']['socket'] = "/var/run/mysqld/mysqld.sock" + default['mysql']['pid_file'] = "/var/run/mysqld/mysqld.pid" + default['mysql']['old_passwords'] = 0 + default['mysql']['grants_path'] = "/etc/mysql/grants.sql" +when "rhel", "fedora" + if node["mysql"]["version"].to_f >= 5.5 + default['mysql']['service_name'] = "mysql" + default['mysql']['pid_file'] = "/var/run/mysql/mysql.pid" + else + default['mysql']['service_name'] = "mysqld" + default['mysql']['pid_file'] = "/var/run/mysqld/mysqld.pid" + end + default['mysql']['server']['packages'] = %w{mysql-server} + default['mysql']['basedir'] = "/usr" + default['mysql']['data_dir'] = "/var/lib/mysql" + default['mysql']['root_group'] = "root" + default['mysql']['mysqladmin_bin'] = "/usr/bin/mysqladmin" + default['mysql']['mysql_bin'] = "/usr/bin/mysql" + + default['mysql']['conf_dir'] = '/etc' + default['mysql']['confd_dir'] = '/etc/mysql/conf.d' + default['mysql']['socket'] = "/var/lib/mysql/mysql.sock" + default['mysql']['old_passwords'] = 1 + default['mysql']['grants_path'] = "/etc/mysql_grants.sql" + # RHEL/CentOS mysql package does not support this option. + default['mysql']['tunable']['innodb_adaptive_flushing'] = false +when "suse" + default['mysql']['service_name'] = "mysql" + default['mysql']['server']['packages'] = %w{mysql-community-server} + default['mysql']['basedir'] = "/usr" + default['mysql']['data_dir'] = "/var/lib/mysql" + default['mysql']['root_group'] = "root" + default['mysql']['mysqladmin_bin'] = "/usr/bin/mysqladmin" + default['mysql']['mysql_bin'] = "/usr/bin/mysql" + default['mysql']['conf_dir'] = '/etc' + default['mysql']['confd_dir'] = '/etc/mysql/conf.d' + default['mysql']['socket'] = "/var/run/mysql/mysql.sock" + default['mysql']['pid_file'] = "/var/run/mysql/mysqld.pid" + default['mysql']['old_passwords'] = 1 + default['mysql']['grants_path'] = "/etc/mysql_grants.sql" +when "freebsd" + default['mysql']['server']['packages'] = %w{mysql55-server} + default['mysql']['service_name'] = "mysql-server" + default['mysql']['basedir'] = "/usr/local" + default['mysql']['data_dir'] = "/var/db/mysql" + default['mysql']['root_group'] = "wheel" + default['mysql']['mysqladmin_bin'] = "/usr/local/bin/mysqladmin" + default['mysql']['mysql_bin'] = "/usr/local/bin/mysql" + + default['mysql']['conf_dir'] = '/usr/local/etc' + default['mysql']['confd_dir'] = '/usr/local/etc/mysql/conf.d' + default['mysql']['socket'] = "/tmp/mysqld.sock" + default['mysql']['pid_file'] = "/var/run/mysqld/mysqld.pid" + default['mysql']['old_passwords'] = 0 + default['mysql']['grants_path'] = "/var/db/mysql/grants.sql" +when "windows" + default['mysql']['server']['packages'] = ["MySQL Server 5.5"] + default['mysql']['version'] = '5.5.21' + default['mysql']['arch'] = 'win32' + default['mysql']['package_file'] = "mysql-#{mysql['version']}-#{mysql['arch']}.msi" + default['mysql']['url'] = "http://www.mysql.com/get/Downloads/MySQL-5.5/#{mysql['package_file']}/from/http://mysql.mirrors.pair.com/" + + default['mysql']['service_name'] = "mysql" + default['mysql']['basedir'] = "#{ENV['SYSTEMDRIVE']}\\Program Files (x86)\\MySQL\\#{mysql['server']['packages'].first}" + default['mysql']['data_dir'] = "#{node['mysql']['basedir']}\\Data" + default['mysql']['bin_dir'] = "#{node['mysql']['basedir']}\\bin" + default['mysql']['mysqladmin_bin'] = "#{node['mysql']['bin_dir']}\\mysqladmin" + default['mysql']['mysql_bin'] = "#{node['mysql']['bin_dir']}\\mysql" + + default['mysql']['conf_dir'] = node['mysql']['basedir'] + default['mysql']['old_passwords'] = 0 + default['mysql']['grants_path'] = "#{node['mysql']['conf_dir']}\\grants.sql" +when "mac_os_x" + default['mysql']['server']['packages'] = %w{mysql} + default['mysql']['basedir'] = "/usr/local/Cellar" + default['mysql']['data_dir'] = "/usr/local/var/mysql" + default['mysql']['root_group'] = "admin" + default['mysql']['mysqladmin_bin'] = "/usr/local/bin/mysqladmin" + default['mysql']['mysql_bin'] = "/usr/local/bin/mysql" +else + default['mysql']['server']['packages'] = %w{mysql-server} + default['mysql']['service_name'] = "mysql" + default['mysql']['basedir'] = "/usr" + default['mysql']['data_dir'] = "/var/lib/mysql" + default['mysql']['root_group'] = "root" + default['mysql']['mysqladmin_bin'] = "/usr/bin/mysqladmin" + default['mysql']['mysql_bin'] = "/usr/bin/mysql" + + default['mysql']['conf_dir'] = '/etc/mysql' + default['mysql']['confd_dir'] = '/etc/mysql/conf.d' + default['mysql']['socket'] = "/var/run/mysqld/mysqld.sock" + default['mysql']['pid_file'] = "/var/run/mysqld/mysqld.pid" + default['mysql']['old_passwords'] = 0 + default['mysql']['grants_path'] = "/etc/mysql/grants.sql" +end + +if attribute?('ec2') + default['mysql']['ec2_path'] = "/mnt/mysql" + default['mysql']['ebs_vol_dev'] = "/dev/sdi" + default['mysql']['ebs_vol_size'] = 50 +end + +default['mysql']['reload_action'] = "restart" # or "reload" or "none" + +default['mysql']['use_upstart'] = node['platform'] == "ubuntu" && node['platform_version'].to_f >= 10.04 + +default['mysql']['auto-increment-increment'] = 1 +default['mysql']['auto-increment-offset'] = 1 + +default['mysql']['allow_remote_root'] = false +default['mysql']['remove_anonymous_users'] = false +default['mysql']['remove_test_database'] = false +default['mysql']['root_network_acl'] = nil +default['mysql']['tunable']['character-set-server'] = "utf8" +default['mysql']['tunable']['collation-server'] = "utf8_general_ci" +default['mysql']['tunable']['lower_case_table_names'] = nil +default['mysql']['tunable']['back_log'] = "128" +default['mysql']['tunable']['key_buffer_size'] = "256M" +default['mysql']['tunable']['myisam_sort_buffer_size'] = "8M" +default['mysql']['tunable']['myisam_max_sort_file_size'] = "2147483648" +default['mysql']['tunable']['myisam_repair_threads'] = "1" +default['mysql']['tunable']['myisam-recover'] = "BACKUP" +default['mysql']['tunable']['max_allowed_packet'] = "16M" +default['mysql']['tunable']['max_connections'] = "800" +default['mysql']['tunable']['max_connect_errors'] = "10" +default['mysql']['tunable']['concurrent_insert'] = "2" +default['mysql']['tunable']['connect_timeout'] = "10" +default['mysql']['tunable']['tmp_table_size'] = "32M" +default['mysql']['tunable']['max_heap_table_size'] = node['mysql']['tunable']['tmp_table_size'] +default['mysql']['tunable']['bulk_insert_buffer_size'] = node['mysql']['tunable']['tmp_table_size'] +default['mysql']['tunable']['net_read_timeout'] = "30" +default['mysql']['tunable']['net_write_timeout'] = "30" +default['mysql']['tunable']['table_cache'] = "128" + +default['mysql']['tunable']['thread_cache_size'] = 8 +default['mysql']['tunable']['thread_concurrency'] = 10 +default['mysql']['tunable']['thread_stack'] = "256K" +default['mysql']['tunable']['sort_buffer_size'] = "2M" +default['mysql']['tunable']['read_buffer_size'] = "128k" +default['mysql']['tunable']['read_rnd_buffer_size'] = "256k" +default['mysql']['tunable']['join_buffer_size'] = "128k" +default['mysql']['tunable']['wait_timeout'] = "180" +default['mysql']['tunable']['open-files-limit'] = "1024" + +default['mysql']['tunable']['sql_mode'] = nil + +default['mysql']['tunable']['skip-character-set-client-handshake'] = false +default['mysql']['tunable']['skip-name-resolve'] = false + +default['mysql']['tunable']['slave_compressed_protocol'] = 0 + +default['mysql']['tunable']['server_id'] = nil +default['mysql']['tunable']['log_bin'] = nil +default['mysql']['tunable']['log_bin_trust_function_creators'] = false + +default['mysql']['tunable']['relay_log'] = nil +default['mysql']['tunable']['relay_log_index'] = nil +default['mysql']['tunable']['log_slave_updates'] = false + +default['mysql']['tunable']['sync_binlog'] = 0 +default['mysql']['tunable']['skip_slave_start'] = false +default['mysql']['tunable']['read_only'] = false + +default['mysql']['tunable']['log_error'] = nil +default['mysql']['tunable']['log_warnings'] = false +default['mysql']['tunable']['log_queries_not_using_index'] = true +default['mysql']['tunable']['log_bin_trust_function_creators'] = false + +default['mysql']['tunable']['innodb_log_file_size'] = "5M" +default['mysql']['tunable']['innodb_buffer_pool_size'] = "128M" +default['mysql']['tunable']['innodb_buffer_pool_instances'] = "4" +default['mysql']['tunable']['innodb_additional_mem_pool_size'] = "8M" +default['mysql']['tunable']['innodb_data_file_path'] = "ibdata1:10M:autoextend" +default['mysql']['tunable']['innodb_flush_method'] = false +default['mysql']['tunable']['innodb_log_buffer_size'] = "8M" +default['mysql']['tunable']['innodb_write_io_threads'] = "4" +default['mysql']['tunable']['innodb_io_capacity'] = "200" +default['mysql']['tunable']['innodb_file_per_table'] = true +default['mysql']['tunable']['innodb_lock_wait_timeout'] = "60" +if node['cpu'].nil? or node['cpu']['total'].nil? + default['mysql']['tunable']['innodb_thread_concurrency'] = "8" + default['mysql']['tunable']['innodb_commit_concurrency'] = "8" + default['mysql']['tunable']['innodb_read_io_threads'] = "8" +else + default['mysql']['tunable']['innodb_thread_concurrency'] = "#{(Integer(node['cpu']['total'])) * 2}" + default['mysql']['tunable']['innodb_commit_concurrency'] = "#{(Integer(node['cpu']['total'])) * 2}" + default['mysql']['tunable']['innodb_read_io_threads'] = "#{(Integer(node['cpu']['total'])) * 2}" +end +default['mysql']['tunable']['innodb_flush_log_at_trx_commit'] = "1" +default['mysql']['tunable']['innodb_support_xa'] = true +default['mysql']['tunable']['innodb_table_locks'] = true +default['mysql']['tunable']['skip-innodb-doublewrite'] = false + +default['mysql']['tunable']['transaction-isolation'] = nil + +default['mysql']['tunable']['query_cache_limit'] = "1M" +default['mysql']['tunable']['query_cache_size'] = "16M" + +default['mysql']['tunable']['log_slow_queries'] = "/var/log/mysql/slow.log" +default['mysql']['tunable']['slow_query_log'] = node['mysql']['tunable']['log_slow_queries'] # log_slow_queries is deprecated + # in favor of slow_query_log +default['mysql']['tunable']['long_query_time'] = 2 + +default['mysql']['tunable']['expire_logs_days'] = 10 +default['mysql']['tunable']['max_binlog_size'] = "100M" +default['mysql']['tunable']['binlog_cache_size'] = "32K" + +default['mysql']['tmpdir'] = ["/tmp"] + +default['mysql']['log_dir'] = node['mysql']['data_dir'] +default['mysql']['log_files_in_group'] = false +default['mysql']['innodb_status_file'] = false + +unless node['platform_family'] == "rhel" && node['platform_version'].to_i < 6 + # older RHEL platforms don't support these options + default['mysql']['tunable']['event_scheduler'] = 0 + default['mysql']['tunable']['table_open_cache'] = "128" + default['mysql']['tunable']['binlog_format'] = "statement" if node['mysql']['tunable']['log_bin'] +end diff --git a/vagrant/provision/cookbooks/mysql/libraries/helpers.rb b/vagrant/provision/cookbooks/mysql/libraries/helpers.rb new file mode 100755 index 0000000..40adcfc --- /dev/null +++ b/vagrant/provision/cookbooks/mysql/libraries/helpers.rb @@ -0,0 +1,33 @@ +# +# Author:: Seth Chisamore () +# Copyright:: Copyright (c) 2011 Opscode, Inc. +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +module Opscode + module Mysql + module Helpers + + def debian_before_squeeze? + (node['platform'] == "debian") && (node['platform_version'].to_f < 6.0) + end + + def ubuntu_before_lucid? + (node['platform'] == "ubuntu") && (node['platform_version'].to_f < 10.0) + end + + end + end +end diff --git a/vagrant/provision/cookbooks/mysql/metadata.json b/vagrant/provision/cookbooks/mysql/metadata.json new file mode 100755 index 0000000..836db99 --- /dev/null +++ b/vagrant/provision/cookbooks/mysql/metadata.json @@ -0,0 +1,168 @@ +{ + "name": "mysql", + "version": "3.0.4", + "description": "Installs and configures mysql for client or server", + "long_description": "mysql Cookbook\n==============\nInstalls and configures MySQL client or server.\n\n\nRequirements\n------------\nChef 0.10.10+.\n\n\nPlatform\n--------\n- Debian, Ubuntu\n- CentOS, Red Hat, Fedora\n- Mac OS X (Using homebrew)\n\nTested on:\n\n- Debian 5.0, 6.0\n- Ubuntu 10.04-12.04\n- CentOS 5.5-5.8, 6.2-6.3\n- Mac OS X 10.7.2\n\nSee TESTING.md for information about running tests in Opscode's Test Kitchen.\n\n\nCookbooks\n---------\nRequires Opscode's openssl cookbook for secure password generation. See _Attributes_ and _Usage_ for more information.\n\nThe RubyGem installation in the `mysql::ruby` recipe requires a C compiler and Ruby development headers to be installed in order to build the mysql gem.\n\nRequires `homebrew` [cookbook](http://community.opscode.com/cookbooks/homebrew) on Mac OS X.\n\n\nResources and Providers\n-----------------------\nThe LWRP that used to ship as part of this cookbook has been refactored into the\n[database](http://community.opscode.com/cookbooks/database) cookbook. Please see the README for details on updated usage.\n\n\nAttributes\n----------\nSee the `attributes/server.rb` or `attributes/client.rb` for default values. Several attributes have values that vary based on the node's platform and version.\n\n* `node['mysql']['client']['packages']` - An array of package names\n that should be installed on \"client\" systems. This can be modified,\n e.g., to specify packages for Percona.\n* `node['mysql']['server']['packages']` - An array of package names\n that should be installed on \"server\" systems. This can be modified,\n e.g., to specify packages for Percona.\n\n* `node['mysql']['auto-increment-increment']` -\n auto-increment-increment value in my.cnf\n* `node['mysql']['auto-increment-offset]` - auto-increment-offset\n value in my.cnf\n* `node['mysql']['basedir']` - Base directory where MySQL is installed\n* `node['mysql']['bind_address']` - Listen address for MySQLd\n* `node['mysql']['conf_dir']` - Location for mysql conf directory\n* `node['mysql']['confd_dir']` - Location for mysql conf.d style\n include directory\n* `node['mysql']['data_dir']` - Location for mysql data directory\n* `node['mysql']['ec2_path']` - location of mysql data_dir on EC2\n nodes\n* `node['mysql']['grants_path']` - Path where the grants.sql should be\n written\n* `node['mysql']['mysqladmin_bin']` - Path to the mysqladmin binary\n* `node['mysql']['old_passwords']` - Sets the `old_passwords` value in\n my.cnf.\n* `node['mysql']['pid_file']` - Path to the mysqld.pid file\n* `node['mysql']['port']` - Liten port for MySQLd\n* `node['mysql']['reload_action']` - Action to take when mysql conf\n files are modified. Also allows \"reload\" and \"none\".\n* `node['mysql']['root_group']` - The default group of the \"root\" user\n* `node['mysql']['service_name']` - The name of the mysqld service\n* `node['mysql']['socket']` - Path to the mysqld.sock file\n* `node['mysql']['use_upstart']` - Whether to use upstart for the\n service provider\n* `mysql['root_network_acl']` - Set define the network the root user will be able to login from, default is nil\n\nPerformance and other \"tunable\" attributes are under the `node['mysql']['tunable']` attribute, corresponding to the same-named parameter in my.cnf, and the default values are used. See `attributes/server.rb`.\n\nBy default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment.\n\n* `node['mysql']['remove_anonymous_users']` - Remove anonymous users\n\nNormally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network.\n\n* `node['mysql']['allow_remote_root']` - If true Sets root access from '%'. If false deletes any non-localhost root users.\n\nBy default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. This will also drop any user privileges to the test databae and any DB named test_% .\n\n* `node['mysql']['remove_test_database']` - Delete the test database and access to it.\n\nThe following attributes are randomly generated passwords handled in the `mysql::server` recipe, using the OpenSSL cookbook's `secure_password` helper method. These are set using the `set_unless` node attribute method, which allows them to be easily overridden e.g.\nin a role.\n\n* `node['mysql']['server_root_password']` - Set the server's root\n password\n* `node['mysql']['server_repl_password']` - Set the replication user\n 'repl' password\n* `node['mysql']['server_debian_password']` - Set the debian-sys-maint\n user password\n\n### Windows Specific\n\nThe following attributes are specific to Windows platforms.\n\n* `node['mysql']['client']['version']` - The version of MySQL\n connector to install.\n* `node['mysql']['client']['arch']` - Force 32 bit to work with the\n mysql gem\n* `node['mysql']['client']['package_file']` - The MSI file for the\n mysql connector.\n* `node['mysql']['client']['url']` - URL to download the mysql\n connector.\n* `node['mysql']['client']['packages']` - Similar to other platforms,\n this is the name of the client package.\n* `node['mysql']['client']['basedir']` - Base installation location\n* `node['mysql']['client']['lib_dir']` - Libraries under the base location\n* `node['mysql']['client']['bin_dir']` - binary directory under base location\n* `node['mysql']['client']['ruby_dir']` - location where the Ruby\n binaries will be\n\n\nUsage\n-----\nOn client nodes, use the client (or default) recipe:\n\n```javascript\n{ \"run_list\": [\"recipe[mysql::client]\"] }\n```\n\nThis will install the MySQL client libraries and development headers on the system.\n\nOn nodes which may use the `database` cookbook's mysql resources, also use the ruby recipe. This installs the mysql RubyGem in the Ruby environment Chef is using via `chef_gem`.\n\n```javascript\n{ \"run_list\": [\"recipe[mysql::client]\", \"recipe[mysql::ruby]\"] }\n```\n\nIf you need to install the mysql Ruby library as a package for your system, override the client packages attribute in your node or role. For example, on an Ubuntu system:\n\n```javascript\n{\n \"mysql\": {\n \"client\": {\n \"packages\": [\"mysql-client\", \"libmysqlclient-dev\",\"ruby-mysql\"]\n }\n }\n}\n```\n\nThis creates a resource object for the package and does the installation before other recipes are parsed. You'll need to have the C compiler and such (ie, build-essential on Ubuntu) before running the recipes, but we already do that when installing Chef :-).\n\nOn server nodes, use the server recipe:\n\n```javascript\n{ \"run_list\": [\"recipe[mysql::server]\"] }\n```\n\nOn Debian and Ubuntu, this will preseed the mysql-server package with the randomly generated root password in the recipe file. On other platforms, it simply installs the required packages. It will also create an SQL file, `/etc/mysql/grants.sql`, that will be used to set up grants for the root, repl and debian-sys-maint users.\n\nThe recipe will perform a `node.save` unless it is run under `chef-solo` after the password attributes are used to ensure that in the event of a failed run, the saved attributes would be used.\n\nOn EC2 nodes, use the `server_ec2` recipe and the mysql data dir will be set up in the ephmeral storage.\n\n```javascript\n{ \"run_list\": [\"recipe[mysql::server_ec2]\"] }\n```\n\nWhen the `ec2_path` doesn't exist we look for a mounted filesystem (eg, EBS) and move the data_dir there.\n\nThe client recipe is already included by server and 'default' recipes.\n\nFor more infromation on the compile vs execution phase of a Chef run:\n\n- http://wiki.opscode.com/display/chef/Anatomy+of+a+Chef+Run\n\n\nChef Solo Note\n--------------\nThese node attributes are stored on the Chef server when using `chef-client`. Because `chef-solo` does not connect to a server or save the node object at all, to have the same passwords persist across `chef-solo` runs, you must specify them in the `json_attribs` file used. For example:\n\n```javascript\n{\n \"mysql\": {\n \"server_root_password\": \"iloverandompasswordsbutthiswilldo\",\n \"server_repl_password\": \"iloverandompasswordsbutthiswilldo\",\n \"server_debian_password\": \"iloverandompasswordsbutthiswilldo\"\n },\n \"run_list\":[\"recipe[mysql::server]\"]\n}\n```\n\n\nLicense & Authors\n-----------------\n- Author:: Joshua Timberman ()\n- Author:: AJ Christensen ()\n- Author:: Seth Chisamore ()\n- Author:: Brian Bianco ()\n- Author:: Jesse Howarth ()\n- Author:: Andrew Crump ()\n\n```text\nCopyright:: 2009-2013 Opscode, Inc\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n", + "maintainer": "Opscode, Inc.", + "maintainer_email": "cookbooks@opscode.com", + "license": "Apache 2.0", + "platforms": { + "debian": ">= 0.0.0", + "ubuntu": ">= 0.0.0", + "centos": ">= 0.0.0", + "suse": ">= 0.0.0", + "fedora": ">= 0.0.0", + "redhat": ">= 0.0.0", + "scientific": ">= 0.0.0", + "amazon": ">= 0.0.0", + "freebsd": ">= 0.0.0", + "windows": ">= 0.0.0", + "mac_os_x": ">= 0.0.0" + }, + "dependencies": { + "openssl": ">= 0.0.0", + "build-essential": "> 1.1.0" + }, + "recommendations": { + }, + "suggestions": { + "homebrew": ">= 0.0.0", + "windows": ">= 0.0.0" + }, + "conflicting": { + }, + "providing": { + }, + "replacing": { + }, + "attributes": { + "mysql/server_root_password": { + "display_name": "MySQL Server Root Password", + "description": "Randomly generated password for the mysqld root user", + "default": "randomly generated" + }, + "mysql/bind_address": { + "display_name": "MySQL Bind Address", + "description": "Address that mysqld should listen on", + "default": "ipaddress" + }, + "mysql/data_dir": { + "display_name": "MySQL Data Directory", + "description": "Location of mysql databases", + "default": "/var/lib/mysql" + }, + "mysql/conf_dir": { + "display_name": "MySQL Conf Directory", + "description": "Location of mysql conf files", + "default": "/etc/mysql" + }, + "mysql/ec2_path": { + "display_name": "MySQL EC2 Path", + "description": "Location of mysql directory on EC2 instance EBS volumes", + "default": "/mnt/mysql" + }, + "mysql/reload_action": { + "display_name": "MySQL conf file reload action", + "description": "Action to take when mysql conf files are modified", + "default": "reload" + }, + "mysql/tunable": { + "display_name": "MySQL Tunables", + "description": "Hash of MySQL tunable attributes", + "type": "hash" + }, + "mysql/tunable/key_buffer": { + "display_name": "MySQL Tuntable Key Buffer", + "default": "250M" + }, + "mysql/tunable/max_connections": { + "display_name": "MySQL Tunable Max Connections", + "default": "800" + }, + "mysql/tunable/wait_timeout": { + "display_name": "MySQL Tunable Wait Timeout", + "default": "180" + }, + "mysql/tunable/net_read_timeout": { + "display_name": "MySQL Tunable Net Read Timeout", + "default": "30" + }, + "mysql/tunable/net_write_timeout": { + "display_name": "MySQL Tunable Net Write Timeout", + "default": "30" + }, + "mysql/tunable/back_log": { + "display_name": "MySQL Tunable Back Log", + "default": "128" + }, + "mysql/tunable/table_cache": { + "display_name": "MySQL Tunable Table Cache for MySQL < 5.1.3", + "default": "128" + }, + "mysql/tunable/table_open_cache": { + "display_name": "MySQL Tunable Table Cache for MySQL >= 5.1.3", + "default": "128" + }, + "mysql/tunable/max_heap_table_size": { + "display_name": "MySQL Tunable Max Heap Table Size", + "default": "32M" + }, + "mysql/tunable/expire_logs_days": { + "display_name": "MySQL Exipre Log Days", + "default": "10" + }, + "mysql/tunable/max_binlog_size": { + "display_name": "MySQL Max Binlog Size", + "default": "100M" + }, + "mysql/client": { + "display_name": "MySQL Connector/C Client", + "description": "Hash of MySQL client attributes", + "type": "hash" + }, + "mysql/client/version": { + "display_name": "MySQL Connector/C Version", + "default": "6.0.2" + }, + "mysql/client/arch": { + "display_name": "MySQL Connector/C Architecture", + "default": "win32" + }, + "mysql/client/package_file": { + "display_name": "MySQL Connector/C Package File Name", + "default": "mysql-connector-c-6.0.2-win32.msi" + }, + "mysql/client/url": { + "display_name": "MySQL Connector/C Download URL", + "default": "http://www.mysql.com/get/Downloads/Connector-C/mysql-connector-c-6.0.2-win32.msi/from/http://mysql.mirrors.pair.com/" + }, + "mysql/client/package_name": { + "display_name": "MySQL Connector/C Registry DisplayName", + "default": "MySQL Connector C 6.0.2" + }, + "mysql/client/basedir": { + "display_name": "MySQL Connector/C Base Install Directory", + "default": "C:\\Program Files (x86)\\MySQL\\Connector C 6.0.2" + }, + "mysql/client/lib_dir": { + "display_name": "MySQL Connector/C Library Directory (containing libmysql.dll)", + "default": "C:\\Program Files (x86)\\MySQL\\Connector C 6.0.2\\lib\\opt" + }, + "mysql/client/bin_dir": { + "display_name": "MySQL Connector/C Executable Directory", + "default": "C:\\Program Files (x86)\\MySQL\\Connector C 6.0.2\\bin" + }, + "mysql/client/ruby_dir": { + "display_name": "Ruby Executable Directory which should gain MySQL support", + "default": "system ruby" + } + }, + "groupings": { + }, + "recipes": { + "mysql": "Includes the client recipe to configure a client", + "mysql::client": "Installs packages required for mysql clients using run_action magic", + "mysql::server": "Installs packages required for mysql servers w/o manual intervention", + "mysql::server_ec2": "Performs EC2-specific mountpoint manipulation" + } +} \ No newline at end of file diff --git a/vagrant/provision/cookbooks/mysql/metadata.rb b/vagrant/provision/cookbooks/mysql/metadata.rb new file mode 100755 index 0000000..d1f7e16 --- /dev/null +++ b/vagrant/provision/cookbooks/mysql/metadata.rb @@ -0,0 +1,140 @@ +name "mysql" +maintainer "Opscode, Inc." +maintainer_email "cookbooks@opscode.com" +license "Apache 2.0" +description "Installs and configures mysql for client or server" +long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) +version "3.0.4" +recipe "mysql", "Includes the client recipe to configure a client" +recipe "mysql::client", "Installs packages required for mysql clients using run_action magic" +recipe "mysql::server", "Installs packages required for mysql servers w/o manual intervention" +recipe "mysql::server_ec2", "Performs EC2-specific mountpoint manipulation" + +%w{ debian ubuntu centos suse fedora redhat scientific amazon freebsd windows mac_os_x }.each do |os| + supports os +end + +depends "openssl" +depends "build-essential", "> 1.1.0" +suggests "homebrew" +suggests "windows" + +attribute "mysql/server_root_password", + :display_name => "MySQL Server Root Password", + :description => "Randomly generated password for the mysqld root user", + :default => "randomly generated" + +attribute "mysql/bind_address", + :display_name => "MySQL Bind Address", + :description => "Address that mysqld should listen on", + :default => "ipaddress" + +attribute "mysql/data_dir", + :display_name => "MySQL Data Directory", + :description => "Location of mysql databases", + :default => "/var/lib/mysql" + +attribute "mysql/conf_dir", + :display_name => "MySQL Conf Directory", + :description => "Location of mysql conf files", + :default => "/etc/mysql" + +attribute "mysql/ec2_path", + :display_name => "MySQL EC2 Path", + :description => "Location of mysql directory on EC2 instance EBS volumes", + :default => "/mnt/mysql" + +attribute "mysql/reload_action", + :display_name => "MySQL conf file reload action", + :description => "Action to take when mysql conf files are modified", + :default => "reload" + +attribute "mysql/tunable", + :display_name => "MySQL Tunables", + :description => "Hash of MySQL tunable attributes", + :type => "hash" + +attribute "mysql/tunable/key_buffer", + :display_name => "MySQL Tuntable Key Buffer", + :default => "250M" + +attribute "mysql/tunable/max_connections", + :display_name => "MySQL Tunable Max Connections", + :default => "800" + +attribute "mysql/tunable/wait_timeout", + :display_name => "MySQL Tunable Wait Timeout", + :default => "180" + +attribute "mysql/tunable/net_read_timeout", + :display_name => "MySQL Tunable Net Read Timeout", + :default => "30" + +attribute "mysql/tunable/net_write_timeout", + :display_name => "MySQL Tunable Net Write Timeout", + :default => "30" + +attribute "mysql/tunable/back_log", + :display_name => "MySQL Tunable Back Log", + :default => "128" + +attribute "mysql/tunable/table_cache", + :display_name => "MySQL Tunable Table Cache for MySQL < 5.1.3", + :default => "128" + +attribute "mysql/tunable/table_open_cache", + :display_name => "MySQL Tunable Table Cache for MySQL >= 5.1.3", + :default => "128" + +attribute "mysql/tunable/max_heap_table_size", + :display_name => "MySQL Tunable Max Heap Table Size", + :default => "32M" + +attribute "mysql/tunable/expire_logs_days", + :display_name => "MySQL Exipre Log Days", + :default => "10" + +attribute "mysql/tunable/max_binlog_size", + :display_name => "MySQL Max Binlog Size", + :default => "100M" + +attribute "mysql/client", + :display_name => "MySQL Connector/C Client", + :description => "Hash of MySQL client attributes", + :type => "hash" + +attribute "mysql/client/version", + :display_name => "MySQL Connector/C Version", + :default => "6.0.2" + +attribute "mysql/client/arch", + :display_name => "MySQL Connector/C Architecture", + :default => "win32" + +attribute "mysql/client/package_file", + :display_name => "MySQL Connector/C Package File Name", + :default => "mysql-connector-c-6.0.2-win32.msi" + +attribute "mysql/client/url", + :display_name => "MySQL Connector/C Download URL", + :default => "http://www.mysql.com/get/Downloads/Connector-C/mysql-connector-c-6.0.2-win32.msi/from/http://mysql.mirrors.pair.com/" + +attribute "mysql/client/package_name", + :display_name => "MySQL Connector/C Registry DisplayName", + :default => "MySQL Connector C 6.0.2" + +attribute "mysql/client/basedir", + :display_name => "MySQL Connector/C Base Install Directory", + :default => "C:\\Program Files (x86)\\MySQL\\Connector C 6.0.2" + +attribute "mysql/client/lib_dir", + :display_name => "MySQL Connector/C Library Directory (containing libmysql.dll)", + :default => "C:\\Program Files (x86)\\MySQL\\Connector C 6.0.2\\lib\\opt" + +attribute "mysql/client/bin_dir", + :display_name => "MySQL Connector/C Executable Directory", + :default => "C:\\Program Files (x86)\\MySQL\\Connector C 6.0.2\\bin" + +attribute "mysql/client/ruby_dir", + :display_name => "Ruby Executable Directory which should gain MySQL support", + :default => "system ruby" diff --git a/vagrant/provision/cookbooks/mysql/recipes/client.rb b/vagrant/provision/cookbooks/mysql/recipes/client.rb new file mode 100755 index 0000000..91787e7 --- /dev/null +++ b/vagrant/provision/cookbooks/mysql/recipes/client.rb @@ -0,0 +1,59 @@ +# +# Cookbook Name:: mysql +# Recipe:: client +# +# Copyright 2008-2011, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# Include Opscode helper in Recipe class to get access +# to debian_before_squeeze? and ubuntu_before_lucid? +::Chef::Recipe.send(:include, Opscode::Mysql::Helpers) + +case node['platform'] +when "windows" + package_file = node['mysql']['client']['package_file'] + remote_file "#{Chef::Config[:file_cache_path]}/#{package_file}" do + source node['mysql']['client']['url'] + not_if { File.exists? "#{Chef::Config[:file_cache_path]}/#{package_file}" } + end + + windows_package node['mysql']['client']['packages'].first do + source "#{Chef::Config[:file_cache_path]}/#{package_file}" + end + windows_path node['mysql']['client']['bin_dir'] do + action :add + end + def package(*args, &blk) + windows_package(*args, &blk) + end +when "mac_os_x" + include_recipe 'homebrew' +end + +node['mysql']['client']['packages'].each do |mysql_pack| + package mysql_pack do + action :install + end +end + +if platform? 'windows' + ruby_block "copy libmysql.dll into ruby path" do + block do + require 'fileutils' + FileUtils.cp "#{node['mysql']['client']['lib_dir']}\\libmysql.dll", node['mysql']['client']['ruby_dir'] + end + not_if { File.exist?("#{node['mysql']['client']['ruby_dir']}\\libmysql.dll") } + end +end diff --git a/vagrant/provision/cookbooks/mysql/recipes/default.rb b/vagrant/provision/cookbooks/mysql/recipes/default.rb new file mode 100755 index 0000000..9ff90d6 --- /dev/null +++ b/vagrant/provision/cookbooks/mysql/recipes/default.rb @@ -0,0 +1,20 @@ +# +# Cookbook Name:: mysql +# Recipe:: default +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +include_recipe "mysql::client" diff --git a/vagrant/provision/cookbooks/mysql/recipes/percona_repo.rb b/vagrant/provision/cookbooks/mysql/recipes/percona_repo.rb new file mode 100755 index 0000000..0051d68 --- /dev/null +++ b/vagrant/provision/cookbooks/mysql/recipes/percona_repo.rb @@ -0,0 +1,48 @@ +# +# Cookbook Name:: mysql +# Recipe:: percona_repo +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + + +case node['platform'] +when "ubuntu", "debian" + include_recipe "apt" + apt_repository "percona" do + uri node['mysql']['percona']['apt_uri'] + distribution node['lsb']['codename'] + components [ "main" ] + keyserver node['mysql']['percona']['apt_keyserver'] + key node['mysql']['percona']['apt_key_id'] + action :add + end +when "centos", "amazon", "redhat" + include_recipe "yum" + yum_key "RPM-GPG-KEY-percona" do + url "http://www.percona.com/downloads/RPM-GPG-KEY-percona" + action :add + end + arch = node['kernel']['machine'] + arch = "i386" unless arch == "x86_64" + pversion = node['platform_version'].split('.').first + yum_repository "percona" do + repo_name "Percona" + description "Percona Repo" + url "http://repo.percona.com/centos/#{pversion}/os/#{arch}/" + key "RPM-GPG-KEY-percona" + action :add + end +end diff --git a/vagrant/provision/cookbooks/mysql/recipes/ruby.rb b/vagrant/provision/cookbooks/mysql/recipes/ruby.rb new file mode 100755 index 0000000..8c8470d --- /dev/null +++ b/vagrant/provision/cookbooks/mysql/recipes/ruby.rb @@ -0,0 +1,31 @@ +# +# Cookbook Name:: mysql +# Recipe:: ruby +# +# Author:: Jesse Howarth () +# Author:: Jamie Winsor () +# +# Copyright 2008-2012, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +node.set['build_essential']['compiletime'] = true +include_recipe "build-essential" +include_recipe "mysql::client" + +node['mysql']['client']['packages'].each do |mysql_pack| + resources("package[#{mysql_pack}]").run_action(:install) +end + +chef_gem "mysql" diff --git a/vagrant/provision/cookbooks/mysql/recipes/server.rb b/vagrant/provision/cookbooks/mysql/recipes/server.rb new file mode 100755 index 0000000..ea70b13 --- /dev/null +++ b/vagrant/provision/cookbooks/mysql/recipes/server.rb @@ -0,0 +1,221 @@ +# +# Cookbook Name:: mysql +# Recipe:: default +# +# Copyright 2008-2011, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +::Chef::Recipe.send(:include, Opscode::OpenSSL::Password) + +include_recipe "mysql::client" + +if Chef::Config[:solo] + missing_attrs = %w{ + server_debian_password server_root_password server_repl_password + }.select do |attr| + node["mysql"][attr].nil? + end.map { |attr| "node['mysql']['#{attr}']" } + + if !missing_attrs.empty? + Chef::Application.fatal!([ + "You must set #{missing_attrs.join(', ')} in chef-solo mode.", + "For more information, see https://github.com/opscode-cookbooks/mysql#chef-solo-note" + ].join(' ')) + end +else + # generate all passwords + node.set_unless['mysql']['server_debian_password'] = secure_password + node.set_unless['mysql']['server_root_password'] = secure_password + node.set_unless['mysql']['server_repl_password'] = secure_password + node.save +end + +if platform_family?(%w{debian}) + + directory "/var/cache/local/preseeding" do + owner "root" + group node['mysql']['root_group'] + mode 0755 + recursive true + end + + execute "preseed mysql-server" do + command "debconf-set-selections /var/cache/local/preseeding/mysql-server.seed" + action :nothing + end + + template "/var/cache/local/preseeding/mysql-server.seed" do + source "mysql-server.seed.erb" + owner "root" + group node['mysql']['root_group'] + mode "0600" + notifies :run, "execute[preseed mysql-server]", :immediately + end + + template "#{node['mysql']['conf_dir']}/debian.cnf" do + source "debian.cnf.erb" + owner "root" + group node['mysql']['root_group'] + mode "0600" + end + +end + +if platform_family?('windows') + package_file = node['mysql']['package_file'] + + remote_file "#{Chef::Config[:file_cache_path]}/#{package_file}" do + source node['mysql']['url'] + not_if { File.exists? "#{Chef::Config[:file_cache_path]}/#{package_file}" } + end + + windows_package node['mysql']['server']['packages'].first do + source "#{Chef::Config[:file_cache_path]}/#{package_file}" + end + + def package(*args, &blk) + windows_package(*args, &blk) + end +end + +node['mysql']['server']['packages'].each do |package_name| + package package_name do + action :install + notifies :start, "service[mysql]", :immediately + end +end + +unless platform_family?(%w{mac_os_x}) + + [File.dirname(node['mysql']['pid_file']), + File.dirname(node['mysql']['tunable']['slow_query_log']), + node['mysql']['conf_dir'], + node['mysql']['confd_dir'], + node['mysql']['log_dir'], + node['mysql']['data_dir']].each do |directory_path| + directory directory_path do + owner "mysql" unless platform? 'windows' + group "mysql" unless platform? 'windows' + action :create + recursive true + end + end + + if platform_family? 'windows' + require 'win32/service' + + windows_path node['mysql']['bin_dir'] do + action :add + end + + windows_batch "install mysql service" do + command "\"#{node['mysql']['bin_dir']}\\mysqld.exe\" --install #{node['mysql']['service_name']}" + not_if { Win32::Service.exists?(node['mysql']['service_name']) } + end + end + + skip_federated = case node['platform'] + when 'fedora', 'ubuntu', 'amazon' + true + when 'centos', 'redhat', 'scientific' + node['platform_version'].to_f < 6.0 + else + false + end +end + +# Homebrew has its own way to do databases +if platform_family?(%w{mac_os_x}) + execute "mysql-install-db" do + command "mysql_install_db --verbose --user=`whoami` --basedir=\"$(brew --prefix mysql)\" --datadir=#{node['mysql']['data_dir']} --tmpdir=/tmp" + environment('TMPDIR' => nil) + action :run + creates "#{node['mysql']['data_dir']}/mysql" + end +else + execute 'mysql-install-db' do + command "mysql_install_db" + action :run + not_if { File.exists?(node['mysql']['data_dir'] + '/mysql/user.frm') } + end + + service "mysql" do + service_name node['mysql']['service_name'] + if node['mysql']['use_upstart'] + provider Chef::Provider::Service::Upstart + end + supports :status => true, :restart => true, :reload => true + action :enable + end +end + +# set the root password for situations that don't support pre-seeding. +# (eg. platforms other than debian/ubuntu & drop-in mysql replacements) +execute "assign-root-password" do + command %Q["#{node['mysql']['mysqladmin_bin']}" -u root password '#{node['mysql']['server_root_password']}'] + action :run + only_if %Q["#{node['mysql']['mysql_bin']}" -u root -e 'show databases;'] +end + +unless platform_family?(%w{mac_os_x}) + grants_path = node['mysql']['grants_path'] + + begin + t = resources("template[#{grants_path}]") + rescue + Chef::Log.info("Could not find previously defined grants.sql resource") + t = template grants_path do + source "grants.sql.erb" + owner "root" unless platform_family? 'windows' + group node['mysql']['root_group'] unless platform_family? 'windows' + mode "0600" + action :create + end + end + + if platform_family? 'windows' + windows_batch "mysql-install-privileges" do + command "\"#{node['mysql']['mysql_bin']}\" -u root #{node['mysql']['server_root_password'].empty? ? '' : '-p' }\"#{node['mysql']['server_root_password']}\" < \"#{grants_path}\"" + action :nothing + subscribes :run, resources("template[#{grants_path}]"), :immediately + end + else + execute "mysql-install-privileges" do + command %Q["#{node['mysql']['mysql_bin']}" -u root #{node['mysql']['server_root_password'].empty? ? '' : '-p' }'#{node['mysql']['server_root_password']}' < "#{grants_path}"] + action :nothing + subscribes :run, resources("template[#{grants_path}]"), :immediately + end + end + + template "#{node['mysql']['conf_dir']}/my.cnf" do + source "my.cnf.erb" + owner "root" unless platform? 'windows' + group node['mysql']['root_group'] unless platform? 'windows' + mode "0644" + case node['mysql']['reload_action'] + when 'restart' + notifies :restart, "service[mysql]", :immediately + when 'reload' + notifies :reload, "service[mysql]", :immediately + else + Chef::Log.info "my.cnf updated but mysql.reload_action is #{node['mysql']['reload_action']}. No action taken." + end + variables :skip_federated => skip_federated + end + + service "mysql" do + action :start + end +end diff --git a/vagrant/provision/cookbooks/mysql/recipes/server_ec2.rb b/vagrant/provision/cookbooks/mysql/recipes/server_ec2.rb new file mode 100755 index 0000000..6033ef4 --- /dev/null +++ b/vagrant/provision/cookbooks/mysql/recipes/server_ec2.rb @@ -0,0 +1,51 @@ +# +# Cookbook Name:: mysql +# Recipe:: default +# +# Copyright 2008-2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + + +if (node.attribute?('ec2') && ! FileTest.directory?(node['mysql']['ec2_path'])) + + service "mysql" do + action :stop + end + + execute "install-mysql" do + command "mv #{node['mysql']['data_dir']} #{node['mysql']['ec2_path']}" + not_if do FileTest.directory?(node['mysql']['ec2_path']) end + end + + [node['mysql']['ec2_path'], node['mysql']['data_dir']].each do |dir| + directory dir do + owner "mysql" + group "mysql" + end + end + + mount node['mysql']['data_dir'] do + device node['mysql']['ec2_path'] + fstype "none" + options "bind,rw" + action [:mount, :enable] + end + + service "mysql" do + action :start + end + +end + diff --git a/vagrant/provision/cookbooks/mysql/templates/default/debian.cnf.erb b/vagrant/provision/cookbooks/mysql/templates/default/debian.cnf.erb new file mode 100755 index 0000000..989b125 --- /dev/null +++ b/vagrant/provision/cookbooks/mysql/templates/default/debian.cnf.erb @@ -0,0 +1,12 @@ +[client] +host = localhost +user = debian-sys-maint +password = <%= node['mysql']['server_debian_password'] %> +socket = <%= node['mysql']['socket'] %> + +[mysql_upgrade] +host = localhost +user = debian-sys-maint +password = <%= node['mysql']['server_debian_password'] %> +socket = <%= node['mysql']['socket'] %> +basedir = /usr diff --git a/vagrant/provision/cookbooks/mysql/templates/default/grants.sql.erb b/vagrant/provision/cookbooks/mysql/templates/default/grants.sql.erb new file mode 100755 index 0000000..87c0a0c --- /dev/null +++ b/vagrant/provision/cookbooks/mysql/templates/default/grants.sql.erb @@ -0,0 +1,40 @@ +# Generated by Chef for <%= node['hostname'] %>. +# Local modifications will be overwritten. +<% case node['platform_family'] -%> +<% when "debian" -%> + +# Grant privileges for debian-sys-main user +GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY '<%= node['mysql']['server_debian_password'] %>' WITH GRANT OPTION; +<% end %> + +# Grant replication for a slave user. +GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' identified by '<%= node['mysql']['server_repl_password'] %>'; +<% if node['mysql']['allow_remote_root'] -%> + +# Set the server root password. This should be preseeded by the package installation. +GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY '<%= node['mysql']['server_root_password'] %>' WITH GRANT OPTION; +<% else %> + +# remove remote access for root user and set password for local root user +DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1'); +UPDATE mysql.user SET Password=PASSWORD('<%= node['mysql']['server_root_password'] %>') WHERE User='root'; +<% end %> +<% if node['mysql']['remove_anonymous_users'] -%> + +# Remove anonymous users +DELETE FROM mysql.user WHERE User=''; +<% end %> +<% if node['mysql']['remove_test_database'] -%> + +# Remove test database and access to it +DROP DATABASE IF EXISTS test; +DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%'; +<% end %> + +# Set the password for root@localhost +SET PASSWORD FOR 'root'@'localhost' = PASSWORD('<%= node['mysql']['server_root_password'] %>'); +<% if node['mysql']['root_network_acl'] -%> + +# allow root to connect from a remote network if root_network_acl is not nil +GRANT ALL PRIVILEGES ON *.* TO 'root'@'<%= node['mysql']['root_network_acl'] %>' IDENTIFIED BY '<%= node['mysql']['server_root_password'] %>' WITH GRANT OPTION; +<% end -%> diff --git a/vagrant/provision/cookbooks/mysql/templates/default/my.cnf.erb b/vagrant/provision/cookbooks/mysql/templates/default/my.cnf.erb new file mode 100755 index 0000000..669d060 --- /dev/null +++ b/vagrant/provision/cookbooks/mysql/templates/default/my.cnf.erb @@ -0,0 +1,315 @@ +# +# Generated by Chef for <%= node['hostname'] %> +# +# Local modifications will be overwritten. +# +# The MySQL database server configuration file. +# +# You can copy this to one of: +# - "/etc/mysql/my.cnf" to set global options, +# - "~/.my.cnf" to set user-specific options. +# +# One can use all long options that the program supports. +# Run program with --help to get a list of available options and with +# --print-defaults to see which it would actually understand and use. +# +# For explanations see +# http://dev.mysql.com/doc/mysql/en/server-system-variables.html + +# This will be passed to all mysql clients +# It has been reported that passwords should be enclosed with ticks/quotes +# escpecially if they contain "#" chars... +# Remember to edit /etc/mysql/debian.cnf when changing the socket location. +[client] +port = <%= node['mysql']['port'] %> +socket = <%= node['mysql']['socket'] %> + +# Here is entries for some specific programs +# The following values assume you have at least 32M ram + +# This was formally known as [safe_mysqld]. Both versions are currently parsed. +[mysqld_safe] +socket = <%= node['mysql']['socket'] %> +nice = <%= node['mysql']['nice'] %> + +[mysqld] +# +# * Basic Settings +# + +# +# * IMPORTANT +# If you make changes to these settings and your system uses apparmor, you may +# also need to also adjust /etc/apparmor.d/usr.sbin.mysqld. +# + +user = mysql +pid-file = <%= node['mysql']['pid_file'] %> +socket = <%= node['mysql']['socket'] %> +port = <%= node['mysql']['port'] %> +basedir = <%= node['mysql']['basedir'] %> +datadir = <%= node['mysql']['data_dir'] %> +tmpdir = <%= node['mysql']['tmpdir'].join(':') %> +skip-external-locking +<%- if node['mysql']['tunable']['skip-name-resolve'] %> +skip-name-resolve +<%- end %> + +# Charset and Collation +character-set-server = <%= node['mysql']['tunable']['character-set-server'] %> +collation-server = <%= node['mysql']['tunable']['collation-server'] %> +<%- if node['mysql']['tunable']['lower_case_table_names'] %> +lower_case_table_names = <%= node['mysql']['tunable']['lower_case_table_names'] %> +<%- end %> +<%- if node['mysql']['tunable']['event_scheduler'] %> +event_scheduler = <%= node['mysql']['tunable']['event_scheduler'] %> +<%- end %> +<%- if node['mysql']['tunable']['skip-character-set-client-handshake'] %> +skip-character-set-client-handshake +<%- end %> +<%- if (node['mysql']['tunable']['lc_messages_dir'] && node['mysql']['tunable']['lc_messages']) %> +lc_messages_dir = <%= node['mysql']['lc_messages_dir'] %> +lc_messages = <%= node['mysql']['lc_messages'] %> +<%- elsif (node['mysql']['tunable']['languages']) %> +languages = <%= node['mysql']['tunable']['languages'] %> +<%- end %> + +# +# Instead of skip-networking the default is now to listen only on +# localhost which is more compatible and is not less secure. +bind-address = <%= node['mysql']['bind_address'] %> +# +# * Fine Tuning +# +key_buffer_size = <%= node['mysql']['tunable']['key_buffer_size'] %> +max_allowed_packet = <%= node['mysql']['tunable']['max_allowed_packet'] %> +thread_stack = <%= node['mysql']['tunable']['thread_stack'] %> +thread_cache_size = <%= node['mysql']['tunable']['thread_cache_size'] %> +sort_buffer_size = <%= node['mysql']['tunable']['sort_buffer_size'] %> +read_buffer_size = <%= node['mysql']['tunable']['read_buffer_size'] %> +read_rnd_buffer_size = <%= node['mysql']['tunable']['read_rnd_buffer_size'] %> +join_buffer_size = <%= node['mysql']['tunable']['join_buffer_size'] %> + +auto-increment-increment = <%= node['mysql']['auto-increment-increment'] %> +auto-increment-offset = <%= node['mysql']['auto-increment-offset'] %> + +# This replaces the startup script and checks MyISAM tables if needed +# the first time they are touched +myisam-recover = <%= node['mysql']['tunable']['myisam-recover'] %> +max_connections = <%= node['mysql']['tunable']['max_connections'] %> +max_connect_errors = <%= node['mysql']['tunable']['max_connect_errors'] %> +concurrent_insert = <%= node['mysql']['tunable']['concurrent_insert'] %> +connect_timeout = <%= node['mysql']['tunable']['connect_timeout'] %> +wait_timeout = <%= node['mysql']['tunable']['wait_timeout'] %> +net_read_timeout = <%= node['mysql']['tunable']['net_read_timeout'] %> +net_write_timeout = <%= node['mysql']['tunable']['net_write_timeout'] %> +back_log = <%= node['mysql']['tunable']['back_log'] %> +table_cache = <%= node['mysql']['tunable']['table_cache'] %> +<%- if node['mysql']['tunable']['table_open_cache'] %> +table_open_cache = <%= node['mysql']['tunable']['table_open_cache'] %> +<%- end %> +tmp_table_size = <%= node['mysql']['tunable']['tmp_table_size'] %> +max_heap_table_size = <%= node['mysql']['tunable']['max_heap_table_size'] %> +bulk_insert_buffer_size = <%= node['mysql']['tunable']['bulk_insert_buffer_size'] %> +open-files-limit = <%= node['mysql']['tunable']['open-files-limit'] %> + +# Default Table Settings +<%- if node['mysql']['tunable']['sql_mode'] %> +sql_mode = "<%= node['mysql']['tunable']['sql_mode'] %>" +<%- end %> + +# +# * Query Cache Configuration +# +query_cache_limit = <%= node['mysql']['tunable']['query_cache_limit'] %> +query_cache_size = <%= node['mysql']['tunable']['query_cache_size'] %> +# +# * Logging +# +# Both location gets rotated by the cronjob. +# Be aware that this log type is a performance killer. +#log = /var/log/mysql/mysql.log +# +# Error logging goes to syslog. This is a Debian improvement :) +<%- if node['mysql']['tunable']['log_error'] %> +log_error = <%= node['mysql']['tunable']['log_error'] %> +<%- end %> +<%- if node['mysql']['tunable']['log_warnings'] %> +log_warnings +<%- end %> +# +# * Replication +# + + +# +# Here you can see queries with especially long duration +<%- if node['mysql']['version'].to_f >= 5.5 %> +slow_query_log = <%= node['mysql']['tunable']['slow_query_log'] %> +<% else %> +log_slow_queries = <%= node['mysql']['tunable']['slow_query_log'] %> +<% end %> + +long_query_time = <%= node['mysql']['tunable']['long_query_time'] %> +<%- if node['mysql']['tunable']['log_queries_not_using_index'] and node['mysql']['slow_query_log'] %> +log-queries-not-using-indexes +<%- end %> +# +# The following can be used as easy to replay backup logs or for replication. +# note: if you are setting up a replication slave, see README.Debian about +# other settings you may need to change. +<%- if node['mysql']['tunable']['server_id'] %> +server-id = <%= node['mysql']['tunable']['server_id'] %> +<% end %> +<%- if node['mysql']['tunable']['log_bin'] %> +log_bin = <%= node['mysql']['tunable']['log_bin'] %> +binlog_format = <%= node['mysql']['tunable']['binlog_format'] %> +log_slave_updates = <%= node['mysql']['tunable']['log_slave_updates'] %> +<%- end %> +<%- if node['mysql']['tunable']['log_bin_trust_function_creators'] %> +log_bin_trust_function_creators +<%- end %> +expire_logs_days = <%= node['mysql']['tunable']['expire_logs_days'] %> +max_binlog_size = <%= node['mysql']['tunable']['max_binlog_size'] %> +binlog_cache_size = <%= node['mysql']['tunable']['binlog_cache_size'] %> +#binlog_do_db = include_database_name +#binlog_ignore_db = include_database_name +<%- if node['mysql']['tunable']['relay_log'] %> +relay_log = <%= node['mysql']['tunable']['relay_log'] %> +<%- end %> +<%- if node['mysql']['tunable']['relay_log_index'] %> +relay_log_index = <%= node['mysql']['tunable']['relay_log_index'] %> +<%- end %> + +sync_binlog = <%= node['mysql']['tunable']['sync_binlog'] %> +<%- if node['mysql']['tunable']['skip_slave_start'] %> +skip_slave_start +<%- end %> +<%- if node['mysql']['tunable']['read_only'] %> +read_only = 1 +<%- end %> + +<%- if node['mysql']['tunable']['transaction-isolation'] %> +transaction-isolation = <%= node['mysql']['tunable']['transaction-isolation'] %> +<%- end %> + +<%- if node['mysql']['tunable']['slave_compressed_protocol'] %> +slave_compressed_protocol = <%= node['mysql']['tunable']['slave_compressed_protocol'] %> +<%- end %> +# +# * InnoDB +# +# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/. +# Read the manual for more InnoDB related options. There are many! +# You might want to disable InnoDB to shrink the mysqld process by circa 100MB. +#skip-innodb + +<%- if node["mysql"]["version"].to_f >= 5.5 %> +innodb_write_io_threads = <%= node['mysql']['tunable']['innodb_write_io_threads'] %> +innodb_io_capacity = <%= node['mysql']['tunable']['innodb_io_capacity'] %> +innodb_read_io_threads = <%= node['mysql']['tunable']['innodb_read_io_threads'] %> +innodb_buffer_pool_instances = <%= node['mysql']['tunable']['innodb_buffer_pool_instances'] %> +<%- end %> + +## InnoDB Plugin Independent Settings +innodb_data_home_dir = <%= node['mysql']['data_dir'] %> +innodb_log_group_home_dir = <%= node['mysql']['log_dir'] %> +<%- if node['mysql']['log_files_in_group'] %> +innodb_log_files_in_group = <%= node['mysql']['log_files_in_group'] %> +<%- end %> + +<%- if node['mysql']['innodb_status_file'] %> +innodb_status_file +<%- end %> +<%- if node['mysql']['tunable']['innodb_file_per_table'] %> +innodb_file_per_table +<%- end %> +innodb_table_locks = <%= node['mysql']['tunable']['innodb_table_locks'] %> +innodb_lock_wait_timeout = <%= node['mysql']['tunable']['innodb_lock_wait_timeout'] %> +innodb_thread_concurrency = <%= node['mysql']['tunable']['innodb_thread_concurrency'] %> +innodb_commit_concurrency = <%= node['mysql']['tunable']['innodb_commit_concurrency'] %> +innodb_support_xa = <%= node['mysql']['tunable']['innodb_support_xa'] %> +<%- if node['mysql']['tunable']['skip-innodb-doublewrite'] %> +skip-innodb-doublewrite +<%- end %> + +innodb_buffer_pool_size = <%= node['mysql']['tunable']['innodb_buffer_pool_size'] %> +innodb_log_file_size = <%= node['mysql']['tunable']['innodb_log_file_size'] %> +innodb_additional_mem_pool_size = <%= node['mysql']['tunable']['innodb_additional_mem_pool_size'] %> +innodb_data_file_path = <%= node['mysql']['tunable']['innodb_data_file_path'] %> +innodb_flush_log_at_trx_commit = <%= node['mysql']['tunable']['innodb_flush_log_at_trx_commit'] %> +<%- if node['mysql']['tunable']['innodb_flush_method'] %> +innodb_flush_method = <%= node['mysql']['tunable']['innodb_flush_method'] %> +<%- end %> +innodb_log_buffer_size = <%= node['mysql']['tunable']['innodb_log_buffer_size'] %> +<%- if node['mysql']['tunable']['innodb_adaptive_flushing'] %> +innodb_adaptive_flushing = <%= node['mysql']['tunable']['innodb_adaptive_flushing'] %> +<%- end %> + +<% if @skip_federated %> +# +# * Federated +# +# The FEDERATED storage engine is disabled since 5.0.67 by default in the .cnf files +# shipped with MySQL distributions (my-huge.cnf, my-medium.cnf, and so forth). +# +skip-federated +<% end %> +# +# * Security Features +# +# Read the manual, too, if you want chroot! +# chroot = /var/lib/mysql/ +# +# For generating SSL certificates I recommend the OpenSSL GUI "tinyca". +# +# ssl-ca=/etc/mysql/cacert.pem +# ssl-cert=/etc/mysql/server-cert.pem +# ssl-key=/etc/mysql/server-key.pem + +[mysqldump] +quick +quote-names +max_allowed_packet = <%= node['mysql']['tunable']['max_allowed_packet'] %> + +[mysql] +#no-auto-rehash # faster start of mysql but no tab completition + +[myisamchk] +key_buffer = <%= node['mysql']['tunable']['max_allowed_packet'] %> + +myisam_sort_buffer_size = <%= node['mysql']['tunable']['myisam_sort_buffer_size'] %> +myisam_max_sort_file_size = <%= node['mysql']['tunable']['myisam_max_sort_file_size'] %> +myisam_repair_threads = <%= node['mysql']['tunable']['myisam_repair_threads'] %> +myisam-recover = <%= node['mysql']['tunable']['myisam-recover'] %> + +# +# * NDB Cluster +# +# See /usr/share/doc/mysql-server-*/README.Debian for more information. +# +# The following configuration is read by the NDB Data Nodes (ndbd processes) +# not from the NDB Management Nodes (ndb_mgmd processes). +# +# [MYSQL_CLUSTER] +# ndb-connectstring=127.0.0.1 + +<% case node['platform_family'] -%> +<% when "rhel", "fedora", "suse" -%> +# +# * BerkeleyDB +# +# Using BerkeleyDB is now discouraged as its support will cease in 5.1.12. +skip-bdb +# Default to using old password format for compatibility with mysql 3.x +# clients (those using the mysqlclient10 compatibility package). +old_passwords = <%= node['mysql']['old_passwords'] %> +<% end -%> + +<% if node['mysql']['confd_dir'] -%> +# +# * IMPORTANT: Additional settings that can override those from this file! +# The files must end with '.cnf', otherwise they'll be ignored. +# +!includedir <%= node['mysql']['confd_dir'] %>/ +<% end -%> diff --git a/vagrant/provision/cookbooks/mysql/templates/default/mysql-server.seed.erb b/vagrant/provision/cookbooks/mysql/templates/default/mysql-server.seed.erb new file mode 100755 index 0000000..a5a74f0 --- /dev/null +++ b/vagrant/provision/cookbooks/mysql/templates/default/mysql-server.seed.erb @@ -0,0 +1,10 @@ +mysql-server-5.0 mysql-server/root_password_again select <%= node['mysql']['server_root_password'] %> +mysql-server-5.0 mysql-server/root_password select <%= node['mysql']['server_root_password'] %> +mysql-server-5.0 mysql-server-5.0/really_downgrade boolean false +mysql-server-5.0 mysql-server-5.0/need_sarge_compat boolean false +mysql-server-5.0 mysql-server-5.0/start_on_boot boolean true +mysql-server-5.0 mysql-server/error_setting_password boolean false +mysql-server-5.0 mysql-server-5.0/nis_warning note +mysql-server-5.0 mysql-server-5.0/postrm_remove_databases boolean false +mysql-server-5.0 mysql-server/password_mismatch boolean false +mysql-server-5.0 mysql-server-5.0/need_sarge_compat_done boolean true diff --git a/vagrant/provision/cookbooks/mysql/templates/default/port_mysql.erb b/vagrant/provision/cookbooks/mysql/templates/default/port_mysql.erb new file mode 100755 index 0000000..8ad63a7 --- /dev/null +++ b/vagrant/provision/cookbooks/mysql/templates/default/port_mysql.erb @@ -0,0 +1,3 @@ +# MySQL +-A FWR -p tcp -m tcp --dport 3306 -j ACCEPT +-A FWR -p udp -m udp --dport 3306 -j ACCEPT diff --git a/vagrant/provision/cookbooks/mysql/templates/windows/my.cnf.erb b/vagrant/provision/cookbooks/mysql/templates/windows/my.cnf.erb new file mode 100755 index 0000000..f0550c1 --- /dev/null +++ b/vagrant/provision/cookbooks/mysql/templates/windows/my.cnf.erb @@ -0,0 +1,61 @@ +# +# Generated by Chef for <%= node['hostname'] %> +# +# Local modifications will be overwritten. +# +# The MySQL database server configuration file. +# +# One can use all long options that the program supports. +# Run program with --help to get a list of available options and with +# --print-defaults to see which it would actually understand and use. +# +# For explanations see +# http://dev.mysql.com/doc/mysql/en/server-system-variables.html + +# This will be passed to all mysql clients +# It has been reported that passwords should be enclosed with ticks/quotes +# escpecially if they contain "#" chars... +[client] +port = 3306 + +[mysql] +default-character-set = latin1 + +[mysqld] +# +# * Basic Settings +# +port = 3306 +basedir = <%= node['mysql']['basedir'] %> +datadir = <%= node['mysql']['data_dir'] %> +character-set-server = latin1 +default-storage-engine = INNODB +sql-mode = "STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" + +# +# * Fine Tuning +# +thread_cache_size = <%= node['mysql']['tunable']['thread_cache_size'] %> +max_connections = <%= node['mysql']['tunable']['max_connections'] %> +table_cache = <%= node['mysql']['tunable']['table_cache'] %> +query_cache_size = <%= node['mysql']['tunable']['query_cache_size'] %> +tmp_table_size = 5M +myisam_max_sort_file_size = 100G +myisam_sort_buffer_size = 8M +key_buffer_size = 8M +read_buffer_size = 64K +read_rnd_buffer_size = 256K +sort_buffer_size = 212K + +# +# * InnoDB +# +# Read the manual for more InnoDB related options. There are many! +# You might want to disable InnoDB to shrink the mysqld process by circa 100MB. +# +innodb_additional_mem_pool_size = 2M +innodb_flush_log_at_trx_commit = 1 +innodb_log_buffer_size = 1M +innodb_buffer_pool_size = <%= node['mysql']['tunable']['innodb_buffer_pool_size'] %> +innodb_log_file_size = 10M +innodb_thread_concurrency = 8 diff --git a/vagrant/provision/cookbooks/openssl/CHANGELOG.md b/vagrant/provision/cookbooks/openssl/CHANGELOG.md new file mode 100755 index 0000000..d2d85d9 --- /dev/null +++ b/vagrant/provision/cookbooks/openssl/CHANGELOG.md @@ -0,0 +1,13 @@ +openssl Cookbook CHANGELOG +========================== +This file is used to list changes made in each version of the openssl cookbook. + + +v1.1.0 +------ +### Improvement +- **[COOK-3222](https://tickets.opscode.com/browse/COOK-3222)** - Allow setting length for `secure_password` + +v1.0.2 +------ +- Add name attribute to metadata diff --git a/vagrant/provision/cookbooks/openssl/README.md b/vagrant/provision/cookbooks/openssl/README.md new file mode 100755 index 0000000..d5affff --- /dev/null +++ b/vagrant/provision/cookbooks/openssl/README.md @@ -0,0 +1,38 @@ +openssl Cookbook +================ +Provide a library method to generate secure random passwords in recipes. + +Requirements +------------ +Works on any platform with OpenSSL Ruby bindings installed, which are a requirement for Chef anyway. + + +Usage +----- +Most often this will be used to generate a secure password for an attribute. + +```ruby +include Opscode::OpenSSL::Password +set_unless[:my_password] = secure_password +``` + + +License & Authors +----------------- +- Author:: Joshua Timberman () + +```text +Copyright:: 2009-2011, Opscode, Inc + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +``` diff --git a/vagrant/provision/cookbooks/openssl/libraries/secure_password.rb b/vagrant/provision/cookbooks/openssl/libraries/secure_password.rb new file mode 100755 index 0000000..9513fa3 --- /dev/null +++ b/vagrant/provision/cookbooks/openssl/libraries/secure_password.rb @@ -0,0 +1,37 @@ +# +# Cookbook Name:: openssl +# Library:: secure_password +# Author:: Joshua Timberman +# +# Copyright 2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +require 'openssl' + +module Opscode + module OpenSSL + module Password + def secure_password(length = 20) + pw = String.new + + while pw.length < length + pw << ::OpenSSL::Random.random_bytes(1).gsub(/\W/, '') + end + + pw + end + end + end +end diff --git a/vagrant/provision/cookbooks/openssl/metadata.json b/vagrant/provision/cookbooks/openssl/metadata.json new file mode 100755 index 0000000..a25599e --- /dev/null +++ b/vagrant/provision/cookbooks/openssl/metadata.json @@ -0,0 +1,30 @@ +{ + "name": "openssl", + "version": "1.1.0", + "description": "Provides a library with a method for generating secure random passwords.", + "long_description": "openssl Cookbook\n================\nProvide a library method to generate secure random passwords in recipes.\n\nRequirements\n------------\nWorks on any platform with OpenSSL Ruby bindings installed, which are a requirement for Chef anyway.\n\n\nUsage\n-----\nMost often this will be used to generate a secure password for an attribute.\n\n```ruby\ninclude Opscode::OpenSSL::Password\nset_unless[:my_password] = secure_password\n```\n\n\nLicense & Authors\n-----------------\n- Author:: Joshua Timberman ()\n\n```text\nCopyright:: 2009-2011, Opscode, Inc\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n", + "maintainer": "Opscode, Inc.", + "maintainer_email": "cookbooks@opscode.com", + "license": "Apache 2.0", + "platforms": { + }, + "dependencies": { + }, + "recommendations": { + }, + "suggestions": { + }, + "conflicting": { + }, + "providing": { + }, + "replacing": { + }, + "attributes": { + }, + "groupings": { + }, + "recipes": { + "openssl": "Empty, this cookbook provides a library, see README.md" + } +} \ No newline at end of file diff --git a/vagrant/provision/cookbooks/openssl/metadata.rb b/vagrant/provision/cookbooks/openssl/metadata.rb new file mode 100755 index 0000000..1a0c22e --- /dev/null +++ b/vagrant/provision/cookbooks/openssl/metadata.rb @@ -0,0 +1,9 @@ +name "openssl" +maintainer "Opscode, Inc." +maintainer_email "cookbooks@opscode.com" +license "Apache 2.0" +description "Provides a library with a method for generating secure random passwords." +long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) +version "1.1.0" + +recipe "openssl", "Empty, this cookbook provides a library, see README.md" diff --git a/vagrant/provision/cookbooks/openssl/recipes/default.rb b/vagrant/provision/cookbooks/openssl/recipes/default.rb new file mode 100755 index 0000000..9850a28 --- /dev/null +++ b/vagrant/provision/cookbooks/openssl/recipes/default.rb @@ -0,0 +1,19 @@ +# +# Cookbook Name:: openssl +# Recipe:: default +# +# Copyright 2009, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + diff --git a/vagrant/provision/cookbooks/php/CHANGELOG.md b/vagrant/provision/cookbooks/php/CHANGELOG.md new file mode 100755 index 0000000..e9eb5a5 --- /dev/null +++ b/vagrant/provision/cookbooks/php/CHANGELOG.md @@ -0,0 +1,63 @@ +php Cookbook CHANGELOG +====================== +This file is used to list changes made in each version of the php cookbook. + + +v1.2.4 +------ +### Improvement +- **[COOK-3047](https://tickets.opscode.com/browse/COOK-3047)** - Sort directives in `php.ini` +- **[COOK-2928](https://tickets.opscode.com/browse/COOK-2928)** - Abstract `php.ini` directives into variables + +### Bug +- **[COOK-2378](https://tickets.opscode.com/browse/COOK-2378)** - Fix `php_pear` for libevent + +v1.2.2 +------ +### Bug +- [COOK-3050]: `lib_dir` declared in wrong place for redhat +- [COOK-3102]: remove fileinfo recipe from php cookbook + +### Improvement +- [COOK-3101]: use a method to abstract range of "el 5" versions in php recipes + +v1.2.0 +------ +### Improvement +- [COOK-2516]: Better support for SUSE distribution for php cookbook +- [COOK-3035]: update php::source to install 5.4.15 by default + +### Bug +- [COOK-2463]: PHP PEAR Provider Installs Most Recent Version, Without Respect to Preferred State +- [COOK-2514]: php_pear: does not handle more exotic version strings + +v1.1.8 +------ +- [COOK-1998] - Enable override of PHP packages in attributes + +v1.1.6 +------ +- [COOK-2324] - adds Oracle linux support + +v1.1.4 +------ +- [COOK-2106] - `php_pear` cannot find available packages + +v1.1.2 +------ +- [COOK-1803] - use better regexp to match package name +- [COOK-1926] - support Amazon linux + +v1.1.0 +------ +- [COOK-543] - php.ini template should be configurable +- [COOK-1067] - support for PECL zend extensions +- [COOK-1193] - update package names for EPEL 6 +- [COOK-1348] - rescue Mixlib::ShellOut::ShellCommandFailed (chef 0.10.10) +- [COOK-1465] - fix pear extension template + +v1.0.2 +------ +- [COOK-993] Add mhash-devel to centos php source libs +- [COOK-989] - bump version of php to 5.3.10 +- Also download the .tar.gz instead of .tar.bz2 as bzip2 may not be in the base OS (e.g., CentOS 6 minimal) diff --git a/vagrant/provision/cookbooks/php/README.md b/vagrant/provision/cookbooks/php/README.md new file mode 100755 index 0000000..4153861 --- /dev/null +++ b/vagrant/provision/cookbooks/php/README.md @@ -0,0 +1,233 @@ +php Cookbook +============ +Installs and configures PHP 5.3 and the PEAR package management system. Also includes LWRPs for managing PEAR (and PECL) packages along with PECL channels. + + +Requirements +------------ +### Platforms +- Debian, Ubuntu +- CentOS, Red Hat, Fedora, Amazon Linux + +### Cookbooks +- build-essential +- xml +- mysql + +These cookbooks are only used when building PHP from source. + + +Attributes +---------- +- `node['php']['install_method']` = method to install php with, default `package`. +- `node['php']['directives']` = Hash of directives and values to append to `php.ini`, default `{}`. + +The file also contains the following attribute types: + +* platform specific locations and settings. +* source installation settings + + +Resource/Provider +----------------- +This cookbook includes LWRPs for managing: + +- PEAR channels +- PEAR/PECL packages + +### `php_pear_channel` +[PEAR Channels](http://pear.php.net/manual/en/guide.users.commandline.channels.php) are alternative sources for PEAR packages. This LWRP provides and easy way to manage these channels. + +#### Actions +- :discover: Initialize a channel from its server. +- :add: Add a channel to the channel list, usually only used to add private channels. Public channels are usually added using the `:discover` action +- :update: Update an existing channel +- :remove: Remove a channel from the List + +#### Attribute Parameters +- channel_name: name attribute. The name of the channel to discover +- channel_xml: the channel.xml file of the channel you are adding + +#### Examples +```ruby +# discover the horde channel +php_pear_channel "pear.horde.org" do + action :discover +end + +# download xml then add the symfony channel +remote_file "#{Chef::Config[:file_cache_path]}/symfony-channel.xml" do + source "http://pear.symfony-project.com/channel.xml" + mode 0644 +end +php_pear_channel "symfony" do + channel_xml "#{Chef::Config[:file_cache_path]}/symfony-channel.xml" + action :add +end + +# update the main pear channel +php_pear_channel 'pear.php.net' do + action :update +end + +# update the main pecl channel +php_pear_channel 'pecl.php.net' do + action :update +end +``` + +### `php_pear` +[PEAR](http://pear.php.net/) is a framework and distribution system for reusable PHP components. [PECL](http://pecl.php.net/) is a repository for PHP Extensions. PECL contains C extensions for compiling into PHP. As C programs, PECL extensions run more efficiently than PEAR packages. PEARs and PECLs use the same packaging and distribution system. As such this LWRP is clever enough to abstract away the small differences and can be used for managing either. This LWRP also creates the proper module .ini file for each PECL extension at the correct location for each supported platform. + +#### Actions +- :install: Install a pear package - if version is provided, install that specific version +- :upgrade: Upgrade a pear package - if version is provided, upgrade to that specific version +- :remove: Remove a pear package +- :purge: Purge a pear package (this usually entails removing configuration files as well as the package itself). With pear packages this behaves the same as `:remove` + +#### Attribute Parameters +- package_name: name attribute. The name of the pear package to install +- version: the version of the pear package to install/upgrade. If no version is given latest is assumed. +- preferred_state: PEAR by default installs stable packages only, this allows you to install pear packages in a devel, alpha or beta state +- directives: extra extension directives (settings) for a pecl. on most platforms these usually get rendered into the extension's .ini file +- zend_extensions: extension filenames which should be loaded with zend_extension. +- options: Add additional options to the underlying pear package command + +#### Examples +```ruby +# upgrade a pear +php_pear "XML_RPC" do + action :upgrade +end + + +# install a specific version +php_pear "XML_RPC" do + version "1.5.4" + action :install +end + + +# install the mongodb pecl +php_pear "mongo" do + action :install +end + +# install the xdebug pecl +php_pear "xdebug" do + # Specify that xdebug.so must be loaded as a zend extension + zend_extensions ['xdebug.so'] + action :install +end + + +# install apc pecl with directives +php_pear "apc" do + action :install + directives(:shm_size => 128, :enable_cli => 1) +end + + +# install the beta version of Horde_Url +# from the horde channel +hc = php_pear_channel "pear.horde.org" do + action :discover +end +php_pear "Horde_Url" do + preferred_state "beta" + channel hc.channel_name + action :install +end + + +# install the YAML pear from the symfony project +sc = php_pear_channel "pear.symfony-project.com" do + action :discover +end +php_pear "YAML" do + channel sc.channel_name + action :install +end +``` + + +Recipes +------- +### default +Include the default recipe in a run list, to get `php`. By default `php` is installed from packages but this can be changed by using the `install_method` attribute. + +### package +This recipe installs PHP from packages. + +### source +This recipe installs PHP from source. + + +Deprecated Recipes +------------------ +The following recipes are deprecated and will be removed from a future version of this cookbook. + +- `module_apc` +- `module_curl` +- `module_fileinfo` +- `module_fpdf` +- `module_gd` +- `module_ldap` +- `module_memcache` +- `module_mysql` +- `module_pgsql` +- `module_sqlite3` + +The installation of the php modules in these recipes can now be accomplished by installing from a native package or via the new php_pear LWRP. For example, the functionality of the `module_memcache` recipe can be enabled in the following ways: + +```ruby +# using apt +package "php5-memcache" do + action :install +end + +# using pear LWRP +php_pear "memcache" do + action :install +end +``` + + +Usage +----- +Simply include the `php` recipe where ever you would like php installed. To install from source override the `node['php']['install_method']` attribute with in a role: + +```ruby +name "php" +description "Install php from source" +override_attributes( + "php" => { + "install_method" => "source" + } +) +run_list( + "recipe[php]" +) +``` + + +License & Authors +----------------- +- Author:: Seth Chisamore () +- Author:: Joshua Timberman () + +```text +Copyright:: 2011, Opscode, Inc + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +``` diff --git a/vagrant/provision/cookbooks/php/attributes/default.rb b/vagrant/provision/cookbooks/php/attributes/default.rb new file mode 100755 index 0000000..c5a44d8 --- /dev/null +++ b/vagrant/provision/cookbooks/php/attributes/default.rb @@ -0,0 +1,100 @@ +# +# Author:: Seth Chisamore () +# Cookbook Name:: php +# Attribute:: default +# +# Copyright 2011, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +lib_dir = 'lib' +default['php']['install_method'] = 'package' +default['php']['directives'] = {} + +case node["platform_family"] +when "rhel", "fedora" + lib_dir = node['kernel']['machine'] =~ /x86_64/ ? 'lib64' : 'lib' + default['php']['conf_dir'] = '/etc' + default['php']['ext_conf_dir'] = '/etc/php.d' + default['php']['fpm_user'] = 'nobody' + default['php']['fpm_group'] = 'nobody' + default['php']['ext_dir'] = "/usr/#{lib_dir}/php/modules" + if node['platform_version'].to_f < 6 then + default['php']['packages'] = ['php53', 'php53-devel', 'php53-cli', 'php-pear'] + else + default['php']['packages'] = ['php', 'php-devel', 'php-cli', 'php-pear'] + end +when "debian" + default['php']['conf_dir'] = '/etc/php5/cli' + default['php']['ext_conf_dir'] = '/etc/php5/conf.d' + default['php']['fpm_user'] = 'www-data' + default['php']['fpm_group'] = 'www-data' + default['php']['packages'] = ['php5-cgi', 'php5', 'php5-dev', 'php5-cli', 'php-pear'] +when "suse" + default['php']['conf_dir'] = '/etc/php5/cli' + default['php']['ext_conf_dir'] = '/etc/php5/conf.d' + default['php']['fpm_user'] = 'wwwrun' + default['php']['fpm_group'] = 'www' + default['php']['packages'] = ['apache2-mod_php5', 'php5-pear'] + lib_dir = node['kernel']['machine'] =~ /x86_64/ ? 'lib64' : 'lib' +else + default['php']['conf_dir'] = '/etc/php5/cli' + default['php']['ext_conf_dir'] = '/etc/php5/conf.d' + default['php']['fpm_user'] = 'www-data' + default['php']['fpm_group'] = 'www-data' + default['php']['packages'] = ['php5-cgi', 'php5', 'php5-dev', 'php5-cli', 'php-pear'] +end + +default['php']['url'] = 'http://us.php.net/distributions' +default['php']['version'] = '5.4.15' +default['php']['checksum'] = '94e92973c996cf8deabafe0ba19b23d48a79d6e64592a5bf4ea63036eec77c3c' +default['php']['prefix_dir'] = '/usr/local' + +default['php']['configure_options'] = %W{--prefix=#{php['prefix_dir']} + --with-libdir=#{lib_dir} + --with-config-file-path=#{php['conf_dir']} + --with-config-file-scan-dir=#{php['ext_conf_dir']} + --with-pear + --enable-fpm + --with-fpm-user=#{php['fpm_user']} + --with-fpm-group=#{php['fpm_group']} + --with-zlib + --with-openssl + --with-kerberos + --with-bz2 + --with-curl + --enable-ftp + --enable-zip + --enable-exif + --with-gd + --enable-gd-native-ttf + --with-gettext + --with-gmp + --with-mhash + --with-iconv + --with-imap + --with-imap-ssl + --enable-sockets + --enable-soap + --with-xmlrpc + --with-libevent-dir + --with-mcrypt + --enable-mbstring + --with-t1lib + --with-mysql + --with-mysqli=/usr/bin/mysql_config + --with-mysql-sock + --with-sqlite3 + --with-pdo-mysql + --with-pdo-sqlite} diff --git a/vagrant/provision/cookbooks/php/libraries/helpers.rb b/vagrant/provision/cookbooks/php/libraries/helpers.rb new file mode 100755 index 0000000..1a103f3 --- /dev/null +++ b/vagrant/provision/cookbooks/php/libraries/helpers.rb @@ -0,0 +1,23 @@ +# +# Author:: Joshua Timberman () +# Cookbook Name:: php +# Libraries:: helpers +# +# Copyright 2013, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +def el5_range + (0..99).to_a.map{|i| "5.#{i}"} +end diff --git a/vagrant/provision/cookbooks/php/metadata.json b/vagrant/provision/cookbooks/php/metadata.json new file mode 100755 index 0000000..39faac2 --- /dev/null +++ b/vagrant/provision/cookbooks/php/metadata.json @@ -0,0 +1,52 @@ +{ + "name": "php", + "version": "1.2.4", + "description": "Installs and maintains php and php modules", + "long_description": "", + "maintainer": "Opscode, Inc.", + "maintainer_email": "cookbooks@opscode.com", + "license": "Apache 2.0", + "platforms": { + "debian": ">= 0.0.0", + "ubuntu": ">= 0.0.0", + "centos": ">= 0.0.0", + "redhat": ">= 0.0.0", + "fedora": ">= 0.0.0", + "scientific": ">= 0.0.0", + "amazon": ">= 0.0.0" + }, + "dependencies": { + "build-essential": ">= 0.0.0", + "xml": ">= 0.0.0", + "mysql": ">= 0.0.0" + }, + "recommendations": { + }, + "suggestions": { + }, + "conflicting": { + }, + "providing": { + }, + "replacing": { + }, + "attributes": { + }, + "groupings": { + }, + "recipes": { + "php": "Installs php", + "php::package": "Installs php using packages.", + "php::source": "Installs php from source.", + "php::module_apc": "Install the php5-apc package", + "php::module_curl": "Install the php5-curl package", + "php::module_fileinfo": "Install the php5-fileinfo package", + "php::module_fpdf": "Install the php-fpdf package", + "php::module_gd": "Install the php5-gd package", + "php::module_ldap": "Install the php5-ldap package", + "php::module_memcache": "Install the php5-memcache package", + "php::module_mysql": "Install the php5-mysql package", + "php::module_pgsql": "Install the php5-pgsql packag", + "php::module_sqlite3": "Install the php5-sqlite3 package" + } +} \ No newline at end of file diff --git a/vagrant/provision/cookbooks/php/metadata.rb b/vagrant/provision/cookbooks/php/metadata.rb new file mode 100755 index 0000000..af64050 --- /dev/null +++ b/vagrant/provision/cookbooks/php/metadata.rb @@ -0,0 +1,28 @@ +name "php" +maintainer "Opscode, Inc." +maintainer_email "cookbooks@opscode.com" +license "Apache 2.0" +description "Installs and maintains php and php modules" +version "1.2.4" + +depends "build-essential" +depends "xml" +depends "mysql" + +%w{ debian ubuntu centos redhat fedora scientific amazon }.each do |os| + supports os +end + +recipe "php", "Installs php" +recipe "php::package", "Installs php using packages." +recipe "php::source", "Installs php from source." +recipe "php::module_apc", "Install the php5-apc package" +recipe "php::module_curl", "Install the php5-curl package" +recipe "php::module_fileinfo", "Install the php5-fileinfo package" +recipe "php::module_fpdf", "Install the php-fpdf package" +recipe "php::module_gd", "Install the php5-gd package" +recipe "php::module_ldap", "Install the php5-ldap package" +recipe "php::module_memcache", "Install the php5-memcache package" +recipe "php::module_mysql", "Install the php5-mysql package" +recipe "php::module_pgsql", "Install the php5-pgsql packag" +recipe "php::module_sqlite3", "Install the php5-sqlite3 package" diff --git a/vagrant/provision/cookbooks/php/providers/pear.rb b/vagrant/provision/cookbooks/php/providers/pear.rb new file mode 100755 index 0000000..70c20c5 --- /dev/null +++ b/vagrant/provision/cookbooks/php/providers/pear.rb @@ -0,0 +1,275 @@ +# +# Author:: Seth Chisamore +# Cookbook Name:: php +# Provider:: pear_package +# +# Copyright:: 2011, Opscode, Inc +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +require 'chef/mixin/shell_out' +require 'chef/mixin/language' +include Chef::Mixin::ShellOut + +# the logic in all action methods mirror that of +# the Chef::Provider::Package which will make +# refactoring into core chef easy + +def whyrun_supported? + true +end + +action :install do + # If we specified a version, and it's not the current version, move to the specified version + if @new_resource.version != nil && @new_resource.version != @current_resource.version + install_version = @new_resource.version + end + + # If it's not installed at all or an upgrade, install it + if install_version || @current_resource.version == nil + description = "install package #{@new_resource} #{install_version}" + converge_by(description) do + info_output = "Installing #{@new_resource}" + info_output << " version #{install_version}" if install_version and !install_version.empty? + Chef::Log.info(info_output) + status = install_package(@new_resource.package_name, install_version) + end + end +end + +action :upgrade do + if @current_resource.version != candidate_version + orig_version = @current_resource.version || "uninstalled" + description = "upgrade package #{@new_resource} version from #{orig_version} to #{candidate_version}" + converge_by(description) do + Chef::Log.info("Upgrading #{@new_resource} version from #{orig_version} to #{candidate_version}") + status = upgrade_package(@new_resource.package_name, candidate_version) + end + end +end + +action :remove do + if removing_package? + description = "remove package #{@new_resource}" + converge_by(description) do + Chef::Log.info("Removing #{@new_resource}") + remove_package(@current_resource.package_name, @new_resource.version) + end + else + end +end + +action :purge do + if removing_package? + description = "purge package #{@new_resource}" + converge_by(description) do + Chef::Log.info("Purging #{@new_resource}") + purge_package(@current_resource.package_name, @new_resource.version) + end + end +end + +def removing_package? + if @current_resource.version.nil? + false # nothing to remove + elsif @new_resource.version.nil? + true # remove any version of a package + elsif @new_resource.version == @current_resource.version + true # remove the version we have + else + false # we don't have the version we want to remove + end +end + +def expand_options(options) + options ? " #{options}" : "" +end + +# these methods are the required overrides of +# a provider that extends from Chef::Provider::Package +# so refactoring into core Chef should be easy + +def load_current_resource + @current_resource = Chef::Resource::PhpPear.new(@new_resource.name) + @current_resource.package_name(@new_resource.package_name) + @bin = 'pear' + if pecl? + Chef::Log.debug("#{@new_resource} smells like a pecl...installing package in Pecl mode.") + @bin = 'pecl' + end + Chef::Log.debug("#{@current_resource}: Installed version: #{current_installed_version} Candidate version: #{candidate_version}") + + unless current_installed_version.nil? + @current_resource.version(current_installed_version) + Chef::Log.debug("Current version is #{@current_resource.version}") if @current_resource.version + end + @current_resource +end + +def current_installed_version + @current_installed_version ||= begin + v = nil + version_check_cmd = "#{@bin} -d preferred_state=#{can_haz(@new_resource, "preferred_state")} list#{expand_channel(can_haz(@new_resource, "channel"))}" + p = shell_out(version_check_cmd) + response = nil + if p.stdout =~ /\.?Installed packages/i + response = grep_for_version(p.stdout, @new_resource.package_name) + end + response + end +end + +def candidate_version + @candidate_version ||= begin + candidate_version_cmd = "#{@bin} -d preferred_state=#{can_haz(@new_resource, "preferred_state")} search#{expand_channel(can_haz(@new_resource, "channel"))} #{@new_resource.package_name}" + p = shell_out(candidate_version_cmd) + response = nil + if p.stdout =~ /\.?Matched packages/i + response = grep_for_version(p.stdout, @new_resource.package_name) + end + response + end +end + +def install_package(name, version) + command = "echo \"\r\" | #{@bin} -d preferred_state=#{can_haz(@new_resource, "preferred_state")} install -a#{expand_options(@new_resource.options)} #{prefix_channel(can_haz(@new_resource, "channel"))}#{name}" + command << "-#{version}" if version and !version.empty? + pear_shell_out(command) + manage_pecl_ini(name, :create, can_haz(@new_resource, "directives"), can_haz(@new_resource, "zend_extensions")) if pecl? +end + +def upgrade_package(name, version) + pear_shell_out("echo \"\r\" | #{@bin} -d preferred_state=#{can_haz(@new_resource, "preferred_state")} upgrade -a#{expand_options(@new_resource.options)} #{prefix_channel(can_haz(@new_resource, "channel"))}#{name}-#{version}") + manage_pecl_ini(name, :create, can_haz(@new_resource, "directives"), can_haz(@new_resource, "zend_extensions")) if pecl? +end + +def remove_package(name, version) + command = "#{@bin} uninstall #{expand_options(@new_resource.options)} #{prefix_channel(can_haz(@new_resource, "channel"))}#{name}" + command << "-#{version}" if version and !version.empty? + pear_shell_out(command) + manage_pecl_ini(name, :delete) if pecl? +end + +def pear_shell_out(command) + p = shell_out!(command) + # pear/pecl commands return a 0 on failures...we'll grep for it + if p.stdout.split("\n").last =~ /^ERROR:.+/i + p.invalid! + end + p +end + +def purge_package(name, version) + remove_package(name, version) +end + +def expand_channel(channel) + channel ? " -c #{channel}" : "" +end + +def prefix_channel(channel) + channel ? "#{channel}/" : "" +end + +def get_extension_dir() + @extension_dir ||= begin + p = shell_out("php-config --extension-dir") + p.stdout.strip + end +end + +def get_extension_files(name) + files = [] + + p = shell_out("#{@bin} list-files #{name}") + p.stdout.each_line.grep(/^src\s+.*\.so$/i).each do |line| + files << line.split[1] + end + + files +end + +def manage_pecl_ini(name, action, directives, zend_extensions) + ext_prefix = get_extension_dir() + ext_prefix << ::File::SEPARATOR if ext_prefix[-1].chr != ::File::SEPARATOR + + files = get_extension_files(name) + + extensions = Hash[ files.map { |filepath| + rel_file = filepath.clone + rel_file.slice! ext_prefix if rel_file.start_with? ext_prefix + + zend = zend_extensions.include?(rel_file) + + [ (zend ? filepath : rel_file) , zend ] + }] + + template "#{node['php']['ext_conf_dir']}/#{name}.ini" do + source "extension.ini.erb" + cookbook "php" + owner "root" + group "root" + mode "0644" + variables(:name => name, :extensions => extensions, :directives => directives) + action action + end +end + +def grep_for_version(stdout, package) + v = nil + + stdout.split(/\n/).grep(/^#{package}\s/i).each do |m| + # XML_RPC 1.5.4 stable + # mongo 1.1.4/(1.1.4 stable) 1.1.4 MongoDB database driver + # Horde_Url -n/a-/(1.0.0beta1 beta) Horde Url class + # Horde_Url 1.0.0beta1 (beta) 1.0.0beta1 Horde Url class + v = m.split(/\s+/)[1].strip + if v.split(/\//)[0] =~ /.\./ + # 1.1.4/(1.1.4 stable) + v = v.split(/\//)[0] + else + # -n/a-/(1.0.0beta1 beta) + v = v.split(/(.*)\/\((.*)/).last.split(/\s/)[0] + end + end + v +end + +def pecl? + @pecl ||= begin + # search as a pear first since most 3rd party channels will report pears as pecls! + search_cmd = "pear -d preferred_state=#{can_haz(@new_resource, "preferred_state")} search#{expand_channel(can_haz(@new_resource, "channel"))} #{@new_resource.package_name}" + if shell_out(search_cmd).stdout.split("\n").find { |line| line =~ /^#{@new_resource.package_name}\s+#{haz_ver(@new_resource, "version")}/ } + false + else + # fall back and search as a pecl + search_cmd = "pecl -d preferred_state=#{can_haz(@new_resource, "preferred_state")} search#{expand_channel(can_haz(@new_resource, "channel"))} #{@new_resource.package_name}" + if shell_out(search_cmd).stdout.split("\n").find { |line| line =~ /^#{@new_resource.package_name}\s+#{haz_ver(@new_resource, "version")}/ } + true + else + raise "Package #{@new_resource.package_name} not found in either PEAR or PECL." + end + end + end +end + +# TODO remove when provider is moved into Chef core +# this allows PhpPear to work with Chef::Resource::Package +def can_haz(resource, attribute_name) + resource.respond_to?(attribute_name) ? resource.send(attribute_name) : nil +end + +def haz_ver(resource, version) + resource.respond_to?(version) ? resource.send(version) : '\d+\.\d+\.\d+' +end diff --git a/vagrant/provision/cookbooks/php/providers/pear_channel.rb b/vagrant/provision/cookbooks/php/providers/pear_channel.rb new file mode 100755 index 0000000..e2479a9 --- /dev/null +++ b/vagrant/provision/cookbooks/php/providers/pear_channel.rb @@ -0,0 +1,93 @@ +# +# Author:: Seth Chisamore +# Cookbook Name:: php +# Provider:: pear_channel +# +# Copyright:: 2011, Opscode, Inc +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# http://pear.php.net/manual/en/guide.users.commandline.channels.php + +require 'chef/mixin/shell_out' +require 'chef/mixin/language' +include Chef::Mixin::ShellOut + +def whyrun_supported? + true +end + +action :discover do + unless exists? + Chef::Log.info("Discovering pear channel #{@new_resource}") + execute "pear channel-discover #{@new_resource.channel_name}" do + action :run + end + end +end + +action :add do + unless exists? + Chef::Log.info("Adding pear channel #{@new_resource} from #{@new_resource.channel_xml}") + execute "pear channel-add #{@new_resource.channel_xml}" do + action :run + end + end +end + +action :update do + if exists? + update_needed = false + begin + updated_needed = true if shell_out("pear search -c #{@new_resource.channel_name} NNNNNN").stdout =~ /channel-update/ + rescue Chef::Exceptions::CommandTimeout + # CentOS can hang on 'pear search' if a channel needs updating + Chef::Log.info("Timed out checking if channel-update needed...forcing update of pear channel #{@new_resource}") + update_needed = true + end + if update_needed + description = "update pear channel #{@new_resource}" + converge_by(description) do + Chef::Log.info("Updating pear channel #{@new_resource}") + shell_out!("pear channel-update #{@new_resource.channel_name}") + end + end + end +end + +action :remove do + if exists? + Chef::Log.info("Deleting pear channel #{@new_resource}") + execute "pear channel-delete #{@new_resource.channel_name}" do + action :run + end + end +end + +def load_current_resource + @current_resource = Chef::Resource::PhpPearChannel.new(@new_resource.name) + @current_resource.channel_name(@new_resource.channel_name) + @current_resource +end + +private +def exists? + begin + shell_out!("pear channel-info #{@current_resource.channel_name}") + true + rescue Chef::Exceptions::ShellCommandFailed + rescue Mixlib::ShellOut::ShellCommandFailed + false + end +end diff --git a/vagrant/provision/cookbooks/php/recipes/default.rb b/vagrant/provision/cookbooks/php/recipes/default.rb new file mode 100755 index 0000000..475a764 --- /dev/null +++ b/vagrant/provision/cookbooks/php/recipes/default.rb @@ -0,0 +1,31 @@ +# +# Author:: Joshua Timberman () +# Author:: Seth Chisamore () +# Cookbook Name:: php +# Recipe:: default +# +# Copyright 2009-2011, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +include_recipe "php::#{node['php']['install_method']}" + +# update the main channels +php_pear_channel 'pear.php.net' do + action :update +end + +php_pear_channel 'pecl.php.net' do + action :update +end diff --git a/vagrant/provision/cookbooks/php/recipes/module_apc.rb b/vagrant/provision/cookbooks/php/recipes/module_apc.rb new file mode 100755 index 0000000..ee60bfa --- /dev/null +++ b/vagrant/provision/cookbooks/php/recipes/module_apc.rb @@ -0,0 +1,37 @@ +# +# Author:: Joshua Timberman () +# Author:: Seth Chisamore () +# Cookbook Name:: php +# Recipe:: module_apc +# +# Copyright 2009-2011, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +case node['platform_family'] +when "rhel", "fedora" + %w{ httpd-devel pcre pcre-devel }.each do |pkg| + package pkg do + action :install + end + end + php_pear "APC" do + action :install + directives(:shm_size => "128M", :enable_cli => 0) + end +when "debian" + package "php-apc" do + action :install + end +end diff --git a/vagrant/provision/cookbooks/php/recipes/module_curl.rb b/vagrant/provision/cookbooks/php/recipes/module_curl.rb new file mode 100755 index 0000000..18e0f40 --- /dev/null +++ b/vagrant/provision/cookbooks/php/recipes/module_curl.rb @@ -0,0 +1,29 @@ +# +# Author:: Joshua Timberman () +# Author:: Seth Chisamore () +# Cookbook Name:: php +# Recipe:: module_curl +# +# Copyright 2009-2011, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +case node['platform_family'] +when "rhel", "fedora" + # centos php compiled with curl +when "debian" + package "php5-curl" do + action :upgrade + end +end diff --git a/vagrant/provision/cookbooks/php/recipes/module_fpdf.rb b/vagrant/provision/cookbooks/php/recipes/module_fpdf.rb new file mode 100755 index 0000000..54ac36d --- /dev/null +++ b/vagrant/provision/cookbooks/php/recipes/module_fpdf.rb @@ -0,0 +1,35 @@ +# +# Author:: Joshua Timberman () +# Author:: Seth Chisamore () +# Cookbook Name:: php +# Recipe:: module_fpdf +# +# Copyright 2009-2011, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +case node['platform_family'] +when "rhel", "fedora" + pearhub_chan = php_pear_channel "pearhub.org" do + action :discover + end + php_pear "FPDF" do + channel pearhub_chan.channel_name + action :install + end +when "debian" + package "php-fpdf" do + action :install + end +end diff --git a/vagrant/provision/cookbooks/php/recipes/module_gd.rb b/vagrant/provision/cookbooks/php/recipes/module_gd.rb new file mode 100755 index 0000000..8255c85 --- /dev/null +++ b/vagrant/provision/cookbooks/php/recipes/module_gd.rb @@ -0,0 +1,32 @@ +# +# Author:: Joshua Timberman () +# Author:: Seth Chisamore () +# Cookbook Name:: php +# Recipe:: module_gd +# +# Copyright 2009-2011, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +pkg = value_for_platform( + %w(centos redhat scientific fedora amazon) => { + el5_range => "php53-gd", + "default" => "php-gd" + }, + "default" => "php5-gd" +) + +package pkg do + action :install +end diff --git a/vagrant/provision/cookbooks/php/recipes/module_ldap.rb b/vagrant/provision/cookbooks/php/recipes/module_ldap.rb new file mode 100755 index 0000000..bb69f6a --- /dev/null +++ b/vagrant/provision/cookbooks/php/recipes/module_ldap.rb @@ -0,0 +1,32 @@ +# +# Author:: Joshua Timberman () +# Author:: Seth Chisamore () +# Cookbook Name:: php +# Recipe:: module_ldap +# +# Copyright 2009-2011, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +pkg = value_for_platform( + %w(centos redhat scientific fedora amazon) => { + el5_range => "php53-ldap", + "default" => "php-ldap" + }, + "default" => "php5-ldap" +) + +package pkg do + action :install +end diff --git a/vagrant/provision/cookbooks/php/recipes/module_memcache.rb b/vagrant/provision/cookbooks/php/recipes/module_memcache.rb new file mode 100755 index 0000000..e835311 --- /dev/null +++ b/vagrant/provision/cookbooks/php/recipes/module_memcache.rb @@ -0,0 +1,37 @@ +# +# Author:: Joshua Timberman () +# Author:: Seth Chisamore () +# Cookbook Name:: php +# Recipe:: module_memcache +# +# Copyright 2009-2011, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +case node['platform_family'] +when "rhel", "fedora" + %w{ zlib-devel }.each do |pkg| + package pkg do + action :install + end + end + php_pear "memcache" do + action :install + #directives(:shm_size => "128M", :enable_cli => 0) + end +when "debian" + package "php5-memcache" do + action :install + end +end diff --git a/vagrant/provision/cookbooks/php/recipes/module_mysql.rb b/vagrant/provision/cookbooks/php/recipes/module_mysql.rb new file mode 100755 index 0000000..7fd951c --- /dev/null +++ b/vagrant/provision/cookbooks/php/recipes/module_mysql.rb @@ -0,0 +1,32 @@ +# +# Author:: Joshua Timberman () +# Author:: Seth Chisamore () +# Cookbook Name:: php +# Recipe:: module_mysql +# +# Copyright 2009-2011, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +pkg = value_for_platform( + %w(centos redhat scientific fedora amazon) => { + el5_range => "php53-mysql", + "default" => "php-mysql" + }, + "default" => "php5-mysql" +) + +package pkg do + action :install +end diff --git a/vagrant/provision/cookbooks/php/recipes/module_pgsql.rb b/vagrant/provision/cookbooks/php/recipes/module_pgsql.rb new file mode 100755 index 0000000..bc7a770 --- /dev/null +++ b/vagrant/provision/cookbooks/php/recipes/module_pgsql.rb @@ -0,0 +1,32 @@ +# +# Author:: Joshua Timberman () +# Author:: Seth Chisamore () +# Cookbook Name:: php +# Recipe:: module_pgsql +# +# Copyright 2009-2011, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +pkg = value_for_platform( + %w(centos redhat scientific fedora amazon) => { + el5_range => "php53-pgsql", + "default" => "php-pgsql" + }, + "default" => "php5-pgsql" +) + +package pkg do + action :install +end diff --git a/vagrant/provision/cookbooks/php/recipes/module_sqlite3.rb b/vagrant/provision/cookbooks/php/recipes/module_sqlite3.rb new file mode 100755 index 0000000..dcc2625 --- /dev/null +++ b/vagrant/provision/cookbooks/php/recipes/module_sqlite3.rb @@ -0,0 +1,30 @@ +# +# Author:: Joshua Timberman () +# Author:: Seth Chisamore () +# Cookbook Name:: php +# Recipe:: module_sqlite3 +# +# Copyright 2009-2011, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +case node['platform_family'] +when "rhel", "fedora" + #already there in centos, --with-pdo-sqlite=shared +when "debian" + package "php5-sqlite" do + action :install + end +end + diff --git a/vagrant/provision/cookbooks/php/recipes/package.rb b/vagrant/provision/cookbooks/php/recipes/package.rb new file mode 100755 index 0000000..7eae473 --- /dev/null +++ b/vagrant/provision/cookbooks/php/recipes/package.rb @@ -0,0 +1,33 @@ +# +# Author:: Seth Chisamore () +# Cookbook Name:: php +# Recipe:: package +# +# Copyright 2011, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +node['php']['packages'].each do |pkg| + package pkg do + action :install + end +end + +template "#{node['php']['conf_dir']}/php.ini" do + source "php.ini.erb" + owner "root" + group "root" + mode "0644" + variables(:directives => node['php']['directives']) +end diff --git a/vagrant/provision/cookbooks/php/recipes/source.rb b/vagrant/provision/cookbooks/php/recipes/source.rb new file mode 100755 index 0000000..681fd9f --- /dev/null +++ b/vagrant/provision/cookbooks/php/recipes/source.rb @@ -0,0 +1,78 @@ +# +# Author:: Seth Chisamore () +# Cookbook Name:: php +# Recipe:: package +# +# Copyright 2011, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +configure_options = node['php']['configure_options'].join(" ") + +include_recipe "build-essential" +include_recipe "xml" +include_recipe "mysql::client" if configure_options =~ /mysql/ + +pkgs = value_for_platform_family( + ["rhel", "fedora"] => %w{ bzip2-devel libc-client-devel curl-devel freetype-devel gmp-devel libjpeg-devel krb5-devel libmcrypt-devel libpng-devel openssl-devel t1lib-devel mhash-devel }, + [ "debian", "ubuntu" ] => %w{ libbz2-dev libc-client2007e-dev libcurl4-gnutls-dev libfreetype6-dev libgmp3-dev libjpeg62-dev libkrb5-dev libmcrypt-dev libpng12-dev libssl-dev libt1-dev }, + "default" => %w{ libbz2-dev libc-client2007e-dev libcurl4-gnutls-dev libfreetype6-dev libgmp3-dev libjpeg62-dev libkrb5-dev libmcrypt-dev libpng12-dev libssl-dev libt1-dev } + ) + +pkgs.each do |pkg| + package pkg do + action :install + end +end + +version = node['php']['version'] + +remote_file "#{Chef::Config[:file_cache_path]}/php-#{version}.tar.gz" do + source "#{node['php']['url']}/php-#{version}.tar.gz" + checksum node['php']['checksum'] + mode "0644" + not_if "which php" +end + +bash "build php" do + cwd Chef::Config[:file_cache_path] + code <<-EOF + tar -zxvf php-#{version}.tar.gz + (cd php-#{version} && ./configure #{configure_options}) + (cd php-#{version} && make && make install) + EOF + not_if "which php" +end + +directory node['php']['conf_dir'] do + owner "root" + group "root" + mode "0755" + recursive true +end + +directory node['php']['ext_conf_dir'] do + owner "root" + group "root" + mode "0755" + recursive true +end + +template "#{node['php']['conf_dir']}/php.ini" do + source "php.ini.erb" + owner "root" + group "root" + mode "0644" + variables(:directives => node['php']['directives']) +end diff --git a/vagrant/provision/cookbooks/php/resources/pear.rb b/vagrant/provision/cookbooks/php/resources/pear.rb new file mode 100755 index 0000000..be43a91 --- /dev/null +++ b/vagrant/provision/cookbooks/php/resources/pear.rb @@ -0,0 +1,30 @@ +# +# Author:: Seth Chisamore +# Cookbook Name:: php +# Resource:: pear_package +# +# Copyright:: 2011, Opscode, Inc +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +default_action :install +actions :install, :upgrade, :remove, :purge + +attribute :package_name, :kind_of => String, :name_attribute => true +attribute :version, :default => nil +attribute :channel, :kind_of => String +attribute :options, :kind_of => String +attribute :directives, :kind_of => Hash, :default => {} +attribute :zend_extensions, :kind_of => Array, :default => Array.new +attribute :preferred_state, :default => 'stable' diff --git a/vagrant/provision/cookbooks/php/resources/pear_channel.rb b/vagrant/provision/cookbooks/php/resources/pear_channel.rb new file mode 100755 index 0000000..94fc53d --- /dev/null +++ b/vagrant/provision/cookbooks/php/resources/pear_channel.rb @@ -0,0 +1,29 @@ +# +# Author:: Seth Chisamore +# Cookbook Name:: php +# Resource:: pear_channel +# +# Copyright:: 2011, Opscode, Inc +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +default_action :discover +actions :discover, :add, :update, :remove + +attribute :channel_name, :kind_of => String, :name_attribute => true +attribute :channel_xml, :kind_of => String + +# TODO add authenticated channel support! +# attribute :username, :kind_of => String +# attribute :password, :kind_of => String diff --git a/vagrant/provision/cookbooks/php/templates/centos/php.ini.erb b/vagrant/provision/cookbooks/php/templates/centos/php.ini.erb new file mode 100755 index 0000000..c84d60d --- /dev/null +++ b/vagrant/provision/cookbooks/php/templates/centos/php.ini.erb @@ -0,0 +1,1225 @@ +[PHP] + +;;;;;;;;;;;;;;;;;;; +; About php.ini ; +;;;;;;;;;;;;;;;;;;; +; This file controls many aspects of PHP's behavior. In order for PHP to +; read it, it must be named 'php.ini'. PHP looks for it in the current +; working directory, in the path designated by the environment variable +; PHPRC, and in the path that was defined in compile time (in that order). +; Under Windows, the compile-time path is the Windows directory. The +; path in which the php.ini file is looked for can be overridden using +; the -c argument in command line mode. +; +; The syntax of the file is extremely simple. Whitespace and Lines +; beginning with a semicolon are silently ignored (as you probably guessed). +; Section headers (e.g. [Foo]) are also silently ignored, even though +; they might mean something in the future. +; +; Directives are specified using the following syntax: +; directive = value +; Directive names are *case sensitive* - foo=bar is different from FOO=bar. +; +; The value can be a string, a number, a PHP constant (e.g. E_ALL or M_PI), one +; of the INI constants (On, Off, True, False, Yes, No and None) or an expression +; (e.g. E_ALL & ~E_NOTICE), or a quoted string ("foo"). +; +; Expressions in the INI file are limited to bitwise operators and parentheses: +; | bitwise OR +; & bitwise AND +; ~ bitwise NOT +; ! boolean NOT +; +; Boolean flags can be turned on using the values 1, On, True or Yes. +; They can be turned off using the values 0, Off, False or No. +; +; An empty string can be denoted by simply not writing anything after the equal +; sign, or by using the None keyword: +; +; foo = ; sets foo to an empty string +; foo = none ; sets foo to an empty string +; foo = "none" ; sets foo to the string 'none' +; +; If you use constants in your value, and these constants belong to a +; dynamically loaded extension (either a PHP extension or a Zend extension), +; you may only use these constants *after* the line that loads the extension. +; +; +;;;;;;;;;;;;;;;;;;; +; About this file ; +;;;;;;;;;;;;;;;;;;; +; This is the recommended, PHP 5-style version of the php.ini-dist file. It +; sets some non standard settings, that make PHP more efficient, more secure, +; and encourage cleaner coding. +; +; The price is that with these settings, PHP may be incompatible with some +; applications, and sometimes, more difficult to develop with. Using this +; file is warmly recommended for production sites. As all of the changes from +; the standard settings are thoroughly documented, you can go over each one, +; and decide whether you want to use it or not. +; +; For general information about the php.ini file, please consult the php.ini-dist +; file, included in your PHP distribution. +; +; This file is different from the php.ini-dist file in the fact that it features +; different values for several directives, in order to improve performance, while +; possibly breaking compatibility with the standard out-of-the-box behavior of +; PHP. Please make sure you read what's different, and modify your scripts +; accordingly, if you decide to use this file instead. +; +; - register_globals = Off [Security, Performance] +; Global variables are no longer registered for input data (POST, GET, cookies, +; environment and other server variables). Instead of using $foo, you must use +; you can use $_REQUEST["foo"] (includes any variable that arrives through the +; request, namely, POST, GET and cookie variables), or use one of the specific +; $_GET["foo"], $_POST["foo"], $_COOKIE["foo"] or $_FILES["foo"], depending +; on where the input originates. Also, you can look at the +; import_request_variables() function. +; Note that register_globals is going to be depracated (i.e., turned off by +; default) in the next version of PHP, because it often leads to security bugs. +; Read http://php.net/manual/en/security.registerglobals.php for further +; information. +; - register_long_arrays = Off [Performance] +; Disables registration of the older (and deprecated) long predefined array +; variables ($HTTP_*_VARS). Instead, use the superglobals that were +; introduced in PHP 4.1.0 +; - display_errors = Off [Security] +; With this directive set to off, errors that occur during the execution of +; scripts will no longer be displayed as a part of the script output, and thus, +; will no longer be exposed to remote users. With some errors, the error message +; content may expose information about your script, web server, or database +; server that may be exploitable for hacking. Production sites should have this +; directive set to off. +; - log_errors = On [Security] +; This directive complements the above one. Any errors that occur during the +; execution of your script will be logged (typically, to your server's error log, +; but can be configured in several ways). Along with setting display_errors to off, +; this setup gives you the ability to fully understand what may have gone wrong, +; without exposing any sensitive information to remote users. +; - output_buffering = 4096 [Performance] +; Set a 4KB output buffer. Enabling output buffering typically results in less +; writes, and sometimes less packets sent on the wire, which can often lead to +; better performance. The gain this directive actually yields greatly depends +; on which Web server you're working with, and what kind of scripts you're using. +; - register_argc_argv = Off [Performance] +; Disables registration of the somewhat redundant $argv and $argc global +; variables. +; - magic_quotes_gpc = Off [Performance] +; Input data is no longer escaped with slashes so that it can be sent into +; SQL databases without further manipulation. Instead, you should use the +; function addslashes() on each input element you wish to send to a database. +; - variables_order = "GPCS" [Performance] +; The environment variables are not hashed into the $_ENV. To access +; environment variables, you can use getenv() instead. +; - error_reporting = E_ALL [Code Cleanliness, Security(?)] +; By default, PHP surpresses errors of type E_NOTICE. These error messages +; are emitted for non-critical errors, but that could be a symptom of a bigger +; problem. Most notably, this will cause error messages about the use +; of uninitialized variables to be displayed. +; - allow_call_time_pass_reference = Off [Code cleanliness] +; It's not possible to decide to force a variable to be passed by reference +; when calling a function. The PHP 4 style to do this is by making the +; function require the relevant argument by reference. + + +;;;;;;;;;;;;;;;;;;;; +; Language Options ; +;;;;;;;;;;;;;;;;;;;; + +; Enable the PHP scripting language engine under Apache. +engine = On + +; Enable compatibility mode with Zend Engine 1 (PHP 4.x) +zend.ze1_compatibility_mode = Off + +; Allow the tags are recognized. +; NOTE: Using short tags should be avoided when developing applications or +; libraries that are meant for redistribution, or deployment on PHP +; servers which are not under your control, because short tags may not +; be supported on the target server. For portable, redistributable code, +; be sure not to use short tags. +short_open_tag = On + +; Allow ASP-style <% %> tags. +asp_tags = Off + +; The number of significant digits displayed in floating point numbers. +precision = 14 + +; Enforce year 2000 compliance (will cause problems with non-compliant browsers) +y2k_compliance = On + +; Output buffering allows you to send header lines (including cookies) even +; after you send body content, at the price of slowing PHP's output layer a +; bit. You can enable output buffering during runtime by calling the output +; buffering functions. You can also enable output buffering for all files by +; setting this directive to On. If you wish to limit the size of the buffer +; to a certain size - you can use a maximum number of bytes instead of 'On', as +; a value for this directive (e.g., output_buffering=4096). +output_buffering = 4096 + +; You can redirect all of the output of your scripts to a function. For +; example, if you set output_handler to "mb_output_handler", character +; encoding will be transparently converted to the specified encoding. +; Setting any output handler automatically turns on output buffering. +; Note: People who wrote portable scripts should not depend on this ini +; directive. Instead, explicitly set the output handler using ob_start(). +; Using this ini directive may cause problems unless you know what script +; is doing. +; Note: You cannot use both "mb_output_handler" with "ob_iconv_handler" +; and you cannot use both "ob_gzhandler" and "zlib.output_compression". +; Note: output_handler must be empty if this is set 'On' !!!! +; Instead you must use zlib.output_handler. +;output_handler = + +; Transparent output compression using the zlib library +; Valid values for this option are 'off', 'on', or a specific buffer size +; to be used for compression (default is 4KB) +; Note: Resulting chunk size may vary due to nature of compression. PHP +; outputs chunks that are few hundreds bytes each as a result of +; compression. If you prefer a larger chunk size for better +; performance, enable output_buffering in addition. +; Note: You need to use zlib.output_handler instead of the standard +; output_handler, or otherwise the output will be corrupted. +zlib.output_compression = Off + +; You cannot specify additional output handlers if zlib.output_compression +; is activated here. This setting does the same as output_handler but in +; a different order. +;zlib.output_handler = + +; Implicit flush tells PHP to tell the output layer to flush itself +; automatically after every output block. This is equivalent to calling the +; PHP function flush() after each and every call to print() or echo() and each +; and every HTML block. Turning this option on has serious performance +; implications and is generally recommended for debugging purposes only. +implicit_flush = Off + +; The unserialize callback function will be called (with the undefined class' +; name as parameter), if the unserializer finds an undefined class +; which should be instantiated. +; A warning appears if the specified function is not defined, or if the +; function doesn't include/implement the missing class. +; So only set this entry, if you really want to implement such a +; callback-function. +unserialize_callback_func= + +; When floats & doubles are serialized store serialize_precision significant +; digits after the floating point. The default value ensures that when floats +; are decoded with unserialize, the data will remain the same. +serialize_precision = 100 + +; Whether to enable the ability to force arguments to be passed by reference +; at function call time. This method is deprecated and is likely to be +; unsupported in future versions of PHP/Zend. The encouraged method of +; specifying which arguments should be passed by reference is in the function +; declaration. You're encouraged to try and turn this option Off and make +; sure your scripts work properly with it in order to ensure they will work +; with future versions of the language (you will receive a warning each time +; you use this feature, and the argument will be passed by value instead of by +; reference). +allow_call_time_pass_reference = Off + +; +; Safe Mode +; +safe_mode = Off + +; By default, Safe Mode does a UID compare check when +; opening files. If you want to relax this to a GID compare, +; then turn on safe_mode_gid. +safe_mode_gid = Off + +; When safe_mode is on, UID/GID checks are bypassed when +; including files from this directory and its subdirectories. +; (directory must also be in include_path or full path must +; be used when including) +safe_mode_include_dir = + +; When safe_mode is on, only executables located in the safe_mode_exec_dir +; will be allowed to be executed via the exec family of functions. +safe_mode_exec_dir = + +; Setting certain environment variables may be a potential security breach. +; This directive contains a comma-delimited list of prefixes. In Safe Mode, +; the user may only alter environment variables whose names begin with the +; prefixes supplied here. By default, users will only be able to set +; environment variables that begin with PHP_ (e.g. PHP_FOO=BAR). +; +; Note: If this directive is empty, PHP will let the user modify ANY +; environment variable! +safe_mode_allowed_env_vars = PHP_ + +; This directive contains a comma-delimited list of environment variables that +; the end user won't be able to change using putenv(). These variables will be +; protected even if safe_mode_allowed_env_vars is set to allow to change them. +safe_mode_protected_env_vars = LD_LIBRARY_PATH + +; open_basedir, if set, limits all file operations to the defined directory +; and below. This directive makes most sense if used in a per-directory +; or per-virtualhost web server configuration file. This directive is +; *NOT* affected by whether Safe Mode is turned On or Off. +;open_basedir = + +; This directive allows you to disable certain functions for security reasons. +; It receives a comma-delimited list of function names. This directive is +; *NOT* affected by whether Safe Mode is turned On or Off. +disable_functions = + +; This directive allows you to disable certain classes for security reasons. +; It receives a comma-delimited list of class names. This directive is +; *NOT* affected by whether Safe Mode is turned On or Off. +disable_classes = + +; Colors for Syntax Highlighting mode. Anything that's acceptable in +; would work. +;highlight.string = #DD0000 +;highlight.comment = #FF9900 +;highlight.keyword = #007700 +;highlight.bg = #FFFFFF +;highlight.default = #0000BB +;highlight.html = #000000 + +; If enabled, the request will be allowed to complete even if the user aborts +; the request. Consider enabling it if executing long request, which may end up +; being interrupted by the user or a browser timing out. +; ignore_user_abort = On + +; Determines the size of the realpath cache to be used by PHP. This value should +; be increased on systems where PHP opens many files to reflect the quantity of +; the file operations performed. +; realpath_cache_size=16k + +; Duration of time, in seconds for which to cache realpath information for a given +; file or directory. For systems with rarely changing files, consider increasing this +; value. +; realpath_cache_ttl=120 + +; +; Misc +; +; Decides whether PHP may expose the fact that it is installed on the server +; (e.g. by adding its signature to the Web server header). It is no security +; threat in any way, but it makes it possible to determine whether you use PHP +; on your server or not. +expose_php = On + + +;;;;;;;;;;;;;;;;;;; +; Resource Limits ; +;;;;;;;;;;;;;;;;;;; + +max_execution_time = 30 ; Maximum execution time of each script, in seconds +max_input_time = 60 ; Maximum amount of time each script may spend parsing request data +memory_limit = 128M ; Maximum amount of memory a script may consume + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Error handling and logging ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +; error_reporting is a bit-field. Or each number up to get desired error +; reporting level +; E_ALL - All errors and warnings (doesn't include E_STRICT) +; E_ERROR - fatal run-time errors +; E_WARNING - run-time warnings (non-fatal errors) +; E_PARSE - compile-time parse errors +; E_NOTICE - run-time notices (these are warnings which often result +; from a bug in your code, but it's possible that it was +; intentional (e.g., using an uninitialized variable and +; relying on the fact it's automatically initialized to an +; empty string) +; E_STRICT - run-time notices, enable to have PHP suggest changes +; to your code which will ensure the best interoperability +; and forward compatibility of your code +; E_CORE_ERROR - fatal errors that occur during PHP's initial startup +; E_CORE_WARNING - warnings (non-fatal errors) that occur during PHP's +; initial startup +; E_COMPILE_ERROR - fatal compile-time errors +; E_COMPILE_WARNING - compile-time warnings (non-fatal errors) +; E_USER_ERROR - user-generated error message +; E_USER_WARNING - user-generated warning message +; E_USER_NOTICE - user-generated notice message +; +; Examples: +; +; - Show all errors, except for notices and coding standards warnings +; +;error_reporting = E_ALL & ~E_NOTICE +; +; - Show all errors, except for notices +; +;error_reporting = E_ALL & ~E_NOTICE | E_STRICT +; +; - Show only errors +; +;error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR +; +; - Show all errors, except coding standards warnings +; +error_reporting = E_ALL + +; Print out errors (as a part of the output). For production web sites, +; you're strongly encouraged to turn this feature off, and use error logging +; instead (see below). Keeping display_errors enabled on a production web site +; may reveal security information to end users, such as file paths on your Web +; server, your database schema or other information. +display_errors = Off + +; Even when display_errors is on, errors that occur during PHP's startup +; sequence are not displayed. It's strongly recommended to keep +; display_startup_errors off, except for when debugging. +display_startup_errors = Off + +; Log errors into a log file (server-specific log, stderr, or error_log (below)) +; As stated above, you're strongly advised to use error logging in place of +; error displaying on production web sites. +log_errors = On + +; Set maximum length of log_errors. In error_log information about the source is +; added. The default is 1024 and 0 allows to not apply any maximum length at all. +log_errors_max_len = 1024 + +; Do not log repeated messages. Repeated errors must occur in same file on same +; line until ignore_repeated_source is set true. +ignore_repeated_errors = Off + +; Ignore source of message when ignoring repeated messages. When this setting +; is On you will not log errors with repeated messages from different files or +; sourcelines. +ignore_repeated_source = Off + +; If this parameter is set to Off, then memory leaks will not be shown (on +; stdout or in the log). This has only effect in a debug compile, and if +; error reporting includes E_WARNING in the allowed list +report_memleaks = On + +; Store the last error/warning message in $php_errormsg (boolean). +track_errors = Off + +; Disable the inclusion of HTML tags in error messages. +; Note: Never use this feature for production boxes. +;html_errors = Off + +; If html_errors is set On PHP produces clickable error messages that direct +; to a page describing the error or function causing the error in detail. +; You can download a copy of the PHP manual from http://www.php.net/docs.php +; and change docref_root to the base URL of your local copy including the +; leading '/'. You must also specify the file extension being used including +; the dot. +; Note: Never use this feature for production boxes. +;docref_root = "/phpmanual/" +;docref_ext = .html + +; String to output before an error message. +;error_prepend_string = "" + +; String to output after an error message. +;error_append_string = "" + +; Log errors to specified file. +;error_log = filename + +; Log errors to syslog (Event Log on NT, not valid in Windows 95). +;error_log = syslog + + +;;;;;;;;;;;;;;;;; +; Data Handling ; +;;;;;;;;;;;;;;;;; +; +; Note - track_vars is ALWAYS enabled as of PHP 4.0.3 + +; The separator used in PHP generated URLs to separate arguments. +; Default is "&". +;arg_separator.output = "&" + +; List of separator(s) used by PHP to parse input URLs into variables. +; Default is "&". +; NOTE: Every character in this directive is considered as separator! +;arg_separator.input = ";&" + +; This directive describes the order in which PHP registers GET, POST, Cookie, +; Environment and Built-in variables (G, P, C, E & S respectively, often +; referred to as EGPCS or GPC). Registration is done from left to right, newer +; values override older values. +variables_order = "EGPCS" + +; Whether or not to register the EGPCS variables as global variables. You may +; want to turn this off if you don't want to clutter your scripts' global scope +; with user data. This makes most sense when coupled with track_vars - in which +; case you can access all of the GPC variables through the $HTTP_*_VARS[], +; variables. +; +; You should do your best to write your scripts so that they do not require +; register_globals to be on; Using form variables as globals can easily lead +; to possible security problems, if the code is not very well thought of. +register_globals = Off + +; Whether or not to register the old-style input arrays, HTTP_GET_VARS +; and friends. If you're not using them, it's recommended to turn them off, +; for performance reasons. +register_long_arrays = Off + +; This directive tells PHP whether to declare the argv&argc variables (that +; would contain the GET information). If you don't use these variables, you +; should turn it off for increased performance. +register_argc_argv = Off + +; When enabled, the SERVER and ENV variables are created when they're first +; used (Just In Time) instead of when the script starts. If these variables +; are not used within a script, having this directive on will result in a +; performance gain. The PHP directives register_globals, register_long_arrays, +; and register_argc_argv must be disabled for this directive to have any affect. +auto_globals_jit = On + +; Maximum size of POST data that PHP will accept. +post_max_size = 8M + +; Magic quotes +; + +; Magic quotes for incoming GET/POST/Cookie data. +magic_quotes_gpc = Off + +; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc. +magic_quotes_runtime = Off + +; Use Sybase-style magic quotes (escape ' with '' instead of \'). +magic_quotes_sybase = Off + +; Automatically add files before or after any PHP document. +auto_prepend_file = +auto_append_file = + +; As of 4.0b4, PHP always outputs a character encoding by default in +; the Content-type: header. To disable sending of the charset, simply +; set it to be empty. +; +; PHP's built-in default is text/html +default_mimetype = "text/html" +;default_charset = "iso-8859-1" + +; Always populate the $HTTP_RAW_POST_DATA variable. +;always_populate_raw_post_data = On + + +;;;;;;;;;;;;;;;;;;;;;;;;; +; Paths and Directories ; +;;;;;;;;;;;;;;;;;;;;;;;;; + +; UNIX: "/path1:/path2" +;include_path = ".:/php/includes" +; +; Windows: "\path1;\path2" +;include_path = ".;c:\php\includes" + +; The root of the PHP pages, used only if nonempty. +; if PHP was not compiled with FORCE_REDIRECT, you SHOULD set doc_root +; if you are running php as a CGI under any web server (other than IIS) +; see documentation for security issues. The alternate is to use the +; cgi.force_redirect configuration below +doc_root = + +; The directory under which PHP opens the script using /~username used only +; if nonempty. +user_dir = + +; Directory in which the loadable extensions (modules) reside. +extension_dir = "<%= node['php']['ext_dir'] %>" + +; Whether or not to enable the dl() function. The dl() function does NOT work +; properly in multithreaded servers, such as IIS or Zeus, and is automatically +; disabled on them. +enable_dl = On + +; cgi.force_redirect is necessary to provide security running PHP as a CGI under +; most web servers. Left undefined, PHP turns this on by default. You can +; turn it off here AT YOUR OWN RISK +; **You CAN safely turn this off for IIS, in fact, you MUST.** +; cgi.force_redirect = 1 + +; if cgi.nph is enabled it will force cgi to always sent Status: 200 with +; every request. +; cgi.nph = 1 + +; if cgi.force_redirect is turned on, and you are not running under Apache or Netscape +; (iPlanet) web servers, you MAY need to set an environment variable name that PHP +; will look for to know it is OK to continue execution. Setting this variable MAY +; cause security issues, KNOW WHAT YOU ARE DOING FIRST. +; cgi.redirect_status_env = ; + +; FastCGI under IIS (on WINNT based OS) supports the ability to impersonate +; security tokens of the calling client. This allows IIS to define the +; security context that the request runs under. mod_fastcgi under Apache +; does not currently support this feature (03/17/2002) +; Set to 1 if running under IIS. Default is zero. +; fastcgi.impersonate = 1; + +; Disable logging through FastCGI connection +; fastcgi.log = 0 + +; cgi.rfc2616_headers configuration option tells PHP what type of headers to +; use when sending HTTP response code. If it's set 0 PHP sends Status: header that +; is supported by Apache. When this option is set to 1 PHP will send +; RFC2616 compliant header. +; Default is zero. +;cgi.rfc2616_headers = 0 + + +;;;;;;;;;;;;;;;; +; File Uploads ; +;;;;;;;;;;;;;;;; + +; Whether to allow HTTP file uploads. +file_uploads = On + +; Temporary directory for HTTP uploaded files (will use system default if not +; specified). +;upload_tmp_dir = + +; Maximum allowed size for uploaded files. +upload_max_filesize = 2M + + +;;;;;;;;;;;;;;;;;; +; Fopen wrappers ; +;;;;;;;;;;;;;;;;;; + +; Whether to allow the treatment of URLs (like http:// or ftp://) as files. +allow_url_fopen = On + +; Define the anonymous ftp password (your email address) +;from="john@doe.com" + +; Define the User-Agent string +; user_agent="PHP" + +; Default timeout for socket based streams (seconds) +default_socket_timeout = 60 + +; If your scripts have to deal with files from Macintosh systems, +; or you are running on a Mac and need to deal with files from +; unix or win32 systems, setting this flag will cause PHP to +; automatically detect the EOL character in those files so that +; fgets() and file() will work regardless of the source of the file. +; auto_detect_line_endings = Off + + +;;;;;;;;;;;;;;;;;;;;;; +; Dynamic Extensions ; +;;;;;;;;;;;;;;;;;;;;;; +; +; If you wish to have an extension loaded automatically, use the following +; syntax: +; +; extension=modulename.extension +; +; For example: +; +; extension=msql.so +; +; Note that it should be the name of the module only; no directory information +; needs to go here. Specify the location of the extension with the +; extension_dir directive above. + + +;;;; +; Note: packaged extension modules are now loaded via the .ini files +; found in the directory /etc/php.d; these are loaded by default. +;;;; + + +;;;;;;;;;;;;;;;;;;; +; Module Settings ; +;;;;;;;;;;;;;;;;;;; + +[Date] +; Defines the default timezone used by the date functions +;date.timezone = + +[Syslog] +; Whether or not to define the various syslog variables (e.g. $LOG_PID, +; $LOG_CRON, etc.). Turning it off is a good idea performance-wise. In +; runtime, you can define these variables by calling define_syslog_variables(). +define_syslog_variables = Off + +[mail function] +; For Win32 only. +SMTP = localhost +smtp_port = 25 + +; For Win32 only. +;sendmail_from = me@example.com + +; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). +sendmail_path = /usr/sbin/sendmail -t -i + +; Force the addition of the specified parameters to be passed as extra parameters +; to the sendmail binary. These parameters will always replace the value of +; the 5th parameter to mail(), even in safe mode. +;mail.force_extra_parameters = + +[SQL] +sql.safe_mode = Off + +[ODBC] +;odbc.default_db = Not yet implemented +;odbc.default_user = Not yet implemented +;odbc.default_pw = Not yet implemented + +; Allow or prevent persistent links. +odbc.allow_persistent = On + +; Check that a connection is still valid before reuse. +odbc.check_persistent = On + +; Maximum number of persistent links. -1 means no limit. +odbc.max_persistent = -1 + +; Maximum number of links (persistent + non-persistent). -1 means no limit. +odbc.max_links = -1 + +; Handling of LONG fields. Returns number of bytes to variables. 0 means +; passthru. +odbc.defaultlrl = 4096 + +; Handling of binary data. 0 means passthru, 1 return as is, 2 convert to char. +; See the documentation on odbc_binmode and odbc_longreadlen for an explanation +; of uodbc.defaultlrl and uodbc.defaultbinmode +odbc.defaultbinmode = 1 + +[MySQL] +; Allow or prevent persistent links. +mysql.allow_persistent = On + +; Maximum number of persistent links. -1 means no limit. +mysql.max_persistent = -1 + +; Maximum number of links (persistent + non-persistent). -1 means no limit. +mysql.max_links = -1 + +; Default port number for mysql_connect(). If unset, mysql_connect() will use +; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the +; compile-time value defined MYSQL_PORT (in that order). Win32 will only look +; at MYSQL_PORT. +mysql.default_port = + +; Default socket name for local MySQL connects. If empty, uses the built-in +; MySQL defaults. +mysql.default_socket = + +; Default host for mysql_connect() (doesn't apply in safe mode). +mysql.default_host = + +; Default user for mysql_connect() (doesn't apply in safe mode). +mysql.default_user = + +; Default password for mysql_connect() (doesn't apply in safe mode). +; Note that this is generally a *bad* idea to store passwords in this file. +; *Any* user with PHP access can run 'echo get_cfg_var("mysql.default_password") +; and reveal this password! And of course, any users with read access to this +; file will be able to reveal the password as well. +mysql.default_password = + +; Maximum time (in secondes) for connect timeout. -1 means no limit +mysql.connect_timeout = 60 + +; Trace mode. When trace_mode is active (=On), warnings for table/index scans and +; SQL-Errors will be displayed. +mysql.trace_mode = Off + +[MySQLi] + +; Maximum number of links. -1 means no limit. +mysqli.max_links = -1 + +; Default port number for mysqli_connect(). If unset, mysqli_connect() will use +; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the +; compile-time value defined MYSQL_PORT (in that order). Win32 will only look +; at MYSQL_PORT. +mysqli.default_port = 3306 + +; Default socket name for local MySQL connects. If empty, uses the built-in +; MySQL defaults. +mysqli.default_socket = + +; Default host for mysql_connect() (doesn't apply in safe mode). +mysqli.default_host = + +; Default user for mysql_connect() (doesn't apply in safe mode). +mysqli.default_user = + +; Default password for mysqli_connect() (doesn't apply in safe mode). +; Note that this is generally a *bad* idea to store passwords in this file. +; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_pw") +; and reveal this password! And of course, any users with read access to this +; file will be able to reveal the password as well. +mysqli.default_pw = + +; Allow or prevent reconnect +mysqli.reconnect = Off + +[mSQL] +; Allow or prevent persistent links. +msql.allow_persistent = On + +; Maximum number of persistent links. -1 means no limit. +msql.max_persistent = -1 + +; Maximum number of links (persistent+non persistent). -1 means no limit. +msql.max_links = -1 + +[PostgresSQL] +; Allow or prevent persistent links. +pgsql.allow_persistent = On + +; Detect broken persistent links always with pg_pconnect(). +; Auto reset feature requires a little overheads. +pgsql.auto_reset_persistent = Off + +; Maximum number of persistent links. -1 means no limit. +pgsql.max_persistent = -1 + +; Maximum number of links (persistent+non persistent). -1 means no limit. +pgsql.max_links = -1 + +; Ignore PostgreSQL backends Notice message or not. +; Notice message logging require a little overheads. +pgsql.ignore_notice = 0 + +; Log PostgreSQL backends Noitce message or not. +; Unless pgsql.ignore_notice=0, module cannot log notice message. +pgsql.log_notice = 0 + +[Sybase] +; Allow or prevent persistent links. +sybase.allow_persistent = On + +; Maximum number of persistent links. -1 means no limit. +sybase.max_persistent = -1 + +; Maximum number of links (persistent + non-persistent). -1 means no limit. +sybase.max_links = -1 + +;sybase.interface_file = "/usr/sybase/interfaces" + +; Minimum error severity to display. +sybase.min_error_severity = 10 + +; Minimum message severity to display. +sybase.min_message_severity = 10 + +; Compatability mode with old versions of PHP 3.0. +; If on, this will cause PHP to automatically assign types to results according +; to their Sybase type, instead of treating them all as strings. This +; compatability mode will probably not stay around forever, so try applying +; whatever necessary changes to your code, and turn it off. +sybase.compatability_mode = Off + +[Sybase-CT] +; Allow or prevent persistent links. +sybct.allow_persistent = On + +; Maximum number of persistent links. -1 means no limit. +sybct.max_persistent = -1 + +; Maximum number of links (persistent + non-persistent). -1 means no limit. +sybct.max_links = -1 + +; Minimum server message severity to display. +sybct.min_server_severity = 10 + +; Minimum client message severity to display. +sybct.min_client_severity = 10 + +[bcmath] +; Number of decimal digits for all bcmath functions. +bcmath.scale = 0 + +[browscap] +;browscap = extra/browscap.ini + +[Informix] +; Default host for ifx_connect() (doesn't apply in safe mode). +ifx.default_host = + +; Default user for ifx_connect() (doesn't apply in safe mode). +ifx.default_user = + +; Default password for ifx_connect() (doesn't apply in safe mode). +ifx.default_password = + +; Allow or prevent persistent links. +ifx.allow_persistent = On + +; Maximum number of persistent links. -1 means no limit. +ifx.max_persistent = -1 + +; Maximum number of links (persistent + non-persistent). -1 means no limit. +ifx.max_links = -1 + +; If on, select statements return the contents of a text blob instead of its id. +ifx.textasvarchar = 0 + +; If on, select statements return the contents of a byte blob instead of its id. +ifx.byteasvarchar = 0 + +; Trailing blanks are stripped from fixed-length char columns. May help the +; life of Informix SE users. +ifx.charasvarchar = 0 + +; If on, the contents of text and byte blobs are dumped to a file instead of +; keeping them in memory. +ifx.blobinfile = 0 + +; NULL's are returned as empty strings, unless this is set to 1. In that case, +; NULL's are returned as string 'NULL'. +ifx.nullformat = 0 + +[Session] +; Handler used to store/retrieve data. +session.save_handler = files + +; Argument passed to save_handler. In the case of files, this is the path +; where data files are stored. Note: Windows users have to change this +; variable in order to use PHP's session functions. +; +; As of PHP 4.0.1, you can define the path as: +; +; session.save_path = "N;/path" +; +; where N is an integer. Instead of storing all the session files in +; /path, what this will do is use subdirectories N-levels deep, and +; store the session data in those directories. This is useful if you +; or your OS have problems with lots of files in one directory, and is +; a more efficient layout for servers that handle lots of sessions. +; +; NOTE 1: PHP will not create this directory structure automatically. +; You can use the script in the ext/session dir for that purpose. +; NOTE 2: See the section on garbage collection below if you choose to +; use subdirectories for session storage +; +; The file storage module creates files using mode 600 by default. +; You can change that by using +; +; session.save_path = "N;MODE;/path" +; +; where MODE is the octal representation of the mode. Note that this +; does not overwrite the process's umask. +session.save_path = "/var/lib/php/session" + +; Whether to use cookies. +session.use_cookies = 1 + +; This option enables administrators to make their users invulnerable to +; attacks which involve passing session ids in URLs; defaults to 0. +; session.use_only_cookies = 1 + +; Name of the session (used as cookie name). +session.name = PHPSESSID + +; Initialize session on request startup. +session.auto_start = 0 + +; Lifetime in seconds of cookie or, if 0, until browser is restarted. +session.cookie_lifetime = 0 + +; The path for which the cookie is valid. +session.cookie_path = / + +; The domain for which the cookie is valid. +session.cookie_domain = + +; Handler used to serialize data. php is the standard serializer of PHP. +session.serialize_handler = php + +; Define the probability that the 'garbage collection' process is started +; on every session initialization. +; The probability is calculated by using gc_probability/gc_divisor, +; e.g. 1/100 means there is a 1% chance that the GC process starts +; on each request. + +session.gc_probability = 1 +session.gc_divisor = 1000 + +; After this number of seconds, stored data will be seen as 'garbage' and +; cleaned up by the garbage collection process. +session.gc_maxlifetime = 1440 + +; NOTE: If you are using the subdirectory option for storing session files +; (see session.save_path above), then garbage collection does *not* +; happen automatically. You will need to do your own garbage +; collection through a shell script, cron entry, or some other method. +; For example, the following script would is the equivalent of +; setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes): +; cd /path/to/sessions; find -cmin +24 | xargs rm + +; PHP 4.2 and less have an undocumented feature/bug that allows you to +; to initialize a session variable in the global scope, albeit register_globals +; is disabled. PHP 4.3 and later will warn you, if this feature is used. +; You can disable the feature and the warning separately. At this time, +; the warning is only displayed, if bug_compat_42 is enabled. + +session.bug_compat_42 = 0 +session.bug_compat_warn = 1 + +; Check HTTP Referer to invalidate externally stored URLs containing ids. +; HTTP_REFERER has to contain this substring for the session to be +; considered as valid. +session.referer_check = + +; How many bytes to read from the file. +session.entropy_length = 0 + +; Specified here to create the session id. +session.entropy_file = + +;session.entropy_length = 16 + +;session.entropy_file = /dev/urandom + +; Set to {nocache,private,public,} to determine HTTP caching aspects +; or leave this empty to avoid sending anti-caching headers. +session.cache_limiter = nocache + +; Document expires after n minutes. +session.cache_expire = 180 + +; trans sid support is disabled by default. +; Use of trans sid may risk your users security. +; Use this option with caution. +; - User may send URL contains active session ID +; to other person via. email/irc/etc. +; - URL that contains active session ID may be stored +; in publically accessible computer. +; - User may access your site with the same session ID +; always using URL stored in browser's history or bookmarks. +session.use_trans_sid = 0 + +; Select a hash function +; 0: MD5 (128 bits) +; 1: SHA-1 (160 bits) +session.hash_function = 0 + +; Define how many bits are stored in each character when converting +; the binary hash data to something readable. +; +; 4 bits: 0-9, a-f +; 5 bits: 0-9, a-v +; 6 bits: 0-9, a-z, A-Z, "-", "," +session.hash_bits_per_character = 5 + +; The URL rewriter will look for URLs in a defined set of HTML tags. +; form/fieldset are special; if you include them here, the rewriter will +; add a hidden field with the info which is otherwise appended +; to URLs. If you want XHTML conformity, remove the form entry. +; Note that all valid entries require a "=", even if no value follows. +url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry" + +[MSSQL] +; Allow or prevent persistent links. +mssql.allow_persistent = On + +; Maximum number of persistent links. -1 means no limit. +mssql.max_persistent = -1 + +; Maximum number of links (persistent+non persistent). -1 means no limit. +mssql.max_links = -1 + +; Minimum error severity to display. +mssql.min_error_severity = 10 + +; Minimum message severity to display. +mssql.min_message_severity = 10 + +; Compatability mode with old versions of PHP 3.0. +mssql.compatability_mode = Off + +; Connect timeout +;mssql.connect_timeout = 5 + +; Query timeout +;mssql.timeout = 60 + +; Valid range 0 - 2147483647. Default = 4096. +;mssql.textlimit = 4096 + +; Valid range 0 - 2147483647. Default = 4096. +;mssql.textsize = 4096 + +; Limits the number of records in each batch. 0 = all records in one batch. +;mssql.batchsize = 0 + +; Specify how datetime and datetim4 columns are returned +; On => Returns data converted to SQL server settings +; Off => Returns values as YYYY-MM-DD hh:mm:ss +;mssql.datetimeconvert = On + +; Use NT authentication when connecting to the server +mssql.secure_connection = Off + +; Specify max number of processes. -1 = library default +; msdlib defaults to 25 +; FreeTDS defaults to 4096 +;mssql.max_procs = -1 + +; Specify client character set. +; If empty or not set the client charset from freetds.comf is used +; This is only used when compiled with FreeTDS +;mssql.charset = "ISO-8859-1" + +[Assertion] +; Assert(expr); active by default. +;assert.active = On + +; Issue a PHP warning for each failed assertion. +;assert.warning = On + +; Don't bail out by default. +;assert.bail = Off + +; User-function to be called if an assertion fails. +;assert.callback = 0 + +; Eval the expression with current error_reporting(). Set to true if you want +; error_reporting(0) around the eval(). +;assert.quiet_eval = 0 + +[Verisign Payflow Pro] +; Default Payflow Pro server. +pfpro.defaulthost = "test-payflow.verisign.com" + +; Default port to connect to. +pfpro.defaultport = 443 + +; Default timeout in seconds. +pfpro.defaulttimeout = 30 + +; Default proxy IP address (if required). +;pfpro.proxyaddress = + +; Default proxy port. +;pfpro.proxyport = + +; Default proxy logon. +;pfpro.proxylogon = + +; Default proxy password. +;pfpro.proxypassword = + +[COM] +; path to a file containing GUIDs, IIDs or filenames of files with TypeLibs +;com.typelib_file = +; allow Distributed-COM calls +;com.allow_dcom = true +; autoregister constants of a components typlib on com_load() +;com.autoregister_typelib = true +; register constants casesensitive +;com.autoregister_casesensitive = false +; show warnings on duplicate constat registrations +;com.autoregister_verbose = true + +[mbstring] +; language for internal character representation. +;mbstring.language = Japanese + +; internal/script encoding. +; Some encoding cannot work as internal encoding. +; (e.g. SJIS, BIG5, ISO-2022-*) +;mbstring.internal_encoding = EUC-JP + +; http input encoding. +;mbstring.http_input = auto + +; http output encoding. mb_output_handler must be +; registered as output buffer to function +;mbstring.http_output = SJIS + +; enable automatic encoding translation according to +; mbstring.internal_encoding setting. Input chars are +; converted to internal encoding by setting this to On. +; Note: Do _not_ use automatic encoding translation for +; portable libs/applications. +;mbstring.encoding_translation = Off + +; automatic encoding detection order. +; auto means +;mbstring.detect_order = auto + +; substitute_character used when character cannot be converted +; one from another +;mbstring.substitute_character = none; + +; overload(replace) single byte functions by mbstring functions. +; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(), +; etc. Possible values are 0,1,2,4 or combination of them. +; For example, 7 for overload everything. +; 0: No overload +; 1: Overload mail() function +; 2: Overload str*() functions +; 4: Overload ereg*() functions +;mbstring.func_overload = 0 + +; enable strict encoding detection. +;mbstring.strict_encoding = Off + +[FrontBase] +;fbsql.allow_persistent = On +;fbsql.autocommit = On +;fbsql.default_database = +;fbsql.default_database_password = +;fbsql.default_host = +;fbsql.default_password = +;fbsql.default_user = "_SYSTEM" +;fbsql.generate_warnings = Off +;fbsql.max_connections = 128 +;fbsql.max_links = 128 +;fbsql.max_persistent = -1 +;fbsql.max_results = 128 +;fbsql.batchSize = 1000 + +[gd] +; Tell the jpeg decode to libjpeg warnings and try to create +; a gd image. The warning will then be displayed as notices +; disabled by default +;gd.jpeg_ignore_warning = 0 + +[exif] +; Exif UNICODE user comments are handled as UCS-2BE/UCS-2LE and JIS as JIS. +; With mbstring support this will automatically be converted into the encoding +; given by corresponding encode setting. When empty mbstring.internal_encoding +; is used. For the decode settings you can distinguish between motorola and +; intel byte order. A decode setting cannot be empty. +;exif.encode_unicode = ISO-8859-15 +;exif.decode_unicode_motorola = UCS-2BE +;exif.decode_unicode_intel = UCS-2LE +;exif.encode_jis = +;exif.decode_jis_motorola = JIS +;exif.decode_jis_intel = JIS + +[Tidy] +; The path to a default tidy configuration file to use when using tidy +;tidy.default_config = /usr/local/lib/php/default.tcfg + +; Should tidy clean and repair output automatically? +; WARNING: Do not use this option if you are generating non-html content +; such as dynamic images +tidy.clean_output = Off + +[soap] +; Enables or disables WSDL caching feature. +soap.wsdl_cache_enabled=1 +; Sets the directory name where SOAP extension will put cache files. +soap.wsdl_cache_dir="/tmp" +; (time to live) Sets the number of second while cached file will be used +; instead of original one. +soap.wsdl_cache_ttl=86400 + +; Local Variables: +; tab-width: 4 +; End: + +<% @directives.sort_by { |key, val| key }.each do |directive, value| -%> +<%= "#{directive}=\"#{value}\"" %> +<% end -%> diff --git a/vagrant/provision/cookbooks/php/templates/debian/php.ini.erb b/vagrant/provision/cookbooks/php/templates/debian/php.ini.erb new file mode 100755 index 0000000..1bd0a47 --- /dev/null +++ b/vagrant/provision/cookbooks/php/templates/debian/php.ini.erb @@ -0,0 +1,1857 @@ +[PHP] + +;;;;;;;;;;;;;;;;;;; +; About php.ini ; +;;;;;;;;;;;;;;;;;;; +; PHP's initialization file, generally called php.ini, is responsible for +; configuring many of the aspects of PHP's behavior. + +; PHP attempts to find and load this configuration from a number of locations. +; The following is a summary of its search order: +; 1. SAPI module specific location. +; 2. The PHPRC environment variable. (As of PHP 5.2.0) +; 3. A number of predefined registry keys on Windows (As of PHP 5.2.0) +; 4. Current working directory (except CLI) +; 5. The web server's directory (for SAPI modules), or directory of PHP +; (otherwise in Windows) +; 6. The directory from the --with-config-file-path compile time option, or the +; Windows directory (C:\windows or C:\winnt) +; See the PHP docs for more specific information. +; http://php.net/configuration.file + +; The syntax of the file is extremely simple. Whitespace and Lines +; beginning with a semicolon are silently ignored (as you probably guessed). +; Section headers (e.g. [Foo]) are also silently ignored, even though +; they might mean something in the future. + +; Directives following the section heading [PATH=/www/mysite] only +; apply to PHP files in the /www/mysite directory. Directives +; following the section heading [HOST=www.example.com] only apply to +; PHP files served from www.example.com. Directives set in these +; special sections cannot be overridden by user-defined INI files or +; at runtime. Currently, [PATH=] and [HOST=] sections only work under +; CGI/FastCGI. +; http://php.net/ini.sections + +; Directives are specified using the following syntax: +; directive = value +; Directive names are *case sensitive* - foo=bar is different from FOO=bar. +; Directives are variables used to configure PHP or PHP extensions. +; There is no name validation. If PHP can't find an expected +; directive because it is not set or is mistyped, a default value will be used. + +; The value can be a string, a number, a PHP constant (e.g. E_ALL or M_PI), one +; of the INI constants (On, Off, True, False, Yes, No and None) or an expression +; (e.g. E_ALL & ~E_NOTICE), a quoted string ("bar"), or a reference to a +; previously set variable or directive (e.g. ${foo}) + +; Expressions in the INI file are limited to bitwise operators and parentheses: +; | bitwise OR +; ^ bitwise XOR +; & bitwise AND +; ~ bitwise NOT +; ! boolean NOT + +; Boolean flags can be turned on using the values 1, On, True or Yes. +; They can be turned off using the values 0, Off, False or No. + +; An empty string can be denoted by simply not writing anything after the equal +; sign, or by using the None keyword: + +; foo = ; sets foo to an empty string +; foo = None ; sets foo to an empty string +; foo = "None" ; sets foo to the string 'None' + +; If you use constants in your value, and these constants belong to a +; dynamically loaded extension (either a PHP extension or a Zend extension), +; you may only use these constants *after* the line that loads the extension. + +;;;;;;;;;;;;;;;;;;; +; About this file ; +;;;;;;;;;;;;;;;;;;; +; PHP comes packaged with two INI files. One that is recommended to be used +; in production environments and one that is recommended to be used in +; development environments. + +; php.ini-production contains settings which hold security, performance and +; best practices at its core. But please be aware, these settings may break +; compatibility with older or less security conscience applications. We +; recommending using the production ini in production and testing environments. + +; php.ini-development is very similar to its production variant, except it's +; much more verbose when it comes to errors. We recommending using the +; development version only in development environments as errors shown to +; application users can inadvertently leak otherwise secure information. + +;;;;;;;;;;;;;;;;;;; +; Quick Reference ; +;;;;;;;;;;;;;;;;;;; +; The following are all the settings which are different in either the production +; or development versions of the INIs with respect to PHP's default behavior. +; Please see the actual settings later in the document for more details as to why +; we recommend these changes in PHP's behavior. + +; allow_call_time_pass_reference +; Default Value: On +; Development Value: Off +; Production Value: Off + +; display_errors +; Default Value: On +; Development Value: On +; Production Value: Off + +; display_startup_errors +; Default Value: Off +; Development Value: On +; Production Value: Off + +; error_reporting +; Default Value: E_ALL & ~E_NOTICE +; Development Value: E_ALL | E_STRICT +; Production Value: E_ALL & ~E_DEPRECATED + +; html_errors +; Default Value: On +; Development Value: On +; Production value: Off + +; log_errors +; Default Value: Off +; Development Value: On +; Production Value: On + +; magic_quotes_gpc +; Default Value: On +; Development Value: Off +; Production Value: Off + +; max_input_time +; Default Value: -1 (Unlimited) +; Development Value: 60 (60 seconds) +; Production Value: 60 (60 seconds) + +; output_buffering +; Default Value: Off +; Development Value: 4096 +; Production Value: 4096 + +; register_argc_argv +; Default Value: On +; Development Value: Off +; Production Value: Off + +; register_long_arrays +; Default Value: On +; Development Value: Off +; Production Value: Off + +; request_order +; Default Value: None +; Development Value: "GP" +; Production Value: "GP" + +; session.bug_compat_42 +; Default Value: On +; Development Value: On +; Production Value: Off + +; session.bug_compat_warn +; Default Value: On +; Development Value: On +; Production Value: Off + +; session.gc_divisor +; Default Value: 100 +; Development Value: 1000 +; Production Value: 1000 + +; session.hash_bits_per_character +; Default Value: 4 +; Development Value: 5 +; Production Value: 5 + +; short_open_tag +; Default Value: On +; Development Value: Off +; Production Value: Off + +; track_errors +; Default Value: Off +; Development Value: On +; Production Value: Off + +; url_rewriter.tags +; Default Value: "a=href,area=href,frame=src,form=,fieldset=" +; Development Value: "a=href,area=href,frame=src,input=src,form=fakeentry" +; Production Value: "a=href,area=href,frame=src,input=src,form=fakeentry" + +; variables_order +; Default Value: "EGPCS" +; Development Value: "GPCS" +; Production Value: "GPCS" + +;;;;;;;;;;;;;;;;;;;; +; php.ini Options ; +;;;;;;;;;;;;;;;;;;;; +; Name for user-defined php.ini (.htaccess) files. Default is ".user.ini" +;user_ini.filename = ".user.ini" + +; To disable this feature set this option to empty value +;user_ini.filename = + +; TTL for user-defined php.ini files (time-to-live) in seconds. Default is 300 seconds (5 minutes) +;user_ini.cache_ttl = 300 + +;;;;;;;;;;;;;;;;;;;; +; Language Options ; +;;;;;;;;;;;;;;;;;;;; + +; Enable the PHP scripting language engine under Apache. +; http://php.net/engine +engine = On + +; This directive determines whether or not PHP will recognize code between +; tags as PHP source which should be processed as such. It's been +; recommended for several years that you not use the short tag "short cut" and +; instead to use the full tag combination. With the wide spread use +; of XML and use of these tags by other languages, the server can become easily +; confused and end up parsing the wrong code in the wrong context. But because +; this short cut has been a feature for such a long time, it's currently still +; supported for backwards compatibility, but we recommend you don't use them. +; Default Value: On +; Development Value: Off +; Production Value: Off +; http://php.net/short-open-tag +short_open_tag = On + +; Allow ASP-style <% %> tags. +; http://php.net/asp-tags +asp_tags = Off + +; The number of significant digits displayed in floating point numbers. +; http://php.net/precision +precision = 14 + +; Enforce year 2000 compliance (will cause problems with non-compliant browsers) +; http://php.net/y2k-compliance +y2k_compliance = On + +; Output buffering is a mechanism for controlling how much output data +; (excluding headers and cookies) PHP should keep internally before pushing that +; data to the client. If your application's output exceeds this setting, PHP +; will send that data in chunks of roughly the size you specify. +; Turning on this setting and managing its maximum buffer size can yield some +; interesting side-effects depending on your application and web server. +; You may be able to send headers and cookies after you've already sent output +; through print or echo. You also may see performance benefits if your server is +; emitting less packets due to buffered output versus PHP streaming the output +; as it gets it. On production servers, 4096 bytes is a good setting for performance +; reasons. +; Note: Output buffering can also be controlled via Output Buffering Control +; functions. +; Possible Values: +; On = Enabled and buffer is unlimited. (Use with caution) +; Off = Disabled +; Integer = Enables the buffer and sets its maximum size in bytes. +; Note: This directive is hardcoded to Off for the CLI SAPI +; Default Value: Off +; Development Value: 4096 +; Production Value: 4096 +; http://php.net/output-buffering +output_buffering = 4096 + +; You can redirect all of the output of your scripts to a function. For +; example, if you set output_handler to "mb_output_handler", character +; encoding will be transparently converted to the specified encoding. +; Setting any output handler automatically turns on output buffering. +; Note: People who wrote portable scripts should not depend on this ini +; directive. Instead, explicitly set the output handler using ob_start(). +; Using this ini directive may cause problems unless you know what script +; is doing. +; Note: You cannot use both "mb_output_handler" with "ob_iconv_handler" +; and you cannot use both "ob_gzhandler" and "zlib.output_compression". +; Note: output_handler must be empty if this is set 'On' !!!! +; Instead you must use zlib.output_handler. +; http://php.net/output-handler +;output_handler = + +; Transparent output compression using the zlib library +; Valid values for this option are 'off', 'on', or a specific buffer size +; to be used for compression (default is 4KB) +; Note: Resulting chunk size may vary due to nature of compression. PHP +; outputs chunks that are few hundreds bytes each as a result of +; compression. If you prefer a larger chunk size for better +; performance, enable output_buffering in addition. +; Note: You need to use zlib.output_handler instead of the standard +; output_handler, or otherwise the output will be corrupted. +; http://php.net/zlib.output-compression +zlib.output_compression = Off + +; http://php.net/zlib.output-compression-level +;zlib.output_compression_level = -1 + +; You cannot specify additional output handlers if zlib.output_compression +; is activated here. This setting does the same as output_handler but in +; a different order. +; http://php.net/zlib.output-handler +;zlib.output_handler = + +; Implicit flush tells PHP to tell the output layer to flush itself +; automatically after every output block. This is equivalent to calling the +; PHP function flush() after each and every call to print() or echo() and each +; and every HTML block. Turning this option on has serious performance +; implications and is generally recommended for debugging purposes only. +; http://php.net/implicit-flush +; Note: This directive is hardcoded to On for the CLI SAPI +implicit_flush = Off + +; The unserialize callback function will be called (with the undefined class' +; name as parameter), if the unserializer finds an undefined class +; which should be instantiated. A warning appears if the specified function is +; not defined, or if the function doesn't include/implement the missing class. +; So only set this entry, if you really want to implement such a +; callback-function. +unserialize_callback_func = + +; When floats & doubles are serialized store serialize_precision significant +; digits after the floating point. The default value ensures that when floats +; are decoded with unserialize, the data will remain the same. +serialize_precision = 100 + +; This directive allows you to enable and disable warnings which PHP will issue +; if you pass a value by reference at function call time. Passing values by +; reference at function call time is a deprecated feature which will be removed +; from PHP at some point in the near future. The acceptable method for passing a +; value by reference to a function is by declaring the reference in the functions +; definition, not at call time. This directive does not disable this feature, it +; only determines whether PHP will warn you about it or not. These warnings +; should enabled in development environments only. +; Default Value: On (Suppress warnings) +; Development Value: Off (Issue warnings) +; Production Value: Off (Issue warnings) +; http://php.net/allow-call-time-pass-reference +allow_call_time_pass_reference = Off + +; Safe Mode +; http://php.net/safe-mode +safe_mode = Off + +; By default, Safe Mode does a UID compare check when +; opening files. If you want to relax this to a GID compare, +; then turn on safe_mode_gid. +; http://php.net/safe-mode-gid +safe_mode_gid = Off + +; When safe_mode is on, UID/GID checks are bypassed when +; including files from this directory and its subdirectories. +; (directory must also be in include_path or full path must +; be used when including) +; http://php.net/safe-mode-include-dir +safe_mode_include_dir = + +; When safe_mode is on, only executables located in the safe_mode_exec_dir +; will be allowed to be executed via the exec family of functions. +; http://php.net/safe-mode-exec-dir +safe_mode_exec_dir = + +; Setting certain environment variables may be a potential security breach. +; This directive contains a comma-delimited list of prefixes. In Safe Mode, +; the user may only alter environment variables whose names begin with the +; prefixes supplied here. By default, users will only be able to set +; environment variables that begin with PHP_ (e.g. PHP_FOO=BAR). +; Note: If this directive is empty, PHP will let the user modify ANY +; environment variable! +; http://php.net/safe-mode-allowed-env-vars +safe_mode_allowed_env_vars = PHP_ + +; This directive contains a comma-delimited list of environment variables that +; the end user won't be able to change using putenv(). These variables will be +; protected even if safe_mode_allowed_env_vars is set to allow to change them. +; http://php.net/safe-mode-protected-env-vars +safe_mode_protected_env_vars = LD_LIBRARY_PATH + +; open_basedir, if set, limits all file operations to the defined directory +; and below. This directive makes most sense if used in a per-directory +; or per-virtualhost web server configuration file. This directive is +; *NOT* affected by whether Safe Mode is turned On or Off. +; http://php.net/open-basedir +;open_basedir = + +; This directive allows you to disable certain functions for security reasons. +; It receives a comma-delimited list of function names. This directive is +; *NOT* affected by whether Safe Mode is turned On or Off. +; http://php.net/disable-functions +disable_functions = + +; This directive allows you to disable certain classes for security reasons. +; It receives a comma-delimited list of class names. This directive is +; *NOT* affected by whether Safe Mode is turned On or Off. +; http://php.net/disable-classes +disable_classes = + +; Colors for Syntax Highlighting mode. Anything that's acceptable in +; would work. +; http://php.net/syntax-highlighting +;highlight.string = #DD0000 +;highlight.comment = #FF9900 +;highlight.keyword = #007700 +;highlight.bg = #FFFFFF +;highlight.default = #0000BB +;highlight.html = #000000 + +; If enabled, the request will be allowed to complete even if the user aborts +; the request. Consider enabling it if executing long requests, which may end up +; being interrupted by the user or a browser timing out. PHP's default behavior +; is to disable this feature. +; http://php.net/ignore-user-abort +;ignore_user_abort = On + +; Determines the size of the realpath cache to be used by PHP. This value should +; be increased on systems where PHP opens many files to reflect the quantity of +; the file operations performed. +; http://php.net/realpath-cache-size +;realpath_cache_size = 16k + +; Duration of time, in seconds for which to cache realpath information for a given +; file or directory. For systems with rarely changing files, consider increasing this +; value. +; http://php.net/realpath-cache-ttl +;realpath_cache_ttl = 120 + +;;;;;;;;;;;;;;;;; +; Miscellaneous ; +;;;;;;;;;;;;;;;;; + +; Decides whether PHP may expose the fact that it is installed on the server +; (e.g. by adding its signature to the Web server header). It is no security +; threat in any way, but it makes it possible to determine whether you use PHP +; on your server or not. +; http://php.net/expose-php +expose_php = On + +;;;;;;;;;;;;;;;;;;; +; Resource Limits ; +;;;;;;;;;;;;;;;;;;; + +; Maximum execution time of each script, in seconds +; http://php.net/max-execution-time +; Note: This directive is hardcoded to 0 for the CLI SAPI +max_execution_time = 30 + +; Maximum amount of time each script may spend parsing request data. It's a good +; idea to limit this time on productions servers in order to eliminate unexpectedly +; long running scripts. +; Note: This directive is hardcoded to -1 for the CLI SAPI +; Default Value: -1 (Unlimited) +; Development Value: 60 (60 seconds) +; Production Value: 60 (60 seconds) +; http://php.net/max-input-time +max_input_time = 60 + +; Maximum input variable nesting level +; http://php.net/max-input-nesting-level +;max_input_nesting_level = 64 + +; Maximum amount of memory a script may consume (128MB) +; http://php.net/memory-limit +memory_limit = -1 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Error handling and logging ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +; This directive informs PHP of which errors, warnings and notices you would like +; it to take action for. The recommended way of setting values for this +; directive is through the use of the error level constants and bitwise +; operators. The error level constants are below here for convenience as well as +; some common settings and their meanings. +; By default, PHP is set to take action on all errors, notices and warnings EXCEPT +; those related to E_NOTICE and E_STRICT, which together cover best practices and +; recommended coding standards in PHP. For performance reasons, this is the +; recommend error reporting setting. Your production server shouldn't be wasting +; resources complaining about best practices and coding standards. That's what +; development servers and development settings are for. +; Note: The php.ini-development file has this setting as E_ALL | E_STRICT. This +; means it pretty much reports everything which is exactly what you want during +; development and early testing. +; +; Error Level Constants: +; E_ALL - All errors and warnings (includes E_STRICT as of PHP 6.0.0) +; E_ERROR - fatal run-time errors +; E_RECOVERABLE_ERROR - almost fatal run-time errors +; E_WARNING - run-time warnings (non-fatal errors) +; E_PARSE - compile-time parse errors +; E_NOTICE - run-time notices (these are warnings which often result +; from a bug in your code, but it's possible that it was +; intentional (e.g., using an uninitialized variable and +; relying on the fact it's automatically initialized to an +; empty string) +; E_STRICT - run-time notices, enable to have PHP suggest changes +; to your code which will ensure the best interoperability +; and forward compatibility of your code +; E_CORE_ERROR - fatal errors that occur during PHP's initial startup +; E_CORE_WARNING - warnings (non-fatal errors) that occur during PHP's +; initial startup +; E_COMPILE_ERROR - fatal compile-time errors +; E_COMPILE_WARNING - compile-time warnings (non-fatal errors) +; E_USER_ERROR - user-generated error message +; E_USER_WARNING - user-generated warning message +; E_USER_NOTICE - user-generated notice message +; E_DEPRECATED - warn about code that will not work in future versions +; of PHP +; E_USER_DEPRECATED - user-generated deprecation warnings +; +; Common Values: +; E_ALL & ~E_NOTICE (Show all errors, except for notices and coding standards warnings.) +; E_ALL & ~E_NOTICE | E_STRICT (Show all errors, except for notices) +; E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors) +; E_ALL | E_STRICT (Show all errors, warnings and notices including coding standards.) +; Default Value: E_ALL & ~E_NOTICE +; Development Value: E_ALL | E_STRICT +; Production Value: E_ALL & ~E_DEPRECATED +; http://php.net/error-reporting +error_reporting = E_ALL & ~E_DEPRECATED + +; This directive controls whether or not and where PHP will output errors, +; notices and warnings too. Error output is very useful during development, but +; it could be very dangerous in production environments. Depending on the code +; which is triggering the error, sensitive information could potentially leak +; out of your application such as database usernames and passwords or worse. +; It's recommended that errors be logged on production servers rather than +; having the errors sent to STDOUT. +; Possible Values: +; Off = Do not display any errors +; stderr = Display errors to STDERR (affects only CGI/CLI binaries!) +; On or stdout = Display errors to STDOUT +; Default Value: On +; Development Value: On +; Production Value: Off +; http://php.net/display-errors +display_errors = Off + +; The display of errors which occur during PHP's startup sequence are handled +; separately from display_errors. PHP's default behavior is to suppress those +; errors from clients. Turning the display of startup errors on can be useful in +; debugging configuration problems. But, it's strongly recommended that you +; leave this setting off on production servers. +; Default Value: Off +; Development Value: On +; Production Value: Off +; http://php.net/display-startup-errors +display_startup_errors = Off + +; Besides displaying errors, PHP can also log errors to locations such as a +; server-specific log, STDERR, or a location specified by the error_log +; directive found below. While errors should not be displayed on productions +; servers they should still be monitored and logging is a great way to do that. +; Default Value: Off +; Development Value: On +; Production Value: On +; http://php.net/log-errors +log_errors = On + +; Set maximum length of log_errors. In error_log information about the source is +; added. The default is 1024 and 0 allows to not apply any maximum length at all. +; http://php.net/log-errors-max-len +log_errors_max_len = 1024 + +; Do not log repeated messages. Repeated errors must occur in same file on same +; line unless ignore_repeated_source is set true. +; http://php.net/ignore-repeated-errors +ignore_repeated_errors = Off + +; Ignore source of message when ignoring repeated messages. When this setting +; is On you will not log errors with repeated messages from different files or +; source lines. +; http://php.net/ignore-repeated-source +ignore_repeated_source = Off + +; If this parameter is set to Off, then memory leaks will not be shown (on +; stdout or in the log). This has only effect in a debug compile, and if +; error reporting includes E_WARNING in the allowed list +; http://php.net/report-memleaks +report_memleaks = On + +; This setting is on by default. +;report_zend_debug = 0 + +; Store the last error/warning message in $php_errormsg (boolean). Setting this value +; to On can assist in debugging and is appropriate for development servers. It should +; however be disabled on production servers. +; Default Value: Off +; Development Value: On +; Production Value: Off +; http://php.net/track-errors +track_errors = Off + +; Turn off normal error reporting and emit XML-RPC error XML +; http://php.net/xmlrpc-errors +;xmlrpc_errors = 0 + +; An XML-RPC faultCode +;xmlrpc_error_number = 0 + +; When PHP displays or logs an error, it has the capability of inserting html +; links to documentation related to that error. This directive controls whether +; those HTML links appear in error messages or not. For performance and security +; reasons, it's recommended you disable this on production servers. +; Note: This directive is hardcoded to Off for the CLI SAPI +; Default Value: On +; Development Value: On +; Production value: Off +; http://php.net/html-errors +html_errors = Off + +; If html_errors is set On PHP produces clickable error messages that direct +; to a page describing the error or function causing the error in detail. +; You can download a copy of the PHP manual from http://php.net/docs +; and change docref_root to the base URL of your local copy including the +; leading '/'. You must also specify the file extension being used including +; the dot. PHP's default behavior is to leave these settings empty. +; Note: Never use this feature for production boxes. +; http://php.net/docref-root +; Examples +;docref_root = "/phpmanual/" + +; http://php.net/docref-ext +;docref_ext = .html + +; String to output before an error message. PHP's default behavior is to leave +; this setting blank. +; http://php.net/error-prepend-string +; Example: +;error_prepend_string = "" + +; String to output after an error message. PHP's default behavior is to leave +; this setting blank. +; http://php.net/error-append-string +; Example: +;error_append_string = "" + +; Log errors to specified file. PHP's default behavior is to leave this value +; empty. +; http://php.net/error-log +; Example: +;error_log = php_errors.log +; Log errors to syslog (Event Log on NT, not valid in Windows 95). +;error_log = syslog + +;;;;;;;;;;;;;;;;; +; Data Handling ; +;;;;;;;;;;;;;;;;; + +; The separator used in PHP generated URLs to separate arguments. +; PHP's default setting is "&". +; http://php.net/arg-separator.output +; Example: +;arg_separator.output = "&" + +; List of separator(s) used by PHP to parse input URLs into variables. +; PHP's default setting is "&". +; NOTE: Every character in this directive is considered as separator! +; http://php.net/arg-separator.input +; Example: +;arg_separator.input = ";&" + +; This directive determines which super global arrays are registered when PHP +; starts up. If the register_globals directive is enabled, it also determines +; what order variables are populated into the global space. G,P,C,E & S are +; abbreviations for the following respective super globals: GET, POST, COOKIE, +; ENV and SERVER. There is a performance penalty paid for the registration of +; these arrays and because ENV is not as commonly used as the others, ENV is +; is not recommended on productions servers. You can still get access to +; the environment variables through getenv() should you need to. +; Default Value: "EGPCS" +; Development Value: "GPCS" +; Production Value: "GPCS"; +; http://php.net/variables-order +variables_order = "GPCS" + +; This directive determines which super global data (G,P,C,E & S) should +; be registered into the super global array REQUEST. If so, it also determines +; the order in which that data is registered. The values for this directive are +; specified in the same manner as the variables_order directive, EXCEPT one. +; Leaving this value empty will cause PHP to use the value set in the +; variables_order directive. It does not mean it will leave the super globals +; array REQUEST empty. +; Default Value: None +; Development Value: "GP" +; Production Value: "GP" +; http://php.net/request-order +request_order = "GP" + +; Whether or not to register the EGPCS variables as global variables. You may +; want to turn this off if you don't want to clutter your scripts' global scope +; with user data. +; You should do your best to write your scripts so that they do not require +; register_globals to be on; Using form variables as globals can easily lead +; to possible security problems, if the code is not very well thought of. +; http://php.net/register-globals +register_globals = Off + +; Determines whether the deprecated long $HTTP_*_VARS type predefined variables +; are registered by PHP or not. As they are deprecated, we obviously don't +; recommend you use them. They are on by default for compatibility reasons but +; they are not recommended on production servers. +; Default Value: On +; Development Value: Off +; Production Value: Off +; http://php.net/register-long-arrays +register_long_arrays = Off + +; This directive determines whether PHP registers $argv & $argc each time it +; runs. $argv contains an array of all the arguments passed to PHP when a script +; is invoked. $argc contains an integer representing the number of arguments +; that were passed when the script was invoked. These arrays are extremely +; useful when running scripts from the command line. When this directive is +; enabled, registering these variables consumes CPU cycles and memory each time +; a script is executed. For performance reasons, this feature should be disabled +; on production servers. +; Note: This directive is hardcoded to On for the CLI SAPI +; Default Value: On +; Development Value: Off +; Production Value: Off +; http://php.net/register-argc-argv +register_argc_argv = Off + +; When enabled, the SERVER and ENV variables are created when they're first +; used (Just In Time) instead of when the script starts. If these variables +; are not used within a script, having this directive on will result in a +; performance gain. The PHP directives register_globals, register_long_arrays, +; and register_argc_argv must be disabled for this directive to have any affect. +; http://php.net/auto-globals-jit +auto_globals_jit = On + +; Maximum size of POST data that PHP will accept. +; http://php.net/post-max-size +post_max_size = 8M + +; Magic quotes are a preprocessing feature of PHP where PHP will attempt to +; escape any character sequences in GET, POST, COOKIE and ENV data which might +; otherwise corrupt data being placed in resources such as databases before +; making that data available to you. Because of character encoding issues and +; non-standard SQL implementations across many databases, it's not currently +; possible for this feature to be 100% accurate. PHP's default behavior is to +; enable the feature. We strongly recommend you use the escaping mechanisms +; designed specifically for the database your using instead of relying on this +; feature. Also note, this feature has been deprecated as of PHP 5.3.0 and is +; scheduled for removal in PHP 6. +; Default Value: On +; Development Value: Off +; Production Value: Off +; http://php.net/magic-quotes-gpc +magic_quotes_gpc = Off + +; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc. +; http://php.net/magic-quotes-runtime +magic_quotes_runtime = Off + +; Use Sybase-style magic quotes (escape ' with '' instead of \'). +; http://php.net/magic-quotes-sybase +magic_quotes_sybase = Off + +; Automatically add files before PHP document. +; http://php.net/auto-prepend-file +auto_prepend_file = + +; Automatically add files after PHP document. +; http://php.net/auto-append-file +auto_append_file = + +; By default, PHP will output a character encoding using +; the Content-type: header. To disable sending of the charset, simply +; set it to be empty. +; +; PHP's built-in default is text/html +; http://php.net/default-mimetype +default_mimetype = "text/html" + +; PHP's default character set is set to empty. +; http://php.net/default-charset +;default_charset = "iso-8859-1" + +; Always populate the $HTTP_RAW_POST_DATA variable. PHP's default behavior is +; to disable this feature. +; http://php.net/always-populate-raw-post-data +;always_populate_raw_post_data = On + +;;;;;;;;;;;;;;;;;;;;;;;;; +; Paths and Directories ; +;;;;;;;;;;;;;;;;;;;;;;;;; + +; UNIX: "/path1:/path2" +;include_path = ".:/usr/share/php" +; +; Windows: "\path1;\path2" +;include_path = ".;c:\php\includes" +; +; PHP's default setting for include_path is ".;/path/to/php/pear" +; http://php.net/include-path + +; The root of the PHP pages, used only if nonempty. +; if PHP was not compiled with FORCE_REDIRECT, you SHOULD set doc_root +; if you are running php as a CGI under any web server (other than IIS) +; see documentation for security issues. The alternate is to use the +; cgi.force_redirect configuration below +; http://php.net/doc-root +doc_root = + +; The directory under which PHP opens the script using /~username used only +; if nonempty. +; http://php.net/user-dir +user_dir = + +; Directory in which the loadable extensions (modules) reside. +; http://php.net/extension-dir +; extension_dir = "./" +; On windows: +; extension_dir = "ext" + +; Whether or not to enable the dl() function. The dl() function does NOT work +; properly in multithreaded servers, such as IIS or Zeus, and is automatically +; disabled on them. +; http://php.net/enable-dl +enable_dl = Off + +; cgi.force_redirect is necessary to provide security running PHP as a CGI under +; most web servers. Left undefined, PHP turns this on by default. You can +; turn it off here AT YOUR OWN RISK +; **You CAN safely turn this off for IIS, in fact, you MUST.** +; http://php.net/cgi.force-redirect +;cgi.force_redirect = 1 + +; if cgi.nph is enabled it will force cgi to always sent Status: 200 with +; every request. PHP's default behavior is to disable this feature. +;cgi.nph = 1 + +; if cgi.force_redirect is turned on, and you are not running under Apache or Netscape +; (iPlanet) web servers, you MAY need to set an environment variable name that PHP +; will look for to know it is OK to continue execution. Setting this variable MAY +; cause security issues, KNOW WHAT YOU ARE DOING FIRST. +; http://php.net/cgi.redirect-status-env +;cgi.redirect_status_env = ; + +; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's +; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok +; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting +; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting +; of zero causes PHP to behave as before. Default is 1. You should fix your scripts +; to use SCRIPT_FILENAME rather than PATH_TRANSLATED. +; http://php.net/cgi.fix-pathinfo +;cgi.fix_pathinfo=1 + +; FastCGI under IIS (on WINNT based OS) supports the ability to impersonate +; security tokens of the calling client. This allows IIS to define the +; security context that the request runs under. mod_fastcgi under Apache +; does not currently support this feature (03/17/2002) +; Set to 1 if running under IIS. Default is zero. +; http://php.net/fastcgi.impersonate +;fastcgi.impersonate = 1; + +; Disable logging through FastCGI connection. PHP's default behavior is to enable +; this feature. +;fastcgi.logging = 0 + +; cgi.rfc2616_headers configuration option tells PHP what type of headers to +; use when sending HTTP response code. If it's set 0 PHP sends Status: header that +; is supported by Apache. When this option is set to 1 PHP will send +; RFC2616 compliant header. +; Default is zero. +; http://php.net/cgi.rfc2616-headers +;cgi.rfc2616_headers = 0 + +;;;;;;;;;;;;;;;; +; File Uploads ; +;;;;;;;;;;;;;;;; + +; Whether to allow HTTP file uploads. +; http://php.net/file-uploads +file_uploads = On + +; Temporary directory for HTTP uploaded files (will use system default if not +; specified). +; http://php.net/upload-tmp-dir +;upload_tmp_dir = + +; Maximum allowed size for uploaded files. +; http://php.net/upload-max-filesize +upload_max_filesize = 2M + +; Maximum number of files that can be uploaded via a single request +max_file_uploads = 20 + +;;;;;;;;;;;;;;;;;; +; Fopen wrappers ; +;;;;;;;;;;;;;;;;;; + +; Whether to allow the treatment of URLs (like http:// or ftp://) as files. +; http://php.net/allow-url-fopen +allow_url_fopen = On + +; Whether to allow include/require to open URLs (like http:// or ftp://) as files. +; http://php.net/allow-url-include +allow_url_include = Off + +; Define the anonymous ftp password (your email address). PHP's default setting +; for this is empty. +; http://php.net/from +;from="john@doe.com" + +; Define the User-Agent string. PHP's default setting for this is empty. +; http://php.net/user-agent +;user_agent="PHP" + +; Default timeout for socket based streams (seconds) +; http://php.net/default-socket-timeout +default_socket_timeout = 60 + +; If your scripts have to deal with files from Macintosh systems, +; or you are running on a Mac and need to deal with files from +; unix or win32 systems, setting this flag will cause PHP to +; automatically detect the EOL character in those files so that +; fgets() and file() will work regardless of the source of the file. +; http://php.net/auto-detect-line-endings +;auto_detect_line_endings = Off + +;;;;;;;;;;;;;;;;;;;;;; +; Dynamic Extensions ; +;;;;;;;;;;;;;;;;;;;;;; + +; If you wish to have an extension loaded automatically, use the following +; syntax: +; +; extension=modulename.extension +; +; For example, on Windows: +; +; extension=msql.dll +; +; ... or under UNIX: +; +; extension=msql.so +; +; ... or with a path: +; +; extension=/path/to/extension/msql.so +; +; If you only provide the name of the extension, PHP will look for it in its +; default extension directory. +; + +;;;;;;;;;;;;;;;;;;; +; Module Settings ; +;;;;;;;;;;;;;;;;;;; + +[Date] +; Defines the default timezone used by the date functions +; http://php.net/date.timezone +;date.timezone = + +; http://php.net/date.default-latitude +;date.default_latitude = 31.7667 + +; http://php.net/date.default-longitude +;date.default_longitude = 35.2333 + +; http://php.net/date.sunrise-zenith +;date.sunrise_zenith = 90.583333 + +; http://php.net/date.sunset-zenith +;date.sunset_zenith = 90.583333 + +[filter] +; http://php.net/filter.default +;filter.default = unsafe_raw + +; http://php.net/filter.default-flags +;filter.default_flags = + +[iconv] +;iconv.input_encoding = ISO-8859-1 +;iconv.internal_encoding = ISO-8859-1 +;iconv.output_encoding = ISO-8859-1 + +[intl] +;intl.default_locale = +; This directive allows you to produce PHP errors when some error +; happens within intl functions. The value is the level of the error produced. +; Default is 0, which does not produce any errors. +;intl.error_level = E_WARNING + +[sqlite] +; http://php.net/sqlite.assoc-case +;sqlite.assoc_case = 0 + +[sqlite3] +;sqlite3.extension_dir = + +[Pcre] +;PCRE library backtracking limit. +; http://php.net/pcre.backtrack-limit +;pcre.backtrack_limit=100000 + +;PCRE library recursion limit. +;Please note that if you set this value to a high number you may consume all +;the available process stack and eventually crash PHP (due to reaching the +;stack size limit imposed by the Operating System). +; http://php.net/pcre.recursion-limit +;pcre.recursion_limit=100000 + +[Pdo] +; Whether to pool ODBC connections. Can be one of "strict", "relaxed" or "off" +; http://php.net/pdo-odbc.connection-pooling +;pdo_odbc.connection_pooling=strict + +;pdo_odbc.db2_instance_name + +[Pdo_mysql] +; If mysqlnd is used: Number of cache slots for the internal result set cache +; http://php.net/pdo_mysql.cache_size +pdo_mysql.cache_size = 2000 + +; Default socket name for local MySQL connects. If empty, uses the built-in +; MySQL defaults. +; http://php.net/pdo_mysql.default-socket +pdo_mysql.default_socket= + +[Phar] +; http://php.net/phar.readonly +;phar.readonly = On + +; http://php.net/phar.require-hash +;phar.require_hash = On + +;phar.cache_list = + +[Syslog] +; Whether or not to define the various syslog variables (e.g. $LOG_PID, +; $LOG_CRON, etc.). Turning it off is a good idea performance-wise. In +; runtime, you can define these variables by calling define_syslog_variables(). +; http://php.net/define-syslog-variables +define_syslog_variables = Off + +[mail function] +; For Win32 only. +; http://php.net/smtp +SMTP = localhost +; http://php.net/smtp-port +smtp_port = 25 + +; For Win32 only. +; http://php.net/sendmail-from +;sendmail_from = me@example.com + +; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). +; http://php.net/sendmail-path +;sendmail_path = + +; Force the addition of the specified parameters to be passed as extra parameters +; to the sendmail binary. These parameters will always replace the value of +; the 5th parameter to mail(), even in safe mode. +;mail.force_extra_parameters = + +; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename +mail.add_x_header = On + +; Log all mail() calls including the full path of the script, line #, to address and headers +;mail.log = + +[SQL] +; http://php.net/sql.safe-mode +sql.safe_mode = Off + +[ODBC] +; http://php.net/odbc.default-db +;odbc.default_db = Not yet implemented + +; http://php.net/odbc.default-user +;odbc.default_user = Not yet implemented + +; http://php.net/odbc.default-pw +;odbc.default_pw = Not yet implemented + +; Controls the ODBC cursor model. +; Default: SQL_CURSOR_STATIC (default). +;odbc.default_cursortype + +; Allow or prevent persistent links. +; http://php.net/odbc.allow-persistent +odbc.allow_persistent = On + +; Check that a connection is still valid before reuse. +; http://php.net/odbc.check-persistent +odbc.check_persistent = On + +; Maximum number of persistent links. -1 means no limit. +; http://php.net/odbc.max-persistent +odbc.max_persistent = -1 + +; Maximum number of links (persistent + non-persistent). -1 means no limit. +; http://php.net/odbc.max-links +odbc.max_links = -1 + +; Handling of LONG fields. Returns number of bytes to variables. 0 means +; passthru. +; http://php.net/odbc.defaultlrl +odbc.defaultlrl = 4096 + +; Handling of binary data. 0 means passthru, 1 return as is, 2 convert to char. +; See the documentation on odbc_binmode and odbc_longreadlen for an explanation +; of odbc.defaultlrl and odbc.defaultbinmode +; http://php.net/odbc.defaultbinmode +odbc.defaultbinmode = 1 + +;birdstep.max_links = -1 + +[Interbase] +; Allow or prevent persistent links. +ibase.allow_persistent = 1 + +; Maximum number of persistent links. -1 means no limit. +ibase.max_persistent = -1 + +; Maximum number of links (persistent + non-persistent). -1 means no limit. +ibase.max_links = -1 + +; Default database name for ibase_connect(). +;ibase.default_db = + +; Default username for ibase_connect(). +;ibase.default_user = + +; Default password for ibase_connect(). +;ibase.default_password = + +; Default charset for ibase_connect(). +;ibase.default_charset = + +; Default timestamp format. +ibase.timestampformat = "%Y-%m-%d %H:%M:%S" + +; Default date format. +ibase.dateformat = "%Y-%m-%d" + +; Default time format. +ibase.timeformat = "%H:%M:%S" + +[MySQL] +; Allow accessing, from PHP's perspective, local files with LOAD DATA statements +; http://php.net/mysql.allow_local_infile +mysql.allow_local_infile = On + +; Allow or prevent persistent links. +; http://php.net/mysql.allow-persistent +mysql.allow_persistent = On + +; If mysqlnd is used: Number of cache slots for the internal result set cache +; http://php.net/mysql.cache_size +mysql.cache_size = 2000 + +; Maximum number of persistent links. -1 means no limit. +; http://php.net/mysql.max-persistent +mysql.max_persistent = -1 + +; Maximum number of links (persistent + non-persistent). -1 means no limit. +; http://php.net/mysql.max-links +mysql.max_links = -1 + +; Default port number for mysql_connect(). If unset, mysql_connect() will use +; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the +; compile-time value defined MYSQL_PORT (in that order). Win32 will only look +; at MYSQL_PORT. +; http://php.net/mysql.default-port +mysql.default_port = + +; Default socket name for local MySQL connects. If empty, uses the built-in +; MySQL defaults. +; http://php.net/mysql.default-socket +mysql.default_socket = + +; Default host for mysql_connect() (doesn't apply in safe mode). +; http://php.net/mysql.default-host +mysql.default_host = + +; Default user for mysql_connect() (doesn't apply in safe mode). +; http://php.net/mysql.default-user +mysql.default_user = + +; Default password for mysql_connect() (doesn't apply in safe mode). +; Note that this is generally a *bad* idea to store passwords in this file. +; *Any* user with PHP access can run 'echo get_cfg_var("mysql.default_password") +; and reveal this password! And of course, any users with read access to this +; file will be able to reveal the password as well. +; http://php.net/mysql.default-password +mysql.default_password = + +; Maximum time (in seconds) for connect timeout. -1 means no limit +; http://php.net/mysql.connect-timeout +mysql.connect_timeout = 60 + +; Trace mode. When trace_mode is active (=On), warnings for table/index scans and +; SQL-Errors will be displayed. +; http://php.net/mysql.trace-mode +mysql.trace_mode = Off + +[MySQLi] + +; Maximum number of persistent links. -1 means no limit. +; http://php.net/mysqli.max-persistent +mysqli.max_persistent = -1 + +; Allow accessing, from PHP's perspective, local files with LOAD DATA statements +; http://php.net/mysqli.allow_local_infile +;mysqli.allow_local_infile = On + +; Allow or prevent persistent links. +; http://php.net/mysqli.allow-persistent +mysqli.allow_persistent = On + +; Maximum number of links. -1 means no limit. +; http://php.net/mysqli.max-links +mysqli.max_links = -1 + +; If mysqlnd is used: Number of cache slots for the internal result set cache +; http://php.net/mysqli.cache_size +mysqli.cache_size = 2000 + +; Default port number for mysqli_connect(). If unset, mysqli_connect() will use +; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the +; compile-time value defined MYSQL_PORT (in that order). Win32 will only look +; at MYSQL_PORT. +; http://php.net/mysqli.default-port +mysqli.default_port = 3306 + +; Default socket name for local MySQL connects. If empty, uses the built-in +; MySQL defaults. +; http://php.net/mysqli.default-socket +mysqli.default_socket = + +; Default host for mysql_connect() (doesn't apply in safe mode). +; http://php.net/mysqli.default-host +mysqli.default_host = + +; Default user for mysql_connect() (doesn't apply in safe mode). +; http://php.net/mysqli.default-user +mysqli.default_user = + +; Default password for mysqli_connect() (doesn't apply in safe mode). +; Note that this is generally a *bad* idea to store passwords in this file. +; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_pw") +; and reveal this password! And of course, any users with read access to this +; file will be able to reveal the password as well. +; http://php.net/mysqli.default-pw +mysqli.default_pw = + +; Allow or prevent reconnect +mysqli.reconnect = Off + +[mysqlnd] +; Enable / Disable collection of general statstics by mysqlnd which can be +; used to tune and monitor MySQL operations. +; http://php.net/mysqlnd.collect_statistics +mysqlnd.collect_statistics = On + +; Enable / Disable collection of memory usage statstics by mysqlnd which can be +; used to tune and monitor MySQL operations. +; http://php.net/mysqlnd.collect_memory_statistics +mysqlnd.collect_memory_statistics = Off + +; Size of a pre-allocated buffer used when sending commands to MySQL in bytes. +; http://php.net/mysqlnd.net_cmd_buffer_size +;mysqlnd.net_cmd_buffer_size = 2048 + +; Size of a pre-allocated buffer used for reading data sent by the server in +; bytes. +; http://php.net/mysqlnd.net_read_buffer_size +;mysqlnd.net_read_buffer_size = 32768 + +[OCI8] + +; Connection: Enables privileged connections using external +; credentials (OCI_SYSOPER, OCI_SYSDBA) +; http://php.net/oci8.privileged-connect +;oci8.privileged_connect = Off + +; Connection: The maximum number of persistent OCI8 connections per +; process. Using -1 means no limit. +; http://php.net/oci8.max-persistent +;oci8.max_persistent = -1 + +; Connection: The maximum number of seconds a process is allowed to +; maintain an idle persistent connection. Using -1 means idle +; persistent connections will be maintained forever. +; http://php.net/oci8.persistent-timeout +;oci8.persistent_timeout = -1 + +; Connection: The number of seconds that must pass before issuing a +; ping during oci_pconnect() to check the connection validity. When +; set to 0, each oci_pconnect() will cause a ping. Using -1 disables +; pings completely. +; http://php.net/oci8.ping-interval +;oci8.ping_interval = 60 + +; Connection: Set this to a user chosen connection class to be used +; for all pooled server requests with Oracle 11g Database Resident +; Connection Pooling (DRCP). To use DRCP, this value should be set to +; the same string for all web servers running the same application, +; the database pool must be configured, and the connection string must +; specify to use a pooled server. +;oci8.connection_class = + +; High Availability: Using On lets PHP receive Fast Application +; Notification (FAN) events generated when a database node fails. The +; database must also be configured to post FAN events. +;oci8.events = Off + +; Tuning: This option enables statement caching, and specifies how +; many statements to cache. Using 0 disables statement caching. +; http://php.net/oci8.statement-cache-size +;oci8.statement_cache_size = 20 + +; Tuning: Enables statement prefetching and sets the default number of +; rows that will be fetched automatically after statement execution. +; http://php.net/oci8.default-prefetch +;oci8.default_prefetch = 100 + +; Compatibility. Using On means oci_close() will not close +; oci_connect() and oci_new_connect() connections. +; http://php.net/oci8.old-oci-close-semantics +;oci8.old_oci_close_semantics = Off + +[PostgresSQL] +; Allow or prevent persistent links. +; http://php.net/pgsql.allow-persistent +pgsql.allow_persistent = On + +; Detect broken persistent links always with pg_pconnect(). +; Auto reset feature requires a little overheads. +; http://php.net/pgsql.auto-reset-persistent +pgsql.auto_reset_persistent = Off + +; Maximum number of persistent links. -1 means no limit. +; http://php.net/pgsql.max-persistent +pgsql.max_persistent = -1 + +; Maximum number of links (persistent+non persistent). -1 means no limit. +; http://php.net/pgsql.max-links +pgsql.max_links = -1 + +; Ignore PostgreSQL backends Notice message or not. +; Notice message logging require a little overheads. +; http://php.net/pgsql.ignore-notice +pgsql.ignore_notice = 0 + +; Log PostgreSQL backends Noitce message or not. +; Unless pgsql.ignore_notice=0, module cannot log notice message. +; http://php.net/pgsql.log-notice +pgsql.log_notice = 0 + +[Sybase-CT] +; Allow or prevent persistent links. +; http://php.net/sybct.allow-persistent +sybct.allow_persistent = On + +; Maximum number of persistent links. -1 means no limit. +; http://php.net/sybct.max-persistent +sybct.max_persistent = -1 + +; Maximum number of links (persistent + non-persistent). -1 means no limit. +; http://php.net/sybct.max-links +sybct.max_links = -1 + +; Minimum server message severity to display. +; http://php.net/sybct.min-server-severity +sybct.min_server_severity = 10 + +; Minimum client message severity to display. +; http://php.net/sybct.min-client-severity +sybct.min_client_severity = 10 + +; Set per-context timeout +; http://php.net/sybct.timeout +;sybct.timeout= + +;sybct.packet_size + +; The maximum time in seconds to wait for a connection attempt to succeed before returning failure. +; Default: one minute +;sybct.login_timeout= + +; The name of the host you claim to be connecting from, for display by sp_who. +; Default: none +;sybct.hostname= + +; Allows you to define how often deadlocks are to be retried. -1 means "forever". +; Default: 0 +;sybct.deadlock_retry_count= + +[bcmath] +; Number of decimal digits for all bcmath functions. +; http://php.net/bcmath.scale +bcmath.scale = 0 + +[browscap] +; http://php.net/browscap +;browscap = extra/browscap.ini + +[Session] +; Handler used to store/retrieve data. +; http://php.net/session.save-handler +session.save_handler = files + +; Argument passed to save_handler. In the case of files, this is the path +; where data files are stored. Note: Windows users have to change this +; variable in order to use PHP's session functions. +; +; The path can be defined as: +; +; session.save_path = "N;/path" +; +; where N is an integer. Instead of storing all the session files in +; /path, what this will do is use subdirectories N-levels deep, and +; store the session data in those directories. This is useful if you +; or your OS have problems with lots of files in one directory, and is +; a more efficient layout for servers that handle lots of sessions. +; +; NOTE 1: PHP will not create this directory structure automatically. +; You can use the script in the ext/session dir for that purpose. +; NOTE 2: See the section on garbage collection below if you choose to +; use subdirectories for session storage +; +; The file storage module creates files using mode 600 by default. +; You can change that by using +; +; session.save_path = "N;MODE;/path" +; +; where MODE is the octal representation of the mode. Note that this +; does not overwrite the process's umask. +; http://php.net/session.save-path +;session.save_path = "/tmp" + +; Whether to use cookies. +; http://php.net/session.use-cookies +session.use_cookies = 1 + +; http://php.net/session.cookie-secure +;session.cookie_secure = + +; This option forces PHP to fetch and use a cookie for storing and maintaining +; the session id. We encourage this operation as it's very helpful in combatting +; session hijacking when not specifying and managing your own session id. It is +; not the end all be all of session hijacking defense, but it's a good start. +; http://php.net/session.use-only-cookies +session.use_only_cookies = 1 + +; Name of the session (used as cookie name). +; http://php.net/session.name +session.name = PHPSESSID + +; Initialize session on request startup. +; http://php.net/session.auto-start +session.auto_start = 0 + +; Lifetime in seconds of cookie or, if 0, until browser is restarted. +; http://php.net/session.cookie-lifetime +session.cookie_lifetime = 0 + +; The path for which the cookie is valid. +; http://php.net/session.cookie-path +session.cookie_path = / + +; The domain for which the cookie is valid. +; http://php.net/session.cookie-domain +session.cookie_domain = + +; Whether or not to add the httpOnly flag to the cookie, which makes it inaccessible to browser scripting languages such as JavaScript. +; http://php.net/session.cookie-httponly +session.cookie_httponly = + +; Handler used to serialize data. php is the standard serializer of PHP. +; http://php.net/session.serialize-handler +session.serialize_handler = php + +; Defines the probability that the 'garbage collection' process is started +; on every session initialization. The probability is calculated by using +; gc_probability/gc_divisor. Where session.gc_probability is the numerator +; and gc_divisor is the denominator in the equation. Setting this value to 1 +; when the session.gc_divisor value is 100 will give you approximately a 1% chance +; the gc will run on any give request. +; Default Value: 1 +; Development Value: 1 +; Production Value: 1 +; http://php.net/session.gc-probability +session.gc_probability = 1 + +; Defines the probability that the 'garbage collection' process is started on every +; session initialization. The probability is calculated by using the following equation: +; gc_probability/gc_divisor. Where session.gc_probability is the numerator and +; session.gc_divisor is the denominator in the equation. Setting this value to 1 +; when the session.gc_divisor value is 100 will give you approximately a 1% chance +; the gc will run on any give request. Increasing this value to 1000 will give you +; a 0.1% chance the gc will run on any give request. For high volume production servers, +; this is a more efficient approach. +; Default Value: 100 +; Development Value: 1000 +; Production Value: 1000 +; http://php.net/session.gc-divisor +session.gc_divisor = 1000 + +; After this number of seconds, stored data will be seen as 'garbage' and +; cleaned up by the garbage collection process. +; http://php.net/session.gc-maxlifetime +session.gc_maxlifetime = 1440 + +; NOTE: If you are using the subdirectory option for storing session files +; (see session.save_path above), then garbage collection does *not* +; happen automatically. You will need to do your own garbage +; collection through a shell script, cron entry, or some other method. +; For example, the following script would is the equivalent of +; setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes): +; cd /path/to/sessions; find -cmin +24 | xargs rm + +; PHP 4.2 and less have an undocumented feature/bug that allows you to +; to initialize a session variable in the global scope, even when register_globals +; is disabled. PHP 4.3 and later will warn you, if this feature is used. +; You can disable the feature and the warning separately. At this time, +; the warning is only displayed, if bug_compat_42 is enabled. This feature +; introduces some serious security problems if not handled correctly. It's +; recommended that you do not use this feature on production servers. But you +; should enable this on development servers and enable the warning as well. If you +; do not enable the feature on development servers, you won't be warned when it's +; used and debugging errors caused by this can be difficult to track down. +; Default Value: On +; Development Value: On +; Production Value: Off +; http://php.net/session.bug-compat-42 +session.bug_compat_42 = Off + +; This setting controls whether or not you are warned by PHP when initializing a +; session value into the global space. session.bug_compat_42 must be enabled before +; these warnings can be issued by PHP. See the directive above for more information. +; Default Value: On +; Development Value: On +; Production Value: Off +; http://php.net/session.bug-compat-warn +session.bug_compat_warn = Off + +; Check HTTP Referer to invalidate externally stored URLs containing ids. +; HTTP_REFERER has to contain this substring for the session to be +; considered as valid. +; http://php.net/session.referer-check +session.referer_check = + +; How many bytes to read from the file. +; http://php.net/session.entropy-length +session.entropy_length = 0 + +; Specified here to create the session id. +; http://php.net/session.entropy-file +;session.entropy_file = /dev/urandom +session.entropy_file = + +; http://php.net/session.entropy-length +;session.entropy_length = 16 + +; Set to {nocache,private,public,} to determine HTTP caching aspects +; or leave this empty to avoid sending anti-caching headers. +; http://php.net/session.cache-limiter +session.cache_limiter = nocache + +; Document expires after n minutes. +; http://php.net/session.cache-expire +session.cache_expire = 180 + +; trans sid support is disabled by default. +; Use of trans sid may risk your users security. +; Use this option with caution. +; - User may send URL contains active session ID +; to other person via. email/irc/etc. +; - URL that contains active session ID may be stored +; in publically accessible computer. +; - User may access your site with the same session ID +; always using URL stored in browser's history or bookmarks. +; http://php.net/session.use-trans-sid +session.use_trans_sid = 0 + +; Select a hash function for use in generating session ids. +; Possible Values +; 0 (MD5 128 bits) +; 1 (SHA-1 160 bits) +; This option may also be set to the name of any hash function supported by +; the hash extension. A list of available hashes is returned by the hash_alogs() +; function. +; http://php.net/session.hash-function +session.hash_function = 0 + +; Define how many bits are stored in each character when converting +; the binary hash data to something readable. +; Possible values: +; 4 (4 bits: 0-9, a-f) +; 5 (5 bits: 0-9, a-v) +; 6 (6 bits: 0-9, a-z, A-Z, "-", ",") +; Default Value: 4 +; Development Value: 5 +; Production Value: 5 +; http://php.net/session.hash-bits-per-character +session.hash_bits_per_character = 5 + +; The URL rewriter will look for URLs in a defined set of HTML tags. +; form/fieldset are special; if you include them here, the rewriter will +; add a hidden field with the info which is otherwise appended +; to URLs. If you want XHTML conformity, remove the form entry. +; Note that all valid entries require a "=", even if no value follows. +; Default Value: "a=href,area=href,frame=src,form=,fieldset=" +; Development Value: "a=href,area=href,frame=src,input=src,form=fakeentry" +; Production Value: "a=href,area=href,frame=src,input=src,form=fakeentry" +; http://php.net/url-rewriter.tags +url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry" + +[MSSQL] +; Allow or prevent persistent links. +mssql.allow_persistent = On + +; Maximum number of persistent links. -1 means no limit. +mssql.max_persistent = -1 + +; Maximum number of links (persistent+non persistent). -1 means no limit. +mssql.max_links = -1 + +; Minimum error severity to display. +mssql.min_error_severity = 10 + +; Minimum message severity to display. +mssql.min_message_severity = 10 + +; Compatibility mode with old versions of PHP 3.0. +mssql.compatability_mode = Off + +; Connect timeout +;mssql.connect_timeout = 5 + +; Query timeout +;mssql.timeout = 60 + +; Valid range 0 - 2147483647. Default = 4096. +;mssql.textlimit = 4096 + +; Valid range 0 - 2147483647. Default = 4096. +;mssql.textsize = 4096 + +; Limits the number of records in each batch. 0 = all records in one batch. +;mssql.batchsize = 0 + +; Specify how datetime and datetim4 columns are returned +; On => Returns data converted to SQL server settings +; Off => Returns values as YYYY-MM-DD hh:mm:ss +;mssql.datetimeconvert = On + +; Use NT authentication when connecting to the server +mssql.secure_connection = Off + +; Specify max number of processes. -1 = library default +; msdlib defaults to 25 +; FreeTDS defaults to 4096 +;mssql.max_procs = -1 + +; Specify client character set. +; If empty or not set the client charset from freetds.comf is used +; This is only used when compiled with FreeTDS +;mssql.charset = "ISO-8859-1" + +[Assertion] +; Assert(expr); active by default. +; http://php.net/assert.active +;assert.active = On + +; Issue a PHP warning for each failed assertion. +; http://php.net/assert.warning +;assert.warning = On + +; Don't bail out by default. +; http://php.net/assert.bail +;assert.bail = Off + +; User-function to be called if an assertion fails. +; http://php.net/assert.callback +;assert.callback = 0 + +; Eval the expression with current error_reporting(). Set to true if you want +; error_reporting(0) around the eval(). +; http://php.net/assert.quiet-eval +;assert.quiet_eval = 0 + +[COM] +; path to a file containing GUIDs, IIDs or filenames of files with TypeLibs +; http://php.net/com.typelib-file +;com.typelib_file = + +; allow Distributed-COM calls +; http://php.net/com.allow-dcom +;com.allow_dcom = true + +; autoregister constants of a components typlib on com_load() +; http://php.net/com.autoregister-typelib +;com.autoregister_typelib = true + +; register constants casesensitive +; http://php.net/com.autoregister-casesensitive +;com.autoregister_casesensitive = false + +; show warnings on duplicate constant registrations +; http://php.net/com.autoregister-verbose +;com.autoregister_verbose = true + +; The default character set code-page to use when passing strings to and from COM objects. +; Default: system ANSI code page +;com.code_page= + +[mbstring] +; language for internal character representation. +; http://php.net/mbstring.language +;mbstring.language = Japanese + +; internal/script encoding. +; Some encoding cannot work as internal encoding. +; (e.g. SJIS, BIG5, ISO-2022-*) +; http://php.net/mbstring.internal-encoding +;mbstring.internal_encoding = EUC-JP + +; http input encoding. +; http://php.net/mbstring.http-input +;mbstring.http_input = auto + +; http output encoding. mb_output_handler must be +; registered as output buffer to function +; http://php.net/mbstring.http-output +;mbstring.http_output = SJIS + +; enable automatic encoding translation according to +; mbstring.internal_encoding setting. Input chars are +; converted to internal encoding by setting this to On. +; Note: Do _not_ use automatic encoding translation for +; portable libs/applications. +; http://php.net/mbstring.encoding-translation +;mbstring.encoding_translation = Off + +; automatic encoding detection order. +; auto means +; http://php.net/mbstring.detect-order +;mbstring.detect_order = auto + +; substitute_character used when character cannot be converted +; one from another +; http://php.net/mbstring.substitute-character +;mbstring.substitute_character = none; + +; overload(replace) single byte functions by mbstring functions. +; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(), +; etc. Possible values are 0,1,2,4 or combination of them. +; For example, 7 for overload everything. +; 0: No overload +; 1: Overload mail() function +; 2: Overload str*() functions +; 4: Overload ereg*() functions +; http://php.net/mbstring.func-overload +;mbstring.func_overload = 0 + +; enable strict encoding detection. +;mbstring.strict_detection = Off + +; This directive specifies the regex pattern of content types for which mb_output_handler() +; is activated. +; Default: mbstring.http_output_conv_mimetype=^(text/|application/xhtml\+xml) +;mbstring.http_output_conv_mimetype= + +; Allows to set script encoding. Only affects if PHP is compiled with --enable-zend-multibyte +; Default: "" +;mbstring.script_encoding= + +[gd] +; Tell the jpeg decode to ignore warnings and try to create +; a gd image. The warning will then be displayed as notices +; disabled by default +; http://php.net/gd.jpeg-ignore-warning +;gd.jpeg_ignore_warning = 0 + +[exif] +; Exif UNICODE user comments are handled as UCS-2BE/UCS-2LE and JIS as JIS. +; With mbstring support this will automatically be converted into the encoding +; given by corresponding encode setting. When empty mbstring.internal_encoding +; is used. For the decode settings you can distinguish between motorola and +; intel byte order. A decode setting cannot be empty. +; http://php.net/exif.encode-unicode +;exif.encode_unicode = ISO-8859-15 + +; http://php.net/exif.decode-unicode-motorola +;exif.decode_unicode_motorola = UCS-2BE + +; http://php.net/exif.decode-unicode-intel +;exif.decode_unicode_intel = UCS-2LE + +; http://php.net/exif.encode-jis +;exif.encode_jis = + +; http://php.net/exif.decode-jis-motorola +;exif.decode_jis_motorola = JIS + +; http://php.net/exif.decode-jis-intel +;exif.decode_jis_intel = JIS + +[Tidy] +; The path to a default tidy configuration file to use when using tidy +; http://php.net/tidy.default-config +;tidy.default_config = /usr/local/lib/php/default.tcfg + +; Should tidy clean and repair output automatically? +; WARNING: Do not use this option if you are generating non-html content +; such as dynamic images +; http://php.net/tidy.clean-output +tidy.clean_output = Off + +[soap] +; Enables or disables WSDL caching feature. +; http://php.net/soap.wsdl-cache-enabled +soap.wsdl_cache_enabled=1 + +; Sets the directory name where SOAP extension will put cache files. +; http://php.net/soap.wsdl-cache-dir +soap.wsdl_cache_dir="/tmp" + +; (time to live) Sets the number of second while cached file will be used +; instead of original one. +; http://php.net/soap.wsdl-cache-ttl +soap.wsdl_cache_ttl=86400 + +; Sets the size of the cache limit. (Max. number of WSDL files to cache) +soap.wsdl_cache_limit = 5 + +[sysvshm] +; A default size of the shared memory segment +;sysvshm.init_mem = 10000 + +[ldap] +; Sets the maximum number of open links or -1 for unlimited. +ldap.max_links = -1 + +[mcrypt] +; For more information about mcrypt settings see http://php.net/mcrypt-module-open + +; Directory where to load mcrypt algorithms +; Default: Compiled in into libmcrypt (usually /usr/local/lib/libmcrypt) +;mcrypt.algorithms_dir= + +; Directory where to load mcrypt modes +; Default: Compiled in into libmcrypt (usually /usr/local/lib/libmcrypt) +;mcrypt.modes_dir= + +[dba] +;dba.default_handler= + +; Local Variables: +; tab-width: 4 +; End: + +<% @directives.sort_by { |key, val| key }.each do |directive, value| -%> +<%= "#{directive}=\"#{value}\"" %> +<% end -%> diff --git a/vagrant/provision/cookbooks/php/templates/default/extension.ini.erb b/vagrant/provision/cookbooks/php/templates/default/extension.ini.erb new file mode 100755 index 0000000..11a9830 --- /dev/null +++ b/vagrant/provision/cookbooks/php/templates/default/extension.ini.erb @@ -0,0 +1,7 @@ +; configuration for php <%= @name %> module +<% @extensions.each do |filepath, zend| -%> +<%= 'zend_' if zend %>extension=<%= filepath %> +<% end -%> +<% @directives.each do |k,v| -%> +<%= "#{@name}.#{k}=\"#{v}\"" %> +<% end -%> diff --git a/vagrant/provision/cookbooks/php/templates/default/php.ini.erb b/vagrant/provision/cookbooks/php/templates/default/php.ini.erb new file mode 100755 index 0000000..55efd4c --- /dev/null +++ b/vagrant/provision/cookbooks/php/templates/default/php.ini.erb @@ -0,0 +1,1900 @@ +[PHP] + +;;;;;;;;;;;;;;;;;;; +; About php.ini ; +;;;;;;;;;;;;;;;;;;; +; PHP's initialization file, generally called php.ini, is responsible for +; configuring many of the aspects of PHP's behavior. + +; PHP attempts to find and load this configuration from a number of locations. +; The following is a summary of its search order: +; 1. SAPI module specific location. +; 2. The PHPRC environment variable. (As of PHP 5.2.0) +; 3. A number of predefined registry keys on Windows (As of PHP 5.2.0) +; 4. Current working directory (except CLI) +; 5. The web server's directory (for SAPI modules), or directory of PHP +; (otherwise in Windows) +; 6. The directory from the --with-config-file-path compile time option, or the +; Windows directory (C:\windows or C:\winnt) +; See the PHP docs for more specific information. +; http://php.net/configuration.file + +; The syntax of the file is extremely simple. Whitespace and Lines +; beginning with a semicolon are silently ignored (as you probably guessed). +; Section headers (e.g. [Foo]) are also silently ignored, even though +; they might mean something in the future. + +; Directives following the section heading [PATH=/www/mysite] only +; apply to PHP files in the /www/mysite directory. Directives +; following the section heading [HOST=www.example.com] only apply to +; PHP files served from www.example.com. Directives set in these +; special sections cannot be overridden by user-defined INI files or +; at runtime. Currently, [PATH=] and [HOST=] sections only work under +; CGI/FastCGI. +; http://php.net/ini.sections + +; Directives are specified using the following syntax: +; directive = value +; Directive names are *case sensitive* - foo=bar is different from FOO=bar. +; Directives are variables used to configure PHP or PHP extensions. +; There is no name validation. If PHP can't find an expected +; directive because it is not set or is mistyped, a default value will be used. + +; The value can be a string, a number, a PHP constant (e.g. E_ALL or M_PI), one +; of the INI constants (On, Off, True, False, Yes, No and None) or an expression +; (e.g. E_ALL & ~E_NOTICE), a quoted string ("bar"), or a reference to a +; previously set variable or directive (e.g. ${foo}) + +; Expressions in the INI file are limited to bitwise operators and parentheses: +; | bitwise OR +; ^ bitwise XOR +; & bitwise AND +; ~ bitwise NOT +; ! boolean NOT + +; Boolean flags can be turned on using the values 1, On, True or Yes. +; They can be turned off using the values 0, Off, False or No. + +; An empty string can be denoted by simply not writing anything after the equal +; sign, or by using the None keyword: + +; foo = ; sets foo to an empty string +; foo = None ; sets foo to an empty string +; foo = "None" ; sets foo to the string 'None' + +; If you use constants in your value, and these constants belong to a +; dynamically loaded extension (either a PHP extension or a Zend extension), +; you may only use these constants *after* the line that loads the extension. + +;;;;;;;;;;;;;;;;;;; +; About this file ; +;;;;;;;;;;;;;;;;;;; +; PHP comes packaged with two INI files. One that is recommended to be used +; in production environments and one that is recommended to be used in +; development environments. + +; php.ini-production contains settings which hold security, performance and +; best practices at its core. But please be aware, these settings may break +; compatibility with older or less security conscience applications. We +; recommending using the production ini in production and testing environments. + +; php.ini-development is very similar to its production variant, except it's +; much more verbose when it comes to errors. We recommending using the +; development version only in development environments as errors shown to +; application users can inadvertently leak otherwise secure information. + +;;;;;;;;;;;;;;;;;;; +; Quick Reference ; +;;;;;;;;;;;;;;;;;;; +; The following are all the settings which are different in either the production +; or development versions of the INIs with respect to PHP's default behavior. +; Please see the actual settings later in the document for more details as to why +; we recommend these changes in PHP's behavior. + +; allow_call_time_pass_reference +; Default Value: On +; Development Value: Off +; Production Value: Off + +; display_errors +; Default Value: On +; Development Value: On +; Production Value: Off + +; display_startup_errors +; Default Value: Off +; Development Value: On +; Production Value: Off + +; error_reporting +; Default Value: E_ALL & ~E_NOTICE +; Development Value: E_ALL | E_STRICT +; Production Value: E_ALL & ~E_DEPRECATED + +; html_errors +; Default Value: On +; Development Value: On +; Production value: Off + +; log_errors +; Default Value: Off +; Development Value: On +; Production Value: On + +; magic_quotes_gpc +; Default Value: On +; Development Value: Off +; Production Value: Off + +; max_input_time +; Default Value: -1 (Unlimited) +; Development Value: 60 (60 seconds) +; Production Value: 60 (60 seconds) + +; output_buffering +; Default Value: Off +; Development Value: 4096 +; Production Value: 4096 + +; register_argc_argv +; Default Value: On +; Development Value: Off +; Production Value: Off + +; register_long_arrays +; Default Value: On +; Development Value: Off +; Production Value: Off + +; request_order +; Default Value: None +; Development Value: "GP" +; Production Value: "GP" + +; session.bug_compat_42 +; Default Value: On +; Development Value: On +; Production Value: Off + +; session.bug_compat_warn +; Default Value: On +; Development Value: On +; Production Value: Off + +; session.gc_divisor +; Default Value: 100 +; Development Value: 1000 +; Production Value: 1000 + +; session.hash_bits_per_character +; Default Value: 4 +; Development Value: 5 +; Production Value: 5 + +; short_open_tag +; Default Value: On +; Development Value: Off +; Production Value: Off + +; track_errors +; Default Value: Off +; Development Value: On +; Production Value: Off + +; url_rewriter.tags +; Default Value: "a=href,area=href,frame=src,form=,fieldset=" +; Development Value: "a=href,area=href,frame=src,input=src,form=fakeentry" +; Production Value: "a=href,area=href,frame=src,input=src,form=fakeentry" + +; variables_order +; Default Value: "EGPCS" +; Development Value: "GPCS" +; Production Value: "GPCS" + +;;;;;;;;;;;;;;;;;;;; +; php.ini Options ; +;;;;;;;;;;;;;;;;;;;; +; Name for user-defined php.ini (.htaccess) files. Default is ".user.ini" +;user_ini.filename = ".user.ini" + +; To disable this feature set this option to empty value +;user_ini.filename = + +; TTL for user-defined php.ini files (time-to-live) in seconds. Default is 300 seconds (5 minutes) +;user_ini.cache_ttl = 300 + +;;;;;;;;;;;;;;;;;;;; +; Language Options ; +;;;;;;;;;;;;;;;;;;;; + +; Enable the PHP scripting language engine under Apache. +; http://php.net/engine +engine = On + +; This directive determines whether or not PHP will recognize code between +; tags as PHP source which should be processed as such. It's been +; recommended for several years that you not use the short tag "short cut" and +; instead to use the full tag combination. With the wide spread use +; of XML and use of these tags by other languages, the server can become easily +; confused and end up parsing the wrong code in the wrong context. But because +; this short cut has been a feature for such a long time, it's currently still +; supported for backwards compatibility, but we recommend you don't use them. +; Default Value: On +; Development Value: Off +; Production Value: Off +; http://php.net/short-open-tag +short_open_tag = Off + +; Allow ASP-style <% %> tags. +; http://php.net/asp-tags +asp_tags = Off + +; The number of significant digits displayed in floating point numbers. +; http://php.net/precision +precision = 14 + +; Enforce year 2000 compliance (will cause problems with non-compliant browsers) +; http://php.net/y2k-compliance +y2k_compliance = On + +; Output buffering is a mechanism for controlling how much output data +; (excluding headers and cookies) PHP should keep internally before pushing that +; data to the client. If your application's output exceeds this setting, PHP +; will send that data in chunks of roughly the size you specify. +; Turning on this setting and managing its maximum buffer size can yield some +; interesting side-effects depending on your application and web server. +; You may be able to send headers and cookies after you've already sent output +; through print or echo. You also may see performance benefits if your server is +; emitting less packets due to buffered output versus PHP streaming the output +; as it gets it. On production servers, 4096 bytes is a good setting for performance +; reasons. +; Note: Output buffering can also be controlled via Output Buffering Control +; functions. +; Possible Values: +; On = Enabled and buffer is unlimited. (Use with caution) +; Off = Disabled +; Integer = Enables the buffer and sets its maximum size in bytes. +; Note: This directive is hardcoded to Off for the CLI SAPI +; Default Value: Off +; Development Value: 4096 +; Production Value: 4096 +; http://php.net/output-buffering +output_buffering = 4096 + +; You can redirect all of the output of your scripts to a function. For +; example, if you set output_handler to "mb_output_handler", character +; encoding will be transparently converted to the specified encoding. +; Setting any output handler automatically turns on output buffering. +; Note: People who wrote portable scripts should not depend on this ini +; directive. Instead, explicitly set the output handler using ob_start(). +; Using this ini directive may cause problems unless you know what script +; is doing. +; Note: You cannot use both "mb_output_handler" with "ob_iconv_handler" +; and you cannot use both "ob_gzhandler" and "zlib.output_compression". +; Note: output_handler must be empty if this is set 'On' !!!! +; Instead you must use zlib.output_handler. +; http://php.net/output-handler +;output_handler = + +; Transparent output compression using the zlib library +; Valid values for this option are 'off', 'on', or a specific buffer size +; to be used for compression (default is 4KB) +; Note: Resulting chunk size may vary due to nature of compression. PHP +; outputs chunks that are few hundreds bytes each as a result of +; compression. If you prefer a larger chunk size for better +; performance, enable output_buffering in addition. +; Note: You need to use zlib.output_handler instead of the standard +; output_handler, or otherwise the output will be corrupted. +; http://php.net/zlib.output-compression +zlib.output_compression = Off + +; http://php.net/zlib.output-compression-level +;zlib.output_compression_level = -1 + +; You cannot specify additional output handlers if zlib.output_compression +; is activated here. This setting does the same as output_handler but in +; a different order. +; http://php.net/zlib.output-handler +;zlib.output_handler = + +; Implicit flush tells PHP to tell the output layer to flush itself +; automatically after every output block. This is equivalent to calling the +; PHP function flush() after each and every call to print() or echo() and each +; and every HTML block. Turning this option on has serious performance +; implications and is generally recommended for debugging purposes only. +; http://php.net/implicit-flush +; Note: This directive is hardcoded to On for the CLI SAPI +implicit_flush = Off + +; The unserialize callback function will be called (with the undefined class' +; name as parameter), if the unserializer finds an undefined class +; which should be instantiated. A warning appears if the specified function is +; not defined, or if the function doesn't include/implement the missing class. +; So only set this entry, if you really want to implement such a +; callback-function. +unserialize_callback_func = + +; When floats & doubles are serialized store serialize_precision significant +; digits after the floating point. The default value ensures that when floats +; are decoded with unserialize, the data will remain the same. +serialize_precision = 100 + +; This directive allows you to enable and disable warnings which PHP will issue +; if you pass a value by reference at function call time. Passing values by +; reference at function call time is a deprecated feature which will be removed +; from PHP at some point in the near future. The acceptable method for passing a +; value by reference to a function is by declaring the reference in the functions +; definition, not at call time. This directive does not disable this feature, it +; only determines whether PHP will warn you about it or not. These warnings +; should enabled in development environments only. +; Default Value: On (Suppress warnings) +; Development Value: Off (Issue warnings) +; Production Value: Off (Issue warnings) +; http://php.net/allow-call-time-pass-reference +allow_call_time_pass_reference = Off + +; Safe Mode +; http://php.net/safe-mode +safe_mode = Off + +; By default, Safe Mode does a UID compare check when +; opening files. If you want to relax this to a GID compare, +; then turn on safe_mode_gid. +; http://php.net/safe-mode-gid +safe_mode_gid = Off + +; When safe_mode is on, UID/GID checks are bypassed when +; including files from this directory and its subdirectories. +; (directory must also be in include_path or full path must +; be used when including) +; http://php.net/safe-mode-include-dir +safe_mode_include_dir = + +; When safe_mode is on, only executables located in the safe_mode_exec_dir +; will be allowed to be executed via the exec family of functions. +; http://php.net/safe-mode-exec-dir +safe_mode_exec_dir = + +; Setting certain environment variables may be a potential security breach. +; This directive contains a comma-delimited list of prefixes. In Safe Mode, +; the user may only alter environment variables whose names begin with the +; prefixes supplied here. By default, users will only be able to set +; environment variables that begin with PHP_ (e.g. PHP_FOO=BAR). +; Note: If this directive is empty, PHP will let the user modify ANY +; environment variable! +; http://php.net/safe-mode-allowed-env-vars +safe_mode_allowed_env_vars = PHP_ + +; This directive contains a comma-delimited list of environment variables that +; the end user won't be able to change using putenv(). These variables will be +; protected even if safe_mode_allowed_env_vars is set to allow to change them. +; http://php.net/safe-mode-protected-env-vars +safe_mode_protected_env_vars = LD_LIBRARY_PATH + +; open_basedir, if set, limits all file operations to the defined directory +; and below. This directive makes most sense if used in a per-directory +; or per-virtualhost web server configuration file. This directive is +; *NOT* affected by whether Safe Mode is turned On or Off. +; http://php.net/open-basedir +;open_basedir = + +; This directive allows you to disable certain functions for security reasons. +; It receives a comma-delimited list of function names. This directive is +; *NOT* affected by whether Safe Mode is turned On or Off. +; http://php.net/disable-functions +disable_functions = + +; This directive allows you to disable certain classes for security reasons. +; It receives a comma-delimited list of class names. This directive is +; *NOT* affected by whether Safe Mode is turned On or Off. +; http://php.net/disable-classes +disable_classes = + +; Colors for Syntax Highlighting mode. Anything that's acceptable in +; would work. +; http://php.net/syntax-highlighting +;highlight.string = #DD0000 +;highlight.comment = #FF9900 +;highlight.keyword = #007700 +;highlight.bg = #FFFFFF +;highlight.default = #0000BB +;highlight.html = #000000 + +; If enabled, the request will be allowed to complete even if the user aborts +; the request. Consider enabling it if executing long requests, which may end up +; being interrupted by the user or a browser timing out. PHP's default behavior +; is to disable this feature. +; http://php.net/ignore-user-abort +;ignore_user_abort = On + +; Determines the size of the realpath cache to be used by PHP. This value should +; be increased on systems where PHP opens many files to reflect the quantity of +; the file operations performed. +; http://php.net/realpath-cache-size +;realpath_cache_size = 16k + +; Duration of time, in seconds for which to cache realpath information for a given +; file or directory. For systems with rarely changing files, consider increasing this +; value. +; http://php.net/realpath-cache-ttl +;realpath_cache_ttl = 120 + +;;;;;;;;;;;;;;;;; +; Miscellaneous ; +;;;;;;;;;;;;;;;;; + +; Decides whether PHP may expose the fact that it is installed on the server +; (e.g. by adding its signature to the Web server header). It is no security +; threat in any way, but it makes it possible to determine whether you use PHP +; on your server or not. +; http://php.net/expose-php +expose_php = On + +;;;;;;;;;;;;;;;;;;; +; Resource Limits ; +;;;;;;;;;;;;;;;;;;; + +; Maximum execution time of each script, in seconds +; http://php.net/max-execution-time +; Note: This directive is hardcoded to 0 for the CLI SAPI +max_execution_time = 30 + +; Maximum amount of time each script may spend parsing request data. It's a good +; idea to limit this time on productions servers in order to eliminate unexpectedly +; long running scripts. +; Note: This directive is hardcoded to -1 for the CLI SAPI +; Default Value: -1 (Unlimited) +; Development Value: 60 (60 seconds) +; Production Value: 60 (60 seconds) +; http://php.net/max-input-time +max_input_time = 60 + +; Maximum input variable nesting level +; http://php.net/max-input-nesting-level +;max_input_nesting_level = 64 + +; Maximum amount of memory a script may consume (128MB) +; http://php.net/memory-limit +memory_limit = 128M + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Error handling and logging ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +; This directive informs PHP of which errors, warnings and notices you would like +; it to take action for. The recommended way of setting values for this +; directive is through the use of the error level constants and bitwise +; operators. The error level constants are below here for convenience as well as +; some common settings and their meanings. +; By default, PHP is set to take action on all errors, notices and warnings EXCEPT +; those related to E_NOTICE and E_STRICT, which together cover best practices and +; recommended coding standards in PHP. For performance reasons, this is the +; recommend error reporting setting. Your production server shouldn't be wasting +; resources complaining about best practices and coding standards. That's what +; development servers and development settings are for. +; Note: The php.ini-development file has this setting as E_ALL | E_STRICT. This +; means it pretty much reports everything which is exactly what you want during +; development and early testing. +; +; Error Level Constants: +; E_ALL - All errors and warnings (includes E_STRICT as of PHP 6.0.0) +; E_ERROR - fatal run-time errors +; E_RECOVERABLE_ERROR - almost fatal run-time errors +; E_WARNING - run-time warnings (non-fatal errors) +; E_PARSE - compile-time parse errors +; E_NOTICE - run-time notices (these are warnings which often result +; from a bug in your code, but it's possible that it was +; intentional (e.g., using an uninitialized variable and +; relying on the fact it's automatically initialized to an +; empty string) +; E_STRICT - run-time notices, enable to have PHP suggest changes +; to your code which will ensure the best interoperability +; and forward compatibility of your code +; E_CORE_ERROR - fatal errors that occur during PHP's initial startup +; E_CORE_WARNING - warnings (non-fatal errors) that occur during PHP's +; initial startup +; E_COMPILE_ERROR - fatal compile-time errors +; E_COMPILE_WARNING - compile-time warnings (non-fatal errors) +; E_USER_ERROR - user-generated error message +; E_USER_WARNING - user-generated warning message +; E_USER_NOTICE - user-generated notice message +; E_DEPRECATED - warn about code that will not work in future versions +; of PHP +; E_USER_DEPRECATED - user-generated deprecation warnings +; +; Common Values: +; E_ALL & ~E_NOTICE (Show all errors, except for notices and coding standards warnings.) +; E_ALL & ~E_NOTICE | E_STRICT (Show all errors, except for notices) +; E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors) +; E_ALL | E_STRICT (Show all errors, warnings and notices including coding standards.) +; Default Value: E_ALL & ~E_NOTICE +; Development Value: E_ALL | E_STRICT +; Production Value: E_ALL & ~E_DEPRECATED +; http://php.net/error-reporting +error_reporting = E_ALL & ~E_DEPRECATED + +; This directive controls whether or not and where PHP will output errors, +; notices and warnings too. Error output is very useful during development, but +; it could be very dangerous in production environments. Depending on the code +; which is triggering the error, sensitive information could potentially leak +; out of your application such as database usernames and passwords or worse. +; It's recommended that errors be logged on production servers rather than +; having the errors sent to STDOUT. +; Possible Values: +; Off = Do not display any errors +; stderr = Display errors to STDERR (affects only CGI/CLI binaries!) +; On or stdout = Display errors to STDOUT +; Default Value: On +; Development Value: On +; Production Value: Off +; http://php.net/display-errors +display_errors = Off + +; The display of errors which occur during PHP's startup sequence are handled +; separately from display_errors. PHP's default behavior is to suppress those +; errors from clients. Turning the display of startup errors on can be useful in +; debugging configuration problems. But, it's strongly recommended that you +; leave this setting off on production servers. +; Default Value: Off +; Development Value: On +; Production Value: Off +; http://php.net/display-startup-errors +display_startup_errors = Off + +; Besides displaying errors, PHP can also log errors to locations such as a +; server-specific log, STDERR, or a location specified by the error_log +; directive found below. While errors should not be displayed on productions +; servers they should still be monitored and logging is a great way to do that. +; Default Value: Off +; Development Value: On +; Production Value: On +; http://php.net/log-errors +log_errors = On + +; Set maximum length of log_errors. In error_log information about the source is +; added. The default is 1024 and 0 allows to not apply any maximum length at all. +; http://php.net/log-errors-max-len +log_errors_max_len = 1024 + +; Do not log repeated messages. Repeated errors must occur in same file on same +; line unless ignore_repeated_source is set true. +; http://php.net/ignore-repeated-errors +ignore_repeated_errors = Off + +; Ignore source of message when ignoring repeated messages. When this setting +; is On you will not log errors with repeated messages from different files or +; source lines. +; http://php.net/ignore-repeated-source +ignore_repeated_source = Off + +; If this parameter is set to Off, then memory leaks will not be shown (on +; stdout or in the log). This has only effect in a debug compile, and if +; error reporting includes E_WARNING in the allowed list +; http://php.net/report-memleaks +report_memleaks = On + +; This setting is on by default. +;report_zend_debug = 0 + +; Store the last error/warning message in $php_errormsg (boolean). Setting this value +; to On can assist in debugging and is appropriate for development servers. It should +; however be disabled on production servers. +; Default Value: Off +; Development Value: On +; Production Value: Off +; http://php.net/track-errors +track_errors = Off + +; Turn off normal error reporting and emit XML-RPC error XML +; http://php.net/xmlrpc-errors +;xmlrpc_errors = 0 + +; An XML-RPC faultCode +;xmlrpc_error_number = 0 + +; When PHP displays or logs an error, it has the capability of inserting html +; links to documentation related to that error. This directive controls whether +; those HTML links appear in error messages or not. For performance and security +; reasons, it's recommended you disable this on production servers. +; Note: This directive is hardcoded to Off for the CLI SAPI +; Default Value: On +; Development Value: On +; Production value: Off +; http://php.net/html-errors +html_errors = Off + +; If html_errors is set On PHP produces clickable error messages that direct +; to a page describing the error or function causing the error in detail. +; You can download a copy of the PHP manual from http://php.net/docs +; and change docref_root to the base URL of your local copy including the +; leading '/'. You must also specify the file extension being used including +; the dot. PHP's default behavior is to leave these settings empty. +; Note: Never use this feature for production boxes. +; http://php.net/docref-root +; Examples +;docref_root = "/phpmanual/" + +; http://php.net/docref-ext +;docref_ext = .html + +; String to output before an error message. PHP's default behavior is to leave +; this setting blank. +; http://php.net/error-prepend-string +; Example: +;error_prepend_string = "" + +; String to output after an error message. PHP's default behavior is to leave +; this setting blank. +; http://php.net/error-append-string +; Example: +;error_append_string = "" + +; Log errors to specified file. PHP's default behavior is to leave this value +; empty. +; http://php.net/error-log +; Example: +;error_log = php_errors.log +; Log errors to syslog (Event Log on NT, not valid in Windows 95). +;error_log = syslog + +;;;;;;;;;;;;;;;;; +; Data Handling ; +;;;;;;;;;;;;;;;;; + +; The separator used in PHP generated URLs to separate arguments. +; PHP's default setting is "&". +; http://php.net/arg-separator.output +; Example: +;arg_separator.output = "&" + +; List of separator(s) used by PHP to parse input URLs into variables. +; PHP's default setting is "&". +; NOTE: Every character in this directive is considered as separator! +; http://php.net/arg-separator.input +; Example: +;arg_separator.input = ";&" + +; This directive determines which super global arrays are registered when PHP +; starts up. If the register_globals directive is enabled, it also determines +; what order variables are populated into the global space. G,P,C,E & S are +; abbreviations for the following respective super globals: GET, POST, COOKIE, +; ENV and SERVER. There is a performance penalty paid for the registration of +; these arrays and because ENV is not as commonly used as the others, ENV is +; is not recommended on productions servers. You can still get access to +; the environment variables through getenv() should you need to. +; Default Value: "EGPCS" +; Development Value: "GPCS" +; Production Value: "GPCS"; +; http://php.net/variables-order +variables_order = "GPCS" + +; This directive determines which super global data (G,P,C,E & S) should +; be registered into the super global array REQUEST. If so, it also determines +; the order in which that data is registered. The values for this directive are +; specified in the same manner as the variables_order directive, EXCEPT one. +; Leaving this value empty will cause PHP to use the value set in the +; variables_order directive. It does not mean it will leave the super globals +; array REQUEST empty. +; Default Value: None +; Development Value: "GP" +; Production Value: "GP" +; http://php.net/request-order +request_order = "GP" + +; Whether or not to register the EGPCS variables as global variables. You may +; want to turn this off if you don't want to clutter your scripts' global scope +; with user data. +; You should do your best to write your scripts so that they do not require +; register_globals to be on; Using form variables as globals can easily lead +; to possible security problems, if the code is not very well thought of. +; http://php.net/register-globals +register_globals = Off + +; Determines whether the deprecated long $HTTP_*_VARS type predefined variables +; are registered by PHP or not. As they are deprecated, we obviously don't +; recommend you use them. They are on by default for compatibility reasons but +; they are not recommended on production servers. +; Default Value: On +; Development Value: Off +; Production Value: Off +; http://php.net/register-long-arrays +register_long_arrays = Off + +; This directive determines whether PHP registers $argv & $argc each time it +; runs. $argv contains an array of all the arguments passed to PHP when a script +; is invoked. $argc contains an integer representing the number of arguments +; that were passed when the script was invoked. These arrays are extremely +; useful when running scripts from the command line. When this directive is +; enabled, registering these variables consumes CPU cycles and memory each time +; a script is executed. For performance reasons, this feature should be disabled +; on production servers. +; Note: This directive is hardcoded to On for the CLI SAPI +; Default Value: On +; Development Value: Off +; Production Value: Off +; http://php.net/register-argc-argv +register_argc_argv = Off + +; When enabled, the SERVER and ENV variables are created when they're first +; used (Just In Time) instead of when the script starts. If these variables +; are not used within a script, having this directive on will result in a +; performance gain. The PHP directives register_globals, register_long_arrays, +; and register_argc_argv must be disabled for this directive to have any affect. +; http://php.net/auto-globals-jit +auto_globals_jit = On + +; Maximum size of POST data that PHP will accept. +; http://php.net/post-max-size +post_max_size = 8M + +; Magic quotes are a preprocessing feature of PHP where PHP will attempt to +; escape any character sequences in GET, POST, COOKIE and ENV data which might +; otherwise corrupt data being placed in resources such as databases before +; making that data available to you. Because of character encoding issues and +; non-standard SQL implementations across many databases, it's not currently +; possible for this feature to be 100% accurate. PHP's default behavior is to +; enable the feature. We strongly recommend you use the escaping mechanisms +; designed specifically for the database your using instead of relying on this +; feature. Also note, this feature has been deprecated as of PHP 5.3.0 and is +; scheduled for removal in PHP 6. +; Default Value: On +; Development Value: Off +; Production Value: Off +; http://php.net/magic-quotes-gpc +magic_quotes_gpc = Off + +; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc. +; http://php.net/magic-quotes-runtime +magic_quotes_runtime = Off + +; Use Sybase-style magic quotes (escape ' with '' instead of \'). +; http://php.net/magic-quotes-sybase +magic_quotes_sybase = Off + +; Automatically add files before PHP document. +; http://php.net/auto-prepend-file +auto_prepend_file = + +; Automatically add files after PHP document. +; http://php.net/auto-append-file +auto_append_file = + +; By default, PHP will output a character encoding using +; the Content-type: header. To disable sending of the charset, simply +; set it to be empty. +; +; PHP's built-in default is text/html +; http://php.net/default-mimetype +default_mimetype = "text/html" + +; PHP's default character set is set to empty. +; http://php.net/default-charset +;default_charset = "iso-8859-1" + +; Always populate the $HTTP_RAW_POST_DATA variable. PHP's default behavior is +; to disable this feature. +; http://php.net/always-populate-raw-post-data +;always_populate_raw_post_data = On + +;;;;;;;;;;;;;;;;;;;;;;;;; +; Paths and Directories ; +;;;;;;;;;;;;;;;;;;;;;;;;; + +; UNIX: "/path1:/path2" +;include_path = ".:/php/includes" +; +; Windows: "\path1;\path2" +;include_path = ".;c:\php\includes" +; +; PHP's default setting for include_path is ".;/path/to/php/pear" +; http://php.net/include-path + +; The root of the PHP pages, used only if nonempty. +; if PHP was not compiled with FORCE_REDIRECT, you SHOULD set doc_root +; if you are running php as a CGI under any web server (other than IIS) +; see documentation for security issues. The alternate is to use the +; cgi.force_redirect configuration below +; http://php.net/doc-root +doc_root = + +; The directory under which PHP opens the script using /~username used only +; if nonempty. +; http://php.net/user-dir +user_dir = + +; Directory in which the loadable extensions (modules) reside. +; http://php.net/extension-dir +; extension_dir = "./" +; On windows: +; extension_dir = "ext" + +; Whether or not to enable the dl() function. The dl() function does NOT work +; properly in multithreaded servers, such as IIS or Zeus, and is automatically +; disabled on them. +; http://php.net/enable-dl +enable_dl = Off + +; cgi.force_redirect is necessary to provide security running PHP as a CGI under +; most web servers. Left undefined, PHP turns this on by default. You can +; turn it off here AT YOUR OWN RISK +; **You CAN safely turn this off for IIS, in fact, you MUST.** +; http://php.net/cgi.force-redirect +;cgi.force_redirect = 1 + +; if cgi.nph is enabled it will force cgi to always sent Status: 200 with +; every request. PHP's default behavior is to disable this feature. +;cgi.nph = 1 + +; if cgi.force_redirect is turned on, and you are not running under Apache or Netscape +; (iPlanet) web servers, you MAY need to set an environment variable name that PHP +; will look for to know it is OK to continue execution. Setting this variable MAY +; cause security issues, KNOW WHAT YOU ARE DOING FIRST. +; http://php.net/cgi.redirect-status-env +;cgi.redirect_status_env = ; + +; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's +; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok +; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting +; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting +; of zero causes PHP to behave as before. Default is 1. You should fix your scripts +; to use SCRIPT_FILENAME rather than PATH_TRANSLATED. +; http://php.net/cgi.fix-pathinfo +;cgi.fix_pathinfo=1 + +; FastCGI under IIS (on WINNT based OS) supports the ability to impersonate +; security tokens of the calling client. This allows IIS to define the +; security context that the request runs under. mod_fastcgi under Apache +; does not currently support this feature (03/17/2002) +; Set to 1 if running under IIS. Default is zero. +; http://php.net/fastcgi.impersonate +;fastcgi.impersonate = 1; + +; Disable logging through FastCGI connection. PHP's default behavior is to enable +; this feature. +;fastcgi.logging = 0 + +; cgi.rfc2616_headers configuration option tells PHP what type of headers to +; use when sending HTTP response code. If it's set 0 PHP sends Status: header that +; is supported by Apache. When this option is set to 1 PHP will send +; RFC2616 compliant header. +; Default is zero. +; http://php.net/cgi.rfc2616-headers +;cgi.rfc2616_headers = 0 + +;;;;;;;;;;;;;;;; +; File Uploads ; +;;;;;;;;;;;;;;;; + +; Whether to allow HTTP file uploads. +; http://php.net/file-uploads +file_uploads = On + +; Temporary directory for HTTP uploaded files (will use system default if not +; specified). +; http://php.net/upload-tmp-dir +;upload_tmp_dir = + +; Maximum allowed size for uploaded files. +; http://php.net/upload-max-filesize +upload_max_filesize = 2M + +; Maximum number of files that can be uploaded via a single request +max_file_uploads = 20 + +;;;;;;;;;;;;;;;;;; +; Fopen wrappers ; +;;;;;;;;;;;;;;;;;; + +; Whether to allow the treatment of URLs (like http:// or ftp://) as files. +; http://php.net/allow-url-fopen +allow_url_fopen = On + +; Whether to allow include/require to open URLs (like http:// or ftp://) as files. +; http://php.net/allow-url-include +allow_url_include = Off + +; Define the anonymous ftp password (your email address). PHP's default setting +; for this is empty. +; http://php.net/from +;from="john@doe.com" + +; Define the User-Agent string. PHP's default setting for this is empty. +; http://php.net/user-agent +;user_agent="PHP" + +; Default timeout for socket based streams (seconds) +; http://php.net/default-socket-timeout +default_socket_timeout = 60 + +; If your scripts have to deal with files from Macintosh systems, +; or you are running on a Mac and need to deal with files from +; unix or win32 systems, setting this flag will cause PHP to +; automatically detect the EOL character in those files so that +; fgets() and file() will work regardless of the source of the file. +; http://php.net/auto-detect-line-endings +;auto_detect_line_endings = Off + +;;;;;;;;;;;;;;;;;;;;;; +; Dynamic Extensions ; +;;;;;;;;;;;;;;;;;;;;;; + +; If you wish to have an extension loaded automatically, use the following +; syntax: +; +; extension=modulename.extension +; +; For example, on Windows: +; +; extension=msql.dll +; +; ... or under UNIX: +; +; extension=msql.so +; +; ... or with a path: +; +; extension=/path/to/extension/msql.so +; +; If you only provide the name of the extension, PHP will look for it in its +; default extension directory. +; +; Windows Extensions +; Note that ODBC support is built in, so no dll is needed for it. +; Note that many DLL files are located in the extensions/ (PHP 4) ext/ (PHP 5) +; extension folders as well as the separate PECL DLL download (PHP 5). +; Be sure to appropriately set the extension_dir directive. +; +;extension=php_bz2.dll +;extension=php_curl.dll +;extension=php_fileinfo.dll +;extension=php_gd2.dll +;extension=php_gettext.dll +;extension=php_gmp.dll +;extension=php_intl.dll +;extension=php_imap.dll +;extension=php_interbase.dll +;extension=php_ldap.dll +;extension=php_mbstring.dll +;extension=php_exif.dll ; Must be after mbstring as it depends on it +;extension=php_mysql.dll +;extension=php_mysqli.dll +;extension=php_oci8.dll ; Use with Oracle 10gR2 Instant Client +;extension=php_oci8_11g.dll ; Use with Oracle 11g Instant Client +;extension=php_openssl.dll +;extension=php_pdo_firebird.dll +;extension=php_pdo_mssql.dll +;extension=php_pdo_mysql.dll +;extension=php_pdo_oci.dll +;extension=php_pdo_odbc.dll +;extension=php_pdo_pgsql.dll +;extension=php_pdo_sqlite.dll +;extension=php_pgsql.dll +;extension=php_pspell.dll +;extension=php_shmop.dll +;extension=php_snmp.dll +;extension=php_soap.dll +;extension=php_sockets.dll +;extension=php_sqlite.dll +;extension=php_sqlite3.dll +;extension=php_sybase_ct.dll +;extension=php_tidy.dll +;extension=php_xmlrpc.dll +;extension=php_xsl.dll +;extension=php_zip.dll + +;;;;;;;;;;;;;;;;;;; +; Module Settings ; +;;;;;;;;;;;;;;;;;;; + +[Date] +; Defines the default timezone used by the date functions +; http://php.net/date.timezone +;date.timezone = + +; http://php.net/date.default-latitude +;date.default_latitude = 31.7667 + +; http://php.net/date.default-longitude +;date.default_longitude = 35.2333 + +; http://php.net/date.sunrise-zenith +;date.sunrise_zenith = 90.583333 + +; http://php.net/date.sunset-zenith +;date.sunset_zenith = 90.583333 + +[filter] +; http://php.net/filter.default +;filter.default = unsafe_raw + +; http://php.net/filter.default-flags +;filter.default_flags = + +[iconv] +;iconv.input_encoding = ISO-8859-1 +;iconv.internal_encoding = ISO-8859-1 +;iconv.output_encoding = ISO-8859-1 + +[intl] +;intl.default_locale = +; This directive allows you to produce PHP errors when some error +; happens within intl functions. The value is the level of the error produced. +; Default is 0, which does not produce any errors. +;intl.error_level = E_WARNING + +[sqlite] +; http://php.net/sqlite.assoc-case +;sqlite.assoc_case = 0 + +[sqlite3] +;sqlite3.extension_dir = + +[Pcre] +;PCRE library backtracking limit. +; http://php.net/pcre.backtrack-limit +;pcre.backtrack_limit=100000 + +;PCRE library recursion limit. +;Please note that if you set this value to a high number you may consume all +;the available process stack and eventually crash PHP (due to reaching the +;stack size limit imposed by the Operating System). +; http://php.net/pcre.recursion-limit +;pcre.recursion_limit=100000 + +[Pdo] +; Whether to pool ODBC connections. Can be one of "strict", "relaxed" or "off" +; http://php.net/pdo-odbc.connection-pooling +;pdo_odbc.connection_pooling=strict + +;pdo_odbc.db2_instance_name + +[Pdo_mysql] +; If mysqlnd is used: Number of cache slots for the internal result set cache +; http://php.net/pdo_mysql.cache_size +pdo_mysql.cache_size = 2000 + +; Default socket name for local MySQL connects. If empty, uses the built-in +; MySQL defaults. +; http://php.net/pdo_mysql.default-socket +pdo_mysql.default_socket= + +[Phar] +; http://php.net/phar.readonly +;phar.readonly = On + +; http://php.net/phar.require-hash +;phar.require_hash = On + +;phar.cache_list = + +[Syslog] +; Whether or not to define the various syslog variables (e.g. $LOG_PID, +; $LOG_CRON, etc.). Turning it off is a good idea performance-wise. In +; runtime, you can define these variables by calling define_syslog_variables(). +; http://php.net/define-syslog-variables +define_syslog_variables = Off + +[mail function] +; For Win32 only. +; http://php.net/smtp +SMTP = localhost +; http://php.net/smtp-port +smtp_port = 25 + +; For Win32 only. +; http://php.net/sendmail-from +;sendmail_from = me@example.com + +; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). +; http://php.net/sendmail-path +;sendmail_path = + +; Force the addition of the specified parameters to be passed as extra parameters +; to the sendmail binary. These parameters will always replace the value of +; the 5th parameter to mail(), even in safe mode. +;mail.force_extra_parameters = + +; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename +mail.add_x_header = On + +; The path to a log file that will log all mail() calls. Log entries include +; the full path of the script, line number, To address and headers. +;mail.log = + +[SQL] +; http://php.net/sql.safe-mode +sql.safe_mode = Off + +[ODBC] +; http://php.net/odbc.default-db +;odbc.default_db = Not yet implemented + +; http://php.net/odbc.default-user +;odbc.default_user = Not yet implemented + +; http://php.net/odbc.default-pw +;odbc.default_pw = Not yet implemented + +; Controls the ODBC cursor model. +; Default: SQL_CURSOR_STATIC (default). +;odbc.default_cursortype + +; Allow or prevent persistent links. +; http://php.net/odbc.allow-persistent +odbc.allow_persistent = On + +; Check that a connection is still valid before reuse. +; http://php.net/odbc.check-persistent +odbc.check_persistent = On + +; Maximum number of persistent links. -1 means no limit. +; http://php.net/odbc.max-persistent +odbc.max_persistent = -1 + +; Maximum number of links (persistent + non-persistent). -1 means no limit. +; http://php.net/odbc.max-links +odbc.max_links = -1 + +; Handling of LONG fields. Returns number of bytes to variables. 0 means +; passthru. +; http://php.net/odbc.defaultlrl +odbc.defaultlrl = 4096 + +; Handling of binary data. 0 means passthru, 1 return as is, 2 convert to char. +; See the documentation on odbc_binmode and odbc_longreadlen for an explanation +; of odbc.defaultlrl and odbc.defaultbinmode +; http://php.net/odbc.defaultbinmode +odbc.defaultbinmode = 1 + +;birdstep.max_links = -1 + +[Interbase] +; Allow or prevent persistent links. +ibase.allow_persistent = 1 + +; Maximum number of persistent links. -1 means no limit. +ibase.max_persistent = -1 + +; Maximum number of links (persistent + non-persistent). -1 means no limit. +ibase.max_links = -1 + +; Default database name for ibase_connect(). +;ibase.default_db = + +; Default username for ibase_connect(). +;ibase.default_user = + +; Default password for ibase_connect(). +;ibase.default_password = + +; Default charset for ibase_connect(). +;ibase.default_charset = + +; Default timestamp format. +ibase.timestampformat = "%Y-%m-%d %H:%M:%S" + +; Default date format. +ibase.dateformat = "%Y-%m-%d" + +; Default time format. +ibase.timeformat = "%H:%M:%S" + +[MySQL] +; Allow accessing, from PHP's perspective, local files with LOAD DATA statements +; http://php.net/mysql.allow_local_infile +mysql.allow_local_infile = On + +; Allow or prevent persistent links. +; http://php.net/mysql.allow-persistent +mysql.allow_persistent = On + +; If mysqlnd is used: Number of cache slots for the internal result set cache +; http://php.net/mysql.cache_size +mysql.cache_size = 2000 + +; Maximum number of persistent links. -1 means no limit. +; http://php.net/mysql.max-persistent +mysql.max_persistent = -1 + +; Maximum number of links (persistent + non-persistent). -1 means no limit. +; http://php.net/mysql.max-links +mysql.max_links = -1 + +; Default port number for mysql_connect(). If unset, mysql_connect() will use +; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the +; compile-time value defined MYSQL_PORT (in that order). Win32 will only look +; at MYSQL_PORT. +; http://php.net/mysql.default-port +mysql.default_port = + +; Default socket name for local MySQL connects. If empty, uses the built-in +; MySQL defaults. +; http://php.net/mysql.default-socket +mysql.default_socket = + +; Default host for mysql_connect() (doesn't apply in safe mode). +; http://php.net/mysql.default-host +mysql.default_host = + +; Default user for mysql_connect() (doesn't apply in safe mode). +; http://php.net/mysql.default-user +mysql.default_user = + +; Default password for mysql_connect() (doesn't apply in safe mode). +; Note that this is generally a *bad* idea to store passwords in this file. +; *Any* user with PHP access can run 'echo get_cfg_var("mysql.default_password") +; and reveal this password! And of course, any users with read access to this +; file will be able to reveal the password as well. +; http://php.net/mysql.default-password +mysql.default_password = + +; Maximum time (in seconds) for connect timeout. -1 means no limit +; http://php.net/mysql.connect-timeout +mysql.connect_timeout = 60 + +; Trace mode. When trace_mode is active (=On), warnings for table/index scans and +; SQL-Errors will be displayed. +; http://php.net/mysql.trace-mode +mysql.trace_mode = Off + +[MySQLi] + +; Maximum number of persistent links. -1 means no limit. +; http://php.net/mysqli.max-persistent +mysqli.max_persistent = -1 + +; Allow accessing, from PHP's perspective, local files with LOAD DATA statements +; http://php.net/mysqli.allow_local_infile +;mysqli.allow_local_infile = On + +; Allow or prevent persistent links. +; http://php.net/mysqli.allow-persistent +mysqli.allow_persistent = On + +; Maximum number of links. -1 means no limit. +; http://php.net/mysqli.max-links +mysqli.max_links = -1 + +; If mysqlnd is used: Number of cache slots for the internal result set cache +; http://php.net/mysqli.cache_size +mysqli.cache_size = 2000 + +; Default port number for mysqli_connect(). If unset, mysqli_connect() will use +; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the +; compile-time value defined MYSQL_PORT (in that order). Win32 will only look +; at MYSQL_PORT. +; http://php.net/mysqli.default-port +mysqli.default_port = 3306 + +; Default socket name for local MySQL connects. If empty, uses the built-in +; MySQL defaults. +; http://php.net/mysqli.default-socket +mysqli.default_socket = + +; Default host for mysql_connect() (doesn't apply in safe mode). +; http://php.net/mysqli.default-host +mysqli.default_host = + +; Default user for mysql_connect() (doesn't apply in safe mode). +; http://php.net/mysqli.default-user +mysqli.default_user = + +; Default password for mysqli_connect() (doesn't apply in safe mode). +; Note that this is generally a *bad* idea to store passwords in this file. +; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_pw") +; and reveal this password! And of course, any users with read access to this +; file will be able to reveal the password as well. +; http://php.net/mysqli.default-pw +mysqli.default_pw = + +; Allow or prevent reconnect +mysqli.reconnect = Off + +[mysqlnd] +; Enable / Disable collection of general statstics by mysqlnd which can be +; used to tune and monitor MySQL operations. +; http://php.net/mysqlnd.collect_statistics +mysqlnd.collect_statistics = On + +; Enable / Disable collection of memory usage statstics by mysqlnd which can be +; used to tune and monitor MySQL operations. +; http://php.net/mysqlnd.collect_memory_statistics +mysqlnd.collect_memory_statistics = Off + +; Size of a pre-allocated buffer used when sending commands to MySQL in bytes. +; http://php.net/mysqlnd.net_cmd_buffer_size +;mysqlnd.net_cmd_buffer_size = 2048 + +; Size of a pre-allocated buffer used for reading data sent by the server in +; bytes. +; http://php.net/mysqlnd.net_read_buffer_size +;mysqlnd.net_read_buffer_size = 32768 + +[OCI8] + +; Connection: Enables privileged connections using external +; credentials (OCI_SYSOPER, OCI_SYSDBA) +; http://php.net/oci8.privileged-connect +;oci8.privileged_connect = Off + +; Connection: The maximum number of persistent OCI8 connections per +; process. Using -1 means no limit. +; http://php.net/oci8.max-persistent +;oci8.max_persistent = -1 + +; Connection: The maximum number of seconds a process is allowed to +; maintain an idle persistent connection. Using -1 means idle +; persistent connections will be maintained forever. +; http://php.net/oci8.persistent-timeout +;oci8.persistent_timeout = -1 + +; Connection: The number of seconds that must pass before issuing a +; ping during oci_pconnect() to check the connection validity. When +; set to 0, each oci_pconnect() will cause a ping. Using -1 disables +; pings completely. +; http://php.net/oci8.ping-interval +;oci8.ping_interval = 60 + +; Connection: Set this to a user chosen connection class to be used +; for all pooled server requests with Oracle 11g Database Resident +; Connection Pooling (DRCP). To use DRCP, this value should be set to +; the same string for all web servers running the same application, +; the database pool must be configured, and the connection string must +; specify to use a pooled server. +;oci8.connection_class = + +; High Availability: Using On lets PHP receive Fast Application +; Notification (FAN) events generated when a database node fails. The +; database must also be configured to post FAN events. +;oci8.events = Off + +; Tuning: This option enables statement caching, and specifies how +; many statements to cache. Using 0 disables statement caching. +; http://php.net/oci8.statement-cache-size +;oci8.statement_cache_size = 20 + +; Tuning: Enables statement prefetching and sets the default number of +; rows that will be fetched automatically after statement execution. +; http://php.net/oci8.default-prefetch +;oci8.default_prefetch = 100 + +; Compatibility. Using On means oci_close() will not close +; oci_connect() and oci_new_connect() connections. +; http://php.net/oci8.old-oci-close-semantics +;oci8.old_oci_close_semantics = Off + +[PostgresSQL] +; Allow or prevent persistent links. +; http://php.net/pgsql.allow-persistent +pgsql.allow_persistent = On + +; Detect broken persistent links always with pg_pconnect(). +; Auto reset feature requires a little overheads. +; http://php.net/pgsql.auto-reset-persistent +pgsql.auto_reset_persistent = Off + +; Maximum number of persistent links. -1 means no limit. +; http://php.net/pgsql.max-persistent +pgsql.max_persistent = -1 + +; Maximum number of links (persistent+non persistent). -1 means no limit. +; http://php.net/pgsql.max-links +pgsql.max_links = -1 + +; Ignore PostgreSQL backends Notice message or not. +; Notice message logging require a little overheads. +; http://php.net/pgsql.ignore-notice +pgsql.ignore_notice = 0 + +; Log PostgreSQL backends Notice message or not. +; Unless pgsql.ignore_notice=0, module cannot log notice message. +; http://php.net/pgsql.log-notice +pgsql.log_notice = 0 + +[Sybase-CT] +; Allow or prevent persistent links. +; http://php.net/sybct.allow-persistent +sybct.allow_persistent = On + +; Maximum number of persistent links. -1 means no limit. +; http://php.net/sybct.max-persistent +sybct.max_persistent = -1 + +; Maximum number of links (persistent + non-persistent). -1 means no limit. +; http://php.net/sybct.max-links +sybct.max_links = -1 + +; Minimum server message severity to display. +; http://php.net/sybct.min-server-severity +sybct.min_server_severity = 10 + +; Minimum client message severity to display. +; http://php.net/sybct.min-client-severity +sybct.min_client_severity = 10 + +; Set per-context timeout +; http://php.net/sybct.timeout +;sybct.timeout= + +;sybct.packet_size + +; The maximum time in seconds to wait for a connection attempt to succeed before returning failure. +; Default: one minute +;sybct.login_timeout= + +; The name of the host you claim to be connecting from, for display by sp_who. +; Default: none +;sybct.hostname= + +; Allows you to define how often deadlocks are to be retried. -1 means "forever". +; Default: 0 +;sybct.deadlock_retry_count= + +[bcmath] +; Number of decimal digits for all bcmath functions. +; http://php.net/bcmath.scale +bcmath.scale = 0 + +[browscap] +; http://php.net/browscap +;browscap = extra/browscap.ini + +[Session] +; Handler used to store/retrieve data. +; http://php.net/session.save-handler +session.save_handler = files + +; Argument passed to save_handler. In the case of files, this is the path +; where data files are stored. Note: Windows users have to change this +; variable in order to use PHP's session functions. +; +; The path can be defined as: +; +; session.save_path = "N;/path" +; +; where N is an integer. Instead of storing all the session files in +; /path, what this will do is use subdirectories N-levels deep, and +; store the session data in those directories. This is useful if you +; or your OS have problems with lots of files in one directory, and is +; a more efficient layout for servers that handle lots of sessions. +; +; NOTE 1: PHP will not create this directory structure automatically. +; You can use the script in the ext/session dir for that purpose. +; NOTE 2: See the section on garbage collection below if you choose to +; use subdirectories for session storage +; +; The file storage module creates files using mode 600 by default. +; You can change that by using +; +; session.save_path = "N;MODE;/path" +; +; where MODE is the octal representation of the mode. Note that this +; does not overwrite the process's umask. +; http://php.net/session.save-path +;session.save_path = "/tmp" + +; Whether to use cookies. +; http://php.net/session.use-cookies +session.use_cookies = 1 + +; http://php.net/session.cookie-secure +;session.cookie_secure = + +; This option forces PHP to fetch and use a cookie for storing and maintaining +; the session id. We encourage this operation as it's very helpful in combatting +; session hijacking when not specifying and managing your own session id. It is +; not the end all be all of session hijacking defense, but it's a good start. +; http://php.net/session.use-only-cookies +session.use_only_cookies = 1 + +; Name of the session (used as cookie name). +; http://php.net/session.name +session.name = PHPSESSID + +; Initialize session on request startup. +; http://php.net/session.auto-start +session.auto_start = 0 + +; Lifetime in seconds of cookie or, if 0, until browser is restarted. +; http://php.net/session.cookie-lifetime +session.cookie_lifetime = 0 + +; The path for which the cookie is valid. +; http://php.net/session.cookie-path +session.cookie_path = / + +; The domain for which the cookie is valid. +; http://php.net/session.cookie-domain +session.cookie_domain = + +; Whether or not to add the httpOnly flag to the cookie, which makes it inaccessible to browser scripting languages such as JavaScript. +; http://php.net/session.cookie-httponly +session.cookie_httponly = + +; Handler used to serialize data. php is the standard serializer of PHP. +; http://php.net/session.serialize-handler +session.serialize_handler = php + +; Defines the probability that the 'garbage collection' process is started +; on every session initialization. The probability is calculated by using +; gc_probability/gc_divisor. Where session.gc_probability is the numerator +; and gc_divisor is the denominator in the equation. Setting this value to 1 +; when the session.gc_divisor value is 100 will give you approximately a 1% chance +; the gc will run on any give request. +; Default Value: 1 +; Development Value: 1 +; Production Value: 1 +; http://php.net/session.gc-probability +session.gc_probability = 1 + +; Defines the probability that the 'garbage collection' process is started on every +; session initialization. The probability is calculated by using the following equation: +; gc_probability/gc_divisor. Where session.gc_probability is the numerator and +; session.gc_divisor is the denominator in the equation. Setting this value to 1 +; when the session.gc_divisor value is 100 will give you approximately a 1% chance +; the gc will run on any give request. Increasing this value to 1000 will give you +; a 0.1% chance the gc will run on any give request. For high volume production servers, +; this is a more efficient approach. +; Default Value: 100 +; Development Value: 1000 +; Production Value: 1000 +; http://php.net/session.gc-divisor +session.gc_divisor = 1000 + +; After this number of seconds, stored data will be seen as 'garbage' and +; cleaned up by the garbage collection process. +; http://php.net/session.gc-maxlifetime +session.gc_maxlifetime = 1440 + +; NOTE: If you are using the subdirectory option for storing session files +; (see session.save_path above), then garbage collection does *not* +; happen automatically. You will need to do your own garbage +; collection through a shell script, cron entry, or some other method. +; For example, the following script would is the equivalent of +; setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes): +; find /path/to/sessions -cmin +24 | xargs rm + +; PHP 4.2 and less have an undocumented feature/bug that allows you to +; to initialize a session variable in the global scope, even when register_globals +; is disabled. PHP 4.3 and later will warn you, if this feature is used. +; You can disable the feature and the warning separately. At this time, +; the warning is only displayed, if bug_compat_42 is enabled. This feature +; introduces some serious security problems if not handled correctly. It's +; recommended that you do not use this feature on production servers. But you +; should enable this on development servers and enable the warning as well. If you +; do not enable the feature on development servers, you won't be warned when it's +; used and debugging errors caused by this can be difficult to track down. +; Default Value: On +; Development Value: On +; Production Value: Off +; http://php.net/session.bug-compat-42 +session.bug_compat_42 = Off + +; This setting controls whether or not you are warned by PHP when initializing a +; session value into the global space. session.bug_compat_42 must be enabled before +; these warnings can be issued by PHP. See the directive above for more information. +; Default Value: On +; Development Value: On +; Production Value: Off +; http://php.net/session.bug-compat-warn +session.bug_compat_warn = Off + +; Check HTTP Referer to invalidate externally stored URLs containing ids. +; HTTP_REFERER has to contain this substring for the session to be +; considered as valid. +; http://php.net/session.referer-check +session.referer_check = + +; How many bytes to read from the file. +; http://php.net/session.entropy-length +session.entropy_length = 0 + +; Specified here to create the session id. +; http://php.net/session.entropy-file +; On systems that don't have /dev/urandom /dev/arandom can be used +; On windows, setting the entropy_length setting will activate the +; Windows random source (using the CryptoAPI) +;session.entropy_file = /dev/urandom + +; Set to {nocache,private,public,} to determine HTTP caching aspects +; or leave this empty to avoid sending anti-caching headers. +; http://php.net/session.cache-limiter +session.cache_limiter = nocache + +; Document expires after n minutes. +; http://php.net/session.cache-expire +session.cache_expire = 180 + +; trans sid support is disabled by default. +; Use of trans sid may risk your users security. +; Use this option with caution. +; - User may send URL contains active session ID +; to other person via. email/irc/etc. +; - URL that contains active session ID may be stored +; in publically accessible computer. +; - User may access your site with the same session ID +; always using URL stored in browser's history or bookmarks. +; http://php.net/session.use-trans-sid +session.use_trans_sid = 0 + +; Select a hash function for use in generating session ids. +; Possible Values +; 0 (MD5 128 bits) +; 1 (SHA-1 160 bits) +; This option may also be set to the name of any hash function supported by +; the hash extension. A list of available hashes is returned by the hash_algos() +; function. +; http://php.net/session.hash-function +session.hash_function = 0 + +; Define how many bits are stored in each character when converting +; the binary hash data to something readable. +; Possible values: +; 4 (4 bits: 0-9, a-f) +; 5 (5 bits: 0-9, a-v) +; 6 (6 bits: 0-9, a-z, A-Z, "-", ",") +; Default Value: 4 +; Development Value: 5 +; Production Value: 5 +; http://php.net/session.hash-bits-per-character +session.hash_bits_per_character = 5 + +; The URL rewriter will look for URLs in a defined set of HTML tags. +; form/fieldset are special; if you include them here, the rewriter will +; add a hidden field with the info which is otherwise appended +; to URLs. If you want XHTML conformity, remove the form entry. +; Note that all valid entries require a "=", even if no value follows. +; Default Value: "a=href,area=href,frame=src,form=,fieldset=" +; Development Value: "a=href,area=href,frame=src,input=src,form=fakeentry" +; Production Value: "a=href,area=href,frame=src,input=src,form=fakeentry" +; http://php.net/url-rewriter.tags +url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry" + +[MSSQL] +; Allow or prevent persistent links. +mssql.allow_persistent = On + +; Maximum number of persistent links. -1 means no limit. +mssql.max_persistent = -1 + +; Maximum number of links (persistent+non persistent). -1 means no limit. +mssql.max_links = -1 + +; Minimum error severity to display. +mssql.min_error_severity = 10 + +; Minimum message severity to display. +mssql.min_message_severity = 10 + +; Compatibility mode with old versions of PHP 3.0. +mssql.compatability_mode = Off + +; Connect timeout +;mssql.connect_timeout = 5 + +; Query timeout +;mssql.timeout = 60 + +; Valid range 0 - 2147483647. Default = 4096. +;mssql.textlimit = 4096 + +; Valid range 0 - 2147483647. Default = 4096. +;mssql.textsize = 4096 + +; Limits the number of records in each batch. 0 = all records in one batch. +;mssql.batchsize = 0 + +; Specify how datetime and datetim4 columns are returned +; On => Returns data converted to SQL server settings +; Off => Returns values as YYYY-MM-DD hh:mm:ss +;mssql.datetimeconvert = On + +; Use NT authentication when connecting to the server +mssql.secure_connection = Off + +; Specify max number of processes. -1 = library default +; msdlib defaults to 25 +; FreeTDS defaults to 4096 +;mssql.max_procs = -1 + +; Specify client character set. +; If empty or not set the client charset from freetds.comf is used +; This is only used when compiled with FreeTDS +;mssql.charset = "ISO-8859-1" + +[Assertion] +; Assert(expr); active by default. +; http://php.net/assert.active +;assert.active = On + +; Issue a PHP warning for each failed assertion. +; http://php.net/assert.warning +;assert.warning = On + +; Don't bail out by default. +; http://php.net/assert.bail +;assert.bail = Off + +; User-function to be called if an assertion fails. +; http://php.net/assert.callback +;assert.callback = 0 + +; Eval the expression with current error_reporting(). Set to true if you want +; error_reporting(0) around the eval(). +; http://php.net/assert.quiet-eval +;assert.quiet_eval = 0 + +[COM] +; path to a file containing GUIDs, IIDs or filenames of files with TypeLibs +; http://php.net/com.typelib-file +;com.typelib_file = + +; allow Distributed-COM calls +; http://php.net/com.allow-dcom +;com.allow_dcom = true + +; autoregister constants of a components typlib on com_load() +; http://php.net/com.autoregister-typelib +;com.autoregister_typelib = true + +; register constants casesensitive +; http://php.net/com.autoregister-casesensitive +;com.autoregister_casesensitive = false + +; show warnings on duplicate constant registrations +; http://php.net/com.autoregister-verbose +;com.autoregister_verbose = true + +; The default character set code-page to use when passing strings to and from COM objects. +; Default: system ANSI code page +;com.code_page= + +[mbstring] +; language for internal character representation. +; http://php.net/mbstring.language +;mbstring.language = Japanese + +; internal/script encoding. +; Some encoding cannot work as internal encoding. +; (e.g. SJIS, BIG5, ISO-2022-*) +; http://php.net/mbstring.internal-encoding +;mbstring.internal_encoding = EUC-JP + +; http input encoding. +; http://php.net/mbstring.http-input +;mbstring.http_input = auto + +; http output encoding. mb_output_handler must be +; registered as output buffer to function +; http://php.net/mbstring.http-output +;mbstring.http_output = SJIS + +; enable automatic encoding translation according to +; mbstring.internal_encoding setting. Input chars are +; converted to internal encoding by setting this to On. +; Note: Do _not_ use automatic encoding translation for +; portable libs/applications. +; http://php.net/mbstring.encoding-translation +;mbstring.encoding_translation = Off + +; automatic encoding detection order. +; auto means +; http://php.net/mbstring.detect-order +;mbstring.detect_order = auto + +; substitute_character used when character cannot be converted +; one from another +; http://php.net/mbstring.substitute-character +;mbstring.substitute_character = none; + +; overload(replace) single byte functions by mbstring functions. +; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(), +; etc. Possible values are 0,1,2,4 or combination of them. +; For example, 7 for overload everything. +; 0: No overload +; 1: Overload mail() function +; 2: Overload str*() functions +; 4: Overload ereg*() functions +; http://php.net/mbstring.func-overload +;mbstring.func_overload = 0 + +; enable strict encoding detection. +;mbstring.strict_detection = Off + +; This directive specifies the regex pattern of content types for which mb_output_handler() +; is activated. +; Default: mbstring.http_output_conv_mimetype=^(text/|application/xhtml\+xml) +;mbstring.http_output_conv_mimetype= + +; Allows to set script encoding. Only affects if PHP is compiled with --enable-zend-multibyte +; Default: "" +;mbstring.script_encoding= + +[gd] +; Tell the jpeg decode to ignore warnings and try to create +; a gd image. The warning will then be displayed as notices +; disabled by default +; http://php.net/gd.jpeg-ignore-warning +;gd.jpeg_ignore_warning = 0 + +[exif] +; Exif UNICODE user comments are handled as UCS-2BE/UCS-2LE and JIS as JIS. +; With mbstring support this will automatically be converted into the encoding +; given by corresponding encode setting. When empty mbstring.internal_encoding +; is used. For the decode settings you can distinguish between motorola and +; intel byte order. A decode setting cannot be empty. +; http://php.net/exif.encode-unicode +;exif.encode_unicode = ISO-8859-15 + +; http://php.net/exif.decode-unicode-motorola +;exif.decode_unicode_motorola = UCS-2BE + +; http://php.net/exif.decode-unicode-intel +;exif.decode_unicode_intel = UCS-2LE + +; http://php.net/exif.encode-jis +;exif.encode_jis = + +; http://php.net/exif.decode-jis-motorola +;exif.decode_jis_motorola = JIS + +; http://php.net/exif.decode-jis-intel +;exif.decode_jis_intel = JIS + +[Tidy] +; The path to a default tidy configuration file to use when using tidy +; http://php.net/tidy.default-config +;tidy.default_config = /usr/local/lib/php/default.tcfg + +; Should tidy clean and repair output automatically? +; WARNING: Do not use this option if you are generating non-html content +; such as dynamic images +; http://php.net/tidy.clean-output +tidy.clean_output = Off + +[soap] +; Enables or disables WSDL caching feature. +; http://php.net/soap.wsdl-cache-enabled +soap.wsdl_cache_enabled=1 + +; Sets the directory name where SOAP extension will put cache files. +; http://php.net/soap.wsdl-cache-dir +soap.wsdl_cache_dir="/tmp" + +; (time to live) Sets the number of second while cached file will be used +; instead of original one. +; http://php.net/soap.wsdl-cache-ttl +soap.wsdl_cache_ttl=86400 + +; Sets the size of the cache limit. (Max. number of WSDL files to cache) +soap.wsdl_cache_limit = 5 + +[sysvshm] +; A default size of the shared memory segment +;sysvshm.init_mem = 10000 + +[ldap] +; Sets the maximum number of open links or -1 for unlimited. +ldap.max_links = -1 + +[mcrypt] +; For more information about mcrypt settings see http://php.net/mcrypt-module-open + +; Directory where to load mcrypt algorithms +; Default: Compiled in into libmcrypt (usually /usr/local/lib/libmcrypt) +;mcrypt.algorithms_dir= + +; Directory where to load mcrypt modes +; Default: Compiled in into libmcrypt (usually /usr/local/lib/libmcrypt) +;mcrypt.modes_dir= + +[dba] +;dba.default_handler= + +; Local Variables: +; tab-width: 4 +; End: + +<% @directives.sort_by { |key, val| key }.each do |directive, value| -%> +<%= "#{directive}=\"#{value}\"" %> +<% end -%> diff --git a/vagrant/provision/cookbooks/php/templates/redhat/php.ini.erb b/vagrant/provision/cookbooks/php/templates/redhat/php.ini.erb new file mode 100755 index 0000000..c84d60d --- /dev/null +++ b/vagrant/provision/cookbooks/php/templates/redhat/php.ini.erb @@ -0,0 +1,1225 @@ +[PHP] + +;;;;;;;;;;;;;;;;;;; +; About php.ini ; +;;;;;;;;;;;;;;;;;;; +; This file controls many aspects of PHP's behavior. In order for PHP to +; read it, it must be named 'php.ini'. PHP looks for it in the current +; working directory, in the path designated by the environment variable +; PHPRC, and in the path that was defined in compile time (in that order). +; Under Windows, the compile-time path is the Windows directory. The +; path in which the php.ini file is looked for can be overridden using +; the -c argument in command line mode. +; +; The syntax of the file is extremely simple. Whitespace and Lines +; beginning with a semicolon are silently ignored (as you probably guessed). +; Section headers (e.g. [Foo]) are also silently ignored, even though +; they might mean something in the future. +; +; Directives are specified using the following syntax: +; directive = value +; Directive names are *case sensitive* - foo=bar is different from FOO=bar. +; +; The value can be a string, a number, a PHP constant (e.g. E_ALL or M_PI), one +; of the INI constants (On, Off, True, False, Yes, No and None) or an expression +; (e.g. E_ALL & ~E_NOTICE), or a quoted string ("foo"). +; +; Expressions in the INI file are limited to bitwise operators and parentheses: +; | bitwise OR +; & bitwise AND +; ~ bitwise NOT +; ! boolean NOT +; +; Boolean flags can be turned on using the values 1, On, True or Yes. +; They can be turned off using the values 0, Off, False or No. +; +; An empty string can be denoted by simply not writing anything after the equal +; sign, or by using the None keyword: +; +; foo = ; sets foo to an empty string +; foo = none ; sets foo to an empty string +; foo = "none" ; sets foo to the string 'none' +; +; If you use constants in your value, and these constants belong to a +; dynamically loaded extension (either a PHP extension or a Zend extension), +; you may only use these constants *after* the line that loads the extension. +; +; +;;;;;;;;;;;;;;;;;;; +; About this file ; +;;;;;;;;;;;;;;;;;;; +; This is the recommended, PHP 5-style version of the php.ini-dist file. It +; sets some non standard settings, that make PHP more efficient, more secure, +; and encourage cleaner coding. +; +; The price is that with these settings, PHP may be incompatible with some +; applications, and sometimes, more difficult to develop with. Using this +; file is warmly recommended for production sites. As all of the changes from +; the standard settings are thoroughly documented, you can go over each one, +; and decide whether you want to use it or not. +; +; For general information about the php.ini file, please consult the php.ini-dist +; file, included in your PHP distribution. +; +; This file is different from the php.ini-dist file in the fact that it features +; different values for several directives, in order to improve performance, while +; possibly breaking compatibility with the standard out-of-the-box behavior of +; PHP. Please make sure you read what's different, and modify your scripts +; accordingly, if you decide to use this file instead. +; +; - register_globals = Off [Security, Performance] +; Global variables are no longer registered for input data (POST, GET, cookies, +; environment and other server variables). Instead of using $foo, you must use +; you can use $_REQUEST["foo"] (includes any variable that arrives through the +; request, namely, POST, GET and cookie variables), or use one of the specific +; $_GET["foo"], $_POST["foo"], $_COOKIE["foo"] or $_FILES["foo"], depending +; on where the input originates. Also, you can look at the +; import_request_variables() function. +; Note that register_globals is going to be depracated (i.e., turned off by +; default) in the next version of PHP, because it often leads to security bugs. +; Read http://php.net/manual/en/security.registerglobals.php for further +; information. +; - register_long_arrays = Off [Performance] +; Disables registration of the older (and deprecated) long predefined array +; variables ($HTTP_*_VARS). Instead, use the superglobals that were +; introduced in PHP 4.1.0 +; - display_errors = Off [Security] +; With this directive set to off, errors that occur during the execution of +; scripts will no longer be displayed as a part of the script output, and thus, +; will no longer be exposed to remote users. With some errors, the error message +; content may expose information about your script, web server, or database +; server that may be exploitable for hacking. Production sites should have this +; directive set to off. +; - log_errors = On [Security] +; This directive complements the above one. Any errors that occur during the +; execution of your script will be logged (typically, to your server's error log, +; but can be configured in several ways). Along with setting display_errors to off, +; this setup gives you the ability to fully understand what may have gone wrong, +; without exposing any sensitive information to remote users. +; - output_buffering = 4096 [Performance] +; Set a 4KB output buffer. Enabling output buffering typically results in less +; writes, and sometimes less packets sent on the wire, which can often lead to +; better performance. The gain this directive actually yields greatly depends +; on which Web server you're working with, and what kind of scripts you're using. +; - register_argc_argv = Off [Performance] +; Disables registration of the somewhat redundant $argv and $argc global +; variables. +; - magic_quotes_gpc = Off [Performance] +; Input data is no longer escaped with slashes so that it can be sent into +; SQL databases without further manipulation. Instead, you should use the +; function addslashes() on each input element you wish to send to a database. +; - variables_order = "GPCS" [Performance] +; The environment variables are not hashed into the $_ENV. To access +; environment variables, you can use getenv() instead. +; - error_reporting = E_ALL [Code Cleanliness, Security(?)] +; By default, PHP surpresses errors of type E_NOTICE. These error messages +; are emitted for non-critical errors, but that could be a symptom of a bigger +; problem. Most notably, this will cause error messages about the use +; of uninitialized variables to be displayed. +; - allow_call_time_pass_reference = Off [Code cleanliness] +; It's not possible to decide to force a variable to be passed by reference +; when calling a function. The PHP 4 style to do this is by making the +; function require the relevant argument by reference. + + +;;;;;;;;;;;;;;;;;;;; +; Language Options ; +;;;;;;;;;;;;;;;;;;;; + +; Enable the PHP scripting language engine under Apache. +engine = On + +; Enable compatibility mode with Zend Engine 1 (PHP 4.x) +zend.ze1_compatibility_mode = Off + +; Allow the tags are recognized. +; NOTE: Using short tags should be avoided when developing applications or +; libraries that are meant for redistribution, or deployment on PHP +; servers which are not under your control, because short tags may not +; be supported on the target server. For portable, redistributable code, +; be sure not to use short tags. +short_open_tag = On + +; Allow ASP-style <% %> tags. +asp_tags = Off + +; The number of significant digits displayed in floating point numbers. +precision = 14 + +; Enforce year 2000 compliance (will cause problems with non-compliant browsers) +y2k_compliance = On + +; Output buffering allows you to send header lines (including cookies) even +; after you send body content, at the price of slowing PHP's output layer a +; bit. You can enable output buffering during runtime by calling the output +; buffering functions. You can also enable output buffering for all files by +; setting this directive to On. If you wish to limit the size of the buffer +; to a certain size - you can use a maximum number of bytes instead of 'On', as +; a value for this directive (e.g., output_buffering=4096). +output_buffering = 4096 + +; You can redirect all of the output of your scripts to a function. For +; example, if you set output_handler to "mb_output_handler", character +; encoding will be transparently converted to the specified encoding. +; Setting any output handler automatically turns on output buffering. +; Note: People who wrote portable scripts should not depend on this ini +; directive. Instead, explicitly set the output handler using ob_start(). +; Using this ini directive may cause problems unless you know what script +; is doing. +; Note: You cannot use both "mb_output_handler" with "ob_iconv_handler" +; and you cannot use both "ob_gzhandler" and "zlib.output_compression". +; Note: output_handler must be empty if this is set 'On' !!!! +; Instead you must use zlib.output_handler. +;output_handler = + +; Transparent output compression using the zlib library +; Valid values for this option are 'off', 'on', or a specific buffer size +; to be used for compression (default is 4KB) +; Note: Resulting chunk size may vary due to nature of compression. PHP +; outputs chunks that are few hundreds bytes each as a result of +; compression. If you prefer a larger chunk size for better +; performance, enable output_buffering in addition. +; Note: You need to use zlib.output_handler instead of the standard +; output_handler, or otherwise the output will be corrupted. +zlib.output_compression = Off + +; You cannot specify additional output handlers if zlib.output_compression +; is activated here. This setting does the same as output_handler but in +; a different order. +;zlib.output_handler = + +; Implicit flush tells PHP to tell the output layer to flush itself +; automatically after every output block. This is equivalent to calling the +; PHP function flush() after each and every call to print() or echo() and each +; and every HTML block. Turning this option on has serious performance +; implications and is generally recommended for debugging purposes only. +implicit_flush = Off + +; The unserialize callback function will be called (with the undefined class' +; name as parameter), if the unserializer finds an undefined class +; which should be instantiated. +; A warning appears if the specified function is not defined, or if the +; function doesn't include/implement the missing class. +; So only set this entry, if you really want to implement such a +; callback-function. +unserialize_callback_func= + +; When floats & doubles are serialized store serialize_precision significant +; digits after the floating point. The default value ensures that when floats +; are decoded with unserialize, the data will remain the same. +serialize_precision = 100 + +; Whether to enable the ability to force arguments to be passed by reference +; at function call time. This method is deprecated and is likely to be +; unsupported in future versions of PHP/Zend. The encouraged method of +; specifying which arguments should be passed by reference is in the function +; declaration. You're encouraged to try and turn this option Off and make +; sure your scripts work properly with it in order to ensure they will work +; with future versions of the language (you will receive a warning each time +; you use this feature, and the argument will be passed by value instead of by +; reference). +allow_call_time_pass_reference = Off + +; +; Safe Mode +; +safe_mode = Off + +; By default, Safe Mode does a UID compare check when +; opening files. If you want to relax this to a GID compare, +; then turn on safe_mode_gid. +safe_mode_gid = Off + +; When safe_mode is on, UID/GID checks are bypassed when +; including files from this directory and its subdirectories. +; (directory must also be in include_path or full path must +; be used when including) +safe_mode_include_dir = + +; When safe_mode is on, only executables located in the safe_mode_exec_dir +; will be allowed to be executed via the exec family of functions. +safe_mode_exec_dir = + +; Setting certain environment variables may be a potential security breach. +; This directive contains a comma-delimited list of prefixes. In Safe Mode, +; the user may only alter environment variables whose names begin with the +; prefixes supplied here. By default, users will only be able to set +; environment variables that begin with PHP_ (e.g. PHP_FOO=BAR). +; +; Note: If this directive is empty, PHP will let the user modify ANY +; environment variable! +safe_mode_allowed_env_vars = PHP_ + +; This directive contains a comma-delimited list of environment variables that +; the end user won't be able to change using putenv(). These variables will be +; protected even if safe_mode_allowed_env_vars is set to allow to change them. +safe_mode_protected_env_vars = LD_LIBRARY_PATH + +; open_basedir, if set, limits all file operations to the defined directory +; and below. This directive makes most sense if used in a per-directory +; or per-virtualhost web server configuration file. This directive is +; *NOT* affected by whether Safe Mode is turned On or Off. +;open_basedir = + +; This directive allows you to disable certain functions for security reasons. +; It receives a comma-delimited list of function names. This directive is +; *NOT* affected by whether Safe Mode is turned On or Off. +disable_functions = + +; This directive allows you to disable certain classes for security reasons. +; It receives a comma-delimited list of class names. This directive is +; *NOT* affected by whether Safe Mode is turned On or Off. +disable_classes = + +; Colors for Syntax Highlighting mode. Anything that's acceptable in +; would work. +;highlight.string = #DD0000 +;highlight.comment = #FF9900 +;highlight.keyword = #007700 +;highlight.bg = #FFFFFF +;highlight.default = #0000BB +;highlight.html = #000000 + +; If enabled, the request will be allowed to complete even if the user aborts +; the request. Consider enabling it if executing long request, which may end up +; being interrupted by the user or a browser timing out. +; ignore_user_abort = On + +; Determines the size of the realpath cache to be used by PHP. This value should +; be increased on systems where PHP opens many files to reflect the quantity of +; the file operations performed. +; realpath_cache_size=16k + +; Duration of time, in seconds for which to cache realpath information for a given +; file or directory. For systems with rarely changing files, consider increasing this +; value. +; realpath_cache_ttl=120 + +; +; Misc +; +; Decides whether PHP may expose the fact that it is installed on the server +; (e.g. by adding its signature to the Web server header). It is no security +; threat in any way, but it makes it possible to determine whether you use PHP +; on your server or not. +expose_php = On + + +;;;;;;;;;;;;;;;;;;; +; Resource Limits ; +;;;;;;;;;;;;;;;;;;; + +max_execution_time = 30 ; Maximum execution time of each script, in seconds +max_input_time = 60 ; Maximum amount of time each script may spend parsing request data +memory_limit = 128M ; Maximum amount of memory a script may consume + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Error handling and logging ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +; error_reporting is a bit-field. Or each number up to get desired error +; reporting level +; E_ALL - All errors and warnings (doesn't include E_STRICT) +; E_ERROR - fatal run-time errors +; E_WARNING - run-time warnings (non-fatal errors) +; E_PARSE - compile-time parse errors +; E_NOTICE - run-time notices (these are warnings which often result +; from a bug in your code, but it's possible that it was +; intentional (e.g., using an uninitialized variable and +; relying on the fact it's automatically initialized to an +; empty string) +; E_STRICT - run-time notices, enable to have PHP suggest changes +; to your code which will ensure the best interoperability +; and forward compatibility of your code +; E_CORE_ERROR - fatal errors that occur during PHP's initial startup +; E_CORE_WARNING - warnings (non-fatal errors) that occur during PHP's +; initial startup +; E_COMPILE_ERROR - fatal compile-time errors +; E_COMPILE_WARNING - compile-time warnings (non-fatal errors) +; E_USER_ERROR - user-generated error message +; E_USER_WARNING - user-generated warning message +; E_USER_NOTICE - user-generated notice message +; +; Examples: +; +; - Show all errors, except for notices and coding standards warnings +; +;error_reporting = E_ALL & ~E_NOTICE +; +; - Show all errors, except for notices +; +;error_reporting = E_ALL & ~E_NOTICE | E_STRICT +; +; - Show only errors +; +;error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR +; +; - Show all errors, except coding standards warnings +; +error_reporting = E_ALL + +; Print out errors (as a part of the output). For production web sites, +; you're strongly encouraged to turn this feature off, and use error logging +; instead (see below). Keeping display_errors enabled on a production web site +; may reveal security information to end users, such as file paths on your Web +; server, your database schema or other information. +display_errors = Off + +; Even when display_errors is on, errors that occur during PHP's startup +; sequence are not displayed. It's strongly recommended to keep +; display_startup_errors off, except for when debugging. +display_startup_errors = Off + +; Log errors into a log file (server-specific log, stderr, or error_log (below)) +; As stated above, you're strongly advised to use error logging in place of +; error displaying on production web sites. +log_errors = On + +; Set maximum length of log_errors. In error_log information about the source is +; added. The default is 1024 and 0 allows to not apply any maximum length at all. +log_errors_max_len = 1024 + +; Do not log repeated messages. Repeated errors must occur in same file on same +; line until ignore_repeated_source is set true. +ignore_repeated_errors = Off + +; Ignore source of message when ignoring repeated messages. When this setting +; is On you will not log errors with repeated messages from different files or +; sourcelines. +ignore_repeated_source = Off + +; If this parameter is set to Off, then memory leaks will not be shown (on +; stdout or in the log). This has only effect in a debug compile, and if +; error reporting includes E_WARNING in the allowed list +report_memleaks = On + +; Store the last error/warning message in $php_errormsg (boolean). +track_errors = Off + +; Disable the inclusion of HTML tags in error messages. +; Note: Never use this feature for production boxes. +;html_errors = Off + +; If html_errors is set On PHP produces clickable error messages that direct +; to a page describing the error or function causing the error in detail. +; You can download a copy of the PHP manual from http://www.php.net/docs.php +; and change docref_root to the base URL of your local copy including the +; leading '/'. You must also specify the file extension being used including +; the dot. +; Note: Never use this feature for production boxes. +;docref_root = "/phpmanual/" +;docref_ext = .html + +; String to output before an error message. +;error_prepend_string = "" + +; String to output after an error message. +;error_append_string = "" + +; Log errors to specified file. +;error_log = filename + +; Log errors to syslog (Event Log on NT, not valid in Windows 95). +;error_log = syslog + + +;;;;;;;;;;;;;;;;; +; Data Handling ; +;;;;;;;;;;;;;;;;; +; +; Note - track_vars is ALWAYS enabled as of PHP 4.0.3 + +; The separator used in PHP generated URLs to separate arguments. +; Default is "&". +;arg_separator.output = "&" + +; List of separator(s) used by PHP to parse input URLs into variables. +; Default is "&". +; NOTE: Every character in this directive is considered as separator! +;arg_separator.input = ";&" + +; This directive describes the order in which PHP registers GET, POST, Cookie, +; Environment and Built-in variables (G, P, C, E & S respectively, often +; referred to as EGPCS or GPC). Registration is done from left to right, newer +; values override older values. +variables_order = "EGPCS" + +; Whether or not to register the EGPCS variables as global variables. You may +; want to turn this off if you don't want to clutter your scripts' global scope +; with user data. This makes most sense when coupled with track_vars - in which +; case you can access all of the GPC variables through the $HTTP_*_VARS[], +; variables. +; +; You should do your best to write your scripts so that they do not require +; register_globals to be on; Using form variables as globals can easily lead +; to possible security problems, if the code is not very well thought of. +register_globals = Off + +; Whether or not to register the old-style input arrays, HTTP_GET_VARS +; and friends. If you're not using them, it's recommended to turn them off, +; for performance reasons. +register_long_arrays = Off + +; This directive tells PHP whether to declare the argv&argc variables (that +; would contain the GET information). If you don't use these variables, you +; should turn it off for increased performance. +register_argc_argv = Off + +; When enabled, the SERVER and ENV variables are created when they're first +; used (Just In Time) instead of when the script starts. If these variables +; are not used within a script, having this directive on will result in a +; performance gain. The PHP directives register_globals, register_long_arrays, +; and register_argc_argv must be disabled for this directive to have any affect. +auto_globals_jit = On + +; Maximum size of POST data that PHP will accept. +post_max_size = 8M + +; Magic quotes +; + +; Magic quotes for incoming GET/POST/Cookie data. +magic_quotes_gpc = Off + +; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc. +magic_quotes_runtime = Off + +; Use Sybase-style magic quotes (escape ' with '' instead of \'). +magic_quotes_sybase = Off + +; Automatically add files before or after any PHP document. +auto_prepend_file = +auto_append_file = + +; As of 4.0b4, PHP always outputs a character encoding by default in +; the Content-type: header. To disable sending of the charset, simply +; set it to be empty. +; +; PHP's built-in default is text/html +default_mimetype = "text/html" +;default_charset = "iso-8859-1" + +; Always populate the $HTTP_RAW_POST_DATA variable. +;always_populate_raw_post_data = On + + +;;;;;;;;;;;;;;;;;;;;;;;;; +; Paths and Directories ; +;;;;;;;;;;;;;;;;;;;;;;;;; + +; UNIX: "/path1:/path2" +;include_path = ".:/php/includes" +; +; Windows: "\path1;\path2" +;include_path = ".;c:\php\includes" + +; The root of the PHP pages, used only if nonempty. +; if PHP was not compiled with FORCE_REDIRECT, you SHOULD set doc_root +; if you are running php as a CGI under any web server (other than IIS) +; see documentation for security issues. The alternate is to use the +; cgi.force_redirect configuration below +doc_root = + +; The directory under which PHP opens the script using /~username used only +; if nonempty. +user_dir = + +; Directory in which the loadable extensions (modules) reside. +extension_dir = "<%= node['php']['ext_dir'] %>" + +; Whether or not to enable the dl() function. The dl() function does NOT work +; properly in multithreaded servers, such as IIS or Zeus, and is automatically +; disabled on them. +enable_dl = On + +; cgi.force_redirect is necessary to provide security running PHP as a CGI under +; most web servers. Left undefined, PHP turns this on by default. You can +; turn it off here AT YOUR OWN RISK +; **You CAN safely turn this off for IIS, in fact, you MUST.** +; cgi.force_redirect = 1 + +; if cgi.nph is enabled it will force cgi to always sent Status: 200 with +; every request. +; cgi.nph = 1 + +; if cgi.force_redirect is turned on, and you are not running under Apache or Netscape +; (iPlanet) web servers, you MAY need to set an environment variable name that PHP +; will look for to know it is OK to continue execution. Setting this variable MAY +; cause security issues, KNOW WHAT YOU ARE DOING FIRST. +; cgi.redirect_status_env = ; + +; FastCGI under IIS (on WINNT based OS) supports the ability to impersonate +; security tokens of the calling client. This allows IIS to define the +; security context that the request runs under. mod_fastcgi under Apache +; does not currently support this feature (03/17/2002) +; Set to 1 if running under IIS. Default is zero. +; fastcgi.impersonate = 1; + +; Disable logging through FastCGI connection +; fastcgi.log = 0 + +; cgi.rfc2616_headers configuration option tells PHP what type of headers to +; use when sending HTTP response code. If it's set 0 PHP sends Status: header that +; is supported by Apache. When this option is set to 1 PHP will send +; RFC2616 compliant header. +; Default is zero. +;cgi.rfc2616_headers = 0 + + +;;;;;;;;;;;;;;;; +; File Uploads ; +;;;;;;;;;;;;;;;; + +; Whether to allow HTTP file uploads. +file_uploads = On + +; Temporary directory for HTTP uploaded files (will use system default if not +; specified). +;upload_tmp_dir = + +; Maximum allowed size for uploaded files. +upload_max_filesize = 2M + + +;;;;;;;;;;;;;;;;;; +; Fopen wrappers ; +;;;;;;;;;;;;;;;;;; + +; Whether to allow the treatment of URLs (like http:// or ftp://) as files. +allow_url_fopen = On + +; Define the anonymous ftp password (your email address) +;from="john@doe.com" + +; Define the User-Agent string +; user_agent="PHP" + +; Default timeout for socket based streams (seconds) +default_socket_timeout = 60 + +; If your scripts have to deal with files from Macintosh systems, +; or you are running on a Mac and need to deal with files from +; unix or win32 systems, setting this flag will cause PHP to +; automatically detect the EOL character in those files so that +; fgets() and file() will work regardless of the source of the file. +; auto_detect_line_endings = Off + + +;;;;;;;;;;;;;;;;;;;;;; +; Dynamic Extensions ; +;;;;;;;;;;;;;;;;;;;;;; +; +; If you wish to have an extension loaded automatically, use the following +; syntax: +; +; extension=modulename.extension +; +; For example: +; +; extension=msql.so +; +; Note that it should be the name of the module only; no directory information +; needs to go here. Specify the location of the extension with the +; extension_dir directive above. + + +;;;; +; Note: packaged extension modules are now loaded via the .ini files +; found in the directory /etc/php.d; these are loaded by default. +;;;; + + +;;;;;;;;;;;;;;;;;;; +; Module Settings ; +;;;;;;;;;;;;;;;;;;; + +[Date] +; Defines the default timezone used by the date functions +;date.timezone = + +[Syslog] +; Whether or not to define the various syslog variables (e.g. $LOG_PID, +; $LOG_CRON, etc.). Turning it off is a good idea performance-wise. In +; runtime, you can define these variables by calling define_syslog_variables(). +define_syslog_variables = Off + +[mail function] +; For Win32 only. +SMTP = localhost +smtp_port = 25 + +; For Win32 only. +;sendmail_from = me@example.com + +; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). +sendmail_path = /usr/sbin/sendmail -t -i + +; Force the addition of the specified parameters to be passed as extra parameters +; to the sendmail binary. These parameters will always replace the value of +; the 5th parameter to mail(), even in safe mode. +;mail.force_extra_parameters = + +[SQL] +sql.safe_mode = Off + +[ODBC] +;odbc.default_db = Not yet implemented +;odbc.default_user = Not yet implemented +;odbc.default_pw = Not yet implemented + +; Allow or prevent persistent links. +odbc.allow_persistent = On + +; Check that a connection is still valid before reuse. +odbc.check_persistent = On + +; Maximum number of persistent links. -1 means no limit. +odbc.max_persistent = -1 + +; Maximum number of links (persistent + non-persistent). -1 means no limit. +odbc.max_links = -1 + +; Handling of LONG fields. Returns number of bytes to variables. 0 means +; passthru. +odbc.defaultlrl = 4096 + +; Handling of binary data. 0 means passthru, 1 return as is, 2 convert to char. +; See the documentation on odbc_binmode and odbc_longreadlen for an explanation +; of uodbc.defaultlrl and uodbc.defaultbinmode +odbc.defaultbinmode = 1 + +[MySQL] +; Allow or prevent persistent links. +mysql.allow_persistent = On + +; Maximum number of persistent links. -1 means no limit. +mysql.max_persistent = -1 + +; Maximum number of links (persistent + non-persistent). -1 means no limit. +mysql.max_links = -1 + +; Default port number for mysql_connect(). If unset, mysql_connect() will use +; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the +; compile-time value defined MYSQL_PORT (in that order). Win32 will only look +; at MYSQL_PORT. +mysql.default_port = + +; Default socket name for local MySQL connects. If empty, uses the built-in +; MySQL defaults. +mysql.default_socket = + +; Default host for mysql_connect() (doesn't apply in safe mode). +mysql.default_host = + +; Default user for mysql_connect() (doesn't apply in safe mode). +mysql.default_user = + +; Default password for mysql_connect() (doesn't apply in safe mode). +; Note that this is generally a *bad* idea to store passwords in this file. +; *Any* user with PHP access can run 'echo get_cfg_var("mysql.default_password") +; and reveal this password! And of course, any users with read access to this +; file will be able to reveal the password as well. +mysql.default_password = + +; Maximum time (in secondes) for connect timeout. -1 means no limit +mysql.connect_timeout = 60 + +; Trace mode. When trace_mode is active (=On), warnings for table/index scans and +; SQL-Errors will be displayed. +mysql.trace_mode = Off + +[MySQLi] + +; Maximum number of links. -1 means no limit. +mysqli.max_links = -1 + +; Default port number for mysqli_connect(). If unset, mysqli_connect() will use +; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the +; compile-time value defined MYSQL_PORT (in that order). Win32 will only look +; at MYSQL_PORT. +mysqli.default_port = 3306 + +; Default socket name for local MySQL connects. If empty, uses the built-in +; MySQL defaults. +mysqli.default_socket = + +; Default host for mysql_connect() (doesn't apply in safe mode). +mysqli.default_host = + +; Default user for mysql_connect() (doesn't apply in safe mode). +mysqli.default_user = + +; Default password for mysqli_connect() (doesn't apply in safe mode). +; Note that this is generally a *bad* idea to store passwords in this file. +; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_pw") +; and reveal this password! And of course, any users with read access to this +; file will be able to reveal the password as well. +mysqli.default_pw = + +; Allow or prevent reconnect +mysqli.reconnect = Off + +[mSQL] +; Allow or prevent persistent links. +msql.allow_persistent = On + +; Maximum number of persistent links. -1 means no limit. +msql.max_persistent = -1 + +; Maximum number of links (persistent+non persistent). -1 means no limit. +msql.max_links = -1 + +[PostgresSQL] +; Allow or prevent persistent links. +pgsql.allow_persistent = On + +; Detect broken persistent links always with pg_pconnect(). +; Auto reset feature requires a little overheads. +pgsql.auto_reset_persistent = Off + +; Maximum number of persistent links. -1 means no limit. +pgsql.max_persistent = -1 + +; Maximum number of links (persistent+non persistent). -1 means no limit. +pgsql.max_links = -1 + +; Ignore PostgreSQL backends Notice message or not. +; Notice message logging require a little overheads. +pgsql.ignore_notice = 0 + +; Log PostgreSQL backends Noitce message or not. +; Unless pgsql.ignore_notice=0, module cannot log notice message. +pgsql.log_notice = 0 + +[Sybase] +; Allow or prevent persistent links. +sybase.allow_persistent = On + +; Maximum number of persistent links. -1 means no limit. +sybase.max_persistent = -1 + +; Maximum number of links (persistent + non-persistent). -1 means no limit. +sybase.max_links = -1 + +;sybase.interface_file = "/usr/sybase/interfaces" + +; Minimum error severity to display. +sybase.min_error_severity = 10 + +; Minimum message severity to display. +sybase.min_message_severity = 10 + +; Compatability mode with old versions of PHP 3.0. +; If on, this will cause PHP to automatically assign types to results according +; to their Sybase type, instead of treating them all as strings. This +; compatability mode will probably not stay around forever, so try applying +; whatever necessary changes to your code, and turn it off. +sybase.compatability_mode = Off + +[Sybase-CT] +; Allow or prevent persistent links. +sybct.allow_persistent = On + +; Maximum number of persistent links. -1 means no limit. +sybct.max_persistent = -1 + +; Maximum number of links (persistent + non-persistent). -1 means no limit. +sybct.max_links = -1 + +; Minimum server message severity to display. +sybct.min_server_severity = 10 + +; Minimum client message severity to display. +sybct.min_client_severity = 10 + +[bcmath] +; Number of decimal digits for all bcmath functions. +bcmath.scale = 0 + +[browscap] +;browscap = extra/browscap.ini + +[Informix] +; Default host for ifx_connect() (doesn't apply in safe mode). +ifx.default_host = + +; Default user for ifx_connect() (doesn't apply in safe mode). +ifx.default_user = + +; Default password for ifx_connect() (doesn't apply in safe mode). +ifx.default_password = + +; Allow or prevent persistent links. +ifx.allow_persistent = On + +; Maximum number of persistent links. -1 means no limit. +ifx.max_persistent = -1 + +; Maximum number of links (persistent + non-persistent). -1 means no limit. +ifx.max_links = -1 + +; If on, select statements return the contents of a text blob instead of its id. +ifx.textasvarchar = 0 + +; If on, select statements return the contents of a byte blob instead of its id. +ifx.byteasvarchar = 0 + +; Trailing blanks are stripped from fixed-length char columns. May help the +; life of Informix SE users. +ifx.charasvarchar = 0 + +; If on, the contents of text and byte blobs are dumped to a file instead of +; keeping them in memory. +ifx.blobinfile = 0 + +; NULL's are returned as empty strings, unless this is set to 1. In that case, +; NULL's are returned as string 'NULL'. +ifx.nullformat = 0 + +[Session] +; Handler used to store/retrieve data. +session.save_handler = files + +; Argument passed to save_handler. In the case of files, this is the path +; where data files are stored. Note: Windows users have to change this +; variable in order to use PHP's session functions. +; +; As of PHP 4.0.1, you can define the path as: +; +; session.save_path = "N;/path" +; +; where N is an integer. Instead of storing all the session files in +; /path, what this will do is use subdirectories N-levels deep, and +; store the session data in those directories. This is useful if you +; or your OS have problems with lots of files in one directory, and is +; a more efficient layout for servers that handle lots of sessions. +; +; NOTE 1: PHP will not create this directory structure automatically. +; You can use the script in the ext/session dir for that purpose. +; NOTE 2: See the section on garbage collection below if you choose to +; use subdirectories for session storage +; +; The file storage module creates files using mode 600 by default. +; You can change that by using +; +; session.save_path = "N;MODE;/path" +; +; where MODE is the octal representation of the mode. Note that this +; does not overwrite the process's umask. +session.save_path = "/var/lib/php/session" + +; Whether to use cookies. +session.use_cookies = 1 + +; This option enables administrators to make their users invulnerable to +; attacks which involve passing session ids in URLs; defaults to 0. +; session.use_only_cookies = 1 + +; Name of the session (used as cookie name). +session.name = PHPSESSID + +; Initialize session on request startup. +session.auto_start = 0 + +; Lifetime in seconds of cookie or, if 0, until browser is restarted. +session.cookie_lifetime = 0 + +; The path for which the cookie is valid. +session.cookie_path = / + +; The domain for which the cookie is valid. +session.cookie_domain = + +; Handler used to serialize data. php is the standard serializer of PHP. +session.serialize_handler = php + +; Define the probability that the 'garbage collection' process is started +; on every session initialization. +; The probability is calculated by using gc_probability/gc_divisor, +; e.g. 1/100 means there is a 1% chance that the GC process starts +; on each request. + +session.gc_probability = 1 +session.gc_divisor = 1000 + +; After this number of seconds, stored data will be seen as 'garbage' and +; cleaned up by the garbage collection process. +session.gc_maxlifetime = 1440 + +; NOTE: If you are using the subdirectory option for storing session files +; (see session.save_path above), then garbage collection does *not* +; happen automatically. You will need to do your own garbage +; collection through a shell script, cron entry, or some other method. +; For example, the following script would is the equivalent of +; setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes): +; cd /path/to/sessions; find -cmin +24 | xargs rm + +; PHP 4.2 and less have an undocumented feature/bug that allows you to +; to initialize a session variable in the global scope, albeit register_globals +; is disabled. PHP 4.3 and later will warn you, if this feature is used. +; You can disable the feature and the warning separately. At this time, +; the warning is only displayed, if bug_compat_42 is enabled. + +session.bug_compat_42 = 0 +session.bug_compat_warn = 1 + +; Check HTTP Referer to invalidate externally stored URLs containing ids. +; HTTP_REFERER has to contain this substring for the session to be +; considered as valid. +session.referer_check = + +; How many bytes to read from the file. +session.entropy_length = 0 + +; Specified here to create the session id. +session.entropy_file = + +;session.entropy_length = 16 + +;session.entropy_file = /dev/urandom + +; Set to {nocache,private,public,} to determine HTTP caching aspects +; or leave this empty to avoid sending anti-caching headers. +session.cache_limiter = nocache + +; Document expires after n minutes. +session.cache_expire = 180 + +; trans sid support is disabled by default. +; Use of trans sid may risk your users security. +; Use this option with caution. +; - User may send URL contains active session ID +; to other person via. email/irc/etc. +; - URL that contains active session ID may be stored +; in publically accessible computer. +; - User may access your site with the same session ID +; always using URL stored in browser's history or bookmarks. +session.use_trans_sid = 0 + +; Select a hash function +; 0: MD5 (128 bits) +; 1: SHA-1 (160 bits) +session.hash_function = 0 + +; Define how many bits are stored in each character when converting +; the binary hash data to something readable. +; +; 4 bits: 0-9, a-f +; 5 bits: 0-9, a-v +; 6 bits: 0-9, a-z, A-Z, "-", "," +session.hash_bits_per_character = 5 + +; The URL rewriter will look for URLs in a defined set of HTML tags. +; form/fieldset are special; if you include them here, the rewriter will +; add a hidden field with the info which is otherwise appended +; to URLs. If you want XHTML conformity, remove the form entry. +; Note that all valid entries require a "=", even if no value follows. +url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry" + +[MSSQL] +; Allow or prevent persistent links. +mssql.allow_persistent = On + +; Maximum number of persistent links. -1 means no limit. +mssql.max_persistent = -1 + +; Maximum number of links (persistent+non persistent). -1 means no limit. +mssql.max_links = -1 + +; Minimum error severity to display. +mssql.min_error_severity = 10 + +; Minimum message severity to display. +mssql.min_message_severity = 10 + +; Compatability mode with old versions of PHP 3.0. +mssql.compatability_mode = Off + +; Connect timeout +;mssql.connect_timeout = 5 + +; Query timeout +;mssql.timeout = 60 + +; Valid range 0 - 2147483647. Default = 4096. +;mssql.textlimit = 4096 + +; Valid range 0 - 2147483647. Default = 4096. +;mssql.textsize = 4096 + +; Limits the number of records in each batch. 0 = all records in one batch. +;mssql.batchsize = 0 + +; Specify how datetime and datetim4 columns are returned +; On => Returns data converted to SQL server settings +; Off => Returns values as YYYY-MM-DD hh:mm:ss +;mssql.datetimeconvert = On + +; Use NT authentication when connecting to the server +mssql.secure_connection = Off + +; Specify max number of processes. -1 = library default +; msdlib defaults to 25 +; FreeTDS defaults to 4096 +;mssql.max_procs = -1 + +; Specify client character set. +; If empty or not set the client charset from freetds.comf is used +; This is only used when compiled with FreeTDS +;mssql.charset = "ISO-8859-1" + +[Assertion] +; Assert(expr); active by default. +;assert.active = On + +; Issue a PHP warning for each failed assertion. +;assert.warning = On + +; Don't bail out by default. +;assert.bail = Off + +; User-function to be called if an assertion fails. +;assert.callback = 0 + +; Eval the expression with current error_reporting(). Set to true if you want +; error_reporting(0) around the eval(). +;assert.quiet_eval = 0 + +[Verisign Payflow Pro] +; Default Payflow Pro server. +pfpro.defaulthost = "test-payflow.verisign.com" + +; Default port to connect to. +pfpro.defaultport = 443 + +; Default timeout in seconds. +pfpro.defaulttimeout = 30 + +; Default proxy IP address (if required). +;pfpro.proxyaddress = + +; Default proxy port. +;pfpro.proxyport = + +; Default proxy logon. +;pfpro.proxylogon = + +; Default proxy password. +;pfpro.proxypassword = + +[COM] +; path to a file containing GUIDs, IIDs or filenames of files with TypeLibs +;com.typelib_file = +; allow Distributed-COM calls +;com.allow_dcom = true +; autoregister constants of a components typlib on com_load() +;com.autoregister_typelib = true +; register constants casesensitive +;com.autoregister_casesensitive = false +; show warnings on duplicate constat registrations +;com.autoregister_verbose = true + +[mbstring] +; language for internal character representation. +;mbstring.language = Japanese + +; internal/script encoding. +; Some encoding cannot work as internal encoding. +; (e.g. SJIS, BIG5, ISO-2022-*) +;mbstring.internal_encoding = EUC-JP + +; http input encoding. +;mbstring.http_input = auto + +; http output encoding. mb_output_handler must be +; registered as output buffer to function +;mbstring.http_output = SJIS + +; enable automatic encoding translation according to +; mbstring.internal_encoding setting. Input chars are +; converted to internal encoding by setting this to On. +; Note: Do _not_ use automatic encoding translation for +; portable libs/applications. +;mbstring.encoding_translation = Off + +; automatic encoding detection order. +; auto means +;mbstring.detect_order = auto + +; substitute_character used when character cannot be converted +; one from another +;mbstring.substitute_character = none; + +; overload(replace) single byte functions by mbstring functions. +; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(), +; etc. Possible values are 0,1,2,4 or combination of them. +; For example, 7 for overload everything. +; 0: No overload +; 1: Overload mail() function +; 2: Overload str*() functions +; 4: Overload ereg*() functions +;mbstring.func_overload = 0 + +; enable strict encoding detection. +;mbstring.strict_encoding = Off + +[FrontBase] +;fbsql.allow_persistent = On +;fbsql.autocommit = On +;fbsql.default_database = +;fbsql.default_database_password = +;fbsql.default_host = +;fbsql.default_password = +;fbsql.default_user = "_SYSTEM" +;fbsql.generate_warnings = Off +;fbsql.max_connections = 128 +;fbsql.max_links = 128 +;fbsql.max_persistent = -1 +;fbsql.max_results = 128 +;fbsql.batchSize = 1000 + +[gd] +; Tell the jpeg decode to libjpeg warnings and try to create +; a gd image. The warning will then be displayed as notices +; disabled by default +;gd.jpeg_ignore_warning = 0 + +[exif] +; Exif UNICODE user comments are handled as UCS-2BE/UCS-2LE and JIS as JIS. +; With mbstring support this will automatically be converted into the encoding +; given by corresponding encode setting. When empty mbstring.internal_encoding +; is used. For the decode settings you can distinguish between motorola and +; intel byte order. A decode setting cannot be empty. +;exif.encode_unicode = ISO-8859-15 +;exif.decode_unicode_motorola = UCS-2BE +;exif.decode_unicode_intel = UCS-2LE +;exif.encode_jis = +;exif.decode_jis_motorola = JIS +;exif.decode_jis_intel = JIS + +[Tidy] +; The path to a default tidy configuration file to use when using tidy +;tidy.default_config = /usr/local/lib/php/default.tcfg + +; Should tidy clean and repair output automatically? +; WARNING: Do not use this option if you are generating non-html content +; such as dynamic images +tidy.clean_output = Off + +[soap] +; Enables or disables WSDL caching feature. +soap.wsdl_cache_enabled=1 +; Sets the directory name where SOAP extension will put cache files. +soap.wsdl_cache_dir="/tmp" +; (time to live) Sets the number of second while cached file will be used +; instead of original one. +soap.wsdl_cache_ttl=86400 + +; Local Variables: +; tab-width: 4 +; End: + +<% @directives.sort_by { |key, val| key }.each do |directive, value| -%> +<%= "#{directive}=\"#{value}\"" %> +<% end -%> diff --git a/vagrant/provision/cookbooks/php/templates/ubuntu/php.ini.erb b/vagrant/provision/cookbooks/php/templates/ubuntu/php.ini.erb new file mode 100755 index 0000000..1bd0a47 --- /dev/null +++ b/vagrant/provision/cookbooks/php/templates/ubuntu/php.ini.erb @@ -0,0 +1,1857 @@ +[PHP] + +;;;;;;;;;;;;;;;;;;; +; About php.ini ; +;;;;;;;;;;;;;;;;;;; +; PHP's initialization file, generally called php.ini, is responsible for +; configuring many of the aspects of PHP's behavior. + +; PHP attempts to find and load this configuration from a number of locations. +; The following is a summary of its search order: +; 1. SAPI module specific location. +; 2. The PHPRC environment variable. (As of PHP 5.2.0) +; 3. A number of predefined registry keys on Windows (As of PHP 5.2.0) +; 4. Current working directory (except CLI) +; 5. The web server's directory (for SAPI modules), or directory of PHP +; (otherwise in Windows) +; 6. The directory from the --with-config-file-path compile time option, or the +; Windows directory (C:\windows or C:\winnt) +; See the PHP docs for more specific information. +; http://php.net/configuration.file + +; The syntax of the file is extremely simple. Whitespace and Lines +; beginning with a semicolon are silently ignored (as you probably guessed). +; Section headers (e.g. [Foo]) are also silently ignored, even though +; they might mean something in the future. + +; Directives following the section heading [PATH=/www/mysite] only +; apply to PHP files in the /www/mysite directory. Directives +; following the section heading [HOST=www.example.com] only apply to +; PHP files served from www.example.com. Directives set in these +; special sections cannot be overridden by user-defined INI files or +; at runtime. Currently, [PATH=] and [HOST=] sections only work under +; CGI/FastCGI. +; http://php.net/ini.sections + +; Directives are specified using the following syntax: +; directive = value +; Directive names are *case sensitive* - foo=bar is different from FOO=bar. +; Directives are variables used to configure PHP or PHP extensions. +; There is no name validation. If PHP can't find an expected +; directive because it is not set or is mistyped, a default value will be used. + +; The value can be a string, a number, a PHP constant (e.g. E_ALL or M_PI), one +; of the INI constants (On, Off, True, False, Yes, No and None) or an expression +; (e.g. E_ALL & ~E_NOTICE), a quoted string ("bar"), or a reference to a +; previously set variable or directive (e.g. ${foo}) + +; Expressions in the INI file are limited to bitwise operators and parentheses: +; | bitwise OR +; ^ bitwise XOR +; & bitwise AND +; ~ bitwise NOT +; ! boolean NOT + +; Boolean flags can be turned on using the values 1, On, True or Yes. +; They can be turned off using the values 0, Off, False or No. + +; An empty string can be denoted by simply not writing anything after the equal +; sign, or by using the None keyword: + +; foo = ; sets foo to an empty string +; foo = None ; sets foo to an empty string +; foo = "None" ; sets foo to the string 'None' + +; If you use constants in your value, and these constants belong to a +; dynamically loaded extension (either a PHP extension or a Zend extension), +; you may only use these constants *after* the line that loads the extension. + +;;;;;;;;;;;;;;;;;;; +; About this file ; +;;;;;;;;;;;;;;;;;;; +; PHP comes packaged with two INI files. One that is recommended to be used +; in production environments and one that is recommended to be used in +; development environments. + +; php.ini-production contains settings which hold security, performance and +; best practices at its core. But please be aware, these settings may break +; compatibility with older or less security conscience applications. We +; recommending using the production ini in production and testing environments. + +; php.ini-development is very similar to its production variant, except it's +; much more verbose when it comes to errors. We recommending using the +; development version only in development environments as errors shown to +; application users can inadvertently leak otherwise secure information. + +;;;;;;;;;;;;;;;;;;; +; Quick Reference ; +;;;;;;;;;;;;;;;;;;; +; The following are all the settings which are different in either the production +; or development versions of the INIs with respect to PHP's default behavior. +; Please see the actual settings later in the document for more details as to why +; we recommend these changes in PHP's behavior. + +; allow_call_time_pass_reference +; Default Value: On +; Development Value: Off +; Production Value: Off + +; display_errors +; Default Value: On +; Development Value: On +; Production Value: Off + +; display_startup_errors +; Default Value: Off +; Development Value: On +; Production Value: Off + +; error_reporting +; Default Value: E_ALL & ~E_NOTICE +; Development Value: E_ALL | E_STRICT +; Production Value: E_ALL & ~E_DEPRECATED + +; html_errors +; Default Value: On +; Development Value: On +; Production value: Off + +; log_errors +; Default Value: Off +; Development Value: On +; Production Value: On + +; magic_quotes_gpc +; Default Value: On +; Development Value: Off +; Production Value: Off + +; max_input_time +; Default Value: -1 (Unlimited) +; Development Value: 60 (60 seconds) +; Production Value: 60 (60 seconds) + +; output_buffering +; Default Value: Off +; Development Value: 4096 +; Production Value: 4096 + +; register_argc_argv +; Default Value: On +; Development Value: Off +; Production Value: Off + +; register_long_arrays +; Default Value: On +; Development Value: Off +; Production Value: Off + +; request_order +; Default Value: None +; Development Value: "GP" +; Production Value: "GP" + +; session.bug_compat_42 +; Default Value: On +; Development Value: On +; Production Value: Off + +; session.bug_compat_warn +; Default Value: On +; Development Value: On +; Production Value: Off + +; session.gc_divisor +; Default Value: 100 +; Development Value: 1000 +; Production Value: 1000 + +; session.hash_bits_per_character +; Default Value: 4 +; Development Value: 5 +; Production Value: 5 + +; short_open_tag +; Default Value: On +; Development Value: Off +; Production Value: Off + +; track_errors +; Default Value: Off +; Development Value: On +; Production Value: Off + +; url_rewriter.tags +; Default Value: "a=href,area=href,frame=src,form=,fieldset=" +; Development Value: "a=href,area=href,frame=src,input=src,form=fakeentry" +; Production Value: "a=href,area=href,frame=src,input=src,form=fakeentry" + +; variables_order +; Default Value: "EGPCS" +; Development Value: "GPCS" +; Production Value: "GPCS" + +;;;;;;;;;;;;;;;;;;;; +; php.ini Options ; +;;;;;;;;;;;;;;;;;;;; +; Name for user-defined php.ini (.htaccess) files. Default is ".user.ini" +;user_ini.filename = ".user.ini" + +; To disable this feature set this option to empty value +;user_ini.filename = + +; TTL for user-defined php.ini files (time-to-live) in seconds. Default is 300 seconds (5 minutes) +;user_ini.cache_ttl = 300 + +;;;;;;;;;;;;;;;;;;;; +; Language Options ; +;;;;;;;;;;;;;;;;;;;; + +; Enable the PHP scripting language engine under Apache. +; http://php.net/engine +engine = On + +; This directive determines whether or not PHP will recognize code between +; tags as PHP source which should be processed as such. It's been +; recommended for several years that you not use the short tag "short cut" and +; instead to use the full tag combination. With the wide spread use +; of XML and use of these tags by other languages, the server can become easily +; confused and end up parsing the wrong code in the wrong context. But because +; this short cut has been a feature for such a long time, it's currently still +; supported for backwards compatibility, but we recommend you don't use them. +; Default Value: On +; Development Value: Off +; Production Value: Off +; http://php.net/short-open-tag +short_open_tag = On + +; Allow ASP-style <% %> tags. +; http://php.net/asp-tags +asp_tags = Off + +; The number of significant digits displayed in floating point numbers. +; http://php.net/precision +precision = 14 + +; Enforce year 2000 compliance (will cause problems with non-compliant browsers) +; http://php.net/y2k-compliance +y2k_compliance = On + +; Output buffering is a mechanism for controlling how much output data +; (excluding headers and cookies) PHP should keep internally before pushing that +; data to the client. If your application's output exceeds this setting, PHP +; will send that data in chunks of roughly the size you specify. +; Turning on this setting and managing its maximum buffer size can yield some +; interesting side-effects depending on your application and web server. +; You may be able to send headers and cookies after you've already sent output +; through print or echo. You also may see performance benefits if your server is +; emitting less packets due to buffered output versus PHP streaming the output +; as it gets it. On production servers, 4096 bytes is a good setting for performance +; reasons. +; Note: Output buffering can also be controlled via Output Buffering Control +; functions. +; Possible Values: +; On = Enabled and buffer is unlimited. (Use with caution) +; Off = Disabled +; Integer = Enables the buffer and sets its maximum size in bytes. +; Note: This directive is hardcoded to Off for the CLI SAPI +; Default Value: Off +; Development Value: 4096 +; Production Value: 4096 +; http://php.net/output-buffering +output_buffering = 4096 + +; You can redirect all of the output of your scripts to a function. For +; example, if you set output_handler to "mb_output_handler", character +; encoding will be transparently converted to the specified encoding. +; Setting any output handler automatically turns on output buffering. +; Note: People who wrote portable scripts should not depend on this ini +; directive. Instead, explicitly set the output handler using ob_start(). +; Using this ini directive may cause problems unless you know what script +; is doing. +; Note: You cannot use both "mb_output_handler" with "ob_iconv_handler" +; and you cannot use both "ob_gzhandler" and "zlib.output_compression". +; Note: output_handler must be empty if this is set 'On' !!!! +; Instead you must use zlib.output_handler. +; http://php.net/output-handler +;output_handler = + +; Transparent output compression using the zlib library +; Valid values for this option are 'off', 'on', or a specific buffer size +; to be used for compression (default is 4KB) +; Note: Resulting chunk size may vary due to nature of compression. PHP +; outputs chunks that are few hundreds bytes each as a result of +; compression. If you prefer a larger chunk size for better +; performance, enable output_buffering in addition. +; Note: You need to use zlib.output_handler instead of the standard +; output_handler, or otherwise the output will be corrupted. +; http://php.net/zlib.output-compression +zlib.output_compression = Off + +; http://php.net/zlib.output-compression-level +;zlib.output_compression_level = -1 + +; You cannot specify additional output handlers if zlib.output_compression +; is activated here. This setting does the same as output_handler but in +; a different order. +; http://php.net/zlib.output-handler +;zlib.output_handler = + +; Implicit flush tells PHP to tell the output layer to flush itself +; automatically after every output block. This is equivalent to calling the +; PHP function flush() after each and every call to print() or echo() and each +; and every HTML block. Turning this option on has serious performance +; implications and is generally recommended for debugging purposes only. +; http://php.net/implicit-flush +; Note: This directive is hardcoded to On for the CLI SAPI +implicit_flush = Off + +; The unserialize callback function will be called (with the undefined class' +; name as parameter), if the unserializer finds an undefined class +; which should be instantiated. A warning appears if the specified function is +; not defined, or if the function doesn't include/implement the missing class. +; So only set this entry, if you really want to implement such a +; callback-function. +unserialize_callback_func = + +; When floats & doubles are serialized store serialize_precision significant +; digits after the floating point. The default value ensures that when floats +; are decoded with unserialize, the data will remain the same. +serialize_precision = 100 + +; This directive allows you to enable and disable warnings which PHP will issue +; if you pass a value by reference at function call time. Passing values by +; reference at function call time is a deprecated feature which will be removed +; from PHP at some point in the near future. The acceptable method for passing a +; value by reference to a function is by declaring the reference in the functions +; definition, not at call time. This directive does not disable this feature, it +; only determines whether PHP will warn you about it or not. These warnings +; should enabled in development environments only. +; Default Value: On (Suppress warnings) +; Development Value: Off (Issue warnings) +; Production Value: Off (Issue warnings) +; http://php.net/allow-call-time-pass-reference +allow_call_time_pass_reference = Off + +; Safe Mode +; http://php.net/safe-mode +safe_mode = Off + +; By default, Safe Mode does a UID compare check when +; opening files. If you want to relax this to a GID compare, +; then turn on safe_mode_gid. +; http://php.net/safe-mode-gid +safe_mode_gid = Off + +; When safe_mode is on, UID/GID checks are bypassed when +; including files from this directory and its subdirectories. +; (directory must also be in include_path or full path must +; be used when including) +; http://php.net/safe-mode-include-dir +safe_mode_include_dir = + +; When safe_mode is on, only executables located in the safe_mode_exec_dir +; will be allowed to be executed via the exec family of functions. +; http://php.net/safe-mode-exec-dir +safe_mode_exec_dir = + +; Setting certain environment variables may be a potential security breach. +; This directive contains a comma-delimited list of prefixes. In Safe Mode, +; the user may only alter environment variables whose names begin with the +; prefixes supplied here. By default, users will only be able to set +; environment variables that begin with PHP_ (e.g. PHP_FOO=BAR). +; Note: If this directive is empty, PHP will let the user modify ANY +; environment variable! +; http://php.net/safe-mode-allowed-env-vars +safe_mode_allowed_env_vars = PHP_ + +; This directive contains a comma-delimited list of environment variables that +; the end user won't be able to change using putenv(). These variables will be +; protected even if safe_mode_allowed_env_vars is set to allow to change them. +; http://php.net/safe-mode-protected-env-vars +safe_mode_protected_env_vars = LD_LIBRARY_PATH + +; open_basedir, if set, limits all file operations to the defined directory +; and below. This directive makes most sense if used in a per-directory +; or per-virtualhost web server configuration file. This directive is +; *NOT* affected by whether Safe Mode is turned On or Off. +; http://php.net/open-basedir +;open_basedir = + +; This directive allows you to disable certain functions for security reasons. +; It receives a comma-delimited list of function names. This directive is +; *NOT* affected by whether Safe Mode is turned On or Off. +; http://php.net/disable-functions +disable_functions = + +; This directive allows you to disable certain classes for security reasons. +; It receives a comma-delimited list of class names. This directive is +; *NOT* affected by whether Safe Mode is turned On or Off. +; http://php.net/disable-classes +disable_classes = + +; Colors for Syntax Highlighting mode. Anything that's acceptable in +; would work. +; http://php.net/syntax-highlighting +;highlight.string = #DD0000 +;highlight.comment = #FF9900 +;highlight.keyword = #007700 +;highlight.bg = #FFFFFF +;highlight.default = #0000BB +;highlight.html = #000000 + +; If enabled, the request will be allowed to complete even if the user aborts +; the request. Consider enabling it if executing long requests, which may end up +; being interrupted by the user or a browser timing out. PHP's default behavior +; is to disable this feature. +; http://php.net/ignore-user-abort +;ignore_user_abort = On + +; Determines the size of the realpath cache to be used by PHP. This value should +; be increased on systems where PHP opens many files to reflect the quantity of +; the file operations performed. +; http://php.net/realpath-cache-size +;realpath_cache_size = 16k + +; Duration of time, in seconds for which to cache realpath information for a given +; file or directory. For systems with rarely changing files, consider increasing this +; value. +; http://php.net/realpath-cache-ttl +;realpath_cache_ttl = 120 + +;;;;;;;;;;;;;;;;; +; Miscellaneous ; +;;;;;;;;;;;;;;;;; + +; Decides whether PHP may expose the fact that it is installed on the server +; (e.g. by adding its signature to the Web server header). It is no security +; threat in any way, but it makes it possible to determine whether you use PHP +; on your server or not. +; http://php.net/expose-php +expose_php = On + +;;;;;;;;;;;;;;;;;;; +; Resource Limits ; +;;;;;;;;;;;;;;;;;;; + +; Maximum execution time of each script, in seconds +; http://php.net/max-execution-time +; Note: This directive is hardcoded to 0 for the CLI SAPI +max_execution_time = 30 + +; Maximum amount of time each script may spend parsing request data. It's a good +; idea to limit this time on productions servers in order to eliminate unexpectedly +; long running scripts. +; Note: This directive is hardcoded to -1 for the CLI SAPI +; Default Value: -1 (Unlimited) +; Development Value: 60 (60 seconds) +; Production Value: 60 (60 seconds) +; http://php.net/max-input-time +max_input_time = 60 + +; Maximum input variable nesting level +; http://php.net/max-input-nesting-level +;max_input_nesting_level = 64 + +; Maximum amount of memory a script may consume (128MB) +; http://php.net/memory-limit +memory_limit = -1 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Error handling and logging ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +; This directive informs PHP of which errors, warnings and notices you would like +; it to take action for. The recommended way of setting values for this +; directive is through the use of the error level constants and bitwise +; operators. The error level constants are below here for convenience as well as +; some common settings and their meanings. +; By default, PHP is set to take action on all errors, notices and warnings EXCEPT +; those related to E_NOTICE and E_STRICT, which together cover best practices and +; recommended coding standards in PHP. For performance reasons, this is the +; recommend error reporting setting. Your production server shouldn't be wasting +; resources complaining about best practices and coding standards. That's what +; development servers and development settings are for. +; Note: The php.ini-development file has this setting as E_ALL | E_STRICT. This +; means it pretty much reports everything which is exactly what you want during +; development and early testing. +; +; Error Level Constants: +; E_ALL - All errors and warnings (includes E_STRICT as of PHP 6.0.0) +; E_ERROR - fatal run-time errors +; E_RECOVERABLE_ERROR - almost fatal run-time errors +; E_WARNING - run-time warnings (non-fatal errors) +; E_PARSE - compile-time parse errors +; E_NOTICE - run-time notices (these are warnings which often result +; from a bug in your code, but it's possible that it was +; intentional (e.g., using an uninitialized variable and +; relying on the fact it's automatically initialized to an +; empty string) +; E_STRICT - run-time notices, enable to have PHP suggest changes +; to your code which will ensure the best interoperability +; and forward compatibility of your code +; E_CORE_ERROR - fatal errors that occur during PHP's initial startup +; E_CORE_WARNING - warnings (non-fatal errors) that occur during PHP's +; initial startup +; E_COMPILE_ERROR - fatal compile-time errors +; E_COMPILE_WARNING - compile-time warnings (non-fatal errors) +; E_USER_ERROR - user-generated error message +; E_USER_WARNING - user-generated warning message +; E_USER_NOTICE - user-generated notice message +; E_DEPRECATED - warn about code that will not work in future versions +; of PHP +; E_USER_DEPRECATED - user-generated deprecation warnings +; +; Common Values: +; E_ALL & ~E_NOTICE (Show all errors, except for notices and coding standards warnings.) +; E_ALL & ~E_NOTICE | E_STRICT (Show all errors, except for notices) +; E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors) +; E_ALL | E_STRICT (Show all errors, warnings and notices including coding standards.) +; Default Value: E_ALL & ~E_NOTICE +; Development Value: E_ALL | E_STRICT +; Production Value: E_ALL & ~E_DEPRECATED +; http://php.net/error-reporting +error_reporting = E_ALL & ~E_DEPRECATED + +; This directive controls whether or not and where PHP will output errors, +; notices and warnings too. Error output is very useful during development, but +; it could be very dangerous in production environments. Depending on the code +; which is triggering the error, sensitive information could potentially leak +; out of your application such as database usernames and passwords or worse. +; It's recommended that errors be logged on production servers rather than +; having the errors sent to STDOUT. +; Possible Values: +; Off = Do not display any errors +; stderr = Display errors to STDERR (affects only CGI/CLI binaries!) +; On or stdout = Display errors to STDOUT +; Default Value: On +; Development Value: On +; Production Value: Off +; http://php.net/display-errors +display_errors = Off + +; The display of errors which occur during PHP's startup sequence are handled +; separately from display_errors. PHP's default behavior is to suppress those +; errors from clients. Turning the display of startup errors on can be useful in +; debugging configuration problems. But, it's strongly recommended that you +; leave this setting off on production servers. +; Default Value: Off +; Development Value: On +; Production Value: Off +; http://php.net/display-startup-errors +display_startup_errors = Off + +; Besides displaying errors, PHP can also log errors to locations such as a +; server-specific log, STDERR, or a location specified by the error_log +; directive found below. While errors should not be displayed on productions +; servers they should still be monitored and logging is a great way to do that. +; Default Value: Off +; Development Value: On +; Production Value: On +; http://php.net/log-errors +log_errors = On + +; Set maximum length of log_errors. In error_log information about the source is +; added. The default is 1024 and 0 allows to not apply any maximum length at all. +; http://php.net/log-errors-max-len +log_errors_max_len = 1024 + +; Do not log repeated messages. Repeated errors must occur in same file on same +; line unless ignore_repeated_source is set true. +; http://php.net/ignore-repeated-errors +ignore_repeated_errors = Off + +; Ignore source of message when ignoring repeated messages. When this setting +; is On you will not log errors with repeated messages from different files or +; source lines. +; http://php.net/ignore-repeated-source +ignore_repeated_source = Off + +; If this parameter is set to Off, then memory leaks will not be shown (on +; stdout or in the log). This has only effect in a debug compile, and if +; error reporting includes E_WARNING in the allowed list +; http://php.net/report-memleaks +report_memleaks = On + +; This setting is on by default. +;report_zend_debug = 0 + +; Store the last error/warning message in $php_errormsg (boolean). Setting this value +; to On can assist in debugging and is appropriate for development servers. It should +; however be disabled on production servers. +; Default Value: Off +; Development Value: On +; Production Value: Off +; http://php.net/track-errors +track_errors = Off + +; Turn off normal error reporting and emit XML-RPC error XML +; http://php.net/xmlrpc-errors +;xmlrpc_errors = 0 + +; An XML-RPC faultCode +;xmlrpc_error_number = 0 + +; When PHP displays or logs an error, it has the capability of inserting html +; links to documentation related to that error. This directive controls whether +; those HTML links appear in error messages or not. For performance and security +; reasons, it's recommended you disable this on production servers. +; Note: This directive is hardcoded to Off for the CLI SAPI +; Default Value: On +; Development Value: On +; Production value: Off +; http://php.net/html-errors +html_errors = Off + +; If html_errors is set On PHP produces clickable error messages that direct +; to a page describing the error or function causing the error in detail. +; You can download a copy of the PHP manual from http://php.net/docs +; and change docref_root to the base URL of your local copy including the +; leading '/'. You must also specify the file extension being used including +; the dot. PHP's default behavior is to leave these settings empty. +; Note: Never use this feature for production boxes. +; http://php.net/docref-root +; Examples +;docref_root = "/phpmanual/" + +; http://php.net/docref-ext +;docref_ext = .html + +; String to output before an error message. PHP's default behavior is to leave +; this setting blank. +; http://php.net/error-prepend-string +; Example: +;error_prepend_string = "" + +; String to output after an error message. PHP's default behavior is to leave +; this setting blank. +; http://php.net/error-append-string +; Example: +;error_append_string = "" + +; Log errors to specified file. PHP's default behavior is to leave this value +; empty. +; http://php.net/error-log +; Example: +;error_log = php_errors.log +; Log errors to syslog (Event Log on NT, not valid in Windows 95). +;error_log = syslog + +;;;;;;;;;;;;;;;;; +; Data Handling ; +;;;;;;;;;;;;;;;;; + +; The separator used in PHP generated URLs to separate arguments. +; PHP's default setting is "&". +; http://php.net/arg-separator.output +; Example: +;arg_separator.output = "&" + +; List of separator(s) used by PHP to parse input URLs into variables. +; PHP's default setting is "&". +; NOTE: Every character in this directive is considered as separator! +; http://php.net/arg-separator.input +; Example: +;arg_separator.input = ";&" + +; This directive determines which super global arrays are registered when PHP +; starts up. If the register_globals directive is enabled, it also determines +; what order variables are populated into the global space. G,P,C,E & S are +; abbreviations for the following respective super globals: GET, POST, COOKIE, +; ENV and SERVER. There is a performance penalty paid for the registration of +; these arrays and because ENV is not as commonly used as the others, ENV is +; is not recommended on productions servers. You can still get access to +; the environment variables through getenv() should you need to. +; Default Value: "EGPCS" +; Development Value: "GPCS" +; Production Value: "GPCS"; +; http://php.net/variables-order +variables_order = "GPCS" + +; This directive determines which super global data (G,P,C,E & S) should +; be registered into the super global array REQUEST. If so, it also determines +; the order in which that data is registered. The values for this directive are +; specified in the same manner as the variables_order directive, EXCEPT one. +; Leaving this value empty will cause PHP to use the value set in the +; variables_order directive. It does not mean it will leave the super globals +; array REQUEST empty. +; Default Value: None +; Development Value: "GP" +; Production Value: "GP" +; http://php.net/request-order +request_order = "GP" + +; Whether or not to register the EGPCS variables as global variables. You may +; want to turn this off if you don't want to clutter your scripts' global scope +; with user data. +; You should do your best to write your scripts so that they do not require +; register_globals to be on; Using form variables as globals can easily lead +; to possible security problems, if the code is not very well thought of. +; http://php.net/register-globals +register_globals = Off + +; Determines whether the deprecated long $HTTP_*_VARS type predefined variables +; are registered by PHP or not. As they are deprecated, we obviously don't +; recommend you use them. They are on by default for compatibility reasons but +; they are not recommended on production servers. +; Default Value: On +; Development Value: Off +; Production Value: Off +; http://php.net/register-long-arrays +register_long_arrays = Off + +; This directive determines whether PHP registers $argv & $argc each time it +; runs. $argv contains an array of all the arguments passed to PHP when a script +; is invoked. $argc contains an integer representing the number of arguments +; that were passed when the script was invoked. These arrays are extremely +; useful when running scripts from the command line. When this directive is +; enabled, registering these variables consumes CPU cycles and memory each time +; a script is executed. For performance reasons, this feature should be disabled +; on production servers. +; Note: This directive is hardcoded to On for the CLI SAPI +; Default Value: On +; Development Value: Off +; Production Value: Off +; http://php.net/register-argc-argv +register_argc_argv = Off + +; When enabled, the SERVER and ENV variables are created when they're first +; used (Just In Time) instead of when the script starts. If these variables +; are not used within a script, having this directive on will result in a +; performance gain. The PHP directives register_globals, register_long_arrays, +; and register_argc_argv must be disabled for this directive to have any affect. +; http://php.net/auto-globals-jit +auto_globals_jit = On + +; Maximum size of POST data that PHP will accept. +; http://php.net/post-max-size +post_max_size = 8M + +; Magic quotes are a preprocessing feature of PHP where PHP will attempt to +; escape any character sequences in GET, POST, COOKIE and ENV data which might +; otherwise corrupt data being placed in resources such as databases before +; making that data available to you. Because of character encoding issues and +; non-standard SQL implementations across many databases, it's not currently +; possible for this feature to be 100% accurate. PHP's default behavior is to +; enable the feature. We strongly recommend you use the escaping mechanisms +; designed specifically for the database your using instead of relying on this +; feature. Also note, this feature has been deprecated as of PHP 5.3.0 and is +; scheduled for removal in PHP 6. +; Default Value: On +; Development Value: Off +; Production Value: Off +; http://php.net/magic-quotes-gpc +magic_quotes_gpc = Off + +; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc. +; http://php.net/magic-quotes-runtime +magic_quotes_runtime = Off + +; Use Sybase-style magic quotes (escape ' with '' instead of \'). +; http://php.net/magic-quotes-sybase +magic_quotes_sybase = Off + +; Automatically add files before PHP document. +; http://php.net/auto-prepend-file +auto_prepend_file = + +; Automatically add files after PHP document. +; http://php.net/auto-append-file +auto_append_file = + +; By default, PHP will output a character encoding using +; the Content-type: header. To disable sending of the charset, simply +; set it to be empty. +; +; PHP's built-in default is text/html +; http://php.net/default-mimetype +default_mimetype = "text/html" + +; PHP's default character set is set to empty. +; http://php.net/default-charset +;default_charset = "iso-8859-1" + +; Always populate the $HTTP_RAW_POST_DATA variable. PHP's default behavior is +; to disable this feature. +; http://php.net/always-populate-raw-post-data +;always_populate_raw_post_data = On + +;;;;;;;;;;;;;;;;;;;;;;;;; +; Paths and Directories ; +;;;;;;;;;;;;;;;;;;;;;;;;; + +; UNIX: "/path1:/path2" +;include_path = ".:/usr/share/php" +; +; Windows: "\path1;\path2" +;include_path = ".;c:\php\includes" +; +; PHP's default setting for include_path is ".;/path/to/php/pear" +; http://php.net/include-path + +; The root of the PHP pages, used only if nonempty. +; if PHP was not compiled with FORCE_REDIRECT, you SHOULD set doc_root +; if you are running php as a CGI under any web server (other than IIS) +; see documentation for security issues. The alternate is to use the +; cgi.force_redirect configuration below +; http://php.net/doc-root +doc_root = + +; The directory under which PHP opens the script using /~username used only +; if nonempty. +; http://php.net/user-dir +user_dir = + +; Directory in which the loadable extensions (modules) reside. +; http://php.net/extension-dir +; extension_dir = "./" +; On windows: +; extension_dir = "ext" + +; Whether or not to enable the dl() function. The dl() function does NOT work +; properly in multithreaded servers, such as IIS or Zeus, and is automatically +; disabled on them. +; http://php.net/enable-dl +enable_dl = Off + +; cgi.force_redirect is necessary to provide security running PHP as a CGI under +; most web servers. Left undefined, PHP turns this on by default. You can +; turn it off here AT YOUR OWN RISK +; **You CAN safely turn this off for IIS, in fact, you MUST.** +; http://php.net/cgi.force-redirect +;cgi.force_redirect = 1 + +; if cgi.nph is enabled it will force cgi to always sent Status: 200 with +; every request. PHP's default behavior is to disable this feature. +;cgi.nph = 1 + +; if cgi.force_redirect is turned on, and you are not running under Apache or Netscape +; (iPlanet) web servers, you MAY need to set an environment variable name that PHP +; will look for to know it is OK to continue execution. Setting this variable MAY +; cause security issues, KNOW WHAT YOU ARE DOING FIRST. +; http://php.net/cgi.redirect-status-env +;cgi.redirect_status_env = ; + +; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's +; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok +; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting +; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting +; of zero causes PHP to behave as before. Default is 1. You should fix your scripts +; to use SCRIPT_FILENAME rather than PATH_TRANSLATED. +; http://php.net/cgi.fix-pathinfo +;cgi.fix_pathinfo=1 + +; FastCGI under IIS (on WINNT based OS) supports the ability to impersonate +; security tokens of the calling client. This allows IIS to define the +; security context that the request runs under. mod_fastcgi under Apache +; does not currently support this feature (03/17/2002) +; Set to 1 if running under IIS. Default is zero. +; http://php.net/fastcgi.impersonate +;fastcgi.impersonate = 1; + +; Disable logging through FastCGI connection. PHP's default behavior is to enable +; this feature. +;fastcgi.logging = 0 + +; cgi.rfc2616_headers configuration option tells PHP what type of headers to +; use when sending HTTP response code. If it's set 0 PHP sends Status: header that +; is supported by Apache. When this option is set to 1 PHP will send +; RFC2616 compliant header. +; Default is zero. +; http://php.net/cgi.rfc2616-headers +;cgi.rfc2616_headers = 0 + +;;;;;;;;;;;;;;;; +; File Uploads ; +;;;;;;;;;;;;;;;; + +; Whether to allow HTTP file uploads. +; http://php.net/file-uploads +file_uploads = On + +; Temporary directory for HTTP uploaded files (will use system default if not +; specified). +; http://php.net/upload-tmp-dir +;upload_tmp_dir = + +; Maximum allowed size for uploaded files. +; http://php.net/upload-max-filesize +upload_max_filesize = 2M + +; Maximum number of files that can be uploaded via a single request +max_file_uploads = 20 + +;;;;;;;;;;;;;;;;;; +; Fopen wrappers ; +;;;;;;;;;;;;;;;;;; + +; Whether to allow the treatment of URLs (like http:// or ftp://) as files. +; http://php.net/allow-url-fopen +allow_url_fopen = On + +; Whether to allow include/require to open URLs (like http:// or ftp://) as files. +; http://php.net/allow-url-include +allow_url_include = Off + +; Define the anonymous ftp password (your email address). PHP's default setting +; for this is empty. +; http://php.net/from +;from="john@doe.com" + +; Define the User-Agent string. PHP's default setting for this is empty. +; http://php.net/user-agent +;user_agent="PHP" + +; Default timeout for socket based streams (seconds) +; http://php.net/default-socket-timeout +default_socket_timeout = 60 + +; If your scripts have to deal with files from Macintosh systems, +; or you are running on a Mac and need to deal with files from +; unix or win32 systems, setting this flag will cause PHP to +; automatically detect the EOL character in those files so that +; fgets() and file() will work regardless of the source of the file. +; http://php.net/auto-detect-line-endings +;auto_detect_line_endings = Off + +;;;;;;;;;;;;;;;;;;;;;; +; Dynamic Extensions ; +;;;;;;;;;;;;;;;;;;;;;; + +; If you wish to have an extension loaded automatically, use the following +; syntax: +; +; extension=modulename.extension +; +; For example, on Windows: +; +; extension=msql.dll +; +; ... or under UNIX: +; +; extension=msql.so +; +; ... or with a path: +; +; extension=/path/to/extension/msql.so +; +; If you only provide the name of the extension, PHP will look for it in its +; default extension directory. +; + +;;;;;;;;;;;;;;;;;;; +; Module Settings ; +;;;;;;;;;;;;;;;;;;; + +[Date] +; Defines the default timezone used by the date functions +; http://php.net/date.timezone +;date.timezone = + +; http://php.net/date.default-latitude +;date.default_latitude = 31.7667 + +; http://php.net/date.default-longitude +;date.default_longitude = 35.2333 + +; http://php.net/date.sunrise-zenith +;date.sunrise_zenith = 90.583333 + +; http://php.net/date.sunset-zenith +;date.sunset_zenith = 90.583333 + +[filter] +; http://php.net/filter.default +;filter.default = unsafe_raw + +; http://php.net/filter.default-flags +;filter.default_flags = + +[iconv] +;iconv.input_encoding = ISO-8859-1 +;iconv.internal_encoding = ISO-8859-1 +;iconv.output_encoding = ISO-8859-1 + +[intl] +;intl.default_locale = +; This directive allows you to produce PHP errors when some error +; happens within intl functions. The value is the level of the error produced. +; Default is 0, which does not produce any errors. +;intl.error_level = E_WARNING + +[sqlite] +; http://php.net/sqlite.assoc-case +;sqlite.assoc_case = 0 + +[sqlite3] +;sqlite3.extension_dir = + +[Pcre] +;PCRE library backtracking limit. +; http://php.net/pcre.backtrack-limit +;pcre.backtrack_limit=100000 + +;PCRE library recursion limit. +;Please note that if you set this value to a high number you may consume all +;the available process stack and eventually crash PHP (due to reaching the +;stack size limit imposed by the Operating System). +; http://php.net/pcre.recursion-limit +;pcre.recursion_limit=100000 + +[Pdo] +; Whether to pool ODBC connections. Can be one of "strict", "relaxed" or "off" +; http://php.net/pdo-odbc.connection-pooling +;pdo_odbc.connection_pooling=strict + +;pdo_odbc.db2_instance_name + +[Pdo_mysql] +; If mysqlnd is used: Number of cache slots for the internal result set cache +; http://php.net/pdo_mysql.cache_size +pdo_mysql.cache_size = 2000 + +; Default socket name for local MySQL connects. If empty, uses the built-in +; MySQL defaults. +; http://php.net/pdo_mysql.default-socket +pdo_mysql.default_socket= + +[Phar] +; http://php.net/phar.readonly +;phar.readonly = On + +; http://php.net/phar.require-hash +;phar.require_hash = On + +;phar.cache_list = + +[Syslog] +; Whether or not to define the various syslog variables (e.g. $LOG_PID, +; $LOG_CRON, etc.). Turning it off is a good idea performance-wise. In +; runtime, you can define these variables by calling define_syslog_variables(). +; http://php.net/define-syslog-variables +define_syslog_variables = Off + +[mail function] +; For Win32 only. +; http://php.net/smtp +SMTP = localhost +; http://php.net/smtp-port +smtp_port = 25 + +; For Win32 only. +; http://php.net/sendmail-from +;sendmail_from = me@example.com + +; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). +; http://php.net/sendmail-path +;sendmail_path = + +; Force the addition of the specified parameters to be passed as extra parameters +; to the sendmail binary. These parameters will always replace the value of +; the 5th parameter to mail(), even in safe mode. +;mail.force_extra_parameters = + +; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename +mail.add_x_header = On + +; Log all mail() calls including the full path of the script, line #, to address and headers +;mail.log = + +[SQL] +; http://php.net/sql.safe-mode +sql.safe_mode = Off + +[ODBC] +; http://php.net/odbc.default-db +;odbc.default_db = Not yet implemented + +; http://php.net/odbc.default-user +;odbc.default_user = Not yet implemented + +; http://php.net/odbc.default-pw +;odbc.default_pw = Not yet implemented + +; Controls the ODBC cursor model. +; Default: SQL_CURSOR_STATIC (default). +;odbc.default_cursortype + +; Allow or prevent persistent links. +; http://php.net/odbc.allow-persistent +odbc.allow_persistent = On + +; Check that a connection is still valid before reuse. +; http://php.net/odbc.check-persistent +odbc.check_persistent = On + +; Maximum number of persistent links. -1 means no limit. +; http://php.net/odbc.max-persistent +odbc.max_persistent = -1 + +; Maximum number of links (persistent + non-persistent). -1 means no limit. +; http://php.net/odbc.max-links +odbc.max_links = -1 + +; Handling of LONG fields. Returns number of bytes to variables. 0 means +; passthru. +; http://php.net/odbc.defaultlrl +odbc.defaultlrl = 4096 + +; Handling of binary data. 0 means passthru, 1 return as is, 2 convert to char. +; See the documentation on odbc_binmode and odbc_longreadlen for an explanation +; of odbc.defaultlrl and odbc.defaultbinmode +; http://php.net/odbc.defaultbinmode +odbc.defaultbinmode = 1 + +;birdstep.max_links = -1 + +[Interbase] +; Allow or prevent persistent links. +ibase.allow_persistent = 1 + +; Maximum number of persistent links. -1 means no limit. +ibase.max_persistent = -1 + +; Maximum number of links (persistent + non-persistent). -1 means no limit. +ibase.max_links = -1 + +; Default database name for ibase_connect(). +;ibase.default_db = + +; Default username for ibase_connect(). +;ibase.default_user = + +; Default password for ibase_connect(). +;ibase.default_password = + +; Default charset for ibase_connect(). +;ibase.default_charset = + +; Default timestamp format. +ibase.timestampformat = "%Y-%m-%d %H:%M:%S" + +; Default date format. +ibase.dateformat = "%Y-%m-%d" + +; Default time format. +ibase.timeformat = "%H:%M:%S" + +[MySQL] +; Allow accessing, from PHP's perspective, local files with LOAD DATA statements +; http://php.net/mysql.allow_local_infile +mysql.allow_local_infile = On + +; Allow or prevent persistent links. +; http://php.net/mysql.allow-persistent +mysql.allow_persistent = On + +; If mysqlnd is used: Number of cache slots for the internal result set cache +; http://php.net/mysql.cache_size +mysql.cache_size = 2000 + +; Maximum number of persistent links. -1 means no limit. +; http://php.net/mysql.max-persistent +mysql.max_persistent = -1 + +; Maximum number of links (persistent + non-persistent). -1 means no limit. +; http://php.net/mysql.max-links +mysql.max_links = -1 + +; Default port number for mysql_connect(). If unset, mysql_connect() will use +; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the +; compile-time value defined MYSQL_PORT (in that order). Win32 will only look +; at MYSQL_PORT. +; http://php.net/mysql.default-port +mysql.default_port = + +; Default socket name for local MySQL connects. If empty, uses the built-in +; MySQL defaults. +; http://php.net/mysql.default-socket +mysql.default_socket = + +; Default host for mysql_connect() (doesn't apply in safe mode). +; http://php.net/mysql.default-host +mysql.default_host = + +; Default user for mysql_connect() (doesn't apply in safe mode). +; http://php.net/mysql.default-user +mysql.default_user = + +; Default password for mysql_connect() (doesn't apply in safe mode). +; Note that this is generally a *bad* idea to store passwords in this file. +; *Any* user with PHP access can run 'echo get_cfg_var("mysql.default_password") +; and reveal this password! And of course, any users with read access to this +; file will be able to reveal the password as well. +; http://php.net/mysql.default-password +mysql.default_password = + +; Maximum time (in seconds) for connect timeout. -1 means no limit +; http://php.net/mysql.connect-timeout +mysql.connect_timeout = 60 + +; Trace mode. When trace_mode is active (=On), warnings for table/index scans and +; SQL-Errors will be displayed. +; http://php.net/mysql.trace-mode +mysql.trace_mode = Off + +[MySQLi] + +; Maximum number of persistent links. -1 means no limit. +; http://php.net/mysqli.max-persistent +mysqli.max_persistent = -1 + +; Allow accessing, from PHP's perspective, local files with LOAD DATA statements +; http://php.net/mysqli.allow_local_infile +;mysqli.allow_local_infile = On + +; Allow or prevent persistent links. +; http://php.net/mysqli.allow-persistent +mysqli.allow_persistent = On + +; Maximum number of links. -1 means no limit. +; http://php.net/mysqli.max-links +mysqli.max_links = -1 + +; If mysqlnd is used: Number of cache slots for the internal result set cache +; http://php.net/mysqli.cache_size +mysqli.cache_size = 2000 + +; Default port number for mysqli_connect(). If unset, mysqli_connect() will use +; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the +; compile-time value defined MYSQL_PORT (in that order). Win32 will only look +; at MYSQL_PORT. +; http://php.net/mysqli.default-port +mysqli.default_port = 3306 + +; Default socket name for local MySQL connects. If empty, uses the built-in +; MySQL defaults. +; http://php.net/mysqli.default-socket +mysqli.default_socket = + +; Default host for mysql_connect() (doesn't apply in safe mode). +; http://php.net/mysqli.default-host +mysqli.default_host = + +; Default user for mysql_connect() (doesn't apply in safe mode). +; http://php.net/mysqli.default-user +mysqli.default_user = + +; Default password for mysqli_connect() (doesn't apply in safe mode). +; Note that this is generally a *bad* idea to store passwords in this file. +; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_pw") +; and reveal this password! And of course, any users with read access to this +; file will be able to reveal the password as well. +; http://php.net/mysqli.default-pw +mysqli.default_pw = + +; Allow or prevent reconnect +mysqli.reconnect = Off + +[mysqlnd] +; Enable / Disable collection of general statstics by mysqlnd which can be +; used to tune and monitor MySQL operations. +; http://php.net/mysqlnd.collect_statistics +mysqlnd.collect_statistics = On + +; Enable / Disable collection of memory usage statstics by mysqlnd which can be +; used to tune and monitor MySQL operations. +; http://php.net/mysqlnd.collect_memory_statistics +mysqlnd.collect_memory_statistics = Off + +; Size of a pre-allocated buffer used when sending commands to MySQL in bytes. +; http://php.net/mysqlnd.net_cmd_buffer_size +;mysqlnd.net_cmd_buffer_size = 2048 + +; Size of a pre-allocated buffer used for reading data sent by the server in +; bytes. +; http://php.net/mysqlnd.net_read_buffer_size +;mysqlnd.net_read_buffer_size = 32768 + +[OCI8] + +; Connection: Enables privileged connections using external +; credentials (OCI_SYSOPER, OCI_SYSDBA) +; http://php.net/oci8.privileged-connect +;oci8.privileged_connect = Off + +; Connection: The maximum number of persistent OCI8 connections per +; process. Using -1 means no limit. +; http://php.net/oci8.max-persistent +;oci8.max_persistent = -1 + +; Connection: The maximum number of seconds a process is allowed to +; maintain an idle persistent connection. Using -1 means idle +; persistent connections will be maintained forever. +; http://php.net/oci8.persistent-timeout +;oci8.persistent_timeout = -1 + +; Connection: The number of seconds that must pass before issuing a +; ping during oci_pconnect() to check the connection validity. When +; set to 0, each oci_pconnect() will cause a ping. Using -1 disables +; pings completely. +; http://php.net/oci8.ping-interval +;oci8.ping_interval = 60 + +; Connection: Set this to a user chosen connection class to be used +; for all pooled server requests with Oracle 11g Database Resident +; Connection Pooling (DRCP). To use DRCP, this value should be set to +; the same string for all web servers running the same application, +; the database pool must be configured, and the connection string must +; specify to use a pooled server. +;oci8.connection_class = + +; High Availability: Using On lets PHP receive Fast Application +; Notification (FAN) events generated when a database node fails. The +; database must also be configured to post FAN events. +;oci8.events = Off + +; Tuning: This option enables statement caching, and specifies how +; many statements to cache. Using 0 disables statement caching. +; http://php.net/oci8.statement-cache-size +;oci8.statement_cache_size = 20 + +; Tuning: Enables statement prefetching and sets the default number of +; rows that will be fetched automatically after statement execution. +; http://php.net/oci8.default-prefetch +;oci8.default_prefetch = 100 + +; Compatibility. Using On means oci_close() will not close +; oci_connect() and oci_new_connect() connections. +; http://php.net/oci8.old-oci-close-semantics +;oci8.old_oci_close_semantics = Off + +[PostgresSQL] +; Allow or prevent persistent links. +; http://php.net/pgsql.allow-persistent +pgsql.allow_persistent = On + +; Detect broken persistent links always with pg_pconnect(). +; Auto reset feature requires a little overheads. +; http://php.net/pgsql.auto-reset-persistent +pgsql.auto_reset_persistent = Off + +; Maximum number of persistent links. -1 means no limit. +; http://php.net/pgsql.max-persistent +pgsql.max_persistent = -1 + +; Maximum number of links (persistent+non persistent). -1 means no limit. +; http://php.net/pgsql.max-links +pgsql.max_links = -1 + +; Ignore PostgreSQL backends Notice message or not. +; Notice message logging require a little overheads. +; http://php.net/pgsql.ignore-notice +pgsql.ignore_notice = 0 + +; Log PostgreSQL backends Noitce message or not. +; Unless pgsql.ignore_notice=0, module cannot log notice message. +; http://php.net/pgsql.log-notice +pgsql.log_notice = 0 + +[Sybase-CT] +; Allow or prevent persistent links. +; http://php.net/sybct.allow-persistent +sybct.allow_persistent = On + +; Maximum number of persistent links. -1 means no limit. +; http://php.net/sybct.max-persistent +sybct.max_persistent = -1 + +; Maximum number of links (persistent + non-persistent). -1 means no limit. +; http://php.net/sybct.max-links +sybct.max_links = -1 + +; Minimum server message severity to display. +; http://php.net/sybct.min-server-severity +sybct.min_server_severity = 10 + +; Minimum client message severity to display. +; http://php.net/sybct.min-client-severity +sybct.min_client_severity = 10 + +; Set per-context timeout +; http://php.net/sybct.timeout +;sybct.timeout= + +;sybct.packet_size + +; The maximum time in seconds to wait for a connection attempt to succeed before returning failure. +; Default: one minute +;sybct.login_timeout= + +; The name of the host you claim to be connecting from, for display by sp_who. +; Default: none +;sybct.hostname= + +; Allows you to define how often deadlocks are to be retried. -1 means "forever". +; Default: 0 +;sybct.deadlock_retry_count= + +[bcmath] +; Number of decimal digits for all bcmath functions. +; http://php.net/bcmath.scale +bcmath.scale = 0 + +[browscap] +; http://php.net/browscap +;browscap = extra/browscap.ini + +[Session] +; Handler used to store/retrieve data. +; http://php.net/session.save-handler +session.save_handler = files + +; Argument passed to save_handler. In the case of files, this is the path +; where data files are stored. Note: Windows users have to change this +; variable in order to use PHP's session functions. +; +; The path can be defined as: +; +; session.save_path = "N;/path" +; +; where N is an integer. Instead of storing all the session files in +; /path, what this will do is use subdirectories N-levels deep, and +; store the session data in those directories. This is useful if you +; or your OS have problems with lots of files in one directory, and is +; a more efficient layout for servers that handle lots of sessions. +; +; NOTE 1: PHP will not create this directory structure automatically. +; You can use the script in the ext/session dir for that purpose. +; NOTE 2: See the section on garbage collection below if you choose to +; use subdirectories for session storage +; +; The file storage module creates files using mode 600 by default. +; You can change that by using +; +; session.save_path = "N;MODE;/path" +; +; where MODE is the octal representation of the mode. Note that this +; does not overwrite the process's umask. +; http://php.net/session.save-path +;session.save_path = "/tmp" + +; Whether to use cookies. +; http://php.net/session.use-cookies +session.use_cookies = 1 + +; http://php.net/session.cookie-secure +;session.cookie_secure = + +; This option forces PHP to fetch and use a cookie for storing and maintaining +; the session id. We encourage this operation as it's very helpful in combatting +; session hijacking when not specifying and managing your own session id. It is +; not the end all be all of session hijacking defense, but it's a good start. +; http://php.net/session.use-only-cookies +session.use_only_cookies = 1 + +; Name of the session (used as cookie name). +; http://php.net/session.name +session.name = PHPSESSID + +; Initialize session on request startup. +; http://php.net/session.auto-start +session.auto_start = 0 + +; Lifetime in seconds of cookie or, if 0, until browser is restarted. +; http://php.net/session.cookie-lifetime +session.cookie_lifetime = 0 + +; The path for which the cookie is valid. +; http://php.net/session.cookie-path +session.cookie_path = / + +; The domain for which the cookie is valid. +; http://php.net/session.cookie-domain +session.cookie_domain = + +; Whether or not to add the httpOnly flag to the cookie, which makes it inaccessible to browser scripting languages such as JavaScript. +; http://php.net/session.cookie-httponly +session.cookie_httponly = + +; Handler used to serialize data. php is the standard serializer of PHP. +; http://php.net/session.serialize-handler +session.serialize_handler = php + +; Defines the probability that the 'garbage collection' process is started +; on every session initialization. The probability is calculated by using +; gc_probability/gc_divisor. Where session.gc_probability is the numerator +; and gc_divisor is the denominator in the equation. Setting this value to 1 +; when the session.gc_divisor value is 100 will give you approximately a 1% chance +; the gc will run on any give request. +; Default Value: 1 +; Development Value: 1 +; Production Value: 1 +; http://php.net/session.gc-probability +session.gc_probability = 1 + +; Defines the probability that the 'garbage collection' process is started on every +; session initialization. The probability is calculated by using the following equation: +; gc_probability/gc_divisor. Where session.gc_probability is the numerator and +; session.gc_divisor is the denominator in the equation. Setting this value to 1 +; when the session.gc_divisor value is 100 will give you approximately a 1% chance +; the gc will run on any give request. Increasing this value to 1000 will give you +; a 0.1% chance the gc will run on any give request. For high volume production servers, +; this is a more efficient approach. +; Default Value: 100 +; Development Value: 1000 +; Production Value: 1000 +; http://php.net/session.gc-divisor +session.gc_divisor = 1000 + +; After this number of seconds, stored data will be seen as 'garbage' and +; cleaned up by the garbage collection process. +; http://php.net/session.gc-maxlifetime +session.gc_maxlifetime = 1440 + +; NOTE: If you are using the subdirectory option for storing session files +; (see session.save_path above), then garbage collection does *not* +; happen automatically. You will need to do your own garbage +; collection through a shell script, cron entry, or some other method. +; For example, the following script would is the equivalent of +; setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes): +; cd /path/to/sessions; find -cmin +24 | xargs rm + +; PHP 4.2 and less have an undocumented feature/bug that allows you to +; to initialize a session variable in the global scope, even when register_globals +; is disabled. PHP 4.3 and later will warn you, if this feature is used. +; You can disable the feature and the warning separately. At this time, +; the warning is only displayed, if bug_compat_42 is enabled. This feature +; introduces some serious security problems if not handled correctly. It's +; recommended that you do not use this feature on production servers. But you +; should enable this on development servers and enable the warning as well. If you +; do not enable the feature on development servers, you won't be warned when it's +; used and debugging errors caused by this can be difficult to track down. +; Default Value: On +; Development Value: On +; Production Value: Off +; http://php.net/session.bug-compat-42 +session.bug_compat_42 = Off + +; This setting controls whether or not you are warned by PHP when initializing a +; session value into the global space. session.bug_compat_42 must be enabled before +; these warnings can be issued by PHP. See the directive above for more information. +; Default Value: On +; Development Value: On +; Production Value: Off +; http://php.net/session.bug-compat-warn +session.bug_compat_warn = Off + +; Check HTTP Referer to invalidate externally stored URLs containing ids. +; HTTP_REFERER has to contain this substring for the session to be +; considered as valid. +; http://php.net/session.referer-check +session.referer_check = + +; How many bytes to read from the file. +; http://php.net/session.entropy-length +session.entropy_length = 0 + +; Specified here to create the session id. +; http://php.net/session.entropy-file +;session.entropy_file = /dev/urandom +session.entropy_file = + +; http://php.net/session.entropy-length +;session.entropy_length = 16 + +; Set to {nocache,private,public,} to determine HTTP caching aspects +; or leave this empty to avoid sending anti-caching headers. +; http://php.net/session.cache-limiter +session.cache_limiter = nocache + +; Document expires after n minutes. +; http://php.net/session.cache-expire +session.cache_expire = 180 + +; trans sid support is disabled by default. +; Use of trans sid may risk your users security. +; Use this option with caution. +; - User may send URL contains active session ID +; to other person via. email/irc/etc. +; - URL that contains active session ID may be stored +; in publically accessible computer. +; - User may access your site with the same session ID +; always using URL stored in browser's history or bookmarks. +; http://php.net/session.use-trans-sid +session.use_trans_sid = 0 + +; Select a hash function for use in generating session ids. +; Possible Values +; 0 (MD5 128 bits) +; 1 (SHA-1 160 bits) +; This option may also be set to the name of any hash function supported by +; the hash extension. A list of available hashes is returned by the hash_alogs() +; function. +; http://php.net/session.hash-function +session.hash_function = 0 + +; Define how many bits are stored in each character when converting +; the binary hash data to something readable. +; Possible values: +; 4 (4 bits: 0-9, a-f) +; 5 (5 bits: 0-9, a-v) +; 6 (6 bits: 0-9, a-z, A-Z, "-", ",") +; Default Value: 4 +; Development Value: 5 +; Production Value: 5 +; http://php.net/session.hash-bits-per-character +session.hash_bits_per_character = 5 + +; The URL rewriter will look for URLs in a defined set of HTML tags. +; form/fieldset are special; if you include them here, the rewriter will +; add a hidden field with the info which is otherwise appended +; to URLs. If you want XHTML conformity, remove the form entry. +; Note that all valid entries require a "=", even if no value follows. +; Default Value: "a=href,area=href,frame=src,form=,fieldset=" +; Development Value: "a=href,area=href,frame=src,input=src,form=fakeentry" +; Production Value: "a=href,area=href,frame=src,input=src,form=fakeentry" +; http://php.net/url-rewriter.tags +url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry" + +[MSSQL] +; Allow or prevent persistent links. +mssql.allow_persistent = On + +; Maximum number of persistent links. -1 means no limit. +mssql.max_persistent = -1 + +; Maximum number of links (persistent+non persistent). -1 means no limit. +mssql.max_links = -1 + +; Minimum error severity to display. +mssql.min_error_severity = 10 + +; Minimum message severity to display. +mssql.min_message_severity = 10 + +; Compatibility mode with old versions of PHP 3.0. +mssql.compatability_mode = Off + +; Connect timeout +;mssql.connect_timeout = 5 + +; Query timeout +;mssql.timeout = 60 + +; Valid range 0 - 2147483647. Default = 4096. +;mssql.textlimit = 4096 + +; Valid range 0 - 2147483647. Default = 4096. +;mssql.textsize = 4096 + +; Limits the number of records in each batch. 0 = all records in one batch. +;mssql.batchsize = 0 + +; Specify how datetime and datetim4 columns are returned +; On => Returns data converted to SQL server settings +; Off => Returns values as YYYY-MM-DD hh:mm:ss +;mssql.datetimeconvert = On + +; Use NT authentication when connecting to the server +mssql.secure_connection = Off + +; Specify max number of processes. -1 = library default +; msdlib defaults to 25 +; FreeTDS defaults to 4096 +;mssql.max_procs = -1 + +; Specify client character set. +; If empty or not set the client charset from freetds.comf is used +; This is only used when compiled with FreeTDS +;mssql.charset = "ISO-8859-1" + +[Assertion] +; Assert(expr); active by default. +; http://php.net/assert.active +;assert.active = On + +; Issue a PHP warning for each failed assertion. +; http://php.net/assert.warning +;assert.warning = On + +; Don't bail out by default. +; http://php.net/assert.bail +;assert.bail = Off + +; User-function to be called if an assertion fails. +; http://php.net/assert.callback +;assert.callback = 0 + +; Eval the expression with current error_reporting(). Set to true if you want +; error_reporting(0) around the eval(). +; http://php.net/assert.quiet-eval +;assert.quiet_eval = 0 + +[COM] +; path to a file containing GUIDs, IIDs or filenames of files with TypeLibs +; http://php.net/com.typelib-file +;com.typelib_file = + +; allow Distributed-COM calls +; http://php.net/com.allow-dcom +;com.allow_dcom = true + +; autoregister constants of a components typlib on com_load() +; http://php.net/com.autoregister-typelib +;com.autoregister_typelib = true + +; register constants casesensitive +; http://php.net/com.autoregister-casesensitive +;com.autoregister_casesensitive = false + +; show warnings on duplicate constant registrations +; http://php.net/com.autoregister-verbose +;com.autoregister_verbose = true + +; The default character set code-page to use when passing strings to and from COM objects. +; Default: system ANSI code page +;com.code_page= + +[mbstring] +; language for internal character representation. +; http://php.net/mbstring.language +;mbstring.language = Japanese + +; internal/script encoding. +; Some encoding cannot work as internal encoding. +; (e.g. SJIS, BIG5, ISO-2022-*) +; http://php.net/mbstring.internal-encoding +;mbstring.internal_encoding = EUC-JP + +; http input encoding. +; http://php.net/mbstring.http-input +;mbstring.http_input = auto + +; http output encoding. mb_output_handler must be +; registered as output buffer to function +; http://php.net/mbstring.http-output +;mbstring.http_output = SJIS + +; enable automatic encoding translation according to +; mbstring.internal_encoding setting. Input chars are +; converted to internal encoding by setting this to On. +; Note: Do _not_ use automatic encoding translation for +; portable libs/applications. +; http://php.net/mbstring.encoding-translation +;mbstring.encoding_translation = Off + +; automatic encoding detection order. +; auto means +; http://php.net/mbstring.detect-order +;mbstring.detect_order = auto + +; substitute_character used when character cannot be converted +; one from another +; http://php.net/mbstring.substitute-character +;mbstring.substitute_character = none; + +; overload(replace) single byte functions by mbstring functions. +; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(), +; etc. Possible values are 0,1,2,4 or combination of them. +; For example, 7 for overload everything. +; 0: No overload +; 1: Overload mail() function +; 2: Overload str*() functions +; 4: Overload ereg*() functions +; http://php.net/mbstring.func-overload +;mbstring.func_overload = 0 + +; enable strict encoding detection. +;mbstring.strict_detection = Off + +; This directive specifies the regex pattern of content types for which mb_output_handler() +; is activated. +; Default: mbstring.http_output_conv_mimetype=^(text/|application/xhtml\+xml) +;mbstring.http_output_conv_mimetype= + +; Allows to set script encoding. Only affects if PHP is compiled with --enable-zend-multibyte +; Default: "" +;mbstring.script_encoding= + +[gd] +; Tell the jpeg decode to ignore warnings and try to create +; a gd image. The warning will then be displayed as notices +; disabled by default +; http://php.net/gd.jpeg-ignore-warning +;gd.jpeg_ignore_warning = 0 + +[exif] +; Exif UNICODE user comments are handled as UCS-2BE/UCS-2LE and JIS as JIS. +; With mbstring support this will automatically be converted into the encoding +; given by corresponding encode setting. When empty mbstring.internal_encoding +; is used. For the decode settings you can distinguish between motorola and +; intel byte order. A decode setting cannot be empty. +; http://php.net/exif.encode-unicode +;exif.encode_unicode = ISO-8859-15 + +; http://php.net/exif.decode-unicode-motorola +;exif.decode_unicode_motorola = UCS-2BE + +; http://php.net/exif.decode-unicode-intel +;exif.decode_unicode_intel = UCS-2LE + +; http://php.net/exif.encode-jis +;exif.encode_jis = + +; http://php.net/exif.decode-jis-motorola +;exif.decode_jis_motorola = JIS + +; http://php.net/exif.decode-jis-intel +;exif.decode_jis_intel = JIS + +[Tidy] +; The path to a default tidy configuration file to use when using tidy +; http://php.net/tidy.default-config +;tidy.default_config = /usr/local/lib/php/default.tcfg + +; Should tidy clean and repair output automatically? +; WARNING: Do not use this option if you are generating non-html content +; such as dynamic images +; http://php.net/tidy.clean-output +tidy.clean_output = Off + +[soap] +; Enables or disables WSDL caching feature. +; http://php.net/soap.wsdl-cache-enabled +soap.wsdl_cache_enabled=1 + +; Sets the directory name where SOAP extension will put cache files. +; http://php.net/soap.wsdl-cache-dir +soap.wsdl_cache_dir="/tmp" + +; (time to live) Sets the number of second while cached file will be used +; instead of original one. +; http://php.net/soap.wsdl-cache-ttl +soap.wsdl_cache_ttl=86400 + +; Sets the size of the cache limit. (Max. number of WSDL files to cache) +soap.wsdl_cache_limit = 5 + +[sysvshm] +; A default size of the shared memory segment +;sysvshm.init_mem = 10000 + +[ldap] +; Sets the maximum number of open links or -1 for unlimited. +ldap.max_links = -1 + +[mcrypt] +; For more information about mcrypt settings see http://php.net/mcrypt-module-open + +; Directory where to load mcrypt algorithms +; Default: Compiled in into libmcrypt (usually /usr/local/lib/libmcrypt) +;mcrypt.algorithms_dir= + +; Directory where to load mcrypt modes +; Default: Compiled in into libmcrypt (usually /usr/local/lib/libmcrypt) +;mcrypt.modes_dir= + +[dba] +;dba.default_handler= + +; Local Variables: +; tab-width: 4 +; End: + +<% @directives.sort_by { |key, val| key }.each do |directive, value| -%> +<%= "#{directive}=\"#{value}\"" %> +<% end -%> diff --git a/vagrant/provision/cookbooks/rbenv/.kitchen.yml b/vagrant/provision/cookbooks/rbenv/.kitchen.yml new file mode 100644 index 0000000..2612319 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/.kitchen.yml @@ -0,0 +1,31 @@ +--- +driver: + name: vagrant + +platforms: +- name: ubuntu-12.04 + run_list: + - recipe[apt] +- name: ubuntu-10.04 + run_list: + - recipe[apt] +- name: centos-6.5 + +suites: +- name: system_ruby + run_list: + - recipe[ruby_build] + - recipe[rbenv::system] + attributes: + rbenv: + plugins: + - name: rbenv-vars + git_url: https://github.com/sstephenson/rbenv-vars.git + rubies: + - name: 2.1.1 + environment: + CONFIGURE_OPTS: --disable-install-rdoc + - name: ree-1.8.7-2012.02 + environment: + CONFIGURE_OPTS: --no-tcmalloc --no-dev-docs + global: 2.1.1 diff --git a/vagrant/provision/cookbooks/rbenv/.rspec b/vagrant/provision/cookbooks/rbenv/.rspec new file mode 100644 index 0000000..ba74614 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/.rspec @@ -0,0 +1,3 @@ +--default_path test/unit +--color +--format documentation diff --git a/vagrant/provision/cookbooks/rbenv/.travis.yml b/vagrant/provision/cookbooks/rbenv/.travis.yml new file mode 100644 index 0000000..2a49a53 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/.travis.yml @@ -0,0 +1,4 @@ +language: ruby +rvm: + - 2.1 +bundler_args: --without integration diff --git a/vagrant/provision/cookbooks/rbenv/Berksfile b/vagrant/provision/cookbooks/rbenv/Berksfile new file mode 100644 index 0000000..528a080 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/Berksfile @@ -0,0 +1,11 @@ +source 'http://api.berkshelf.com' + +metadata + +group :integration do + cookbook 'apt' + cookbook 'yum' + cookbook 'ruby_build' +end + +cookbook 'fixtures', path: 'test/unit/fixtures' diff --git a/vagrant/provision/cookbooks/rbenv/CHANGELOG.md b/vagrant/provision/cookbooks/rbenv/CHANGELOG.md new file mode 100644 index 0000000..a98339b --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/CHANGELOG.md @@ -0,0 +1,119 @@ +## 0.7.1 (unreleased) + + +## 0.7.2 (December 31, 2012) + +### Bug Fixes + +* Pull request [#26](https://github.com/fnichol/chef-rbenv/pull/26): Don't + call libexec commands directly. ([@mhoran][]) + +### Improvements + +* Add integration tests for a system Ruby version. ([@fnichol][]) + + +## 0.7.0 (November 21, 2012) + +### Bug Fixes + +* Issue [#14](https://github.com/fnichol/chef-rbenv/pull/14): Create + /etc/profile.d on system-wide and add note for Mac. ([@fnichol][]) + +### New features + +* Pull request [#20](https://github.com/fnichol/chef-rbenv/pull/20): Set an + attribute to create profile.d for user install. ([@jtimberman][]) + +### Improvements + +* Pull request [#12](https://github.com/fnichol/chef-rbenv/pull/12): Add name + attribute to metadata. ([@jtimberman][]) +* Update foodcritic configuration and update .travis.yml. ([@fnichol][]) +* Update Installation section of README (welcome Berkshelf). ([@fnichol][]) + + +## 0.6.10 (May 18, 2012) + +### New features + +* Pull request [#11](https://github.com/fnichol/chef-rbenv/pull/11): Add + FreeBSD support. ([@jssjr][]) + +### Improvements + +* Add other platform supports in metadata.rb and README. ([@fnichol][]) + + +## 0.6.8 (May 6, 2012) + +### Improvements + +* Add official hook resource log[rbenv-post-init-\*] for inter-cookbook + integration. ([@fnichol][]) + + +## 0.6.6 (May 4, 2012) + +### Bug Fixes + +* Fix FC022: Resource condition within loop may not behave as expected. + ([@fnichol][]) +* Add plaform equivalents in default attrs (FC024). ([@fnichol][]) +* Ensure update-java-alternatives is called before JRuby is built. + ([@fnichol][]) +* Pull request [#8](https://github.com/fnichol/chef-rbenv/pull/8): Add + /etc/profile.d/rbenv.sh support for user installs. ([@thoughtless][]) + +### Improvements + +* Add TravisCI to run Foodcritic linter. ([@fnichol][]) +* Pull request [#10](https://github.com/fnichol/chef-rbenv/pull/10): README + proofreading. ([@jdsiegel][]) +* README updates. ([@fnichol][]) +* Confirm debian platform support. ([@fnichol][]) + + +## 0.6.4 (February 23, 2012) + +### Bug Fixes + +* Set `root_path` on rbenv\_rehash in rbenv\_gem provider. ([@fnichol][]) + +### Improvements + +* Foodcritic lint-driven code updates. ([@fnichol][]) +* Update Git URL in README. ([@hedgehog][]) + + +## 0.6.2 (February 22, 2012) + +### Bug Fixes + +* Issues [#1](https://github.com/fnichol/chef-rbenv/issues/1), + [#2](https://github.com/fnichol/chef-rbenv/issues/2): Stub mixins in + RbenvRubygems to avoid libraries load ordering issues. ([@fnichol][]) +* Pull request [#5](https://github.com/fnichol/chef-rbenv/pull/5): Include + user setting in rehash calls. ([@magnetised][]) +* Issue [#4](https://github.com/fnichol/chef-rbenv/issues/4): Fix rbenv/gems + hash parsing. ([@fnichol][]) + +### Improvements + +* Large formatting updates to README. ([@fnichol][]) +* Add gh-pages branch for sectioned README at + https://fnichol.github.com/chef-rbenv + + +## 0.6.0 (December 21, 2011) + +The initial release. + +[@fnichol]: https://github.com/fnichol +[@jdsiegel]: https://github.com/jdsiegel +[@jssjr]: https://github.com/jssjr +[@jtimberman]: https://github.com/jtimberman +[@hedgehog]: https://github.com/hedgehog +[@magnetised]: https://github.com/magnetised +[@mhoran]: https://github.com/mhoran +[@thoughtless]: https://github.com/thoughtless diff --git a/vagrant/provision/cookbooks/rbenv/Gemfile b/vagrant/provision/cookbooks/rbenv/Gemfile new file mode 100644 index 0000000..f5768d9 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/Gemfile @@ -0,0 +1,16 @@ +source "https://rubygems.org" + +gem "berkshelf", "~> 3.0.0.beta7" +gem "chefspec" +gem "emeril" +gem "foodcritic", "~> 3.0" +gem "rake" + +group :development do + gem "guard-rspec" +end + +group :integration do + gem "test-kitchen" + gem "kitchen-vagrant" +end diff --git a/vagrant/provision/cookbooks/rbenv/Guardfile b/vagrant/provision/cookbooks/rbenv/Guardfile new file mode 100644 index 0000000..538316c --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/Guardfile @@ -0,0 +1,5 @@ +guard :rspec, spec_paths: ["test/unit"] do + watch(%r{^test/unit/.+_spec\.rb$}) + watch(%r{^(libraries|providers|recipes|resources)/(.+)\.rb$}) { |m| "test/unit/#{m[1]}/#{m[2]}_spec.rb" } + watch("test/unit/spec_helper.rb") { "test/unit" } +end diff --git a/vagrant/provision/cookbooks/rbenv/README.md b/vagrant/provision/cookbooks/rbenv/README.md new file mode 100644 index 0000000..a4a0ff1 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/README.md @@ -0,0 +1,1094 @@ +# rbenv Chef Cookbook + +[![Build Status](https://secure.travis-ci.org/fnichol/chef-rbenv.png?branch=master)](http://travis-ci.org/fnichol/chef-rbenv) + +## Description + +Manages [rbenv][rbenv_site] and its installed Rubies. +Several lightweight resources and providers ([LWRPs][lwrp]) are also defined. + +## Usage + +### rbenv Installed System-Wide with Rubies + +Most likely, this is the typical case. Include `recipe[rbenv::system]` in your +run\_list and override the defaults you want changed. See [below](#attributes) +for more details. + +If your platform is the Mac, you may need to modify your +[profile](#mac-system-note). + +### rbenv Installed For A Specific User with Rubies + +If you want a per-user install (like on a Mac/Linux workstation for +development, CI, etc.), include `recipe[rbenv::user]` in your run\_list and +add a user hash to the `user_installs` attribute list. For example: + + node.default['rbenv']['user_installs'] = [ + { 'user' => 'tflowers', + 'rubies' => ['1.9.3-p0', 'jruby-1.6.5'], + 'global' => '1.9.3-p0', + 'gems' => { + '1.9.3-p0' => [ + { 'name' => 'bundler', + 'version' => '1.1.rc.5' + }, + { 'name' => 'rake' } + ], + 'jruby-1.6.5' => [ + { 'name' => 'rest-client' } + ] + } + } + ] + +See [below](#attributes) for more details. + +### rbenv Installed System-Wide and LWRPs Defined + +If you want to manage your own rbenv environment with the provided +LWRPs, then include `recipe[rbenv::system_install]` in your run\_list +to prevent a default rbenv Ruby being installed. See the +[Resources and Providers](#lwrps) section for more details. + +If your platform is the Mac, you may need to modify your +[profile](#mac-system-note). + +### rbenv Installed For A Specific User and LWRPs Defined + +If you want to manage your own rbenv environment for users with the provided +LWRPs, then include `recipe[rbenv::user_install]` in your run\_list and add a +user hash to the `user_installs` attribute list. For example: + + node.default['rbenv']['user_installs'] = [ + { 'user' => 'tflowers' } + ] + +See the [Resources and Providers](#lwrps) section for more details. + +### Ultra-Minimal Access To LWRPs + +Simply include `recipe[rbenv]` in your run\_list and the LWRPs will be +available to use in other cookbooks. See the [Resources and Providers](#lwrps) +section for more details. + +### Other Use Cases + +* If node is running in a Vagrant VM, then including `recipe[rbenv::vagrant]` +in your run\_list can help with resolving the *chef-solo* binary on subsequent + +## Requirements + +### Chef + +Tested on 11.4.4 but newer and older version should work just +fine. File an [issue][issues] if this isn't the case. + +### Platform + +The following platforms have been tested with this cookbook, meaning that +the recipes and LWRPs run on these platforms without error: + +* ubuntu (10.04/12.04) +* debian (6.0) +* freebsd +* redhat +* centos +* fedora +* amazon +* scientific +* suse +* mac\_os\_x +* gentoo + +Please [report][issues] any additional platforms so they can be added. + +### Cookbooks + +There are **no** external cookbook dependencies. However, if you +want to manage Ruby installations or use the `rbenv_ruby` LWRP then you will +need to include the [ruby\_build cookbook][ruby_build_cb]. + +## Installation + +Depending on the situation and use case there are several ways to install +this cookbook. All the methods listed below assume a tagged version release +is the target, but omit the tags to get the head of development. A valid +Chef repository structure like the [Opscode repo][chef_repo] is also assumed. + +### Using Berkshelf + +[Berkshelf][berkshelf] is a cookbook dependency manager and development +workflow assistant. To install Berkshelf: + + cd chef-repo + gem install berkshelf + berks init + +To reference the Git version: + + repo="fnichol/chef-rbenv" + latest_release=$(curl -s https://api.github.com/repos/$repo/git/refs/tags \ + | ruby -rjson -e ' + j = JSON.parse(STDIN.read); + puts j.map { |t| t["ref"].split("/").last }.sort.last + ') + cat >> Berksfile < 'git://github.com/$repo.git', :branch => '$latest_release' + END_OF_BERKSFILE + berks install + +### Using Librarian-Chef + +[Librarian-Chef][librarian] is a bundler for your Chef cookbooks. +To install Librarian-Chef: + + cd chef-repo + gem install librarian + librarian-chef init + +To reference the Git version: + + repo="fnichol/chef-rbenv" + latest_release=$(curl -s https://api.github.com/repos/$repo/git/refs/tags \ + | ruby -rjson -e ' + j = JSON.parse(STDIN.read); + puts j.map { |t| t["ref"].split("/").last }.sort.last + ') + cat >> Cheffile < 'git://github.com/$repo.git', :ref => '$latest_release' + END_OF_CHEFFILE + librarian-chef install + +### From the Community Site + +This cookbook is not currently available on the site due to the flat +namespace for cookbooks. + +## Recipes + +### default + +Installs the rbenv gem and initializes Chef to use the Lightweight Resources +and Providers ([LWRPs][lwrp]). + +Use this recipe explicitly if you only want access to the LWRPs provided. + +### system_install + +Installs the rbenv codebase system-wide (that is, into `/usr/local/rbenv`). This +recipe includes *default*. + +Use this recipe by itself if you want rbenv installed system-wide but want +to handle installing Rubies, invoking LWRPs, etc.. + +### system + +Installs the rbenv codebase system-wide (that is, into `/usr/local/rbenv`) and +installs rubies driven off attribute metadata. This recipe includes *default* +and *system_install*. + +Use this recipe by itself if you want rbenv installed system-wide with rubies +installed. + +### user_install + +Installs the rbenv codebase for a list of users (selected from the +`node['rbenv']['user_installs']` hash). This recipe includes *default*. + +Use this recipe by itself if you want rbenv installed for specific users in +isolation but want each user to handle installing Rubies, invoking LWRPs, etc. + +### user + +Installs the rbenv codebase for a list of users (selected from the +`node['rbenv']['user_installs']` hash) and installs rubies driven off attribte +metadata. This recipe includes *default* and *user_install*. + +Use this recipe by itself if you want rbenv installed for specific users in +isolation with rubies installed. + +### vagrant + +An optional recipe if Chef is installed in a non-rbenv Ruby in a +[Vagrant][vagrant] virtual machine. This recipe installs a `chef-solo` +wrapper script so Chef doesn't need to be re-installed in the global rbenv Ruby. + +## Attributes + +### git_url + +The Git URL which is used to install rbenv. + +The default is `"git://github.com/sstephenson/rbenv.git"`. + +### git_ref + +A specific Git branch/tag/reference to use when installing rbenv. For +example, to pin rbenv to a specific release: + + node.default['ruby_build']['git_ref'] = "v0.2.1" + +The default is `"v0.4.0"`. + +### upgrade + +Determines how to handle installing updates to the rbenv. There are currently +2 valid values: + +* `"none"`, `false`, or `nil`: will not update rbenv and leave it in its + current state. +* `"sync"` or `true`: updates rbenv to the version specified by the + `git_ref` attribute or the head of the master branch by default. + +The default is `"none"`. + +### root_path + +The path prefix to rbenv in a system-wide installation. + +The default is `"/usr/local/rbenv"`. + +### rubies + +A list of additional system-wide rubies to be built and installed using the +[ruby\_build cookbook][ruby_build_cb]. You **must** include `recipe[ruby_build]` +in your run\_list for the `rbenv_ruby` LWRP to work properly. For example: + + node.default['rbenv']['rubies'] = [ "1.9.3-p0", "jruby-1.6.5" ] + +The default is an empty array: `[]`. + +Additional environment variables can be passed to ruby_build via the environment variable. +For example: + + node.default['rbenv']['rubies'] = [ "1.9.3-p0", "jruby-1.6.5", + { + :name => '1.9.3-327', + :environment => { 'CFLAGS' => '-march=native -O2 -pipe' } + } + ] + +### user_rubies + +A list of additional system-wide rubies to be built and installed (using the +[ruby\_build cookbook][ruby_build_cb]) per-user when not explicitly set. +For example: + + node.default['rbenv']['user_rubies'] = [ "1.8.7-p352" ] + +The default is an empty array: `[]`. + +Additional environment variables can be passed to ruby_build via the environment variable. +For example: + + node.default['rbenv']['user_rubies'] = [ "1.8.7-p352", + { + :name => '1.9.3-327', + :environment => { 'CFLAGS' => '-march=native -O2 -pipe' } + } + ] +### gems + +A hash of gems to be installed into arbitrary rbenv-managed rubies system wide. +See the [rbenv_gem](#lwrps-rbgem) resource for more details about the options +for each gem hash and target Ruby environment. For example: + + node.default['rbenv']['gems'] = { + '1.9.3-p0' => [ + { 'name' => 'vagrant' }, + { 'name' => 'bundler' + 'version' => '1.1.rc.5' + } + ], + '1.8.7-p352' => [ + { 'name' => 'nokogiri' } + ] + } + +The default is an empty hash: `{}`. + +### user_gems + +A hash of gems to be installed into arbitrary rbenv-managed rubies for each user +when not explicitly set. See the [rbenv_gem](#lwrps-rbgem) resource for more +details about the options for each gem hash and target Ruby environment. See +the [gems attribute](#attributes-gems) for an example. + +The default is an empty hash: `{}`. + +### plugins + +A list of plugins to be installed system-wide. See the [rbenv_plugin](#lwrps-plugin) +resource for details about the options. + + node.default['rbenv']['plugins'] = [ + { 'name' => 'rbenv-vars', + 'git_url' => 'https://github.com/sstephenson/rbenv-vars.git' }, + { 'name' => 'rbenv-gem-rehash', + 'git_url' => 'https://github.com/sstephenson/rbenv-gem-rehash.git', + 'git_ref' => '4d7b92de4' } + ] + +The default is an empty array: `[]`. + +### user_plugins + +As with user_gems, a list of plugins to be installed for each user when not explicitly set. + +The default is an empty array: `[]`. + +### vagrant/system_chef_solo + +If using the `vagrant` recipe, this sets the path to the package-installed +*chef-solo* binary. + +The default is `"/opt/ruby/bin/chef-solo"`. + +### create_profiled + +The user's shell needs to know about rbenv's location and set up the +PATH environment variable. This is handled in the +[system_install](#recipes-system_install) and +[user_install](#recipes-user_install) recipes by dropping off +`/etc/profile.d/rbenv.sh`. However, this requires root privilege, +which means that a user cannot use a "user install" for only their +user. + +Set this attribute to `false` to skip creation of the +`/etc/profile.d/rbenv.sh` template. For example: + + node.default['rbenv']['create_profiled'] = false + +The default is `true`. + +## Resources and Providers + +### rbenv_global + +This resource sets the global version of Ruby to be used in all shells, as per +the [rbenv global docs][rbenv_3_1]. + +#### Actions + + + + + + + + + + + + + + + + +
ActionDescriptionDefault
create + Sets the global version of Ruby to be used in all shells. See 3.1 + rbenv global(1) for more details. + Yes
+ +1. [3.1 rbenv global][rbenv_3_1] + +#### Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescriptionDefault Value
rbenv_version + Name attribute: a version of Ruby being managed by rbenv. + Note: the version of Ruby must already be installed--this LWRP + will not install it automatically. + nil
user + A users's isolated rbenv installation on which to apply an action. The + default value of nil denotes a system-wide rbenv + installation is being targeted. Note: if specified, the user + must already exist. + nil
root_path + The path prefix to rbenv installation, for example: + /opt/rbenv. + nil
+ +#### Examples + +##### Set A Ruby As Global + + rbenv_global "1.8.7-p352" + +##### Set System Ruby As Global + + rbenv_global "system" + +##### Set A Ruby As Global For A User + + rbenv_global "jruby-1.7.0-dev" do + user "tflowers" + end + +### rbenv_script + +This resource is a wrapper for the `script` resource which wraps the code block +in an rbenv-aware environment. See the Opscode +[script resource][script_resource] page and the [rbenv shell][rbenv_3_3] +documentation for more details. + +#### Actions + + + + + + + + + + + + + + + + + + + + + +
ActionDescriptionDefault
runRun the scriptYes
nothingDo not run this command 
+ +Use `action :nothing` to set a command to only run if another resource +notifies it. + +#### Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescriptionDefault Value
name + Name attribute: Name of the command to execute. + name
rbenv_version + A version of Ruby being managed by rbenv. + nil
root_path + The path prefix to rbenv installation, for example: + /opt/rbenv. + nil
code + Quoted script of code to execute. + nil
creates + A file this command creates - if the file exists, the command will not + be run. + nil
cwd + Current working director to run the command from. + nil
environment + A has of environment variables to set before running this command. + nil
group + A group or group ID that we should change to before running this + command. + nil
path + An array of paths to use when searching for the command. + nil, uses system path
returns + The return value of the command (may be an array of accepted values) - + this resource raises an exception if the return value(s) do not match. + 0
timeout + How many seconds to let the command run before timing out. + nil
user + A users's isolated rbenv installation on which to apply an action. The + default value of nil denotes a system-wide rbenv + installation is being targeted. Note: if specified, the user + must already exist. + nil
umask + Umask for files created by the command. + nil
+ +#### Examples + +##### Run A Rake Task + + rbenv_script "migrate_rails_database" do + rbenv_version "1.8.7-p352" + user "deploy" + group "deploy" + cwd "/srv/webapp/current" + code %{rake RAILS_ENV=production db:migrate} + end + +### rbenv_gem + +This resource is a close analog of the `gem_package` resource/provider which +is rbenv-aware. See the Opscode [package resource][package_resource] and +[gem package options][gem_package_options] pages for more details. + +#### Actions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ActionDescriptionDefault
install + Install a gem - if version is provided, install that specific version. + Yes
+ + Upgrade a gem - if version is provided, upgrade to that specific + version. +  
remove + Remove a gem. +  
purge + Purge a gem. +  
+ +#### Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescriptionDefault Value
package_name + Name attribute: the name of the gem to install. + nil
rbenv_version + A version of Ruby being managed by rbenv. + "global"
root_path + The path prefix to rbenv installation, for example: + /opt/rbenv. + nil
version + The specific version of the gem to install/upgrade. + nil
options + Add additional options to the underlying gem command. + nil
source + Provide an additional source for gem providers (such as RubyGems). + This can also include a file system path to a .gem file + such as /tmp/json-1.5.1.gem. + nil
user + A users's isolated rbenv installation on which to apply an action. The + default value of nil denotes a system-wide rbenv + installation is being targeted. Note: if specified, the user + must already exist. + nil
+ +#### Examples + +##### Install A Gem + + rbenv_gem "thor" do + rbenv_version "1.8.7-p352" + action :install + end + + rbenv_gem "json" do + rbenv_version "1.8.7-p330" + end + + rbenv_gem "nokogiri" do + rbenv_version "jruby-1.5.6" + version "1.5.0.beta.4" + action :install + end + +**Note:** the install action is default, so the second example is a more common +usage. + +##### Install A Gem From A Local File + + rbenv_gem "json" do + rbenv_version "ree-1.8.7-2011.03" + source "/tmp/json-1.5.1.gem" + version "1.5.1" + end + +##### Keep A Gem Up To Date + + rbenv_gem "homesick" do + action :upgrade + end + +**Note:** the global rbenv Ruby will be targeted if no `rbenv_version` attribute +is given. + +##### Remove A Gem + + rbenv_gem "nokogiri" do + rbenv_version "jruby-1.5.6" + version "1.4.4.2" + action :remove + end + +### rbenv_plugin + +Installs rbenv plugins. + +#### Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescriptionDefault Value
name + Name attribute: the name of the plugin to install. + nil
root_path + The path prefix to rbenv installation, for example: + /opt/rbenv. + nil
git_url + The git URL of the plugin repository to clone. + nil
git_ref + The git revision (branch name or SHA) of the repository to checkout. + 'master'
user + A users's isolated rbenv installation on which to apply an action. The + default value of nil denotes a system-wide rbenv + installation is being targeted. Note: if specified, the user + must already exist. + nil
+ +##### Install a plugin + + rbenv_plugin 'rbenv-vars' do + git_url 'https://github.com/sstephenson/rbenv-vars.git' + user 'deploy' + end + +### rbenv_rehash + +This resource installs shims for all Ruby binaries known to rbenv, as per +the [rbenv rehash docs][rbenv_3_6]. + +#### Actions + + + + + + + + + + + + + + + + + + + + + +
ActionDescriptionDefault
runRun the scriptYes
nothingDo not run this command 
+ +Use `action :nothing` to set a command to only run if another resource +notifies it. + +#### Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescriptionDefault Value
name + Name attribute: Name of the command to execute. + name
user + A users's isolated rbenv installation on which to apply an action. The + default value of nil denotes a system-wide rbenv + installation is being targeted. Note: if specified, the user + must already exist. + nil
root_path + The path prefix to rbenv installation, for example: + /opt/rbenv. + nil
+ +#### Examples + +##### Rehash A System-Wide rbenv + + rbenv_rehash "Doing the rehash dance" + +##### Rehash A User's rbenv + + rbenv_rehash "Rehashing tflowers' rbenv" do + user "tflowers" + end + +### rbenv_ruby + +This resource uses the [ruby-build][ruby_build_site] framework to build and install +Ruby versions from definition files. + +**Note:** this LWRP requires the [ruby\_build cookbook][ruby_build_cb] to be +in the run list to perform the builds. + +#### Actions + + + + + + + + + + + + + + + + + + + + + +
ActionDescriptionDefault
install + Build and install a Ruby from a definition file. See the ruby-build + readme(1) for more details. + Yes
reinstall + Force a recompiliation of the Ruby from source. The :install action + will skip a build if the target install directory already exists. +  
+ +1. [ruby-build readme][rb_readme] + +#### Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescriptionDefault Value
definition + Name attribute: the name of a built-in definition(1) + or the name of the ruby installed by a ruby-build defintion file(2) + nil
definition_file + The path to a ruby-build definition file. + nil
user + A users's isolated rbenv installation on which to apply an action. The + default value of nil denotes a system-wide rbenv + installation is being targeted. Note: if specified, the user + must already exist. + nil
root_path + The path prefix to rbenv installation, for example: + /opt/rbenv. + nil
+ +1. [built-in definition][rb_definitions] +2. the recipe checks for the existence of the naming attribute under the root_path, and if not found invokes ruby-build with the definition file as an argument + +#### Examples + +##### Install Ruby From ruby-build + + rbenv_ruby "ree-1.8.7-2011.03" do + action :install + end + + rbenv_ruby "jruby-1.6.5" + +**Note:** the install action is default, so the second example is a more common +usage. + +##### Reinstall Ruby + + rbenv_ruby "ree-1.8.7-2011.03" do + action :reinstall + end + +##### Install a custom ruby + + rbenv_ruby "2.0.0p116" do + definition_file "/usr/local/rbenv/custom/2.0.0p116" + end + +## System-Wide Mac Installation Note + +This cookbook takes advantage of managing profile fragments in an +`/etc/profile.d` directory, common on most Unix-flavored platforms. +Unfortunately, Mac OS X does not support this idiom out of the box, +so you may need to [modify][mac_profile_d] your user profile. + +## Development + +* Source hosted at [GitHub][repo] +* Report issues/Questions/Feature requests on [GitHub Issues][issues] + +Pull requests are very welcome! Make sure your patches are well tested. +Ideally create a topic branch for every separate change you make. + +## License and Author + +Author:: [Fletcher Nichol][fnichol] () [![endorse](http://api.coderwall.com/fnichol/endorsecount.png)](http://coderwall.com/fnichol) + +Copyright 2011, Fletcher Nichol + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +[berkshelf]: http://berkshelf.com/ +[chef_repo]: https://github.com/opscode/chef-repo +[cheffile]: https://github.com/applicationsonline/librarian/blob/master/lib/librarian/chef/templates/Cheffile +[gem_package_options]: http://docs.opscode.com/resource_gem_package.html#attributes +[kgc]: https://github.com/websterclay/knife-github-cookbooks#readme +[librarian]: https://github.com/applicationsonline/librarian#readme +[lwrp]: http://docs.opscode.com/lwrp_custom.html +[mac_profile_d]: http://hints.macworld.com/article.php?story=20011221192012445 +[package_resource]: http://docs.opscode.com/resource_package.html +[rb_readme]: https://github.com/sstephenson/ruby-build#readme +[rb_definitions]: https://github.com/sstephenson/ruby-build/tree/master/share/ruby-build +[rbenv_site]: https://github.com/sstephenson/rbenv +[rbenv_3_1]: https://github.com/sstephenson/rbenv#section_3.1 +[rbenv_3_3]: https://github.com/sstephenson/rbenv#section_3.3 +[rbenv_3_6]: https://github.com/sstephenson/rbenv#section_3.6 +[ruby_build_cb]: http://community.opscode.com/cookbooks/ruby_build +[ruby_build_site]: https://github.com/sstephenson/ruby-build +[script_resource]: http://docs.opscode.com/resource_script.html + +[fnichol]: https://github.com/fnichol +[repo]: https://github.com/fnichol/chef-rbenv +[issues]: https://github.com/fnichol/chef-rbenv/issues diff --git a/vagrant/provision/cookbooks/rbenv/Rakefile b/vagrant/provision/cookbooks/rbenv/Rakefile new file mode 100644 index 0000000..11a8d0b --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/Rakefile @@ -0,0 +1,26 @@ +#!/usr/bin/env rake + +begin + require 'emeril/rake' +rescue LoadError + puts ">>>>> Emeril gem not loaded, omitting tasks" unless ENV['CI'] +end + +require 'rspec/core/rake_task' +RSpec::Core::RakeTask.new(:unit) do |t| + t.pattern = ["test/unit/**/*_spec.rb"] +end + +require 'foodcritic' +FoodCritic::Rake::LintTask.new do |t| + t.options = { :fail_tags => ['any', '~FC017'] } +end + +begin + require 'kitchen/rake_tasks' + Kitchen::RakeTasks.new +rescue LoadError + puts ">>>>> Kitchen gem not loaded, omitting tasks" unless ENV['CI'] +end + +task :default => [:foodcritic, :unit] diff --git a/vagrant/provision/cookbooks/rbenv/attributes/default.rb b/vagrant/provision/cookbooks/rbenv/attributes/default.rb new file mode 100644 index 0000000..81c8a5e --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/attributes/default.rb @@ -0,0 +1,67 @@ +# +# Cookbook Name:: rbenv +# Attributes:: default +# +# Author:: Fletcher Nichol +# +# Copyright 2011, Fletcher Nichol +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# git repository containing rbenv +default['rbenv']['git_url'] = "https://github.com/sstephenson/rbenv.git" +default['rbenv']['git_ref'] = "v0.4.0" + +# upgrade action strategy +default['rbenv']['upgrade'] = "none" + +# extra system-wide tunables +default['rbenv']['root_path'] = "/usr/local/rbenv" +default['rbenv']['vagrant']['system_chef_solo'] = "/opt/ruby/bin/chef-solo" + +# a list of user hashes, each an isolated per-user rbenv installation +default['rbenv']['user_installs'] = [] + +# list of additional rubies that will be installed +default['rbenv']['rubies'] = [] +default['rbenv']['user_rubies'] = [] + +# hash of rubies and their list of additional gems to be installed. +default['rbenv']['gems'] = Hash.new +default['rbenv']['user_gems'] = Hash.new + +# list of rbenv plugins to install +default['rbenv']['plugins'] = [] +default['rbenv']['user_plugins'] = [] + +# whether to create profile.d shell script +default['rbenv']['create_profiled'] = true + +case platform +when "redhat","centos","fedora", "amazon", "scientific" + node.set['rbenv']['install_pkgs'] = %w{git grep} + default['rbenv']['user_home_root'] = '/home' +when "debian","ubuntu","suse" + node.set['rbenv']['install_pkgs'] = %w{git-core grep} + default['rbenv']['user_home_root'] = '/home' +when "mac_os_x" + node.set['rbenv']['install_pkgs'] = %w{git} + default['rbenv']['user_home_root'] = '/Users' +when "freebsd" + node.set['rbenv']['install_pkgs'] = %w{git} + default['rbenv']['user_home_root'] = '/usr/home' +when "gentoo" + node.set['rbenv']['install_pkgs'] = %w{git} + default['rbenv']['user_home_root'] = '/home' +end diff --git a/vagrant/provision/cookbooks/rbenv/libraries/chef_provider_package_rbenvrubygems.rb b/vagrant/provision/cookbooks/rbenv/libraries/chef_provider_package_rbenvrubygems.rb new file mode 100644 index 0000000..c69f447 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/libraries/chef_provider_package_rbenvrubygems.rb @@ -0,0 +1,95 @@ +# +# Cookbook Name:: rbenv +# Provider:: Chef::Provider::Package::RbenvRubygems +# +# Author:: Fletcher Nichol +# +# Copyright 2011, Fletcher Nichol +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +class Chef + module Rbenv + module Mixin + module ShellOut + # stub to satisfy RbenvRubygems (library load order not guarenteed) + end + end + + module ScriptHelpers + # stub to satisfy RbenvRubygems (library load order not guarenteed) + end + end + + class Provider + class Package + class RbenvRubygems < Chef::Provider::Package::Rubygems + + class RbenvGemEnvironment < AlternateGemEnvironment + attr_reader :rbenv_version, :rbenv_user + + include Chef::Rbenv::Mixin::ShellOut + + def initialize(gem_binary_location, rbenv_version, rbenv_user = nil) + super(gem_binary_location) + @rbenv_version = rbenv_version + @rbenv_user = rbenv_user + end + end + + attr_reader :rbenv_user + + include Chef::Rbenv::Mixin::ShellOut + include Chef::Rbenv::ScriptHelpers + + def initialize(new_resource, run_context=nil) + super + normalize_version + @new_resource.gem_binary(wrap_shim_cmd("gem")) + @rbenv_user = new_resource.respond_to?("user") ? new_resource.user : nil + @gem_env = RbenvGemEnvironment.new( + gem_binary_path, new_resource.rbenv_version, rbenv_user) + end + + def install_package(name, version) + super + rehash + true + end + + def remove_package(name, version) + super + rehash + true + end + + private + + def normalize_version + if @new_resource.rbenv_version == "global" + @new_resource.rbenv_version(current_global_version) + end + end + + def rehash + rbenv_rehash new_resource do + root_path rbenv_root + user rbenv_user if rbenv_user + action :nothing + end.run_action(:run) + end + end + end + end +end diff --git a/vagrant/provision/cookbooks/rbenv/libraries/chef_rbenv_mixin.rb b/vagrant/provision/cookbooks/rbenv/libraries/chef_rbenv_mixin.rb new file mode 100644 index 0000000..eee20ea --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/libraries/chef_rbenv_mixin.rb @@ -0,0 +1,49 @@ +# +# Cookbook Name:: rbenv +# Library:: Chef::Rbenv::Mixin +# +# Author:: Fletcher Nichol +# +# Copyright 2011, Fletcher Nichol +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +class Chef + module Rbenv + module Mixin + module ShellOut + def shell_out!(*command_args) + options = command_args.last.is_a?(Hash) ? command_args.pop : Hash.new + options[:env] = shell_environment.merge(options[:env] || Hash.new) + + super(*command_args.push(options)) + end + + def shell_environment + if rbenv_user + { 'USER' => rbenv_user, 'HOME' => Etc.getpwnam(rbenv_user).dir } + else + {} + end + end + end + + module ResourceString + def to_s + "#{@resource_name}[#{@rbenv_version || 'global'}::#{@name}] (#{@user || 'system'})" + end + end + end + end +end diff --git a/vagrant/provision/cookbooks/rbenv/libraries/chef_rbenv_recipe_helpers.rb b/vagrant/provision/cookbooks/rbenv/libraries/chef_rbenv_recipe_helpers.rb new file mode 100644 index 0000000..f37417b --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/libraries/chef_rbenv_recipe_helpers.rb @@ -0,0 +1,103 @@ +# +# Cookbook Name:: rbenv +# Library:: Chef::RubyBuild::RecipeHelpers +# +# Author:: Fletcher Nichol +# +# Copyright 2011, Fletcher Nichol +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +class Chef + module Rbenv + module RecipeHelpers + def build_upgrade_strategy(strategy) + if strategy.nil? || strategy == false + "none" + else + strategy + end + end + + def mac_with_no_homebrew + node['platform'] == 'mac_os_x' && + Chef::Platform.find_provider_for_node(node, :package) != + Chef::Provider::Package::Homebrew + end + + def install_rbenv_pkg_prereqs + return if mac_with_no_homebrew + + node['rbenv']['install_pkgs'].each do |pkg| + package "installing rbenv dependency: #{pkg}" do + package_name pkg + end + end + end + + def install_or_upgrade_rbenv(opts = {}) + git_deploy_rbenv opts + initialize_rbenv opts + add_rbenv_to_PATH + end + + private + + def git_deploy_rbenv(opts) + if opts[:upgrade_strategy] == "none" + git_exec_action = :checkout + else + git_exec_action = :sync + end + + git opts[:rbenv_prefix] do + repository opts[:git_url] + reference opts[:git_ref] + user opts[:user] if opts[:user] + group opts[:group] if opts[:group] + + action git_exec_action + end + end + + def initialize_rbenv(opts) + prefix = opts[:rbenv_prefix] + + if opts[:user] + init_env = { 'USER' => opts[:user], 'HOME' => opts[:home_dir] } + else + init_env = Hash.new + end + + bash "Initialize rbenv (#{opts[:user] || 'system'})" do + code %{PATH="#{prefix}/bin:$PATH" rbenv init -} + environment({'RBENV_ROOT' => prefix}.merge(init_env)) + user opts[:user] if opts[:user] + group opts[:group] if opts[:group] + end + + log "rbenv-post-init-#{opts[:user] || 'system'}" + end + + def add_rbenv_to_PATH + ruby_block "Add rbenv to PATH" do + block do + rbenv_root = node['rbenv']['root_path'] + ENV['PATH'] = "#{rbenv_root}/shims:#{rbenv_root}/bin:#{ENV['PATH']}" + end + end + end + end + end +end diff --git a/vagrant/provision/cookbooks/rbenv/libraries/chef_rbenv_script_helpers.rb b/vagrant/provision/cookbooks/rbenv/libraries/chef_rbenv_script_helpers.rb new file mode 100644 index 0000000..5bab8d4 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/libraries/chef_rbenv_script_helpers.rb @@ -0,0 +1,65 @@ +# +# Cookbook Name:: rbenv +# Library:: Chef::Rbenv::ShellHelpers +# +# Author:: Fletcher Nichol +# +# Copyright 2011, Fletcher Nichol +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +class Chef + module Rbenv + module ScriptHelpers + def rbenv_root + if new_resource.root_path + new_resource.root_path + elsif new_resource.user + ::File.join(user_home, '.rbenv') + else + node['rbenv']['root_path'] + end + end + + def user_home + return nil unless new_resource.user + + Etc.getpwnam(new_resource.user).dir + end + + def which_rbenv + "(#{new_resource.user || 'system'})" + end + + def current_global_version + version_file = ::File.join(rbenv_root, 'version') + + ::File.exists?(version_file) && ::IO.read(version_file).chomp + end + + def wrap_shim_cmd(cmd) + [ %{export RBENV_ROOT="#{rbenv_root}"}, + %{export PATH="$RBENV_ROOT/bin:$RBENV_ROOT/shims:$PATH"}, + %{export RBENV_VERSION="#{new_resource.rbenv_version}"}, + %{$RBENV_ROOT/shims/#{cmd}} + ].join(' && ') + end + + def set_updated + r = yield + new_resource.updated_by_last_action(r.updated_by_last_action?) + end + end + end +end diff --git a/vagrant/provision/cookbooks/rbenv/libraries/matchers.rb b/vagrant/provision/cookbooks/rbenv/libraries/matchers.rb new file mode 100644 index 0000000..591a666 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/libraries/matchers.rb @@ -0,0 +1,9 @@ +if defined?(ChefSpec) + def install_rbenv_plugin(name) + ChefSpec::Matchers::ResourceMatcher.new(:rbenv_plugin, :install, name) + end + + def run_rbenv_script(name) + ChefSpec::Matchers::ResourceMatcher.new(:rbenv_script, :run, name) + end +end diff --git a/vagrant/provision/cookbooks/rbenv/metadata.rb b/vagrant/provision/cookbooks/rbenv/metadata.rb new file mode 100644 index 0000000..a913e1d --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/metadata.rb @@ -0,0 +1,22 @@ +name "rbenv" +maintainer "Fletcher Nichol" +maintainer_email "fnichol@nichol.ca" +license "Apache 2.0" +description "Manages rbenv and its installed rubies. Several LWRPs are also defined." +long_description "Please refer to README.md (it's long)." +version "0.7.3" + +recommends "ruby_build" # if using the rbenv_ruby LWRP, ruby-build must be installed +recommends "java", "> 1.4.0" # if using jruby, java is required on system + +supports "ubuntu" +supports "debian" +supports "freebsd" +supports "redhat" +supports "centos" +supports "fedora" +supports "amazon" +supports "scientific" +supports "suse" +supports "mac_os_x" +supports "gentoo" diff --git a/vagrant/provision/cookbooks/rbenv/providers/global.rb b/vagrant/provision/cookbooks/rbenv/providers/global.rb new file mode 100644 index 0000000..474b47b --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/providers/global.rb @@ -0,0 +1,51 @@ +# +# Cookbook Name:: rbenv +# Provider:: global +# +# Author:: Fletcher Nichol +# +# Copyright 2011, 2014 Fletcher Nichol +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +def whyrun_supported? + true +end + +use_inline_resources + +include Chef::Rbenv::ScriptHelpers + +action :create do + if current_global_version_correct? + set_updated { run_script } + else + Chef::Log.debug("#{new_resource} is already set - nothing to do") + end +end + +def run_script + command = %{rbenv global #{new_resource.rbenv_version}} + + rbenv_script "#{command} #{which_rbenv}" do + code command + user new_resource.user if new_resource.user + root_path new_resource.root_path if new_resource.root_path + action :run + end +end + +def current_global_version_correct? + current_global_version != new_resource.rbenv_version +end diff --git a/vagrant/provision/cookbooks/rbenv/providers/plugin.rb b/vagrant/provision/cookbooks/rbenv/providers/plugin.rb new file mode 100644 index 0000000..23ca1f0 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/providers/plugin.rb @@ -0,0 +1,53 @@ +# +# Cookbook Name:: rbenv +# Provider:: plugin +# +# Author:: Joshua Yotty +# +# Copyright 2014, Joshua Yotty +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +def whyrun_supported? + true +end + +use_inline_resources + +include Chef::Rbenv::ScriptHelpers + +action :install do + set_updated { create_plugins_directory } + set_updated { clone_plugin_repo } +end + +def create_plugins_directory + directory ::File.join(rbenv_root, 'plugins') do + owner new_resource.user || 'root' + mode 00755 + action :create + end +end + +def clone_plugin_repo + plugin_path = ::File.join(rbenv_root, 'plugins', new_resource.name) + + git "Install #{new_resource.name} plugin" do + destination plugin_path + repository new_resource.git_url + reference new_resource.git_ref || 'master' + user new_resource.user if new_resource.user + action :sync + end +end diff --git a/vagrant/provision/cookbooks/rbenv/providers/rehash.rb b/vagrant/provision/cookbooks/rbenv/providers/rehash.rb new file mode 100644 index 0000000..0cafae5 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/providers/rehash.rb @@ -0,0 +1,43 @@ +# +# Cookbook Name:: rbenv +# Provider:: rehash +# +# Author:: Fletcher Nichol +# +# Copyright 2011, 2014, Fletcher Nichol +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +def whyrun_supported? + true +end + +use_inline_resources + +include Chef::Rbenv::ScriptHelpers + +action :run do + set_updated { run_script } +end + +def run_script + command = %{rbenv rehash} + + rbenv_script "#{command} #{which_rbenv}" do + code command + user new_resource.user if new_resource.user + root_path new_resource.root_path if new_resource.root_path + action :run + end +end diff --git a/vagrant/provision/cookbooks/rbenv/providers/ruby.rb b/vagrant/provision/cookbooks/rbenv/providers/ruby.rb new file mode 100644 index 0000000..bdadd89 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/providers/ruby.rb @@ -0,0 +1,119 @@ +# +# Cookbook Name:: rbenv +# Provider:: ruby +# +# Author:: Fletcher Nichol +# +# Copyright 2011, Fletcher Nichol +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +include Chef::Rbenv::ScriptHelpers + +def load_current_resource + @rubie = new_resource.definition + @definition_file = new_resource.definition_file + @root_path = new_resource.root_path + @user = new_resource.user + @environment = new_resource.environment +end + +action :install do + perform_install +end + +action :reinstall do + perform_install +end + +private + +def perform_install + if ruby_build_missing? + Chef::Log.warn( + "ruby_build cookbook is missing. Please add to the run_list (Action will be skipped).") + elsif ruby_installed? + Chef::Log.debug("#{new_resource} is already installed - nothing to do") + else + install_start = Time.now + + install_ruby_dependencies + + Chef::Log.info("Building #{new_resource}, this could take a while...") + + # bypass block scoping issues + rbenv_user = @user + rubie = @rubie + definition = @definition_file || @rubie + rbenv_prefix = @root_path + rbenv_env = @environment + command = %{rbenv install #{definition}} + + rbenv_script "#{command} #{which_rbenv}" do + code command + user rbenv_user if rbenv_user + root_path rbenv_prefix if rbenv_prefix + environment rbenv_env if rbenv_env + + action :nothing + end.run_action(:run) + + Chef::Log.debug("#{new_resource} build time was " + + "#{(Time.now - install_start)/60.0} minutes") + + new_resource.updated_by_last_action(true) + end +end + +def ruby_installed? + if Array(new_resource.action).include?(:reinstall) + false + else + ::File.directory?(::File.join(rbenv_root, 'versions', @rubie)) + end +end + +def ruby_build_missing? + ! run_context.loaded_recipe?("ruby_build") +end + +def install_ruby_dependencies + definition = ::File.basename(new_resource.definition) + + case definition + when /^\d\.\d\.\d/, /^rbx-/, /^ree-/ + pkgs = node['ruby_build']['install_pkgs_cruby'] + when /^jruby-/ + pkgs = node['ruby_build']['install_pkgs_jruby'] + end + + Array(pkgs).each do |pkg| + package pkg do + action :nothing + end.run_action(:install) + end + + ensure_java_environment if definition =~ /^jruby-/ +end + +def ensure_java_environment + begin + resource_collection.find( + "ruby_block[update-java-alternatives]" + ).run_action(:create) + rescue Chef::Exceptions::ResourceNotFound + # have pity on my soul + Chef::Log.info "The java cookbook does not appear to in the run_list." + end +end diff --git a/vagrant/provision/cookbooks/rbenv/providers/script.rb b/vagrant/provision/cookbooks/rbenv/providers/script.rb new file mode 100644 index 0000000..96a935e --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/providers/script.rb @@ -0,0 +1,75 @@ +# +# Cookbook Name:: rbenv +# Provider:: script +# +# Author:: Fletcher Nichol +# +# Copyright 2011, 2014, Fletcher Nichol +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +def whyrun_supported? + true +end + +use_inline_resources + +include Chef::Rbenv::ScriptHelpers + +action :run do + set_updated { run_script } +end + +def run_script + script_code = build_script_code + script_environment = build_script_environment + + script new_resource.name do + interpreter "bash" + code script_code + user new_resource.user if new_resource.user + creates new_resource.creates if new_resource.creates + cwd new_resource.cwd if new_resource.cwd + group new_resource.group if new_resource.group + path new_resource.path if new_resource.path + returns new_resource.returns if new_resource.returns + timeout new_resource.timeout if new_resource.timeout + umask new_resource.umask if new_resource.umask + environment(script_environment) + end +end + +def build_script_code + script = [] + script << %{export RBENV_ROOT="#{rbenv_root}"} + script << %{export PATH="${RBENV_ROOT}/bin:$PATH"} + script << %{eval "$(rbenv init -)"} + if new_resource.rbenv_version + script << %{export RBENV_VERSION="#{new_resource.rbenv_version}"} + end + script << new_resource.code + script.join("\n").concat("\n") +end + +def build_script_environment + script_env = { 'RBENV_ROOT' => rbenv_root } + if new_resource.environment + script_env.merge!(new_resource.environment) + end + if new_resource.user + script_env.merge!({ 'USER' => new_resource.user,'HOME' => user_home }) + end + + script_env +end diff --git a/vagrant/provision/cookbooks/rbenv/recipes/default.rb b/vagrant/provision/cookbooks/rbenv/recipes/default.rb new file mode 100644 index 0000000..df6a938 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/recipes/default.rb @@ -0,0 +1,23 @@ +# +# Cookbook Name:: rbenv +# Recipe:: default +# +# Copyright 2011, Fletcher Nichol +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +class Chef::Recipe + # mix in recipe helpers + include Chef::Rbenv::RecipeHelpers +end diff --git a/vagrant/provision/cookbooks/rbenv/recipes/system.rb b/vagrant/provision/cookbooks/rbenv/recipes/system.rb new file mode 100644 index 0000000..f290311 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/recipes/system.rb @@ -0,0 +1,54 @@ +# +# Cookbook Name:: rbenv +# Recipe:: system +# +# Copyright 2010, 2011 Fletcher Nichol +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +include_recipe "rbenv::system_install" + +Array(node['rbenv']['plugins']).each do |plugin| + rbenv_plugin plugin['name'] do + git_url plugin['git_url'] + git_ref plugin['git_ref'] if plugin['git_ref'] + end +end + +Array(node['rbenv']['rubies']).each do |rubie| + if rubie.is_a?(Hash) + rbenv_ruby rubie['name'] do + environment rubie['environment'] if rubie['environment'] + definition_file rubie['definition_file'] if rubie['definition_file'] + end + else + rbenv_ruby rubie + end +end + +if node['rbenv']['global'] + rbenv_global node['rbenv']['global'] +end + +node['rbenv']['gems'].each_pair do |rubie, gems| + Array(gems).each do |gem| + rbenv_gem gem['name'] do + rbenv_version rubie + + %w{version action options source}.each do |attr| + send(attr, gem[attr]) if gem[attr] + end + end + end +end diff --git a/vagrant/provision/cookbooks/rbenv/recipes/system_install.rb b/vagrant/provision/cookbooks/rbenv/recipes/system_install.rb new file mode 100644 index 0000000..4ee04a5 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/recipes/system_install.rb @@ -0,0 +1,43 @@ +# +# Cookbook Name:: rbenv +# Recipe:: system_install +# +# Copyright 2011, Fletcher Nichol +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +include_recipe 'rbenv' + +upgrade_strategy = build_upgrade_strategy(node['rbenv']['upgrade']) +git_url = node['rbenv']['git_url'] +git_ref = node['rbenv']['git_ref'] +rbenv_prefix = node['rbenv']['root_path'] + +install_rbenv_pkg_prereqs + +directory "/etc/profile.d" do + owner "root" + mode "0755" +end + +template "/etc/profile.d/rbenv.sh" do + source "rbenv.sh.erb" + owner "root" + mode "0755" +end + +install_or_upgrade_rbenv :rbenv_prefix => rbenv_prefix, + :git_url => git_url, + :git_ref => git_ref, + :upgrade_strategy => upgrade_strategy diff --git a/vagrant/provision/cookbooks/rbenv/recipes/user.rb b/vagrant/provision/cookbooks/rbenv/recipes/user.rb new file mode 100644 index 0000000..7e81c40 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/recipes/user.rb @@ -0,0 +1,75 @@ +# +# Cookbook Name:: rbenv +# Recipe:: user +# +# Copyright 2010, 2011 Fletcher Nichol +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +include_recipe "rbenv::user_install" + +Array(node['rbenv']['user_installs']).each do |rbenv_user| + plugins = rbenv_user['plugins'] || node['rbenv']['user_plugins'] + rubies = rbenv_user['rubies'] || node['rbenv']['user_rubies'] + gem_hash = rbenv_user['gems'] || node['rbenv']['user_gems'] + + plugins.each do |plugin| + rbenv_plugin plugin['name'] do + git_url plugin['git_url'] + git_ref plugin['git_ref'] if plugin['git_ref'] + user rbenv_user['user'] + root_path rbenv_user['root_path'] if rbenv_user['root_path'] + end + end + + rubies.each do |rubie| + if rubie.is_a?(Hash) + rbenv_ruby "#{rubie['name']} (#{rbenv_user['user']})" do + definition rubie['name'] + user rbenv_user['user'] + root_path rbenv_user['root_path'] if rbenv_user['root_path'] + environment rubie['environment'] if rubie['environment'] + end + else + rbenv_ruby "#{rubie} (#{rbenv_user['user']})" do + definition rubie + user rbenv_user['user'] + root_path rbenv_user['root_path'] if rbenv_user['root_path'] + end + end + end + + rbenv_global "#{rbenv_user['global']} (#{rbenv_user['user']})" do + rbenv_version rbenv_user['global'] + user rbenv_user['user'] + root_path rbenv_user['root_path'] if rbenv_user['root_path'] + + only_if { rbenv_user['global'] } + end + + gem_hash.each_pair do |rubie, gems| + Array(gems).each do |gem| + rbenv_gem "#{gem['name']} (#{rbenv_user['user']})" do + package_name gem['name'] + user rbenv_user['user'] + root_path rbenv_user['root_path'] if rbenv_user['root_path'] + rbenv_version rubie + + %w{version action options source}.each do |attr| + send(attr, gem[attr]) if gem[attr] + end + end + end + end +end diff --git a/vagrant/provision/cookbooks/rbenv/recipes/user_install.rb b/vagrant/provision/cookbooks/rbenv/recipes/user_install.rb new file mode 100644 index 0000000..0bdb831 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/recipes/user_install.rb @@ -0,0 +1,46 @@ +# +# Cookbook Name:: rbenv +# Recipe:: user_install +# +# Copyright 2011, Fletcher Nichol +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +include_recipe 'rbenv' + +install_rbenv_pkg_prereqs + +template "/etc/profile.d/rbenv.sh" do + source "rbenv.sh.erb" + owner "root" + mode "0755" + only_if {node['rbenv']['create_profiled']} +end + +Array(node['rbenv']['user_installs']).each do |rb_user| + upgrade_strategy = build_upgrade_strategy(rb_user['upgrade']) + git_url = rb_user['git_url'] || node['rbenv']['git_url'] + git_ref = rb_user['git_ref'] || node['rbenv']['git_ref'] + home_dir = rb_user['home'] || ::File.join( + node['rbenv']['user_home_root'], rb_user['user']) + rbenv_prefix = rb_user['root_path'] || ::File.join(home_dir, '.rbenv') + + install_or_upgrade_rbenv :rbenv_prefix => rbenv_prefix, + :home_dir => home_dir, + :git_url => git_url, + :git_ref => git_ref, + :upgrade_strategy => upgrade_strategy, + :user => rb_user['user'], + :group => rb_user['group'] +end diff --git a/vagrant/provision/cookbooks/rbenv/recipes/vagrant.rb b/vagrant/provision/cookbooks/rbenv/recipes/vagrant.rb new file mode 100644 index 0000000..7128afa --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/recipes/vagrant.rb @@ -0,0 +1,19 @@ +# +# Cookbook Name:: rbenv +# Recipe:: vagrant +# +# Copyright 2011, Fletcher Nichol +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + diff --git a/vagrant/provision/cookbooks/rbenv/resources/gem.rb b/vagrant/provision/cookbooks/rbenv/resources/gem.rb new file mode 100644 index 0000000..a3c483a --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/resources/gem.rb @@ -0,0 +1,40 @@ +# +# Cookbook Name:: rbenv +# Resource:: gem +# +# Author:: Fletcher Nichol +# +# Copyright 2011, Fletcher Nichol +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +actions :install, :upgrade, :remove, :purge + +attribute :package_name, :kind_of => String, :name_attribute => true +attribute :rbenv_version, :kind_of => String, :default => "global" +attribute :version, :kind_of => String +attribute :response_file, :kind_of => String +attribute :source, :kind_of => String +attribute :options, :kind_of => [String, Hash] +attribute :gem_binary, :kind_of => String +attribute :user, :kind_of => String +attribute :root_path, :kind_of => String + +include Chef::Rbenv::Mixin::ResourceString + +def initialize(*args) + super + @action = :install + @provider = Chef::Provider::Package::RbenvRubygems +end diff --git a/vagrant/provision/cookbooks/rbenv/resources/global.rb b/vagrant/provision/cookbooks/rbenv/resources/global.rb new file mode 100644 index 0000000..318cd1b --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/resources/global.rb @@ -0,0 +1,35 @@ +# +# Cookbook Name:: rbenv +# Resource:: global +# +# Author:: Fletcher Nichol +# +# Copyright 2011, Fletcher Nichol +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +actions :create + +attribute :rbenv_version, :kind_of => String, :name_attribute => true +attribute :user, :kind_of => String +attribute :root_path, :kind_of => String + +def initialize(*args) + super + @action = :create +end + +def to_s + "#{super} (#{@user || 'system'})" +end diff --git a/vagrant/provision/cookbooks/rbenv/resources/plugin.rb b/vagrant/provision/cookbooks/rbenv/resources/plugin.rb new file mode 100644 index 0000000..92c8b41 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/resources/plugin.rb @@ -0,0 +1,13 @@ +actions :install + +default_action :install + +attribute :name, kind_of: String, name_attribute: true +attribute :git_url, kind_of: String +attribute :git_ref, kind_of: String +attribute :user, kind_of: String +attribute :root_path, kind_of: String + +def to_s + "#{super} (#{@user || 'system'})" +end diff --git a/vagrant/provision/cookbooks/rbenv/resources/rehash.rb b/vagrant/provision/cookbooks/rbenv/resources/rehash.rb new file mode 100644 index 0000000..b9d64f4 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/resources/rehash.rb @@ -0,0 +1,31 @@ +# +# Cookbook Name:: rbenv +# Resource:: rehash +# +# Author:: Fletcher Nichol +# +# Copyright 2011, Fletcher Nichol +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +actions :run + +attribute :name, :kind_of => String, :name_attribute => true +attribute :user, :kind_of => String +attribute :root_path, :kind_of => String + +def initialize(*args) + super + @action = :run +end diff --git a/vagrant/provision/cookbooks/rbenv/resources/ruby.rb b/vagrant/provision/cookbooks/rbenv/resources/ruby.rb new file mode 100644 index 0000000..a66441b --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/resources/ruby.rb @@ -0,0 +1,38 @@ +# +# Cookbook Name:: rbenv +# Resource:: ruby +# +# Author:: Fletcher Nichol +# +# Copyright 2011, Fletcher Nichol +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +actions :install, :reinstall + +attribute :definition, :kind_of => String, :name_attribute => true +attribute :definition_file, :kind_of => String +attribute :root_path, :kind_of => String +attribute :user, :kind_of => String +attribute :environment, :kind_of => Hash + +def initialize(*args) + super + @action = :install + @rbenv_version = @definition +end + +def to_s + "#{super} (#{@user || 'system'})" +end diff --git a/vagrant/provision/cookbooks/rbenv/resources/script.rb b/vagrant/provision/cookbooks/rbenv/resources/script.rb new file mode 100644 index 0000000..e345ce0 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/resources/script.rb @@ -0,0 +1,41 @@ +# +# Cookbook Name:: rbenv +# Resource:: script +# +# Author:: Fletcher Nichol +# +# Copyright 2011, Fletcher Nichol +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +actions :run + +attribute :name, :kind_of => String, :name_attribute => true +attribute :rbenv_version, :kind_of => String +attribute :root_path, :kind_of => String +attribute :code, :kind_of => String +attribute :creates, :kind_of => String +attribute :cwd, :kind_of => String +attribute :environment, :kind_of => Hash +attribute :group, :kind_of => String +attribute :path, :kind_of => Array +attribute :returns, :kind_of => Array, :default => [ 0 ] +attribute :timeout, :kind_of => Integer +attribute :user, :kind_of => String +attribute :umask, :kind_of => [String, Integer] + +def initialize(*args) + super + @action = :run +end diff --git a/vagrant/provision/cookbooks/rbenv/templates/default/rbenv.sh.erb b/vagrant/provision/cookbooks/rbenv/templates/default/rbenv.sh.erb new file mode 100644 index 0000000..0d445b3 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/templates/default/rbenv.sh.erb @@ -0,0 +1,15 @@ +# Generated by Chef for <%= node['fqdn'] %> +# Local modifications will be overridden + +# prefer a user rbenv over a system wide install +if [ -s "${HOME}/.rbenv/bin" ]; then + rbenv_root="${HOME}/.rbenv" +elif [ -s "<%= node['rbenv']['root_path'] %>" ]; then + rbenv_root="<%= node['rbenv']['root_path'] %>" + export RBENV_ROOT="$rbenv_root" +fi + +if [ -n "$rbenv_root" ]; then + export PATH="${rbenv_root}/bin:$PATH" + eval "$(rbenv init -)" +fi diff --git a/vagrant/provision/cookbooks/rbenv/test/integration/system_ruby/bats/global_ruby.bats b/vagrant/provision/cookbooks/rbenv/test/integration/system_ruby/bats/global_ruby.bats new file mode 100644 index 0000000..8ef6903 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/test/integration/system_ruby/bats/global_ruby.bats @@ -0,0 +1,43 @@ +#!/usr/bin/env bats + +global_ruby="2.1.1" +https_url="https://google.com" + +setup() { + unset GEM_HOME + unset GEM_PATH + unset GEM_CACHE + source /etc/profile.d/rbenv.sh +} + +@test "installs $global_ruby" { + run rbenv versions --bare + [ $status -eq 0 ] + [ $(echo "$output" | grep "^$global_ruby$") = "$global_ruby" ] +} + +@test "sets $global_ruby as the global Ruby" { + run rbenv global + [ $status -eq 0 ] + [ $output = "$global_ruby" ] +} + +@test "global Ruby can use openssl from stdlib" { + expr="puts OpenSSL::PKey::RSA.new(32).to_pem" + export RBENV_VERSION=$global_ruby + run ruby -ropenssl -e "$expr" + [ $status -eq 0 ] +} + +@test "global Ruby can install nokogiri gem" { + export RBENV_VERSION=$global_ruby + run gem install nokogiri --no-ri --no-rdoc + [ $status -eq 0 ] +} + +@test "global Ruby can use nokogiri with openssl" { + export RBENV_VERSION=$global_ruby + expr="puts Nokogiri::HTML(open('$https_url')).css('input')" + run ruby -ropen-uri -rnokogiri -e "$expr" + [ $status -eq 0 ] +} diff --git a/vagrant/provision/cookbooks/rbenv/test/integration/system_ruby/bats/installation.bats b/vagrant/provision/cookbooks/rbenv/test/integration/system_ruby/bats/installation.bats new file mode 100644 index 0000000..0c1b7e5 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/test/integration/system_ruby/bats/installation.bats @@ -0,0 +1,14 @@ +#!/usr/bin/env bats + +@test "creates profile.d file" { + [ -f "/etc/profile.d/rbenv.sh" ] +} + +@test "creates rbenv directory" { + [ -d "/usr/local/rbenv" ] +} + +@test "loads environment" { + source /etc/profile.d/rbenv.sh + [ "$(type rbenv | head -1)" = "rbenv is a function" ] +} diff --git a/vagrant/provision/cookbooks/rbenv/test/integration/system_ruby/bats/plugins.bats b/vagrant/provision/cookbooks/rbenv/test/integration/system_ruby/bats/plugins.bats new file mode 100644 index 0000000..e2b2ce0 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/test/integration/system_ruby/bats/plugins.bats @@ -0,0 +1,9 @@ +#!/usr/bin/env bats + +setup() { + source /etc/profile.d/rbenv.sh +} + +@test "installs rbenv vars" { + rbenv vars +} diff --git a/vagrant/provision/cookbooks/rbenv/test/integration/system_ruby/bats/ruby_envvars.bats b/vagrant/provision/cookbooks/rbenv/test/integration/system_ruby/bats/ruby_envvars.bats new file mode 100644 index 0000000..0315798 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/test/integration/system_ruby/bats/ruby_envvars.bats @@ -0,0 +1,27 @@ +#!/usr/bin/env bats +# To build ree properly, a configure flag needs to be passed to the install +# command, which makes for a good test case. If ree does not build properly, +# it will fails these tests. For more background, see: +# https://github.com/sstephenson/rbenv/issues/297 + +rubie="ree-1.8.7-2012.02" + +setup() { + unset GEM_HOME + unset GEM_PATH + unset GEM_CACHE + source /etc/profile.d/rbenv.sh +} + +@test "$rubie can use nokogiri with openssl" { + export RBENV_VERSION=$rubie + https_url="https://google.com" + requires="require 'nokogiri';" + script="$requires puts Nokogiri::HTML(open('$https_url')).css('input')" + + run gem install nokogiri -v 1.5.11 --no-ri --no-rdoc + [ $status -eq 0 ] + + run ruby -rrubygems -ropen-uri -e "$script" + [ "$status" -eq 0 ] +} diff --git a/vagrant/provision/cookbooks/rbenv/test/unit/fixtures/metadata.rb b/vagrant/provision/cookbooks/rbenv/test/unit/fixtures/metadata.rb new file mode 100644 index 0000000..b05d67e --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/test/unit/fixtures/metadata.rb @@ -0,0 +1,4 @@ +name "fixtures" +version "0.99.0" + +depends "rbenv" diff --git a/vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_global_defaults.rb b/vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_global_defaults.rb new file mode 100644 index 0000000..4363dfb --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_global_defaults.rb @@ -0,0 +1 @@ +rbenv_global "1.6.5" diff --git a/vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_global_full.rb b/vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_global_full.rb new file mode 100644 index 0000000..f863bf1 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_global_full.rb @@ -0,0 +1,5 @@ +rbenv_global "9.1.2" do + user "claire" + root_path "/mnt/roobies" + action :create +end diff --git a/vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_plugin_defaults.rb b/vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_plugin_defaults.rb new file mode 100644 index 0000000..4a99537 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_plugin_defaults.rb @@ -0,0 +1,3 @@ +rbenv_plugin "rbenv-root-default" do + git_url "foo.git" +end diff --git a/vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_plugin_full.rb b/vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_plugin_full.rb new file mode 100644 index 0000000..2d5abfa --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_plugin_full.rb @@ -0,0 +1,7 @@ +rbenv_plugin "rbenv-coolness" do + git_url "https://example.com/rbenv-coolness.git" + git_ref "feature-branch" + root_path "/tmp/rootness" + user "sam" + action :install +end diff --git a/vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_rehash_defaults.rb b/vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_rehash_defaults.rb new file mode 100644 index 0000000..ba5d86c --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_rehash_defaults.rb @@ -0,0 +1 @@ +rbenv_rehash "defaultness" diff --git a/vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_rehash_full.rb b/vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_rehash_full.rb new file mode 100644 index 0000000..0323d41 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_rehash_full.rb @@ -0,0 +1,4 @@ +rbenv_rehash "for-jdoe" do + user "jdoe" + root_path "/rooty" +end diff --git a/vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_script_defaults.rb b/vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_script_defaults.rb new file mode 100644 index 0000000..108490a --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_script_defaults.rb @@ -0,0 +1,4 @@ +rbenv_script "not-much" do + code "rake nadda" +end + diff --git a/vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_script_full.rb b/vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_script_full.rb new file mode 100644 index 0000000..ef57e95 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/test/unit/fixtures/recipes/rbenv_script_full.rb @@ -0,0 +1,13 @@ +rbenv_script "all-the-things" do + code "rake doit:all" + rbenv_version "thebest" + user "lockwood" + group "inventor" + creates "/opt/success" + cwd "/usr/dir" + path ["/opt/bin"] + returns [0, 255] + timeout 600 + umask 0221 + environment("FRUIT" => "strawberry") +end diff --git a/vagrant/provision/cookbooks/rbenv/test/unit/providers/global_spec.rb b/vagrant/provision/cookbooks/rbenv/test/unit/providers/global_spec.rb new file mode 100644 index 0000000..77b681f --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/test/unit/providers/global_spec.rb @@ -0,0 +1,33 @@ +require_relative "../spec_helper" + +describe "rbenv_global provider" do + + let(:runner) { ChefSpec::Runner.new(step_into: ["rbenv_global"]) } + let(:node) { runner.node} + + context "with a fully configured resource" do + + let(:chef_run) { runner.converge("fixtures::rbenv_global_full") } + + it "runs an rbenv_script" do + expect(chef_run).to run_rbenv_script("rbenv global 9.1.2 (claire)").with( + code: "rbenv global 9.1.2", + user: "claire", + root_path: "/mnt/roobies" + ) + end + end + + context "with a default configured resource" do + + let(:chef_run) { runner.converge("fixtures::rbenv_global_defaults") } + + it "runs an rbenv_script" do + expect(chef_run).to run_rbenv_script("rbenv global 1.6.5 (system)").with( + code: "rbenv global 1.6.5", + user: nil, + root_path: nil + ) + end + end +end diff --git a/vagrant/provision/cookbooks/rbenv/test/unit/providers/plugin_spec.rb b/vagrant/provision/cookbooks/rbenv/test/unit/providers/plugin_spec.rb new file mode 100644 index 0000000..7aed554 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/test/unit/providers/plugin_spec.rb @@ -0,0 +1,50 @@ +require_relative "../spec_helper" + +describe "rbenv_plugin provider" do + + let(:runner) { ChefSpec::Runner.new(step_into: ["rbenv_plugin"]) } + let(:node) { runner.node} + + context "with a fully configured resource" do + + let(:chef_run) { runner.converge("fixtures::rbenv_plugin_full") } + + it "creates the parent directory for plugins" do + expect(chef_run).to create_directory("/tmp/rootness/plugins").with( + owner: "sam", + mode: 00755 + ) + end + + it "downloads the plugin with git" do + expect(chef_run).to sync_git("Install rbenv-coolness plugin").with( + destination: "/tmp/rootness/plugins/rbenv-coolness", + repository: "https://example.com/rbenv-coolness.git", + reference: "feature-branch", + user: "sam" + ) + end + end + + context "with a minimally configured resource" do + + let(:chef_run) { runner.converge("fixtures::rbenv_plugin_defaults") } + + before { node.set["rbenv"]["root_path"] = "/ohyeah" } + + it "creates the parent directory for plugins" do + expect(chef_run).to create_directory("/ohyeah/plugins").with( + owner: "root", + mode: 00755 + ) + end + + it "downloads the plugin with git" do + expect(chef_run).to sync_git("Install rbenv-root-default plugin").with( + destination: "/ohyeah/plugins/rbenv-root-default", + repository: "foo.git", + reference: "master" + ) + end + end +end diff --git a/vagrant/provision/cookbooks/rbenv/test/unit/providers/rehash_spec.rb b/vagrant/provision/cookbooks/rbenv/test/unit/providers/rehash_spec.rb new file mode 100644 index 0000000..70b4b1b --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/test/unit/providers/rehash_spec.rb @@ -0,0 +1,31 @@ +require_relative "../spec_helper" + +describe "rbenv_rehash provider" do + + let(:runner) { ChefSpec::Runner.new(step_into: ["rbenv_rehash"]) } + let(:node) { runner.node} + + context "with a fully configured resource" do + + let(:chef_run) { runner.converge("fixtures::rbenv_rehash_full") } + + it "runs an rbenv_script" do + expect(chef_run).to run_rbenv_script("rbenv rehash (jdoe)").with( + code: "rbenv rehash", + user: "jdoe", + root_path: "/rooty" + ) + end + end + + context "with a defaults configured resource" do + + let(:chef_run) { runner.converge("fixtures::rbenv_rehash_defaults") } + + it "runs an rbenv_script" do + expect(chef_run).to run_rbenv_script("rbenv rehash (system)").with( + code: "rbenv rehash" + ) + end + end +end diff --git a/vagrant/provision/cookbooks/rbenv/test/unit/providers/script_spec.rb b/vagrant/provision/cookbooks/rbenv/test/unit/providers/script_spec.rb new file mode 100644 index 0000000..412c069 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/test/unit/providers/script_spec.rb @@ -0,0 +1,80 @@ +require_relative "../spec_helper" + +describe "rbenv_script provider" do + + let(:runner) { ChefSpec::Runner.new(step_into: ["rbenv_script"]) } + let(:node) { runner.node} + + context "with a fully configured resource" do + + let(:chef_run) { runner.converge("fixtures::rbenv_script_full") } + + before do + user = double(dir: "/mnt/lockwood") + allow(Etc).to receive(:getpwnam).with("lockwood") { user } + end + + it "runs a script" do + code = <<-CODE.gsub(/^\s+/, '') + export RBENV_ROOT="/mnt/lockwood/.rbenv" + export PATH="${RBENV_ROOT}/bin:$PATH" + eval "$(rbenv init -)" + export RBENV_VERSION="thebest" + rake doit:all + CODE + environment = { + "RBENV_ROOT" => "/mnt/lockwood/.rbenv", + "USER" => "lockwood", + "HOME" => "/mnt/lockwood", + "FRUIT" => "strawberry" + } + + expect(chef_run).to run_script("all-the-things").with( + interpreter: "bash", + code: code, + user: "lockwood", + group: "inventor", + creates: "/opt/success", + cwd: "/usr/dir", + path: ["/opt/bin"], + returns: [0, 255], + timeout: 600, + umask: 0221, + environment: environment + ) + end + end + + context "with a default configured resource" do + + let(:chef_run) { runner.converge("fixtures::rbenv_script_defaults") } + + before do + node.set["rbenv"]["root_path"] = "/zz" + end + + it "runs a script" do + code = <<-CODE.gsub(/^\s+/, '') + export RBENV_ROOT="/zz" + export PATH="${RBENV_ROOT}/bin:$PATH" + eval "$(rbenv init -)" + rake nadda + CODE + environment = { "RBENV_ROOT" => "/zz" } + + expect(chef_run).to run_script("not-much").with( + interpreter: "bash", + code: code, + user: nil, + group: nil, + creates: nil, + cwd: nil, + path: nil, + returns: [0], + timeout: nil, + umask: nil, + environment: environment + ) + end + end +end diff --git a/vagrant/provision/cookbooks/rbenv/test/unit/resources/gem_spec.rb b/vagrant/provision/cookbooks/rbenv/test/unit/resources/gem_spec.rb new file mode 100644 index 0000000..a6332c2 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/test/unit/resources/gem_spec.rb @@ -0,0 +1,111 @@ +require_relative "../spec_helper" +require "chef/provider/package/rubygems" +require_relative "../../../libraries/chef_rbenv_mixin" +require_relative "../../../libraries/chef_provider_package_rbenvrubygems" +load_lw_resource("rbenv", "gem") + +describe Chef::Resource::RbenvGem do + + let(:resource) { described_class.new("creamcorn") } + + it "sets the default attribute to package_name" do + expect(resource.package_name).to eq("creamcorn") + end + + it "attribute rbenv_version defaults to global" do + expect(resource.rbenv_version).to eq("global") + end + + it "attribute rbenv_version takes a String value" do + resource.rbenv_version("nextruby") + expect(resource.rbenv_version).to eq("nextruby") + end + + it "attribute version defaults to nil" do + expect(resource.version).to be_nil + end + + it "attribute version takes a String value" do + resource.version("1.0.99") + expect(resource.version).to eq("1.0.99") + end + + it "attribute response_file defaults to nil" do + expect(resource.response_file).to be_nil + end + + it "attribute response_file takes a String value" do + resource.response_file("/dont/think/so") + expect(resource.response_file).to eq("/dont/think/so") + end + + it "attribute source defaults to nil" do + expect(resource.source).to be_nil + end + + it "attribute source takes a String value" do + resource.source("outthere") + expect(resource.source).to eq("outthere") + end + + it "attribute options defaults to nil" do + expect(resource.options).to be_nil + end + + it "attribute options takes a String value" do + resource.options("--no-rdoc") + expect(resource.options).to eq("--no-rdoc") + end + + it "attribute options takes a Hash value" do + resource.options({ one: "two" }) + expect(resource.options).to eq({ one: "two" }) + end + + it "attribute gem_binary defaults to nil" do + expect(resource.gem_binary).to be_nil + end + + it "attribute gem_binary takes a String value" do + resource.gem_binary("/my/fav/gem") + expect(resource.gem_binary).to eq("/my/fav/gem") + end + + it "attribute user defaults to nil" do + expect(resource.user).to be_nil + end + + it "attribute user takes a String value" do + resource.user("masha") + expect(resource.user).to eq("masha") + end + + it "attribute root_path defaults to nil" do + expect(resource.root_path).to be_nil + end + + it "attribute root_path takes a String value" do + resource.root_path("C:\\crazytown") + expect(resource.root_path).to eq("C:\\crazytown") + end + + it "action defaults to :install" do + expect(resource.action).to eq(:install) + end + + it "actions include :upgrade" do + expect(resource.allowed_actions).to include(:upgrade) + end + + it "actions include :remove" do + expect(resource.allowed_actions).to include(:remove) + end + + it "actions include :purge" do + expect(resource.allowed_actions).to include(:purge) + end + + it "sets the provider to RbenvRubygems" do + expect(resource.provider).to eq(Chef::Provider::Package::RbenvRubygems) + end +end diff --git a/vagrant/provision/cookbooks/rbenv/test/unit/resources/global_spec.rb b/vagrant/provision/cookbooks/rbenv/test/unit/resources/global_spec.rb new file mode 100644 index 0000000..aff0ced --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/test/unit/resources/global_spec.rb @@ -0,0 +1,42 @@ +require_relative "../spec_helper" +load_lw_resource("rbenv", "global") + +describe Chef::Resource::RbenvGlobal do + + let(:resource) { described_class.new("antruby") } + + it "sets the default attribute to rbenv_version" do + expect(resource.rbenv_version).to eq("antruby") + end + + it "attribute user defaults to nil" do + expect(resource.user).to be_nil + end + + it "attribute user takes a String value" do + resource.user("casper") + expect(resource.user).to eq("casper") + end + + it "attribute root_path defaults to nil" do + expect(resource.root_path).to be_nil + end + + it "attribute root_path takes a String value" do + resource.root_path("C:\\wintowne") + expect(resource.root_path).to eq("C:\\wintowne") + end + + it "action defaults to :create" do + expect(resource.action).to eq(:create) + end + + it "#to_s includes user if provided" do + resource.user("molly") + expect(resource.to_s).to eq("rbenv_global[antruby] (molly)") + end + + it "#to_s includes system label if user is not provided" do + expect(resource.to_s).to eq("rbenv_global[antruby] (system)") + end +end diff --git a/vagrant/provision/cookbooks/rbenv/test/unit/resources/plugin_spec.rb b/vagrant/provision/cookbooks/rbenv/test/unit/resources/plugin_spec.rb new file mode 100644 index 0000000..9c991c7 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/test/unit/resources/plugin_spec.rb @@ -0,0 +1,60 @@ +require_relative "../spec_helper" +load_lw_resource("rbenv", "plugin") + +describe Chef::Resource::RbenvPlugin do + + let(:resource) { described_class.new("rbenv-goodies") } + + it "sets the default attribute to name" do + expect(resource.name).to eq("rbenv-goodies") + end + + it "attribute git_url defaults to nil" do + expect(resource.git_url).to be_nil + end + + it "attribute git_url takes a String value" do + resource.git_url("https://example.com/rbenv-goodies.git") + expect(resource.git_url).to eq("https://example.com/rbenv-goodies.git") + end + + it "attribute git_ref defaults to nil" do + expect(resource.git_ref).to be_nil + end + + it "attribute git_ref takes a String value" do + resource.git_ref("abc123") + expect(resource.git_ref).to eq("abc123") + end + + it "attribute user defaults to nil" do + expect(resource.user).to be_nil + end + + it "attribute user takes a String value" do + resource.user("abed") + expect(resource.user).to eq("abed") + end + + it "attribute root_path defaults to nil" do + expect(resource.root_path).to be_nil + end + + it "attribute root_path takes a String value" do + resource.root_path("/tmp/root") + expect(resource.root_path).to eq("/tmp/root") + end + + it "action defaults to :install" do + expect(resource.action).to eq(:install) + end + + it "#to_s includes user if provided" do + resource.user("molly") + expect(resource.to_s).to eq("rbenv_plugin[rbenv-goodies] (molly)") + end + + it "#to_s includes system label if user is not provided" do + expect(resource.to_s).to eq("rbenv_plugin[rbenv-goodies] (system)") + end +end diff --git a/vagrant/provision/cookbooks/rbenv/test/unit/resources/rehash_spec.rb b/vagrant/provision/cookbooks/rbenv/test/unit/resources/rehash_spec.rb new file mode 100644 index 0000000..d7c9928 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/test/unit/resources/rehash_spec.rb @@ -0,0 +1,33 @@ +require_relative "../spec_helper" +load_lw_resource("rbenv", "rehash") + +describe Chef::Resource::RbenvRehash do + + let(:resource) { described_class.new("yabba") } + + it "sets the default attribute to name" do + expect(resource.name).to eq("yabba") + end + + it "attribute user defaults to nil" do + expect(resource.user).to be_nil + end + + it "attribute user takes a String value" do + resource.name("jerry") + expect(resource.name).to eq("jerry") + end + + it "attribute root_path defaults to nil" do + expect(resource.root_path).to be_nil + end + + it "attribute root_path takes a String value" do + resource.root_path("/nowhere/there") + expect(resource.root_path).to eq("/nowhere/there") + end + + it "action defaults to :run" do + expect(resource.action).to eq(:run) + end +end diff --git a/vagrant/provision/cookbooks/rbenv/test/unit/resources/ruby_spec.rb b/vagrant/provision/cookbooks/rbenv/test/unit/resources/ruby_spec.rb new file mode 100644 index 0000000..3960aff --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/test/unit/resources/ruby_spec.rb @@ -0,0 +1,55 @@ +require_relative "../spec_helper" +load_lw_resource("rbenv", "ruby") + +describe Chef::Resource::RbenvRuby do + + let(:resource) { described_class.new("antruby") } + + it "sets the default attribute to definition" do + expect(resource.definition).to eq("antruby") + end + + it "attribute definition_file defaults to nil" do + expect(resource.definition_file).to be_nil + end + + it "attribute definition_file takes a String value" do + resource.definition_file("/blah/blah/rubay") + expect(resource.definition_file).to eq("/blah/blah/rubay") + end + + it "attribute root_path defaults to nil" do + expect(resource.root_path).to be_nil + end + + it "attribute root_path takes a String value" do + resource.root_path("/rootness/path") + expect(resource.root_path).to eq("/rootness/path") + end + + it "attribute user defaults to nil" do + expect(resource.user).to be_nil + end + + it "attribute user takes a String value" do + resource.user("curious_george") + expect(resource.user).to eq("curious_george") + end + + it "action defaults to :install" do + expect(resource.action).to eq(:install) + end + + it "actions include :reinstall" do + expect(resource.allowed_actions).to include(:reinstall) + end + + it "#to_s includes user if provided" do + resource.user("molly") + expect(resource.to_s).to eq("rbenv_ruby[antruby] (molly)") + end + + it "#to_s includes system label if user is not provided" do + expect(resource.to_s).to eq("rbenv_ruby[antruby] (system)") + end +end diff --git a/vagrant/provision/cookbooks/rbenv/test/unit/resources/script_spec.rb b/vagrant/provision/cookbooks/rbenv/test/unit/resources/script_spec.rb new file mode 100644 index 0000000..e769445 --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/test/unit/resources/script_spec.rb @@ -0,0 +1,128 @@ +require_relative "../spec_helper" +load_lw_resource("rbenv", "script") + +describe Chef::Resource::RbenvScript do + + let(:resource) { described_class.new("gogo") } + + it "sets the default attribute to name" do + expect(resource.name).to eq("gogo") + end + + it "attribute rbenv_version defaults to nil" do + expect(resource.rbenv_version).to be_nil + end + + it "attribute rbenv_version takes a String value" do + resource.rbenv_version("bunnyruby") + expect(resource.rbenv_version).to eq("bunnyruby") + end + + it "attribute root_path defaults to nil" do + expect(resource.root_path).to be_nil + end + + it "attribute root_path takes a String value" do + resource.root_path("/yep") + expect(resource.root_path).to eq("/yep") + end + + it "attribute code defaults to nil" do + expect(resource.code).to be_nil + end + + it "attribute code takes a String value" do + resource.code("echo hi") + expect(resource.code).to eq("echo hi") + end + + it "attribute creates defaults to nil" do + expect(resource.creates).to be_nil + end + + it "attribute creates takes a String value" do + resource.creates("/tmp/thefile") + expect(resource.creates).to eq("/tmp/thefile") + end + + it "attribute cwd defaults to nil" do + expect(resource.cwd).to be_nil + end + + it "attribute cwd takes a String value" do + resource.cwd("/root") + expect(resource.cwd).to eq("/root") + end + + it "attribute environment defaults to nil" do + expect(resource.environment).to be_nil + end + + it "attribute environment takes a Hash value" do + resource.environment({ "BEANS" => "pinto" }) + expect(resource.environment).to eq({ "BEANS" => "pinto" }) + end + + it "attribute group defaults to nil" do + expect(resource.group).to be_nil + end + + it "attribute group takes a String value" do + resource.group("wheelers") + expect(resource.group).to eq("wheelers") + end + + it "attribute path defaults to nil" do + expect(resource.path).to be_nil + end + + it "attribute path takes an Array value" do + resource.path(["/tmp/pathpath"]) + expect(resource.path).to eq(["/tmp/pathpath"]) + end + + it "attribute returns defaults to 0" do + expect(resource.returns).to eq([0]) + end + + it "attribute returns takes an Array value" do + resource.returns([0, 127, 255]) + expect(resource.returns).to eq([0, 127, 255]) + end + + it "attribute timeout defaults to nil" do + expect(resource.timeout).to be_nil + end + + it "attribute timeout takes an Integer value" do + resource.timeout(123) + expect(resource.timeout).to eq(123) + end + + it "attribute user defaults to nil" do + expect(resource.user).to be_nil + end + + it "attribute user takes a String value" do + resource.user("eric") + expect(resource.user).to eq("eric") + end + + it "attribute umask defaults to nil" do + expect(resource.umask).to be_nil + end + + it "attribute umask takes a String value" do + resource.umask("0777") + expect(resource.umask).to eq("0777") + end + + it "attribute umask takes an Integer value" do + resource.umask(0640) + expect(resource.umask).to eq(0640) + end + + it "action defaults to :run" do + expect(resource.action).to eq(:run) + end +end diff --git a/vagrant/provision/cookbooks/rbenv/test/unit/spec_helper.rb b/vagrant/provision/cookbooks/rbenv/test/unit/spec_helper.rb new file mode 100644 index 0000000..92a79cd --- /dev/null +++ b/vagrant/provision/cookbooks/rbenv/test/unit/spec_helper.rb @@ -0,0 +1,31 @@ +require "chefspec" +require "chefspec/berkshelf" + +def load_lw_resource(cb, lwrp) + require "chef/resource/lwrp_base" + unless Chef::Resource.const_defined?(class_name_for_lwrp(cb, lwrp)) + Chef::Resource::LWRPBase.build_from_file( + cb, + File.join(File.dirname(__FILE__), %W{.. .. resources #{lwrp}.rb}), + nil + ) + end +end + +def load_lw_provider(cb, lwrp) + require "chef/provider/lwrp_base" + unless Chef::Provider.const_defined?(class_name_for_lwrp(cb, lwrp)) + Chef::Provider::LWRPBase.build_from_file( + cb, + File.join(File.dirname(__FILE__), %W{.. .. providers #{lwrp}.rb}), + nil + ) + end +end + +def class_name_for_lwrp(cb, lwrp) + require "chef/mixin/convert_to_class_name" + Chef::Mixin::ConvertToClassName.convert_to_class_name( + Chef::Mixin::ConvertToClassName.filename_to_qualified_string(cb, lwrp) + ) +end diff --git a/vagrant/provision/cookbooks/ruby_build/.kitchen.yml b/vagrant/provision/cookbooks/ruby_build/.kitchen.yml new file mode 100644 index 0000000..77ad739 --- /dev/null +++ b/vagrant/provision/cookbooks/ruby_build/.kitchen.yml @@ -0,0 +1,31 @@ +--- +driver_plugin: vagrant +driver_config: + require_chef_omnibus: true + +platforms: +- name: ubuntu-12.04 + driver_config: + box: opscode-ubuntu-12.04 + box_url: https://opscode-vm.s3.amazonaws.com/vagrant/opscode_ubuntu-12.04_provisionerless.box + run_list: + - recipe[apt] +- name: ubuntu-10.04 + driver_config: + box: opscode-ubuntu-10.04 + box_url: https://opscode-vm.s3.amazonaws.com/vagrant/opscode_ubuntu-10.04_provisionerless.box + run_list: + - recipe[apt] +- name: centos-6.4 + driver_config: + box: opscode-centos-6.4 + box_url: https://opscode-vm.s3.amazonaws.com/vagrant/opscode_centos-6.4_provisionerless.box + +suites: +- name: alltherubies + run_list: + - recipe[ruby_build] + - recipe[alltherubies] +- name: installation + run_list: + - recipe[ruby_build] diff --git a/vagrant/provision/cookbooks/ruby_build/.travis.yml b/vagrant/provision/cookbooks/ruby_build/.travis.yml new file mode 100644 index 0000000..e3176f6 --- /dev/null +++ b/vagrant/provision/cookbooks/ruby_build/.travis.yml @@ -0,0 +1,4 @@ +language: ruby +rvm: + - 1.9.3 +bundler_args: --without integration development diff --git a/vagrant/provision/cookbooks/ruby_build/Berksfile b/vagrant/provision/cookbooks/ruby_build/Berksfile new file mode 100644 index 0000000..7546b58 --- /dev/null +++ b/vagrant/provision/cookbooks/ruby_build/Berksfile @@ -0,0 +1,10 @@ +site :opscode + +metadata + +group :integration do + cookbook 'alltherubies', :path => './test/cookbooks/alltherubies' + cookbook 'apt' + cookbook 'user' + cookbook 'java' +end diff --git a/vagrant/provision/cookbooks/ruby_build/CHANGELOG.md b/vagrant/provision/cookbooks/ruby_build/CHANGELOG.md new file mode 100644 index 0000000..6985de9 --- /dev/null +++ b/vagrant/provision/cookbooks/ruby_build/CHANGELOG.md @@ -0,0 +1,72 @@ +## 0.8.0 / 2013-05-22 + +### Bug fixes + +* Pull request [#8][]: Remove libyaml-devel pkg dependency for Red Hat family + platforms. ([@fnichol][]) + +### Improvements + +* Pull request [#9][]: Use the HTTPS clone URL. ([@adammck][]) +* Pull request [#10][]: Use old-form notifies to support AWS OpsWorks. + ([@tsabat][]) +* Issue [#7][]: Install Git package(s) only if Git is not previously installed. + ([@fnichol][], [@ChrisLundquist][]) +* Convert project from Jamie to Test Kitchen. ([@fnichol][]) + + +## 0.7.2 / 2012-12-31 + +### Bug fixes + +* Add missing package dependencies for C Ruby versions on RHEL family. + ([@fnichol][]) + +### Improvements + +* Print Ruby build time to :info logger (formerly :debug). ([@fnichol][]) +* Add integration tests for commonly installed Ruby versions. ([@fnichol][]) + + +## 0.7.0 / 2012-11-21 + +### New features + +* Add environment attr to ruby_build_ruby. This allows for adding custom + compilation flags, as well as newer ruby-build environment variables, such + as RUBY_BUILD_MIRROR_URL. ([@fnichol][]) + +### Improvements + +* Update foodcritic configuration and update .travis.yml. ([@fnichol][]) +* Update Installation section of README (welcome Berkshelf). ([@fnichol][]) + + +## 0.6.2 / 2012-05-03 + +### Bug fixes + +* ruby_build_ruby LWRP now notifies when updated (FC017). ([@fnichol][]) +* Add plaform equivalents in default attrs (FC024). ([@fnichol][]) +* JRuby requires make package on Ubuntu/Debian. ([@fnichol][]) +* Ensure `Chef::Config[:file_cache_path]` exists in solo mode. ([@fnichol][]) + +### Improvements + +* Add TravisCI to run Foodcritic linter. ([@fnichol][]) +* Reorganize README with section links. ([@fnichol][]) + + +## 0.6.0 / 2011-12-10 + +The initial release. + + +[#7]: https://github.com/fnichol/chef-ruby_build/issues/7 +[#8]: https://github.com/fnichol/chef-ruby_build/issues/8 +[#9]: https://github.com/fnichol/chef-ruby_build/issues/9 +[#10]: https://github.com/fnichol/chef-ruby_build/issues/10 +[@ChrisLundquist]: https://github.com/ChrisLundquist +[@adammck]: https://github.com/adammck +[@fnichol]: https://github.com/fnichol +[@tsabat]: https://github.com/tsabat diff --git a/vagrant/provision/cookbooks/ruby_build/Gemfile b/vagrant/provision/cookbooks/ruby_build/Gemfile new file mode 100644 index 0000000..de5c230 --- /dev/null +++ b/vagrant/provision/cookbooks/ruby_build/Gemfile @@ -0,0 +1,14 @@ +source "https://rubygems.org" + +gem 'rake' +gem 'foodcritic' + +group :development do + gem 'emeril' +end + +group :integration do + gem 'berkshelf' + gem 'test-kitchen', '~> 1.0.0.alpha.6' + gem 'kitchen-vagrant' +end diff --git a/vagrant/provision/cookbooks/ruby_build/README.md b/vagrant/provision/cookbooks/ruby_build/README.md new file mode 100644 index 0000000..034d3e6 --- /dev/null +++ b/vagrant/provision/cookbooks/ruby_build/README.md @@ -0,0 +1,338 @@ +# ruby-build Chef Cookbook + +[![Build Status](https://secure.travis-ci.org/fnichol/chef-ruby_build.png?branch=master)](http://travis-ci.org/fnichol/chef-ruby_build) + +## Description + +Manages the [ruby-build][rb_site] framework and its installed Rubies. +A lightweight resources and providers ([LWRP][lwrp]) is also defined. + +## Usage + +Simply include `recipe[ruby_build]` in your run\_list to have ruby-build +installed. You will also have access to the `ruby_build_ruby` resource. See +the [Resources and Providers](#lwrps) section for more details. + +## Requirements + +### Chef + +Tested on 0.10.8 but newer and older version should work just +fine. File an [issue][issues] if this isn't the case. + +### Platform + +The following platforms have been tested with this cookbook, meaning that +the recipes and LWRPs run on these platforms without error: + +* ubuntu (10.04/10.10/11.04/11.10/12.04) +* mac\_os\_x (10.7/10.8) +* debian +* freebsd +* redhat +* centos +* fedora +* amazon +* scientific +* suse + +Please [report][issues] any additional platforms so they can be added. + +### Cookbooks + +There are **no** external cookbook dependencies. However, if you are +installing [JRuby][jruby] then a Java runtime will need to be installed. +The Opscode [java cookbook][java_cb] can be used on supported platforms. + +## Installation + +Depending on the situation and use case there are several ways to install +this cookbook. All the methods listed below assume a tagged version release +is the target, but omit the tags to get the head of development. A valid +Chef repository structure like the [Opscode repo][chef_repo] is also assumed. + +### From the Opscode Community Platform + +To install this cookbook from the Opscode platform, use the *knife* command: + + knife cookbook site install ruby_build + +### Using Berkshelf + +[Berkshelf][berkshelf] is a cookbook dependency manager and development +workflow assistant. To install Berkshelf: + + cd chef-repo + gem install berkshelf + berks init + +To use the Community Site version: + + echo "cookbook 'ruby_build'" >> Berksfile + berks install + +Or to reference the Git version: + + repo="fnichol/chef-ruby_build" + latest_release=$(curl -s https://api.github.com/repos/$repo/git/refs/tags \ + | ruby -rjson -e ' + j = JSON.parse(STDIN.read); + puts j.map { |t| t["ref"].split("/").last }.sort.last + ') + cat >> Berksfile < 'git://github.com/$repo.git', :branch => '$latest_release' + END_OF_BERKSFILE + +### Using Librarian-Chef + +[Librarian-Chef][librarian] is a bundler for your Chef cookbooks. +To install Librarian-Chef: + + cd chef-repo + gem install librarian + librarian-chef init + +To use the Opscode platform version: + + echo "cookbook 'ruby_build'" >> Cheffile + librarian-chef install + +Or to reference the Git version: + + repo="fnichol/chef-ruby_build" + latest_release=$(curl -s https://api.github.com/repos/$repo/git/refs/tags \ + | ruby -rjson -e ' + j = JSON.parse(STDIN.read); + puts j.map { |t| t["ref"].split("/").last }.sort.last + ') + cat >> Cheffile < 'git://github.com/$repo.git', :ref => '$latest_release' + END_OF_CHEFFILE + librarian-chef install + +## Recipes + +### default + +Installs the ruby-build codebase and initializes Chef to use the Lightweight +Resources and Providers ([LWRPs][lwrp]). + +## Attributes + +### git_url + +The Git URL which is used to install ruby-build. + +The default is `"git://github.com/sstephenson/ruby-build.git"`. + +### git_ref + +A specific Git branch/tag/reference to use when installing ruby-build. For +example, to pin ruby-build to a specific release: + + node['ruby_build']['git_ref'] = "v20111030" + +The default is `"master"`. + +### default_ruby_base_path + +The default base path for a system-wide installed Ruby. For example, the +following resource: + + ruby_build_ruby "1.9.3-p0" + +will be installed into +`"#{node['ruby_build']['default_ruby_base_path']}/1.9.3-p0"` unless a +`prefix_path` attribute is explicitly set. + +The default is `"/usr/local/ruby"`. + +### upgrade + +Determines how to handle installing updates to the ruby-build framework. +There are currently 2 valid values: + +* `"none"`, `false`, or `nil`: will not update ruby-build and leave it in its + current state. +* `"sync"` or `true`: updates ruby-build to the version specified by the + `git_ref` attribute or the head of the master branch by default. + +The default is `"none"`. + +## Resources and Providers + +### ruby_build_ruby + +#### Actions + + + + + + + + + + + + + + + + + + + + + +
ActionDescriptionDefault
install + Build and install a Ruby from a definition file. See the ruby-build + readme(1) for more details. + Yes
reinstall + Force a recompiliation of the Ruby from source. The :install action + will skip a build if the target install directory already exists. +  
+ +1. [ruby-build readme][rb_readme] + +#### Attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescriptionDefault Value
definition + Name attribute: the name of a built-in definition(1) + or the path to a ruby-build definition file. + nil
prefix_pathThe path to which the Ruby will be installed.nil
user + A user which will own the installed Ruby. The default value of + nil denotes a system-wide Ruby (root-owned) is being + targeted. Note: if specified, the user must already exist. + nil
group + A group which will own the installed Ruby. The default value of + nil denotes a system-wide Ruby (root-owned) is being + targeted. Note: if specified, the group must already exist. + nil
environment + A Hash of additional environment variables(2), such as + CONFIGURE_OPTS or RUBY_BUILD_MIRROR_URL. + nil
+ +1. [built-in definition][rb_definitions] +2. [special environment variables][rb_environment] + +#### Examples + +##### Install Ruby + + # See: https://github.com/sstephenson/ruby-build/issues/186 + ruby_build_ruby "ree-1.8.7-2012.02" do + environment({ 'CONFIGURE_OPTS' => '--no-tcmalloc' }) + end + + ruby_build_ruby "1.9.3-p0" do + prefix_path "/usr/local/ruby/ruby-1.9.3-p0" + environment({ + 'RUBY_BUILD_MIRROR_URL' => 'http://local.example.com' + }) + + action :install + end + + ruby_build_ruby "jruby-1.6.5" + +**Note:** the install action is default, so the second example is more common. + +##### Install A Ruby For A User + + ruby_build_ruby "maglev-1.0.0" do + prefix_path "/home/deploy/.rubies/maglev-1.0.0" + user "deploy" + group "deploy" + end + +##### Reinstall Ruby + + ruby_build_ruby "rbx-1.2.4" do + prefix_path "/opt/rbx-1.2.4" + + action :reinstall + end + +**Note:** the Ruby will be built whether or not the Ruby exists in the +`prefix_path` directory. + +## Development + +* Source hosted at [GitHub][repo] +* Report issues/Questions/Feature requests on [GitHub Issues][issues] + +Pull requests are very welcome! Make sure your patches are well tested. +Ideally create a topic branch for every separate change you make. + +## License and Author + +Author:: [Fletcher Nichol][fnichol] () [![endorse](http://api.coderwall.com/fnichol/endorsecount.png)](http://coderwall.com/fnichol) + +Copyright 2011, Fletcher Nichol + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +[berkshelf]: http://berkshelf.com/ +[chef_repo]: https://github.com/opscode/chef-repo +[cheffile]: https://github.com/applicationsonline/librarian/blob/master/lib/librarian/chef/templates/Cheffile +[java_cb]: http://community.opscode.com/cookbooks/java +[jruby]: http://jruby.org/ +[kgc]: https://github.com/websterclay/knife-github-cookbooks#readme +[librarian]: https://github.com/applicationsonline/librarian#readme +[lwrp]: http://wiki.opscode.com/display/chef/Lightweight+Resources+and+Providers+%28LWRP%29 +[rb_readme]: https://github.com/sstephenson/ruby-build#readme +[rb_site]: https://github.com/sstephenson/ruby-build +[rb_environment]: https://github.com/sstephenson/ruby-build#special-environment-variables +[rb_definitions]: https://github.com/sstephenson/ruby-build/tree/master/share/ruby-build + +[fnichol]: https://github.com/fnichol +[repo]: https://github.com/fnichol/chef-ruby_build +[issues]: https://github.com/fnichol/chef-ruby_build/issues diff --git a/vagrant/provision/cookbooks/ruby_build/Rakefile b/vagrant/provision/cookbooks/ruby_build/Rakefile new file mode 100644 index 0000000..619e75e --- /dev/null +++ b/vagrant/provision/cookbooks/ruby_build/Rakefile @@ -0,0 +1,21 @@ +#!/usr/bin/env rake +require 'foodcritic' + +begin + require 'emeril/rake' +rescue LoadError + puts ">>>>> Emeril gem not loaded, omitting tasks" unless ENV['CI'] +end + +FoodCritic::Rake::LintTask.new do |t| + t.options = { :fail_tags => ['any'] } +end + +begin + require 'kitchen/rake_tasks' + Kitchen::RakeTasks.new +rescue LoadError + puts ">>>>> Kitchen gem not loaded, omitting tasks" unless ENV['CI'] +end + +task :default => [:foodcritic] diff --git a/vagrant/provision/cookbooks/ruby_build/attributes/default.rb b/vagrant/provision/cookbooks/ruby_build/attributes/default.rb new file mode 100644 index 0000000..3ac5924 --- /dev/null +++ b/vagrant/provision/cookbooks/ruby_build/attributes/default.rb @@ -0,0 +1,67 @@ +# +# Cookbook Name:: ruby_build +# Attributes:: default +# +# Author:: Fletcher Nichol +# +# Copyright 2011, Fletcher Nichol +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# git repository containing the ruby-build framework +default['ruby_build']['git_url'] = "https://github.com/sstephenson/ruby-build.git" +default['ruby_build']['git_ref'] = "master" + +# default base path for a system-wide installed Ruby +default['ruby_build']['default_ruby_base_path'] = "/usr/local/ruby" + +# ruby-build upgrade action +default['ruby_build']['upgrade'] = "none" + +case platform +when "redhat", "centos", "fedora", "amazon", "scientific" + node.set['ruby_build']['install_pkgs'] = %w{ tar bash curl } + node.set['ruby_build']['install_git_pkgs'] = %w{ git } + node.set['ruby_build']['install_pkgs_cruby'] = + %w{ gcc-c++ patch readline readline-devel zlib zlib-devel + libffi-devel openssl-devel + make bzip2 autoconf automake libtool bison + libxml2 libxml2-devel libxslt libxslt-devel + subversion autoconf } + node.set['ruby_build']['install_pkgs_jruby'] = [] + +when "debian", "ubuntu" + node.set['ruby_build']['install_pkgs'] = %w{ tar bash curl } + node.set['ruby_build']['install_git_pkgs'] = %w{ git-core } + node.set['ruby_build']['install_pkgs_cruby'] = + %w{ build-essential bison openssl libreadline6 libreadline6-dev + zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 + libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev autoconf + libc6-dev ssl-cert subversion } + node.set['ruby_build']['install_pkgs_jruby'] = %w{ make g++ } + +when "suse" + node.set['ruby_build']['install_pkgs'] = %w{ tar bash curl } + node.set['ruby_build']['install_git_pkgs'] = %w{ git-core } + node.set['ruby_build']['install_pkgs_cruby'] = + %w{ gcc-c++ patch zlib zlib-devel libffi-devel + sqlite3-devel libxml2-devel libxslt-devel subversion autoconf } + node.set['ruby_build']['install_pkgs_jruby'] = [] + +when "mac_os_x" + node.set['ruby_build']['install_pkgs'] = [] + node.set['ruby_build']['install_git_pkgs'] = %w{ git-core } + node.set['ruby_build']['install_pkgs_cruby'] = [] + node.set['ruby_build']['install_pkgs_jruby'] = [] +end diff --git a/vagrant/provision/cookbooks/ruby_build/chefignore b/vagrant/provision/cookbooks/ruby_build/chefignore new file mode 100644 index 0000000..e375383 --- /dev/null +++ b/vagrant/provision/cookbooks/ruby_build/chefignore @@ -0,0 +1,53 @@ +# Put files/directories that should be ignored in this file. +# Lines that start with '# ' are comments. + +## OS +.DS_Store +Icon? +nohup.out + +## EDITORS +\#* +.#* +*~ +*.sw[a-z] +*.bak +REVISION +TAGS* +tmtags +*_flymake.* +*_flymake +*.tmproj +.project +.settings +mkmf.log + +## COMPILED +a.out +*.o +*.pyc +*.so + +## OTHER SCM +*/.bzr/* +*/.hg/* +*/.svn/* + +## Don't send rspecs up in cookbook +.watchr +.rspec +spec/* +spec/fixtures/* +test/* +features/* + +## SCM +.gitignore + +# Berkshelf +Berksfile +Berksfile.lock +cookbooks/* + +# Vagrant +.vagrant diff --git a/vagrant/provision/cookbooks/ruby_build/libraries/ruby_build_recipe_helpers.rb b/vagrant/provision/cookbooks/ruby_build/libraries/ruby_build_recipe_helpers.rb new file mode 100644 index 0000000..b309285 --- /dev/null +++ b/vagrant/provision/cookbooks/ruby_build/libraries/ruby_build_recipe_helpers.rb @@ -0,0 +1,40 @@ +# +# Cookbook Name:: ruby_build +# Library:: Chef::RubyBuild::RecipeHelpers +# +# Author:: Fletcher Nichol +# +# Copyright 2011, Fletcher Nichol +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +class Chef + module RubyBuild + module RecipeHelpers + def build_upgrade_strategy(strategy) + if strategy.nil? || strategy == false + "none" + else + strategy + end + end + + def mac_with_no_homebrew + node['platform'] == 'mac_os_x' && + Chef::Platform.find_provider_for_node(node, :package) != + Chef::Provider::Package::Homebrew + end + end + end +end diff --git a/vagrant/provision/cookbooks/ruby_build/metadata.rb b/vagrant/provision/cookbooks/ruby_build/metadata.rb new file mode 100644 index 0000000..5ffdf1c --- /dev/null +++ b/vagrant/provision/cookbooks/ruby_build/metadata.rb @@ -0,0 +1,18 @@ +name "ruby_build" +maintainer "Fletcher Nichol" +maintainer_email "fnichol@nichol.ca" +license "Apache 2.0" +description "Manages the ruby-build framework and its installed rubies. A LWRP is also defined." +long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) +version "0.8.1" + +supports "ubuntu" +supports "debian" +supports "freebsd" +supports "redhat" +supports "centos" +supports "fedora" +supports "amazon" +supports "scientific" +supports "suse" +supports "mac_os_x" diff --git a/vagrant/provision/cookbooks/ruby_build/providers/ruby.rb b/vagrant/provision/cookbooks/ruby_build/providers/ruby.rb new file mode 100644 index 0000000..42ac2f5 --- /dev/null +++ b/vagrant/provision/cookbooks/ruby_build/providers/ruby.rb @@ -0,0 +1,88 @@ +# +# Cookbook Name:: ruby_build +# Provider:: ruby +# +# Author:: Fletcher Nichol +# +# Copyright 2011, Fletcher Nichol +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +def load_current_resource + @rubie = new_resource.definition + @prefix_path = new_resource.prefix_path || + "#{node['ruby_build']['default_ruby_base_path']}/#{@rubie}" +end + +action :install do + perform_install +end + +action :reinstall do + perform_install +end + +private + +def perform_install + if ruby_installed? + Chef::Log.debug( + "ruby_build_ruby[#{@rubie}] is already installed, so skipping") + else + install_start = Time.now + + install_ruby_dependencies + + Chef::Log.info( + "Building ruby_build_ruby[#{@rubie}], this could take a while...") + + rubie = @rubie # bypass block scoping issue + prefix_path = @prefix_path # bypass block scoping issue + execute "ruby-build[#{rubie}]" do + command %{/usr/local/bin/ruby-build "#{rubie}" "#{prefix_path}"} + user new_resource.user if new_resource.user + group new_resource.group if new_resource.group + environment new_resource.environment if new_resource.environment + + action :nothing + end.run_action(:run) + + Chef::Log.info("ruby_build_ruby[#{@rubie}] build time was " + + "#{(Time.now - install_start)/60.0} minutes") + new_resource.updated_by_last_action(true) + end +end + +def ruby_installed? + if Array(new_resource.action).include?(:reinstall) + false + else + ::File.exists?("#{@prefix_path}/bin/ruby") + end +end + +def install_ruby_dependencies + case ::File.basename(new_resource.definition) + when /^\d\.\d\.\d-/, /^rbx-/, /^ree-/ + pkgs = node['ruby_build']['install_pkgs_cruby'] + when /^jruby-/ + pkgs = node['ruby_build']['install_pkgs_jruby'] + end + + Array(pkgs).each do |pkg| + package pkg do + action :nothing + end.run_action(:install) + end +end diff --git a/vagrant/provision/cookbooks/ruby_build/recipes/default.rb b/vagrant/provision/cookbooks/ruby_build/recipes/default.rb new file mode 100644 index 0000000..2331ed4 --- /dev/null +++ b/vagrant/provision/cookbooks/ruby_build/recipes/default.rb @@ -0,0 +1,69 @@ +# +# Cookbook Name:: ruby_build +# Recipe:: default +# +# Copyright 2011, Fletcher Nichol +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +class Chef::Recipe + # mix in recipe helpers + include Chef::RubyBuild::RecipeHelpers +end + +git_url = node['ruby_build']['git_url'] +git_ref = node['ruby_build']['git_ref'] +upgrade_strategy = build_upgrade_strategy(node['ruby_build']['upgrade']) + +cache_path = Chef::Config['file_cache_path'] +src_path = "#{cache_path}/ruby-build" + +unless mac_with_no_homebrew + Array(node['ruby_build']['install_pkgs']).each do |pkg| + package pkg + end + + Array(node['ruby_build']['install_git_pkgs']).each do |pkg| + package pkg do + not_if "git --version >/dev/null" + end + end +end + +execute "Install ruby-build" do + cwd src_path + command %{./install.sh} + + action :nothing + not_if do + ::File.exists?("/usr/local/bin/ruby-build") && upgrade_strategy == "none" + end +end + +directory ::File.dirname(src_path) do + recursive true +end + +git src_path do #~FC043 exception to support AWS OpsWorks using an older Chef + repository git_url + reference git_ref + + if upgrade_strategy == "none" + action :checkout + else + action :sync + end + + notifies :run, resources(:execute => "Install ruby-build"), :immediately +end diff --git a/vagrant/provision/cookbooks/ruby_build/resources/ruby.rb b/vagrant/provision/cookbooks/ruby_build/resources/ruby.rb new file mode 100644 index 0000000..89339e6 --- /dev/null +++ b/vagrant/provision/cookbooks/ruby_build/resources/ruby.rb @@ -0,0 +1,33 @@ +# +# Cookbook Name:: ruby_build +# Resource:: ruby +# +# Author:: Fletcher Nichol +# +# Copyright 2011, Fletcher Nichol +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +actions :install, :reinstall + +attribute :definition, :kind_of => String, :name_attribute => true +attribute :prefix_path, :kind_of => String +attribute :user, :kind_of => String +attribute :group, :kind_of => String +attribute :environment, :kind_of => Hash + +def initialize(*args) + super + @action = :install +end diff --git a/vagrant/provision/cookbooks/ruby_build/test/cookbooks/alltherubies/metadata.rb b/vagrant/provision/cookbooks/ruby_build/test/cookbooks/alltherubies/metadata.rb new file mode 100644 index 0000000..b71fd71 --- /dev/null +++ b/vagrant/provision/cookbooks/ruby_build/test/cookbooks/alltherubies/metadata.rb @@ -0,0 +1,10 @@ +name "alltherubies" +maintainer "Fletcher Nichol" +maintainer_email "fnichol@nichol.ca" +license "Apache 2.0" +description "Installs all-the-rubies via ruby_build cookbook" +long_description "Everything must be installed" +version "0.1.0" + +depends "java" +depends "user" diff --git a/vagrant/provision/cookbooks/ruby_build/test/cookbooks/alltherubies/recipes/default.rb b/vagrant/provision/cookbooks/ruby_build/test/cookbooks/alltherubies/recipes/default.rb new file mode 100644 index 0000000..4735866 --- /dev/null +++ b/vagrant/provision/cookbooks/ruby_build/test/cookbooks/alltherubies/recipes/default.rb @@ -0,0 +1,59 @@ +# +# Cookbook Name:: alltherubies +# Recipe:: default +# +# Copyright 2012, Fletcher Nichol +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +cores = node['cpu']['total'].to_i +system_rubies = %w{ 1.9.2-p320 1.9.3-p362 2.0.0-preview2 + jruby-1.7.1 rbx-2.0.0-rc1 } + +include_recipe "java" + +if %{ubuntu debian}.include?(node['platform']) + package "default-jre-headless" +end + +log "Forcing update of java alternatives" do + notifies :create, "ruby_block[update-java-alternatives]", :immediately +end + +system_rubies.each do |rubie| + ruby_build_ruby rubie do + environment({ 'MAKE_OPTS' => "-j #{cores + 1}" }) + end +end + +# Woah, REE, crazy bananas! For more details see: +# * https://github.com/sstephenson/rbenv/issues/297 +# * https://github.com/sstephenson/ruby-build/issues/186 +ruby_build_ruby "ree-1.8.7-2012.02" do + environment({ + 'MAKE_OPTS' => "-j #{cores + 1}", + 'CONFIGURE_OPTS' => "--no-tcmalloc", + }) +end + +user_account "app" do + home "/home/app" +end + +ruby_build_ruby "1.8.7-p371" do + prefix_path "/home/app/.rubies/ruby-1.8.7-p371" + user "app" + group "app" + environment({ 'MAKE_OPTS' => "-j #{cores + 1}" }) +end diff --git a/vagrant/provision/cookbooks/ruby_build/test/integration/alltherubies/bats/_verify_tests.bash b/vagrant/provision/cookbooks/ruby_build/test/integration/alltherubies/bats/_verify_tests.bash new file mode 100644 index 0000000..9597bc9 --- /dev/null +++ b/vagrant/provision/cookbooks/ruby_build/test/integration/alltherubies/bats/_verify_tests.bash @@ -0,0 +1,33 @@ +setup() { + export HOME=/root + export PATH="$ruby_root/bin:$PATH" + eval `$ruby_root/bin/ruby - <) +- Copyright:: 2009-2012, Opscode, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/vagrant/provision/cookbooks/xml/attributes/default.rb b/vagrant/provision/cookbooks/xml/attributes/default.rb new file mode 100755 index 0000000..3efa14a --- /dev/null +++ b/vagrant/provision/cookbooks/xml/attributes/default.rb @@ -0,0 +1,8 @@ +case node['platform_family'] +when "rhel", "fedora" + default['xml']['packages'] = %w{ libxml2-devel libxslt-devel } +when "ubuntu","debian" + default['xml']['packages'] = %w{ libxml2-dev libxslt-dev } +when "freebsd", "arch" + default['xml']['packages'] = %w{ libxml2 libxslt } +end diff --git a/vagrant/provision/cookbooks/xml/metadata.json b/vagrant/provision/cookbooks/xml/metadata.json new file mode 100755 index 0000000..9cf86a1 --- /dev/null +++ b/vagrant/provision/cookbooks/xml/metadata.json @@ -0,0 +1,41 @@ +{ + "name": "xml", + "description": "Installs xml", + "long_description": "Description\n===========\n\nInstalls development package for libxml.\n\nRequirements\n============\n\nDebian, Ubuntu, CentOS, Red Hat, Scientific, Fedora, SUSE, ArchLinux\n\nAttributes\n==========\n\n* `node['xml']['packages']` - Array of package names that should be\n installed\n\nRecipes\n=======\n\n## default\n\nInstalls the development packages for libxml2 and libxslt.\n\n## ruby\n\nInstalls the nokogiri gem into Chef's Ruby environment so it can be\nused in recipes.\n\nLicense and Author\n==================\n\n- Author:: Joshua Timberman ()\n- Copyright:: 2009-2012, Opscode, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n", + "maintainer": "Opscode, Inc.", + "maintainer_email": "cookbooks@opscode.com", + "license": "Apache 2.0", + "platforms": { + "centos": ">= 0.0.0", + "redhat": ">= 0.0.0", + "scientific": ">= 0.0.0", + "suse": ">= 0.0.0", + "fedora": ">= 0.0.0", + "amazon": ">= 0.0.0", + "ubuntu": ">= 0.0.0", + "debian": ">= 0.0.0", + "freebsd": ">= 0.0.0", + "arch": ">= 0.0.0" + }, + "dependencies": { + "build-essential": ">= 0.0.0" + }, + "recommendations": { + }, + "suggestions": { + }, + "conflicting": { + }, + "providing": { + }, + "replacing": { + }, + "attributes": { + }, + "groupings": { + }, + "recipes": { + "xml": "Installs libxml development packages" + }, + "version": "1.1.2" +} \ No newline at end of file diff --git a/vagrant/provision/cookbooks/xml/metadata.rb b/vagrant/provision/cookbooks/xml/metadata.rb new file mode 100755 index 0000000..f80fee0 --- /dev/null +++ b/vagrant/provision/cookbooks/xml/metadata.rb @@ -0,0 +1,14 @@ +name "xml" +maintainer "Opscode, Inc." +maintainer_email "cookbooks@opscode.com" +license "Apache 2.0" +description "Installs xml" +long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) +version "1.1.2" + +recipe "xml", "Installs libxml development packages" + +%w{ centos redhat scientific suse fedora amazon ubuntu debian freebsd arch }.each do |os| + supports os +end +depends "build-essential" diff --git a/vagrant/provision/cookbooks/xml/recipes/default.rb b/vagrant/provision/cookbooks/xml/recipes/default.rb new file mode 100755 index 0000000..8cf8427 --- /dev/null +++ b/vagrant/provision/cookbooks/xml/recipes/default.rb @@ -0,0 +1,24 @@ +# +# Cookbook Name:: xml +# Recipe:: default +# +# Copyright 2010-2012, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +node['xml']['packages'].each do |pkg| + package pkg do + action :install + end +end diff --git a/vagrant/provision/cookbooks/xml/recipes/ruby.rb b/vagrant/provision/cookbooks/xml/recipes/ruby.rb new file mode 100755 index 0000000..49a5055 --- /dev/null +++ b/vagrant/provision/cookbooks/xml/recipes/ruby.rb @@ -0,0 +1,35 @@ +# +# Cookbook Name:: xml +# Recipe:: ruby +# +# Author:: Joseph Holsten () +# +# Copyright 2008-2012, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +execute 'apt-get update' do + ignore_failure true + action :nothing +end.run_action(:run) if 'debian' == node['platform_family'] + +node.set['build_essential']['compiletime'] = true +include_recipe "build-essential" +include_recipe 'xml::default' + +node['xml']['packages'].each do |xml_pack| + resources("package[#{xml_pack}]").run_action(:install) +end + +chef_gem 'nokogiri' diff --git a/vagrant/provision/cookbooks/yum/CHANGELOG.md b/vagrant/provision/cookbooks/yum/CHANGELOG.md new file mode 100755 index 0000000..0763d67 --- /dev/null +++ b/vagrant/provision/cookbooks/yum/CHANGELOG.md @@ -0,0 +1,112 @@ +yum Cookbook CHANGELOG +====================== +This file is used to list changes made in each version of the yum cookbook. + + +v2.3.2 +------ +### Bug +- **[COOK-3145](https://tickets.opscode.com/browse/COOK-3145)** - Use correct download URL for epel `key_url` + +v2.3.0 +------ +### New Feature +- [COOK-2924]: Yum should allow type setting in repo file + +v2.2.4 +------ +### Bug +- [COOK-2360]: last commit to `yum_repository` changes previous behaviour +- [COOK-3015]: Yum cookbook test minitest to fail + +v2.2.2 +------ +### Improvement +- [COOK-2741]: yum::elrepo +- [COOK-2946]: update tests, test kitchen support in yum cookbook + +### Bug +- [COOK-2639]: Yum cookbook - epel - always assumes url is a mirror list +- [COOK-2663]: Yum should allow metadata_expire setting in repo file +- [COOK-2751]: Update yum.ius_release version to 1.0-11 + +v2.2.0 +------ +- [COOK-2189] - yum::ius failed on install (caused from rpm dependency) +- [COOK-2196] - Make includepkgs and exclude configurable for each repos +- [COOK-2244] - Allow configuring caching using attributes +- [COOK-2399] - yum cookbook LWRPs fail FoodCritic +- [COOK-2519] - Add priority option to Yum repo files +- [COOK-2593] - allow integer or string for yum priority +- [COOK-2643] - don't use conditional attribute for `yum_key` `remote_file` + +v2.1.0 +------ +- [COOK-2045] - add remi repository recipe +- [COOK-2121] - add `:create` action to `yum_repository` + +v2.0.6 +------ +- [COOK-2037] - minor style fixes +- [COOK-2038] - updated README + +v2.0.4 +------ +- [COOK-1908] - unable to install repoforge on CentOS 6 32 bit + +v2.0.2 +------ +- [COOK-1758] - Add default action for repository resource + +v2.0.0 +------ +This version changes the behavior of the EPEL recipe (most commonly used in other Opscode cookbooks) on Amazon, and removes an attribute, `node['yum']['epel_release']`. See the README for details. + +- [COOK-1772] - Simplify management of EPEL with LWRP + +v1.0.0 +------ +`mirrorlist` in the `yum_repository` LWRP must be set to the mirror list URI to use rather than setting it to true. See README.md. + +- [COOK-1088] - use dl.fedoraproject.org for EPEL to prevent redirects +- [COOK-1653] - fix mirrorlist +- [COOK-1710] - support http proxy +- [COOK-1722] - update IUS version + +v0.8.2 +------ +- [COOK-1521] - add :update action to `yum_repository` + +v0.8.0 +------ +- [COOK-1204] - Make 'add' default action for yum_repository +- [COOK-1351] - option to not make the yum cache (via attribute) +- [COOK-1353] - x86_64 centos path fixes +- [COOK-1414] - recipe for repoforge + +v0.6.2 +------ +- Updated README to remove git diff artifacts. + +v0.6.0 +------ +- Default action for the yum_repository LWRP is now add. +- [COOK-1227] - clear Chefs internal cache after adding new yum repo +- [COOK-1262] - yum::epel should enable existing repo on Amazon Linux +- [COOK-1272], [COOK-1302] - update RPM file for CentOS / RHEL 6 +- [COOK-1330] - update cookbook documentation on excludes for yum +- [COOK-1346] - retry remote_file for EPEL in case we get an FTP mirror + + +v0.5.2 +------ +- [COOK-825] - epel and ius `remote_file` should notify the `rpm_package` to install + +v0.5.0 +------ +- [COOK-675] - add recipe for handling EPEL repository +- [COOK-722] - add recipe for handling IUS repository + +v.0.1.2 +------ +- Remove yum update in default recipe, that doesn't update caches, it updates packages installed. diff --git a/vagrant/provision/cookbooks/yum/README.md b/vagrant/provision/cookbooks/yum/README.md new file mode 100755 index 0000000..65d6b2a --- /dev/null +++ b/vagrant/provision/cookbooks/yum/README.md @@ -0,0 +1,222 @@ +yum Cookbook +============ +Configures various YUM components on Red Hat-like systems. Includes LWRP for managing repositories and their GPG keys. + +Based on the work done by Eric Wolfe and Charles Duffy on the [yumrepo](https://github.com/atomic-penguin/cookbook-yumrepo) cookbook. + + +Requirements +------------ +Red Hat Enterprise Linux 5, and 6 distributions within this platform family. + + +Attributes +---------- +* `yum['exclude']` + - An array containing a list of packages to exclude from updates or installs. Wildcards and shell globs are supported. + - Defaults to an empty exclude list. + +* `yum['installonlypkgs']` + - An array containing a list of packages which should only be + installed, never updated. + - Defaults to an empty install-only list. + +* `yum['ius_release']` + - Set the IUS release to install. + - Defaults to the current release of the IUS repo. + +* `yum['repoforge_release']` + - Set the RepoForge release to install. + - Defaults to the current release of the repoforge repo. + +EPEL attributes used in the `yum::epel` recipe, see `attributes/epel.rb` for default values: + +* `yum['epel']['key']` + - Name of the GPG key used for the repo. + +* `yum['epel']['baseurl']` + - Base URL to an EPEL mirror. + +* `yum['epel']['url']` + - URL to the EPEL mirrorlist. + +* `yum['epel']['key_url']` + - URL to the GPG key for the repo. + +* `yum['epel']['includepkgs']` + - list of packages you want to use for the repo. + +* `yum['epel']['exclude']` + - list of packages you do NOT want to use for the repo. + +The `node['yum']['epel_release']` attribute is removed, see the __epel__ recipe information below. + +remi attributes used in the `yum::remi` recipe, see `attributes/remi.rb` for default values: + +* `yum['remi']['key']` + - Name of the GPG key used for the repo. + +* `yum['remi']['url']` + - URL to the remi mirrorlist. + +* `yum['remi']['key_url']` + - URL to the GPG key for the repo. + +* `yum['remi']['includepkgs']` + - list of packages you want to use for the repo. + +* `yum['remi']['exclude']` + - list of packages you do NOT want to use for the repo. + +Proxy settings used in yum.conf on RHEL family 5 and 6: + +* `yum['proxy']` + - Set the URL for an HTTP proxy + - None of the proxy settings are used if this is an empty string + (default) + +* `yum['proxy_username']` + - Set the username for the proxy + - not used if `yum['proxy']` above is an empty string + +* `yum['proxy_password']` + - Set the password for the proxy + - not used if `yum['proxy']` above is an empty string + + +Recipes +------- +### default +The default recipe does nothing. + +### yum +Manages the configuration of the `/etc/yum.conf` via attributes. See the aforementioned Array attributes `yum['exclude']` and `yum['installonlypkgs']`. + +### epel +Uses the `yum_key` and `yum_repository` resources from this cookbook are used to manage the main EPEL repository. If you need other EPEL repositories (source, debug-info), use the `yum_repository` LWRP in your own cookbook where those packages are required. The recipe will use the `yum['epel']` attributes (see above) to configure the key, url and download the GPG key for the repo. The defaults are detected by platform and version and should just work without modification in most use cases. + +On all platforms except Amazon, the action is to add the repository. On Amazon, the action is add and update. + +Amazon Linux has the EPEL repositories already added in the AMI. In previous versions of this cookbook, they were enabled with `yum-config-manager`, however in the current version, we manage the repository using the LWRP. The main difference is that the source and debuginfo repositories are not available, but if they're needed, add them using the `yum_repository` LWRP in your own cookbook(s). + +### ius +Installs the [IUS Community repositories](http://iuscommunity.org/Repos) via RPM. Uses the `node['yum']['ius_release']` attribute to select the right version of the package to install. + +The IUS repository requires EPEL, and includes `yum::epel` as a dependency. + +### repoforge +Installs the [RepoForge repositories](http://repoforge.org/) via RPM. Uses the `node['yum']['repoforge_release']` attribute to select the right version of the package to install. + +The RepoForge repository requires EPEL, and includes `yum::epel` as a dependency. + +### remi +Install the [Les RPM de Remi - Repository](http://rpms.famillecollet.com/) with the `yum_key` and `yum_repository` resources from this cookbook are used to manage the remi repository. Use the `yum['remi']` attributes (see above) to configure the key, url and download the GPG key for the repo. The defaults are detected by platform and should just work without modification in most use cases. + + +Resources/Providers +------------------- +### yum_key +This LWRP handles importing GPG keys for YUM repositories. Keys can be imported by the `url` parameter or placed in `/etc/pki/rpm-gpg/` by a recipe and then installed with the LWRP without passing the URL. + +#### Actions +- :add: installs the GPG key into `/etc/pki/rpm-gpg/` +- :remove: removes the GPG key from `/etc/pki/rpm-gpg/` + +#### Attribute Parameters +- key: name attribute. The name of the GPG key to install. +- url: if the key needs to be downloaded, the URL providing the download. + +#### Example + +``` ruby +# add the Zenoss GPG key +yum_key "RPM-GPG-KEY-zenoss" do + url "http://dev.zenoss.com/yum/RPM-GPG-KEY-zenoss" + action :add +end + +# remove Zenoss GPG key +yum_key "RPM-GPG-KEY-zenoss" do + action :remove +end +``` + +### yum_repository +This LWRP provides an easy way to manage additional YUM repositories. GPG keys can be managed with the `yum_key` LWRP. The LWRP automatically updates the package management cache upon the first run, when a new repo is added. + +#### Actions +- :create: creates a repository file and builds the repository listing +- :add: runs create action if repository file is missing (default) +- :remove: removes the repository file +- :update: updates the repository + +#### Attribute Parameters +- repo_name: name attribute. The name of the channel to discover +- description. The description of the repository +- url: The URL providing the packages, used for baseurl in the config +- mirrorlist: Set this as a string containing the URI to the + mirrorlist, start with "http://", "ftp://", "file://"; use "file://" + if the mirrorlist is a text file on the system. +- key: Optional, the name of the GPG key file installed by the `key` + LWRP. +- enabled: Default is `1`, set to `0` if the repository is disabled. +- type: Optional, alternate type of repository +- failovermethod: Optional, failovermethod +- bootstrapurl: Optional, bootstrapurl +- make_cache: Optional, Default is `true`, if `false` then `yum -q + makecache` will not be ran +- metadata_expire: Optional, Default is nil (or not applied) +- type: Optional, Default is nil (or not applied) + +*Note*: When using both url (to set baseurl) and mirrorlist, it is probably a good idea to also install the fastestmirror plugin, and use failovermethod "priority". + +#### Example +``` ruby +# add the Zenoss repository +yum_repository "zenoss" do + repo_name "zenoss" + description "Zenoss Stable repo" + url "http://dev.zenoss.com/yum/stable/" + key "RPM-GPG-KEY-zenoss" + action :add +end + +# remove Zenoss repo +yum_repository "zenoss" do + action :remove +end +``` + + +Usage +----- +Put `recipe[yum::yum]` in the run list to ensure yum is configured correctly for your environment within your Chef run. + +Use the `yum::epel` recipe to enable EPEL, or the `yum::ius` recipe to enable IUS, or the `yum::repoforge` recipe to enable RepoForge, or the `yum::remi` recipe to enable remi per __Recipes__ section above. + +You can manage GPG keys either with cookbook_file in a recipe if you want to package it with a cookbook or use the `url` parameter of the `key` LWRP. + + +License & Authors +----------------- +- Author:: Eric G. Wolfe +- Author:: Matt Ray () +- Author:: Joshua Timberman () + +```text +Copyright:: 2010 Tippr Inc. +Copyright:: 2011 Eric G. Wolfe +Copyright:: 2011-2012 Opscode, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +``` diff --git a/vagrant/provision/cookbooks/yum/attributes/default.rb b/vagrant/provision/cookbooks/yum/attributes/default.rb new file mode 100755 index 0000000..085ac99 --- /dev/null +++ b/vagrant/provision/cookbooks/yum/attributes/default.rb @@ -0,0 +1,30 @@ +# +# Cookbook Name:: yum +# Attributes:: default +# +# Copyright 2011, Eric G. Wolfe +# Copyright 2011, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# Example: override.yum.exclude = "kernel* compat-glibc*" +default['yum']['exclude'] = Array.new +default['yum']['installonlypkgs'] = Array.new +default['yum']['ius_release'] = '1.0-11' +default['yum']['repoforge_release'] = '0.5.2-2' +default['yum']['proxy'] = '' +default['yum']['proxy_username'] = '' +default['yum']['proxy_password'] = '' +default['yum']['cachedir'] = '/var/cache/yum' +default['yum']['keepcache'] = 0 diff --git a/vagrant/provision/cookbooks/yum/attributes/elrepo.rb b/vagrant/provision/cookbooks/yum/attributes/elrepo.rb new file mode 100755 index 0000000..5c97402 --- /dev/null +++ b/vagrant/provision/cookbooks/yum/attributes/elrepo.rb @@ -0,0 +1,24 @@ +# +# Cookbook Name:: yum +# Attributes:: elrepo +# +# Copyright 2013, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +default['yum']['elrepo']['url'] = "http://elrepo.org/mirrors-elrepo.el#{node['platform_version'].to_i}" +default['yum']['elrepo']['key'] = "RPM-GPG-KEY-elrepo.org" +default['yum']['elrepo']['key_url'] = "http://elrepo.org/#{node['yum']['elrepo']['key']}" +default['yum']['elrepo']['includepkgs'] = nil +default['yum']['elrepo']['exclude'] = nil diff --git a/vagrant/provision/cookbooks/yum/attributes/epel.rb b/vagrant/provision/cookbooks/yum/attributes/epel.rb new file mode 100755 index 0000000..c2247f8 --- /dev/null +++ b/vagrant/provision/cookbooks/yum/attributes/epel.rb @@ -0,0 +1,39 @@ +# +# Cookbook Name:: yum +# Attributes:: epel +# +# Copyright 2011, Eric G. Wolfe +# Copyright 2011, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +case node['platform'] +when "amazon" + default['yum']['epel']['url'] = "http://mirrors.fedoraproject.org/mirrorlist?repo=epel-6&arch=$basearch" + default['yum']['epel']['baseurl'] = "" + default['yum']['epel']['key'] = "RPM-GPG-KEY-EPEL-6" +else + default['yum']['epel']['url'] = "http://mirrors.fedoraproject.org/mirrorlist?repo=epel-#{node['platform_version'].to_i}&arch=$basearch" + default['yum']['epel']['baseurl'] = "" + + if node['platform_version'].to_i >= 6 + default['yum']['epel']['key'] = "RPM-GPG-KEY-EPEL-6" + else + default['yum']['epel']['key'] = "RPM-GPG-KEY-EPEL" + end +end + +default['yum']['epel']['key_url'] = "http://dl.fedoraproject.org/pub/epel/#{node['yum']['epel']['key']}" +default['yum']['epel']['includepkgs'] = nil +default['yum']['epel']['exclude'] = nil diff --git a/vagrant/provision/cookbooks/yum/attributes/remi.rb b/vagrant/provision/cookbooks/yum/attributes/remi.rb new file mode 100755 index 0000000..b80ee2c --- /dev/null +++ b/vagrant/provision/cookbooks/yum/attributes/remi.rb @@ -0,0 +1,30 @@ +# +# Cookbook Name:: yum +# Attributes:: remi +# +# Copyright 2011, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +case node['platform'] +when "fedora" + default['yum']['remi']['url'] = "http://rpms.famillecollet.com/fedora/#{node['platform_version'].to_i}/remi/mirror" +else + default['yum']['remi']['url'] = "http://rpms.famillecollet.com/enterprise/#{node['platform_version'].to_i}/remi/mirror" +end + +default['yum']['remi']['key'] = "RPM-GPG-KEY-remi" +default['yum']['remi']['key_url'] = "http://rpms.famillecollet.com/#{node['yum']['remi']['key']}" +default['yum']['remi']['includepkgs'] = nil +default['yum']['remi']['exclude'] = nil diff --git a/vagrant/provision/cookbooks/yum/files/default/tests/minitest/default_test.rb b/vagrant/provision/cookbooks/yum/files/default/tests/minitest/default_test.rb new file mode 100755 index 0000000..76f1a14 --- /dev/null +++ b/vagrant/provision/cookbooks/yum/files/default/tests/minitest/default_test.rb @@ -0,0 +1,28 @@ +# +# Cookbook Name:: yum +# Recipe:: default +# +# Copyright 2013, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +require File.expand_path('../support/helpers', __FILE__) + +describe "yum::default" do + include Helpers::YumTest + + it "Default recipe does nothing, so default_test does nothing" do + skip "Default recipe does nothing so default test does nothing" + end +end diff --git a/vagrant/provision/cookbooks/yum/files/default/tests/minitest/support/helpers.rb b/vagrant/provision/cookbooks/yum/files/default/tests/minitest/support/helpers.rb new file mode 100755 index 0000000..cbc099e --- /dev/null +++ b/vagrant/provision/cookbooks/yum/files/default/tests/minitest/support/helpers.rb @@ -0,0 +1,37 @@ +# +# Cookbook Name:: yum_test +# Recipe:: default +# +# Copyright 2013, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +module Helpers + module YumTest + require 'chef/mixin/shell_out' + include Chef::Mixin::ShellOut + include MiniTest::Chef::Assertions + include MiniTest::Chef::Context + include MiniTest::Chef::Resources + + # This isn't the most efficient thing in the world, but it works + # reliably as yum will only return the repos that are actually + # enabled. It would probably be more efficient, since we're at the + # end of the successful run, to cache the output to a file and + # inspect its contents. + def repo_enabled(repo) + shell_out("yum repolist enabled --verbose | grep Repo-id").stdout.include?(repo) + end + end +end diff --git a/vagrant/provision/cookbooks/yum/files/default/tests/minitest/test_test.rb b/vagrant/provision/cookbooks/yum/files/default/tests/minitest/test_test.rb new file mode 100755 index 0000000..3db9fe2 --- /dev/null +++ b/vagrant/provision/cookbooks/yum/files/default/tests/minitest/test_test.rb @@ -0,0 +1,66 @@ +# +# Cookbook Name:: yum +# +# Copyright 2013, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +require File.expand_path('../support/helpers', __FILE__) + +describe "yum::test" do + # helpers includes the repo_enabled method used to test that repos + # are in fact enabled. + include Helpers::YumTest + + describe "elrepo" do + it "enables the elrepo repository" do + assert(repo_enabled("elrepo")) + end + end + + describe "epel" do + it "enables the epel repository" do + assert(repo_enabled("epel")) + end + end + + describe "ius" do + it "enables the ius repository" do + assert(repo_enabled("ius")) + end + end + + describe "remi" do + it "enables the remi repository" do + assert(repo_enabled("remi")) + end + end + + describe "repoforge" do + it "enables the repoforge repository" do + assert(repo_enabled("rpmforge")) + end + end + + describe "cook-2121" do + + it 'doesnt update the zenos-add.repo file if it exists' do + assert File.zero?('/etc/yum.repos.d/zenoss-add.repo') + end + + it 'updates the zenoss-create file' do + file('/etc/yum.repos.d/zenoss-create.repo').must_match %r[baseurl=http://dev.zenoss.com/yum/stable/] + end + end +end diff --git a/vagrant/provision/cookbooks/yum/metadata.json b/vagrant/provision/cookbooks/yum/metadata.json new file mode 100755 index 0000000..d39607d --- /dev/null +++ b/vagrant/provision/cookbooks/yum/metadata.json @@ -0,0 +1,60 @@ +{ + "name": "yum", + "version": "2.3.2", + "description": "A fabulous new cookbook", + "long_description": "yum Cookbook\n============\nConfigures various YUM components on Red Hat-like systems. Includes LWRP for managing repositories and their GPG keys.\n\nBased on the work done by Eric Wolfe and Charles Duffy on the [yumrepo](https://github.com/atomic-penguin/cookbook-yumrepo) cookbook.\n\n\nRequirements\n------------\nRed Hat Enterprise Linux 5, and 6 distributions within this platform family.\n\n\nAttributes\n----------\n* `yum['exclude']`\n - An array containing a list of packages to exclude from updates or installs. Wildcards and shell globs are supported.\n - Defaults to an empty exclude list.\n\n* `yum['installonlypkgs']`\n - An array containing a list of packages which should only be\n installed, never updated.\n - Defaults to an empty install-only list.\n\n* `yum['ius_release']`\n - Set the IUS release to install.\n - Defaults to the current release of the IUS repo.\n\n* `yum['repoforge_release']`\n - Set the RepoForge release to install.\n - Defaults to the current release of the repoforge repo.\n\nEPEL attributes used in the `yum::epel` recipe, see `attributes/epel.rb` for default values:\n\n* `yum['epel']['key']`\n - Name of the GPG key used for the repo.\n\n* `yum['epel']['baseurl']`\n - Base URL to an EPEL mirror.\n\n* `yum['epel']['url']`\n - URL to the EPEL mirrorlist.\n\n* `yum['epel']['key_url']`\n - URL to the GPG key for the repo.\n\n* `yum['epel']['includepkgs']`\n - list of packages you want to use for the repo.\n\n* `yum['epel']['exclude']`\n - list of packages you do NOT want to use for the repo.\n\nThe `node['yum']['epel_release']` attribute is removed, see the __epel__ recipe information below.\n\nremi attributes used in the `yum::remi` recipe, see `attributes/remi.rb` for default values:\n\n* `yum['remi']['key']`\n - Name of the GPG key used for the repo.\n\n* `yum['remi']['url']`\n - URL to the remi mirrorlist.\n\n* `yum['remi']['key_url']`\n - URL to the GPG key for the repo.\n\n* `yum['remi']['includepkgs']`\n - list of packages you want to use for the repo.\n\n* `yum['remi']['exclude']`\n - list of packages you do NOT want to use for the repo.\n\nProxy settings used in yum.conf on RHEL family 5 and 6:\n\n* `yum['proxy']`\n - Set the URL for an HTTP proxy\n - None of the proxy settings are used if this is an empty string\n (default)\n\n* `yum['proxy_username']`\n - Set the username for the proxy\n - not used if `yum['proxy']` above is an empty string\n\n* `yum['proxy_password']`\n - Set the password for the proxy\n - not used if `yum['proxy']` above is an empty string\n\n\nRecipes\n-------\n### default\nThe default recipe does nothing.\n\n### yum\nManages the configuration of the `/etc/yum.conf` via attributes. See the aforementioned Array attributes `yum['exclude']` and `yum['installonlypkgs']`.\n\n### epel\nUses the `yum_key` and `yum_repository` resources from this cookbook are used to manage the main EPEL repository. If you need other EPEL repositories (source, debug-info), use the `yum_repository` LWRP in your own cookbook where those packages are required. The recipe will use the `yum['epel']` attributes (see above) to configure the key, url and download the GPG key for the repo. The defaults are detected by platform and version and should just work without modification in most use cases.\n\nOn all platforms except Amazon, the action is to add the repository. On Amazon, the action is add and update.\n\nAmazon Linux has the EPEL repositories already added in the AMI. In previous versions of this cookbook, they were enabled with `yum-config-manager`, however in the current version, we manage the repository using the LWRP. The main difference is that the source and debuginfo repositories are not available, but if they're needed, add them using the `yum_repository` LWRP in your own cookbook(s).\n\n### ius\nInstalls the [IUS Community repositories](http://iuscommunity.org/Repos) via RPM. Uses the `node['yum']['ius_release']` attribute to select the right version of the package to install.\n\nThe IUS repository requires EPEL, and includes `yum::epel` as a dependency.\n\n### repoforge\nInstalls the [RepoForge repositories](http://repoforge.org/) via RPM. Uses the `node['yum']['repoforge_release']` attribute to select the right version of the package to install.\n\nThe RepoForge repository requires EPEL, and includes `yum::epel` as a dependency.\n\n### remi\nInstall the [Les RPM de Remi - Repository](http://rpms.famillecollet.com/) with the `yum_key` and `yum_repository` resources from this cookbook are used to manage the remi repository. Use the `yum['remi']` attributes (see above) to configure the key, url and download the GPG key for the repo. The defaults are detected by platform and should just work without modification in most use cases.\n\n\nResources/Providers\n-------------------\n### yum_key\nThis LWRP handles importing GPG keys for YUM repositories. Keys can be imported by the `url` parameter or placed in `/etc/pki/rpm-gpg/` by a recipe and then installed with the LWRP without passing the URL.\n\n#### Actions\n- :add: installs the GPG key into `/etc/pki/rpm-gpg/`\n- :remove: removes the GPG key from `/etc/pki/rpm-gpg/`\n\n#### Attribute Parameters\n- key: name attribute. The name of the GPG key to install.\n- url: if the key needs to be downloaded, the URL providing the download.\n\n#### Example\n\n``` ruby\n# add the Zenoss GPG key\nyum_key \"RPM-GPG-KEY-zenoss\" do\n url \"http://dev.zenoss.com/yum/RPM-GPG-KEY-zenoss\"\n action :add\nend\n\n# remove Zenoss GPG key\nyum_key \"RPM-GPG-KEY-zenoss\" do\n action :remove\nend\n```\n\n### yum_repository\nThis LWRP provides an easy way to manage additional YUM repositories. GPG keys can be managed with the `yum_key` LWRP. The LWRP automatically updates the package management cache upon the first run, when a new repo is added.\n\n#### Actions\n- :create: creates a repository file and builds the repository listing\n- :add: runs create action if repository file is missing (default)\n- :remove: removes the repository file\n- :update: updates the repository\n\n#### Attribute Parameters\n- repo_name: name attribute. The name of the channel to discover\n- description. The description of the repository\n- url: The URL providing the packages, used for baseurl in the config\n- mirrorlist: Set this as a string containing the URI to the\n mirrorlist, start with \"http://\", \"ftp://\", \"file://\"; use \"file://\"\n if the mirrorlist is a text file on the system.\n- key: Optional, the name of the GPG key file installed by the `key`\n LWRP.\n- enabled: Default is `1`, set to `0` if the repository is disabled.\n- type: Optional, alternate type of repository\n- failovermethod: Optional, failovermethod\n- bootstrapurl: Optional, bootstrapurl\n- make_cache: Optional, Default is `true`, if `false` then `yum -q\n makecache` will not be ran\n- metadata_expire: Optional, Default is nil (or not applied)\n- type: Optional, Default is nil (or not applied)\n\n*Note*: When using both url (to set baseurl) and mirrorlist, it is probably a good idea to also install the fastestmirror plugin, and use failovermethod \"priority\".\n\n#### Example\n``` ruby\n# add the Zenoss repository\nyum_repository \"zenoss\" do\n repo_name \"zenoss\"\n description \"Zenoss Stable repo\"\n url \"http://dev.zenoss.com/yum/stable/\"\n key \"RPM-GPG-KEY-zenoss\"\n action :add\nend\n\n# remove Zenoss repo\nyum_repository \"zenoss\" do\n action :remove\nend\n```\n\n\nUsage\n-----\nPut `recipe[yum::yum]` in the run list to ensure yum is configured correctly for your environment within your Chef run.\n\nUse the `yum::epel` recipe to enable EPEL, or the `yum::ius` recipe to enable IUS, or the `yum::repoforge` recipe to enable RepoForge, or the `yum::remi` recipe to enable remi per __Recipes__ section above.\n\nYou can manage GPG keys either with cookbook_file in a recipe if you want to package it with a cookbook or use the `url` parameter of the `key` LWRP.\n\n\nLicense & Authors\n-----------------\n- Author:: Eric G. Wolfe\n- Author:: Matt Ray ()\n- Author:: Joshua Timberman ()\n\n```text\nCopyright:: 2010 Tippr Inc.\nCopyright:: 2011 Eric G. Wolfe\nCopyright:: 2011-2012 Opscode, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n", + "maintainer": "Opscode, Inc.", + "maintainer_email": "cookbooks@opscode.com", + "license": "Apache 2.0", + "platforms": { + "redhat": ">= 5.0.0", + "centos": ">= 5.0.0", + "scientific": ">= 5.0.0", + "amazon": ">= 5.0.0" + }, + "dependencies": { + }, + "recommendations": { + }, + "suggestions": { + }, + "conflicting": { + }, + "providing": { + }, + "replacing": { + }, + "attributes": { + "yum/exclude": { + "display_name": "yum.conf exclude", + "description": "List of packages to exclude from updates or installs. This should be an array. Shell globs using wildcards (eg. * and ?) are allowed.", + "required": "optional" + }, + "yum/installonlypkgs": { + "display_name": "yum.conf installonlypkgs", + "description": "List of packages that should only ever be installed, never updated. Kernels in particular fall into this category. Defaults to kernel, kernel-smp, kernel-bigmem, kernel-enterprise, kernel-debug, kernel-unsupported.", + "required": "optional" + }, + "yum/proxy": { + "display_name": "yum.conf proxy", + "description": "Set the http URL for proxy to use in yum.conf", + "required": "optional" + }, + "yum/proxy_username": { + "display_name": "yum.conf proxy_username", + "description": "Set the proxy_username to use for yum.conf", + "required": "optional" + }, + "yum/proxy_password": { + "display_name": "yum.conf proxy_password", + "description": "Set the proxy_password to use for yum.conf", + "required": "optional" + } + }, + "groupings": { + }, + "recipes": { + "yum": "Empty recipe.", + "yum::yum": "Manages yum configuration" + } +} \ No newline at end of file diff --git a/vagrant/provision/cookbooks/yum/metadata.rb b/vagrant/provision/cookbooks/yum/metadata.rb new file mode 100755 index 0000000..29b11f2 --- /dev/null +++ b/vagrant/provision/cookbooks/yum/metadata.rb @@ -0,0 +1,37 @@ +name "yum" +maintainer "Opscode, Inc." +maintainer_email "cookbooks@opscode.com" +license "Apache 2.0" +long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) +version "2.3.2" +recipe "yum", "Empty recipe." +recipe "yum::yum", "Manages yum configuration" + +%w{ redhat centos scientific amazon }.each do |os| + supports os, ">= 5.0" +end + +attribute "yum/exclude", + :display_name => "yum.conf exclude", + :description => "List of packages to exclude from updates or installs. This should be an array. Shell globs using wildcards (eg. * and ?) are allowed.", + :required => "optional" + +attribute "yum/installonlypkgs", + :display_name => "yum.conf installonlypkgs", + :description => "List of packages that should only ever be installed, never updated. Kernels in particular fall into this category. Defaults to kernel, kernel-smp, kernel-bigmem, kernel-enterprise, kernel-debug, kernel-unsupported.", + :required => "optional" + +attribute "yum/proxy", + :display_name => "yum.conf proxy", + :description => "Set the http URL for proxy to use in yum.conf", + :required => "optional" + +attribute "yum/proxy_username", + :display_name => "yum.conf proxy_username", + :description => "Set the proxy_username to use for yum.conf", + :required => "optional" + +attribute "yum/proxy_password", + :display_name => "yum.conf proxy_password", + :description => "Set the proxy_password to use for yum.conf", + :required => "optional" diff --git a/vagrant/provision/cookbooks/yum/providers/key.rb b/vagrant/provision/cookbooks/yum/providers/key.rb new file mode 100755 index 0000000..c9b41d8 --- /dev/null +++ b/vagrant/provision/cookbooks/yum/providers/key.rb @@ -0,0 +1,79 @@ +# +# Cookbook Name:: yum +# Provider:: key +# +# Copyright 2010, Tippr Inc. +# Copyright 2011, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +def whyrun_supported? + true +end + +action :add do + unless ::File.exists?("/etc/pki/rpm-gpg/#{new_resource.key}") + Chef::Log.info "Adding #{new_resource.key} GPG key to /etc/pki/rpm-gpg/" + + if node['platform_version'].to_i <= 5 + package "gnupg" + elsif node['platform_version'].to_i >= 6 + package "gnupg2" + end + + execute "import-rpm-gpg-key-#{new_resource.key}" do + command "rpm --import /etc/pki/rpm-gpg/#{new_resource.key}" + action :nothing + not_if <<-EOH + function packagenames_for_keyfile() { + local filename="$1" + gpg \ + --with-fingerprint \ + --with-colons \ + --fixed-list-mode \ + "$filename" \ + | gawk -F: '/^pub/ { print tolower(sprintf("gpg-pubkey-%s-%x\\n", substr($5, length($5)-8+1), $6)) }' + } + + for pkgname in $(packagenames_for_keyfile "/etc/pki/rpm-gpg/#{new_resource.key}"); do + if [[ $pkgname ]] && ! rpm -q $pkgname ; then + exit 1; + fi; + done + + exit 0 + EOH + end + + #download the file if necessary + unless new_resource.url.nil? + remote_file "/etc/pki/rpm-gpg/#{new_resource.key}" do + source new_resource.url + mode "0644" + notifies :run, "execute[import-rpm-gpg-key-#{new_resource.key}]", :immediately + end + end + + end +end + +action :remove do + if ::File.exists?("/etc/pki/rpm-gpg/#{new_resource.key}") + Chef::Log.info "Removing #{new_resource.key} key from /etc/pki/rpm-gpg/" + file "/etc/pki/rpm-gpg/#{new_resource.key}" do + action :delete + end + new_resource.updated_by_last_action(true) + end +end diff --git a/vagrant/provision/cookbooks/yum/providers/repository.rb b/vagrant/provision/cookbooks/yum/providers/repository.rb new file mode 100755 index 0000000..87ee598 --- /dev/null +++ b/vagrant/provision/cookbooks/yum/providers/repository.rb @@ -0,0 +1,125 @@ +# +# Cookbook Name:: yum +# Provider:: repository +# +# Copyright 2010, Tippr Inc. +# Copyright 2011, Opscode, Inc.. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# note that deletion does not remove GPG keys, either from the repo or +# /etc/pki/rpm-gpg; this is a design decision. + +def whyrun_supported? + true +end + +action :add do + unless ::File.exists?("/etc/yum.repos.d/#{new_resource.repo_name}.repo") + Chef::Log.info "Adding #{new_resource.repo_name} repository to /etc/yum.repos.d/#{new_resource.repo_name}.repo" + repo_config + end +end + +action :create do + Chef::Log.info "Adding and updating #{new_resource.repo_name} repository in /etc/yum.repos.d/#{new_resource.repo_name}.repo" + repo_config +end + +action :remove do + if ::File.exists?("/etc/yum.repos.d/#{new_resource.repo_name}.repo") + Chef::Log.info "Removing #{new_resource.repo_name} repository from /etc/yum.repos.d/" + file "/etc/yum.repos.d/#{new_resource.repo_name}.repo" do + action :delete + end + new_resource.updated_by_last_action(true) + end +end + +action :update do + repos ||= {} + # If the repo is already enabled/disabled as per the resource, we don't want to converge the template resource. + if ::File.exists?("/etc/yum.repos.d/#{new_resource.repo_name}.repo") + ::File.open("/etc/yum.repos.d/#{new_resource.repo_name}.repo") do |file| + repo_name ||= nil + file.each_line do |line| + case line + when /^\[(\S+)\]/ + repo_name = $1 + repos[repo_name] ||= {} + when /^(\S+?)=(.*)$/ + param, value = $1, $2 + repos[repo_name][param] = value + else + end + end + end + else + Chef::Log.error "Repo /etc/yum.repos.d/#{new_resource.repo_name}.repo does not exist, you must create it first" + end + if repos[new_resource.repo_name]['enabled'].to_i != new_resource.enabled + Chef::Log.info "Updating #{new_resource.repo_name} repository in /etc/yum.repos.d/#{new_resource.repo_name}.repo (setting enabled=#{new_resource.enabled})" + repo_config + else + Chef::Log.debug "Repository /etc/yum.repos.d/#{new_resource.repo_name}.repo is already set to enabled=#{new_resource.enabled}, skipping" + end +end + +private + +def repo_config + #import the gpg key. If it needs to be downloaded or imported from a cookbook + #that can be done in the calling recipe + if new_resource.key then + yum_key new_resource.key + end + #get the metadata + execute "yum-makecache" do + command "yum -q makecache" + action :nothing + end + #reload internal Chef yum cache + ruby_block "reload-internal-yum-cache" do + block do + Chef::Provider::Package::Yum::YumCache.instance.reload + end + action :nothing + end + #write out the file + template "/etc/yum.repos.d/#{new_resource.repo_name}.repo" do + cookbook "yum" + source "repo.erb" + mode "0644" + variables({ + :repo_name => new_resource.repo_name, + :description => new_resource.description, + :url => new_resource.url, + :mirrorlist => new_resource.mirrorlist, + :key => new_resource.key, + :enabled => new_resource.enabled, + :type => new_resource.type, + :failovermethod => new_resource.failovermethod, + :bootstrapurl => new_resource.bootstrapurl, + :includepkgs => new_resource.includepkgs, + :exclude => new_resource.exclude, + :priority => new_resource.priority, + :metadata_expire => new_resource.metadata_expire, + :type => new_resource.type + }) + if new_resource.make_cache + notifies :run, "execute[yum-makecache]", :immediately + notifies :create, "ruby_block[reload-internal-yum-cache]", :immediately + end + end +end diff --git a/vagrant/provision/cookbooks/yum/recipes/default.rb b/vagrant/provision/cookbooks/yum/recipes/default.rb new file mode 100755 index 0000000..9bc90f2 --- /dev/null +++ b/vagrant/provision/cookbooks/yum/recipes/default.rb @@ -0,0 +1,18 @@ +# +# Cookbook Name:: yum +# Recipe:: default +# +# Copyright 2011, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# diff --git a/vagrant/provision/cookbooks/yum/recipes/elrepo.rb b/vagrant/provision/cookbooks/yum/recipes/elrepo.rb new file mode 100755 index 0000000..a54981d --- /dev/null +++ b/vagrant/provision/cookbooks/yum/recipes/elrepo.rb @@ -0,0 +1,31 @@ +# +# Cookbook Name:: yum +# Recipe:: elrepo +# +# Copyright:: Copyright (c) 2013 Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +yum_key node['yum']['elrepo']['key'] do + url node['yum']['elrepo']['key_url'] + action :add +end + +yum_repository "elrepo" do + description "ELRepo.org Community Enterprise Linux Extras Repository" + key node['yum']['elrepo']['key'] + mirrorlist node['yum']['elrepo']['url'] + includepkgs node['yum']['elrepo']['includepkgs'] + exclude node['yum']['elrepo']['exclude'] + action :create +end diff --git a/vagrant/provision/cookbooks/yum/recipes/epel.rb b/vagrant/provision/cookbooks/yum/recipes/epel.rb new file mode 100755 index 0000000..be1e2aa --- /dev/null +++ b/vagrant/provision/cookbooks/yum/recipes/epel.rb @@ -0,0 +1,35 @@ +# +# Author:: Joshua Timberman () +# Cookbook Name:: yum +# Recipe:: epel +# +# Copyright:: Copyright (c) 2011 Opscode, Inc. +# Copyright 2010, Eric G. Wolfe +# Copyright 2010, Tippr Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +yum_key node['yum']['epel']['key'] do + url node['yum']['epel']['key_url'] + action :add +end + +yum_repository "epel" do + description "Extra Packages for Enterprise Linux" + key node['yum']['epel']['key'] + url node['yum']['epel']['baseurl'] + mirrorlist node['yum']['epel']['url'] + includepkgs node['yum']['epel']['includepkgs'] + exclude node['yum']['epel']['exclude'] + action platform?('amazon') ? [:add, :update] : :add +end diff --git a/vagrant/provision/cookbooks/yum/recipes/ius.rb b/vagrant/provision/cookbooks/yum/recipes/ius.rb new file mode 100755 index 0000000..2d25290 --- /dev/null +++ b/vagrant/provision/cookbooks/yum/recipes/ius.rb @@ -0,0 +1,42 @@ +# +# Author:: Joshua Timberman () +# Cookbook Name:: yum +# Recipe:: ius +# +# Copyright:: Copyright (c) 2011 Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +include_recipe "yum::epel" + +package "epel-release" + +major = node['platform_version'].to_i +ius = node['yum']['ius_release'] + +remote_file "#{Chef::Config[:file_cache_path]}/ius-release-#{ius}.ius.el#{major}.noarch.rpm" do + source "http://dl.iuscommunity.org/pub/ius/stable/Redhat/#{major}/i386/ius-release-#{ius}.ius.el#{major}.noarch.rpm" + not_if "rpm -qa | grep -q '^ius-release-#{ius}'" + notifies :install, "rpm_package[ius-release]", :immediately +end + +rpm_package "ius-release" do + source "#{Chef::Config[:file_cache_path]}/ius-release-#{ius}.ius.el#{major}.noarch.rpm" + only_if { ::File.exists?("#{Chef::Config[:file_cache_path]}/ius-release-#{ius}.ius.el#{major}.noarch.rpm") } + action :nothing +end + +file "ius-release-cleanup" do + path "#{Chef::Config[:file_cache_path]}/ius-release-#{ius}.ius.el#{major}.noarch.rpm" + action :delete +end diff --git a/vagrant/provision/cookbooks/yum/recipes/remi.rb b/vagrant/provision/cookbooks/yum/recipes/remi.rb new file mode 100755 index 0000000..5ce5ff6 --- /dev/null +++ b/vagrant/provision/cookbooks/yum/recipes/remi.rb @@ -0,0 +1,35 @@ +# +# Author:: Takeshi KOMIYA () +# Cookbook Name:: yum +# Recipe:: remi +# +# Copyright:: Copyright (c) 2011 Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +include_recipe "yum::epel" + +yum_key node['yum']['remi']['key'] do + url node['yum']['remi']['key_url'] + action :add +end + +yum_repository "remi" do + description "Les RPM de remi pour Enterprise Linux #{node['platform_version']} - $basearch" + key node['yum']['remi']['key'] + mirrorlist node['yum']['remi']['url'] + failovermethod "priority" + includepkgs node['yum']['remi']['includepkgs'] + exclude node['yum']['remi']['exclude'] + action :create +end diff --git a/vagrant/provision/cookbooks/yum/recipes/repoforge.rb b/vagrant/provision/cookbooks/yum/recipes/repoforge.rb new file mode 100755 index 0000000..14c1607 --- /dev/null +++ b/vagrant/provision/cookbooks/yum/recipes/repoforge.rb @@ -0,0 +1,41 @@ +# +# Author:: Eric Edgar () +# Cookbook Name:: yum +# Recipe:: repoforge +# +# Copyright:: Copyright (c) 2012-2013 Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +include_recipe "yum::epel" + +major = platform?("amazon") ? 6 : node['platform_version'].to_i +arch = (node['kernel']['machine'] == "i686" && major == 5) ? "i386" : node['kernel']['machine'] +repoforge = node['yum']['repoforge_release'] + +remote_file "#{Chef::Config[:file_cache_path]}/rpmforge-release-#{repoforge}.el#{major}.rf.#{arch}.rpm" do + source "http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-#{repoforge}.el#{major}.rf.#{arch}.rpm" + not_if "rpm -qa | grep -q '^rpmforge-release-#{repoforge}'" + notifies :install, "rpm_package[rpmforge-release]", :immediately +end + +rpm_package "rpmforge-release" do + source "#{Chef::Config[:file_cache_path]}/rpmforge-release-#{repoforge}.el#{major}.rf.#{arch}.rpm" + only_if { ::File.exists?("#{Chef::Config[:file_cache_path]}/rpmforge-release-#{repoforge}.el#{major}.rf.#{arch}.rpm") } + action :install +end + +file "repoforge-release-cleanup" do + path "#{Chef::Config[:file_cache_path]}/rpmforge-release-#{repoforge}.el#{major}.rf.#{arch}.rpm" + action :delete +end diff --git a/vagrant/provision/cookbooks/yum/recipes/test.rb b/vagrant/provision/cookbooks/yum/recipes/test.rb new file mode 100755 index 0000000..7720c3a --- /dev/null +++ b/vagrant/provision/cookbooks/yum/recipes/test.rb @@ -0,0 +1,39 @@ +# +# Cookbook:: yum +# Recipe:: test +# +# Author:: Joshua Timberman +# Copyright:: Copyright (c) 2013, Opscode, Inc +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +include_recipe "yum::epel" +include_recipe "yum::elrepo" +include_recipe "yum::ius" +include_recipe "yum::repoforge" +include_recipe "yum::yum" +include_recipe "yum::remi" + +%w{add create}.each do |act| + file "/etc/yum.repos.d/zenoss-#{act}.repo" do + action :create + end + + yum_repository "zenoss-#{act}" do + description "Zenoss Stable repo" + url "http://dev.zenoss.com/yum/stable/" + key "RPM-GPG-KEY-zenoss" + action act.to_sym + end +end diff --git a/vagrant/provision/cookbooks/yum/recipes/yum.rb b/vagrant/provision/cookbooks/yum/recipes/yum.rb new file mode 100755 index 0000000..d353f50 --- /dev/null +++ b/vagrant/provision/cookbooks/yum/recipes/yum.rb @@ -0,0 +1,23 @@ +# +# Cookbook Name:: yum +# Recipe:: yum +# +# Copyright 2011, Eric G. Wolfe +# Copyright 2011, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +template "/etc/yum.conf" do + source "yum-rhel#{node['platform_version'].to_i}.conf.erb" +end diff --git a/vagrant/provision/cookbooks/yum/resources/key.rb b/vagrant/provision/cookbooks/yum/resources/key.rb new file mode 100755 index 0000000..96f9e72 --- /dev/null +++ b/vagrant/provision/cookbooks/yum/resources/key.rb @@ -0,0 +1,29 @@ +# +# Cookbook Name:: yum +# Resource:: key +# +# Copyright 2011, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +actions :add, :remove +default_action :add + +attribute :key, :kind_of => String, :name_attribute => true +attribute :url, :kind_of => String, :default => nil + +def initialize(*args) + super + @action = :add +end diff --git a/vagrant/provision/cookbooks/yum/resources/repository.rb b/vagrant/provision/cookbooks/yum/resources/repository.rb new file mode 100755 index 0000000..1e274ca --- /dev/null +++ b/vagrant/provision/cookbooks/yum/resources/repository.rb @@ -0,0 +1,42 @@ +# +# Cookbook Name:: yum +# Resource:: repository +# +# Copyright 2011, Opscode, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +actions :add, :remove, :update, :create + +#name of the repo, used for .repo filename +attribute :repo_name, :kind_of => String, :name_attribute => true +attribute :description, :kind_of => String #long description +attribute :url, :kind_of => String, :default => "" +attribute :mirrorlist, :default => false +attribute :key, :kind_of => String, :default => nil +attribute :enabled, :default => 1 +attribute :type, :kind_of => String, :default => nil +attribute :failovermethod, :kind_of => String, :default => nil +attribute :bootstrapurl, :kind_of => String, :default => nil +attribute :make_cache, :kind_of => [TrueClass, FalseClass], :default => true +attribute :includepkgs, :kind_of => String, :default => nil +attribute :exclude, :kind_of => String, :default => nil +attribute :priority, :kind_of => [Integer, String], :default => nil +attribute :metadata_expire, :kind_of => [Integer, String], :default => nil +attribute :type, :kind_of => String, :default => nil + +def initialize(*args) + super + @action = :add +end diff --git a/vagrant/provision/cookbooks/yum/templates/default/repo.erb b/vagrant/provision/cookbooks/yum/templates/default/repo.erb new file mode 100755 index 0000000..02628a5 --- /dev/null +++ b/vagrant/provision/cookbooks/yum/templates/default/repo.erb @@ -0,0 +1,41 @@ +# Generated by Chef for <%= node['fqdn'] %> +# Local modifications will be overwritten. +[<%= @repo_name %>] +name=<%= @description %> +<% if @type %> +type=<%= @type %> +<% end %> +<% unless @url.empty? -%> +baseurl=<%= @url %> +<% end -%> +<% if @mirrorlist %> +mirrorlist=<%= @mirrorlist %> +<% end %> +<% if @key %> +gpgcheck=1 +gpgkey=file:///etc/pki/rpm-gpg/<%= @key %> +<% else %> +gpgcheck=0 +<% end %> +enabled=<%= @enabled %> +<% if @failovermethod %> +failovermethod=<%= @failovermethod %> +<% end %> +<% if @bootstrapurl %> +bootstrapurl=<%= @bootstrapurl %> +<% end %> +<% if @includepkgs %> +includepkgs=<%= @includepkgs %> +<% end %> +<% if @exclude %> +exclude=<%= @exclude %> +<% end %> +<% if @priority %> +priority=<%= @priority %> +<% end %> +<% if @metadata_expire %> +metadata_expire=<%= @metadata_expire%> +<% end %> +<% if @type %> +type=<%= @type%> +<% end %> diff --git a/vagrant/provision/cookbooks/yum/templates/default/yum-rhel5.conf.erb b/vagrant/provision/cookbooks/yum/templates/default/yum-rhel5.conf.erb new file mode 100755 index 0000000..6ed58dc --- /dev/null +++ b/vagrant/provision/cookbooks/yum/templates/default/yum-rhel5.conf.erb @@ -0,0 +1,33 @@ +# Generated by Chef for <%= node['fqdn'] %> +# Local modifications will be overwritten. +[main] +cachedir=<%= node['yum']['cachedir'] %> +keepcache=<%= node['yum']['keepcache'] %> +debuglevel=2 +logfile=/var/log/yum.log +distroverpkg=redhat-release +tolerant=1 +exactarch=1 +obsoletes=1 +gpgcheck=1 +plugins=1 +<%- unless node['yum']['exclude'].empty? %> +exclude=<%= node['yum']['exclude'].join(" ") %> +<%- end %> +<%- unless node['yum']['installonlypkgs'].empty? %> +installonlypkgs=<%= node['yum']['installonlypkgs'].join(" ") %> +<%- end %> +<%- unless node['yum']['proxy'].empty? %> +proxy=<%= node['yum']['proxy'] %> +proxy_username=<%= node['yum']['proxy_username'] %> +proxy_password=<%= node['yum']['proxy_password'] %> +<%- end %> + +# Note: yum-RHN-plugin doesn't honor this. +metadata_expire=1h + +# Default. +# installonly_limit = 3 + +# PUT YOUR REPOS HERE OR IN separate files named file.repo +# in /etc/yum.repos.d diff --git a/vagrant/provision/cookbooks/yum/templates/default/yum-rhel6.conf.erb b/vagrant/provision/cookbooks/yum/templates/default/yum-rhel6.conf.erb new file mode 100755 index 0000000..44d7979 --- /dev/null +++ b/vagrant/provision/cookbooks/yum/templates/default/yum-rhel6.conf.erb @@ -0,0 +1,36 @@ +# Generated by Chef for <%= node['fqdn'] %> +# Local modifications will be overwritten. +[main] +cachedir=<%= node['yum']['cachedir'] %>/$basearch/$releasever +keepcache=<%= node['yum']['keepcache'] %> +debuglevel=2 +logfile=/var/log/yum.log +exactarch=1 +obsoletes=1 +gpgcheck=1 +plugins=1 +installonly_limit=3 +<%- unless node['yum']['exclude'].empty? %> +exclude=<%= node['yum']['exclude'].join(" ") %> +<%- end %> +<%- unless node['yum']['installonlypkgs'].empty? %> +installonlypkgs=<%= node['yum']['installonlypkgs'].join(" ") %> +<%- end %> +<%- unless node['yum']['proxy'].empty? %> +proxy=<%= node['yum']['proxy'] %> +proxy_username=<%= node['yum']['proxy_username'] %> +proxy_password=<%= node['yum']['proxy_password'] %> +<%- end %> + +# This is the default, if you make this bigger yum won't see if the metadata +# is newer on the remote and so you'll "gain" the bandwidth of not having to +# download the new metadata and "pay" for it by yum not having correct +# information. +# It is esp. important, to have correct metadata, for distributions like +# Fedora which don't keep old packages around. If you don't like this checking +# interupting your command line usage, it's much better to have something +# manually check the metadata once an hour (yum-updatesd will do this). +# metadata_expire=90m + +# PUT YOUR REPOS HERE OR IN separate files named file.repo +# in /etc/yum.repos.d diff --git a/vagrant/provision/default.yml b/vagrant/provision/default.yml new file mode 100644 index 0000000..de497d4 --- /dev/null +++ b/vagrant/provision/default.yml @@ -0,0 +1,108 @@ +# encoding: utf-8 +# vim: ft=ruby expandtab shiftwidth=2 tabstop=2 + +# +# General Settings +# +wp_box: miya0001/vccw +chef_cookbook_path: ./provision + +# +# Virtual Machine Settings +# +memory: 512 +cpus: 1 + +# +# Network Settings +# +hostname: open-csa-wp.dev +ip: 192.168.33.10 +sync_folder: 'www/wordpress' + +# +# WordPress Settings +# +version: latest +lang: en_US +title: Welcome to the open-csa-wp development environment. +multisite: false +rewrite_structure: /archives/%post_id% + +# +# WordPress Path +# +document_root: '/var/www/wordpress' +wp_siteurl: '' # Path to the WP_SITEURL like "wp" +wp_home: '' # Path to the WP_HOME like "wp" + +# +# WordPress User +# +admin_user: admin +admin_pass: admin +admin_email: open-csa-wp@example.com + +# +# WordPress Database +# +db_prefix: wp_ +db_host: localhost + +# +# WordPress Default Plugins +# Plugin's slug or url to the plugin's slug. +# +plugins: + - dynamic-hostname + - wp-total-hacks + - tinymce-templates + +# +# WordPress Default Theme +# Theme's slug or url to the theme's .zip. +# +theme: '' + +# +# WordPress Options +# +options: + blogdescription: Hello Open CSA WP plugin development environment. + +# +# The values of wp-config.php +# +force_ssl_admin: false +wp_debug: true +savequeries: false + +# +# Theme unit testing +# +theme_unit_test: false +theme_unit_test_uri: https://wpcom-themes.svn.automattic.com/demo/theme-unit-test-data.xml +# theme_unit_test_uri: https://raw.githubusercontent.com/jawordpressorg/theme-test-data-ja/master/wordpress-theme-test-date-ja.xml + +# +# DB will be reset when provision +# +reset_db_on_provision: true + +# +# Are you hurrying a lot? +# +disable_vccw_cookbook: false + + +# +# User and Group +# +user: vagrant +group: vagrant + + +# +# phpenv +# +php_version: default diff --git a/vagrant/provision/site-cookbooks/vccw/attributes/default.rb b/vagrant/provision/site-cookbooks/vccw/attributes/default.rb new file mode 100644 index 0000000..a8d0c8b --- /dev/null +++ b/vagrant/provision/site-cookbooks/vccw/attributes/default.rb @@ -0,0 +1,34 @@ +default[:vccw][:composer_home] = '/home/vagrant/.composer' +default[:vccw][:src_path] = '/usr/local/share' +default[:vccw][:makepot] = '/usr/bin/php /usr/local/share/wp-i18n/makepot.php' +default[:vccw][:bash_profile] = '/home/vagrant/.bash_profile' +default[:vccw][:i18ntools_repositry] = 'http://i18n.svn.wordpress.org/tools/trunk/' +default[:vccw][:hatamoto_repository] = 'https://github.com/megumiteam/hatamoto.git' +default[:vccw][:iemoto_repositry] = 'https://github.com/megumiteam/iemoto.git' + +default[:vccw][:phpunit][:src] = 'https://phar.phpunit.de/phpunit.phar' +default[:vccw][:phpunit][:link] = '/usr/local/bin/phpunit' +default[:vccw][:phpunit][:wp_test_install] = '/usr/bin/wp-test-install' + +default[:vccw][:composer][:install] = 'curl -sS https://getcomposer.org/installer | php' +default[:vccw][:composer][:link] = '/usr/local/bin/composer' + +default[:vccw][:phpcs][:composer] = 'squizlabs/php_codesniffer=*' +default[:vccw][:phpcs][:wordpress_repo] = 'https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards.git' +default[:vccw][:phpcs][:sniffs] = 'wpcs' +default[:vccw][:phpcs][:alias] = 'wpcs' + +default[:vccw][:wordmove][:movefile] = '/vagrant/Movefile' +default[:vccw][:wordmove][:url] = 'http://wordpress.local' +default[:vccw][:wordmove][:wpdir] = '/var/www/wordpress' +default[:vccw][:wordmove][:dbhost] = 'localhost' +default[:vccw][:wordmove][:dbname] = 'wordpress' +default[:vccw][:wordmove][:dbuser] = 'wordpress' +default[:vccw][:wordmove][:dbpassword] = 'wordpress' + +default[:vccw][:user] = 'vagrant' +default[:vccw][:group] = 'vagrant' + +default[:vccw][:phpenv][:phpenv_root] = '/usr/local/phpenv' +default[:vccw][:phpenv][:install] = 'curl -L https://raw.github.com/CHH/phpenv/master/bin/phpenv-install.sh | sh' +default[:vccw][:phpenv][:php_version] = 'default' diff --git a/vagrant/provision/site-cookbooks/vccw/metadata.rb b/vagrant/provision/site-cookbooks/vccw/metadata.rb new file mode 100644 index 0000000..ef004c1 --- /dev/null +++ b/vagrant/provision/site-cookbooks/vccw/metadata.rb @@ -0,0 +1,2 @@ +depends 'ruby_build' +depends 'rbenv' diff --git a/vagrant/provision/site-cookbooks/vccw/recipes/default.rb b/vagrant/provision/site-cookbooks/vccw/recipes/default.rb new file mode 100644 index 0000000..2a2e48e --- /dev/null +++ b/vagrant/provision/site-cookbooks/vccw/recipes/default.rb @@ -0,0 +1,210 @@ +# encoding: utf-8 +# vim: ft=ruby expandtab shiftwidth=2 tabstop=2 + +require 'shellwords' + +packages = %w{gettext subversion npm lftp sshpass sqlite-devel} + +packages.each do |pkg| + package pkg do + action [:install, :upgrade] + end +end + +include_recipe 'ruby_build' +include_recipe 'rbenv::system' +include_recipe 'vccw::phpenv' + +# +# Setup WordPress i18n Tools +# + +subversion "Checkout WordPress i18n tools." do + repository node[:vccw][:i18ntools_repositry] + revision "HEAD" + destination File.join(node[:vccw][:src_path], 'wp-i18n'); + action :sync + user "root" + group "root" +end + +execute "echo 'alias makepot.php=\"#{node[:vccw][:makepot]}\"' >> #{node[:vccw][:bash_profile]}" do + not_if "grep 'alias makepot.php' #{node[:vccw][:bash_profile]}" +end + + +# +# Setup Grunt +# + +execute "npm install -g grunt-init grunt-cli gulp" do + user "root" + group "root" +end + +#execute "gem install sass" do +# user "root" +# group "root" +#end + +directory File.join("/home/", Shellwords.shellescape(node[:vccw][:user]), "/.grunt-init") do + recursive true + user node[:vccw][:user] + group node[:vccw][:group] +end + +git File.join("/home/", Shellwords.shellescape(node[:vccw][:user]), "/.grunt-init/hatamoto") do + repository node[:vccw][:hatamoto_repository] + reference "master" + user node[:vccw][:user] + group node[:vccw][:group] + action :sync +end + +git File.join("/home/", Shellwords.shellescape(node[:vccw][:user]), "/.grunt-init/iemoto") do + repository node[:vccw][:iemoto_repositry] + reference "master" + user node[:vccw][:user] + group node[:vccw][:group] + action :sync +end + +template File.join("/home/", Shellwords.shellescape(node[:vccw][:user]), "/.grunt-init/defaults.json") do + source "defaults.json.erb" + owner node[:vccw][:user] + group node[:vccw][:group] + mode "0600" +end + + +# +# Setup PHPUnit +# + +directory File.join(node[:vccw][:src_path], 'phpunit') do + recursive true +end + +remote_file File.join(node[:vccw][:src_path], 'phpunit/phpunit.phar') do + source node[:vccw][:phpunit][:src] + mode 0755 + action :create_if_missing +end + +link node[:vccw][:phpunit][:link] do + to File.join(node[:vccw][:src_path], 'phpunit/phpunit.phar') +end + +execute "wp-test-install" do + user node[:vccw][:user] + group node[:vccw][:group] + command node[:vccw][:phpunit][:wp_test_install] + action :nothing +end + +template node[:vccw][:phpunit][:wp_test_install] do + source "wp-test-install.sh.erb" + owner node[:vccw][:user] + group node[:vccw][:group] + mode "0755" + notifies :run, "execute[wp-test-install]", :immediately +end + +directory "/tmp/wordpress/wp-content/uploads" do + recursive true +end + +# +# Setup Composer +# + +directory File.join(node[:vccw][:src_path], 'composer') do + recursive true +end + +execute node[:vccw][:composer][:install] do + user "root" + group "root" + cwd File.join(node[:vccw][:src_path], 'composer') +end + +link node[:vccw][:composer][:link] do + to File.join(node[:vccw][:src_path], 'composer/composer.phar') +end + +directory node[:vccw][:composer_home] do + user node[:vccw][:user] + group node[:vccw][:group] + recursive true +end + +execute "phpcs-install" do + user node[:vccw][:user] + group node[:vccw][:group] + environment ({'COMPOSER_HOME' => node[:vccw][:composer_home]}) + command <<-EOH + #{node[:vccw][:composer][:link]} global require #{Shellwords.shellescape(node[:vccw][:phpcs][:composer])} + EOH +end + +directory File.join(node[:vccw][:src_path], node[:vccw][:phpcs][:sniffs]) do + recursive true +end + +git File.join(node[:vccw][:src_path], node[:vccw][:phpcs][:sniffs]) do + repository node[:vccw][:phpcs][:wordpress_repo] + reference "master" + user "root" + group "root" + action :sync +end + +execute "echo 'export PATH=~/.composer/vendor/bin:$PATH' >> #{node[:vccw][:bash_profile]}" do + not_if "grep 'export PATH=~/.composer/vendor/bin:$PATH' #{node[:vccw][:bash_profile]}" +end + +execute "phpcs-set-config" do + user node[:vccw][:user] + group node[:vccw][:group] + command <<-EOH + /home/#{Shellwords.shellescape(node[:vccw][:user])}/.composer/vendor/bin/phpcs --config-set installed_paths #{File.join(node[:vccw][:src_path], node[:vccw][:phpcs][:sniffs])} + EOH +end + +execute "phpcs-add-alias" do + user node[:vccw][:user] + group node[:vccw][:group] + command <<-EOH + echo 'alias #{node[:vccw][:phpcs][:alias]}="phpcs -p -s -v --standard=WordPress-Core"' >> #{node[:vccw][:bash_profile]} + EOH + not_if "grep 'alias #{node[:vccw][:phpcs][:alias]}=' #{node[:vccw][:bash_profile]}" +end + +# Generate Movefile +template node[:vccw][:wordmove][:movefile] do + source "Movefile.erb" + owner node[:vccw][:user] + group node[:vccw][:group] + mode "0600" + variables( + :url => node[:vccw][:wordmove][:url].sub(/\/$/, ''), + :wpdir => node[:vccw][:wordmove][:wpdir].sub(/\/$/, ''), + :dbhost => node[:vccw][:wordmove][:dbhost], + :dbname => node[:vccw][:wordmove][:dbname], + :dbuser => node[:vccw][:wordmove][:dbuser], + :dbpassword => node[:vccw][:wordmove][:dbpassword] + ) + action :create_if_missing +end + +# Generate Banner +template "/etc/motd" do + source "motd.erb" + owner "root" + group "root" + mode "0644" + variables( + :version => node[:vccw][:version] + ) + action :create +end diff --git a/vagrant/provision/site-cookbooks/vccw/recipes/phpenv.rb b/vagrant/provision/site-cookbooks/vccw/recipes/phpenv.rb new file mode 100644 index 0000000..cf3bbff --- /dev/null +++ b/vagrant/provision/site-cookbooks/vccw/recipes/phpenv.rb @@ -0,0 +1,114 @@ +# encoding: utf-8 +# vim: ft=ruby expandtab shiftwidth=2 tabstop=2 + +require 'shellwords' + +if /^[0-9]/ =~ node[:vccw][:phpenv][:php_version].to_s + + execute node[:vccw][:phpenv][:install] do + user "root" + group "root" + environment ({ + 'PHPENV_ROOT' => node[:vccw][:phpenv][:phpenv_root] + }) + not_if { ::File.exists?(node[:vccw][:phpenv][:phpenv_root]) } + end + + execute node[:vccw][:phpenv][:install] do + user "root" + group "root" + environment ({ + 'PHPENV_ROOT' => node[:vccw][:phpenv][:phpenv_root], + 'UPDATE' => 'yes' + }) + only_if { ::File.exists?(node[:vccw][:phpenv][:phpenv_root]) } + end + + template "/etc/profile.d/phpenv.sh" do + source "phpenv.sh.erb" + owner "root" + group "root" + mode "0755" + variables( + :phpenv_root => node[:vccw][:phpenv][:phpenv_root] + ) + action :create_if_missing + end + + directory File.join(node[:vccw][:phpenv][:phpenv_root], "/shims") do + recursive true + owner "root" + group "root" + mode "0755" + action :create + end + + directory File.join(node[:vccw][:phpenv][:phpenv_root], "/versions") do + recursive true + owner "root" + group "root" + mode "0755" + action :create + end + + directory File.join(node[:vccw][:phpenv][:phpenv_root], "/plugins") do + recursive true + owner "root" + group "root" + mode "0755" + action :create + end + + git File.join(node[:vccw][:phpenv][:phpenv_root], "/plugins/php-build") do + repository "https://github.com/php-build/php-build.git" + reference "master" + user "root" + group "root" + action :sync + end + + template File.join(node[:vccw][:phpenv][:phpenv_root], "/plugins/php-build/share/php-build/default_configure_options") do + source "default_configure_options.erb" + owner "root" + group "root" + mode "0755" + action :create + end + + execute "install-php" do + user "root" + group "root" + command <<-EOF + rm -fr /tmp/php-build* + #{File.join(node[:vccw][:phpenv][:phpenv_root], '/bin/phpenv')} install #{Shellwords.shellescape(node[:vccw][:phpenv][:php_version].to_s)} + #{File.join(node[:vccw][:phpenv][:phpenv_root], '/bin/phpenv')} global #{Shellwords.shellescape(node[:vccw][:phpenv][:php_version].to_s)} + #{File.join(node[:vccw][:phpenv][:phpenv_root], '/bin/phpenv')} rehash + EOF + environment ({ + 'PHPENV_ROOT' => node[:vccw][:phpenv][:phpenv_root] + }) + returns [0, 1] + notifies :restart, "service[apache2]" + end + + template File.join(node[:vccw][:phpenv][:phpenv_root], 'versions/', node[:vccw][:phpenv][:php_version].to_s, '/etc/conf.d/vccw.ini') do + source "vccw.ini.erb" + owner "root" + group "root" + mode "0644" + variables(:directives => node['php']['directives']) + notifies :restart, "service[apache2]" + end + + template "/etc/sudoers.d/phpenv" do + source "sudoers.erb" + owner "root" + group "root" + mode "0400" + variables( + :phpenv_root => node[:vccw][:phpenv][:phpenv_root] + ) + action :create + end + +end diff --git a/vagrant/provision/site-cookbooks/vccw/templates/default/Movefile.erb b/vagrant/provision/site-cookbooks/vccw/templates/default/Movefile.erb new file mode 100644 index 0000000..6a232f4 --- /dev/null +++ b/vagrant/provision/site-cookbooks/vccw/templates/default/Movefile.erb @@ -0,0 +1,59 @@ +local: + vhost: "<%= @url %>" + wordpress_path: "<%= @wpdir %>" + + database: + name: "<%= @dbname %>" + user: "<%= @dbuser %>" + password: "<%= @dbpassword %>" + host: "<%= @dbhost %>" + +staging: + vhost: "http://example.com" + wordpress_path: "/var/www/your_site" # use an absolute path here + + database: + name: "database_name" + user: "user" + password: "password" + host: "localhost" + charset: "utf8" + + exclude: + - ".git/" + - ".gitignore" + - ".sass-cache/" + - "bin/" + - "tmp/*" + - "Gemfile*" + - "Movefile" + - "wp-config.php" + - "wp-content/*.sql" + + # paths: # you can customize wordpress internal paths + # wp_content: "wp-content" + # uploads: "wp-content/uploads" + # plugins: "wp-content/plugins" + # themes: "wp-content/themes" + # languages: "wp-content/languages" + # themes: "wp-content/themes" + + # ssh: + # host: "host" + # user: "user" + # password: "password" # password is optional, will use public keys if available. + # port: 22 # Port is optional + # rsync_options: "--verbose" # Additional rsync options, optional + # gateway: # Gateway is optional + # host: "host" + # user: "user" + # password: "password" # password is optional, will use public keys if available. + + # ftp: + # user: "user" + # password: "password" + # host: "host" + # passive: true + +# production: # multiple environments can be specified +# [...] diff --git a/vagrant/provision/site-cookbooks/vccw/templates/default/default_configure_options.erb b/vagrant/provision/site-cookbooks/vccw/templates/default/default_configure_options.erb new file mode 100644 index 0000000..ee8900b --- /dev/null +++ b/vagrant/provision/site-cookbooks/vccw/templates/default/default_configure_options.erb @@ -0,0 +1,33 @@ +--without-pear +--with-gd +--enable-sockets +--with-jpeg-dir=/usr +--with-png-dir=/usr +--enable-exif +--enable-zip +--with-zlib +--with-zlib-dir=/usr +--with-kerberos +--with-openssl +--with-mcrypt=/usr +--enable-soap +--enable-xmlreader +--with-xsl +--enable-ftp +--enable-cgi +--with-curl=/usr +--with-tidy +--with-xmlrpc +--enable-sysvsem +--enable-sysvshm +--enable-shmop +--with-mysql=mysqlnd +--with-mysqli=mysqlnd +--with-pdo-mysql=mysqlnd +--with-mysql-sock=/var/lib/mysql/mysql.sock +--with-pdo-sqlite +--enable-pcntl +--with-readline +--enable-mbstring +--enable-bcmath +--with-apxs2=/usr/sbin/apxs diff --git a/vagrant/provision/site-cookbooks/vccw/templates/default/defaults.json.erb b/vagrant/provision/site-cookbooks/vccw/templates/default/defaults.json.erb new file mode 100644 index 0000000..6f1bfe5 --- /dev/null +++ b/vagrant/provision/site-cookbooks/vccw/templates/default/defaults.json.erb @@ -0,0 +1,11 @@ +{ + "description": "This is a awesome cool theme.", + "contributor": "", + "homepage": "https://example.com/", + "author_name": "", + "author_url": "https://example.com/", + "repository_type": "git", + "repository_url": "", + "license": "GPLv2", + "license_uri": "http://www.gnu.org/licenses/gpl-2.0.html" +} diff --git a/vagrant/provision/site-cookbooks/vccw/templates/default/motd.erb b/vagrant/provision/site-cookbooks/vccw/templates/default/motd.erb new file mode 100644 index 0000000..46df24a --- /dev/null +++ b/vagrant/provision/site-cookbooks/vccw/templates/default/motd.erb @@ -0,0 +1,16 @@ + ___ ___ ___ + ___ / /\ / /\ /__/\ + /__/\ / /:/ / /:/ _\_ \:\ + \ \:\ / /:/ / /:/ /__/\ \:\ + \ \:\ / /:/ ___ / /:/ ___ _\_ \:\ \:\ + ___ \__\:\ /__/:/ / /\ /__/:/ / /\ /__/\ \:\ \:\ + /__/\ | |:| \ \:\ / /:/ \ \:\ / /:/ \ \:\ \:\/:/ + \ \:\| |:| \ \:\ /:/ \ \:\ /:/ \ \:\ \::/ + \ \:\__|:| \ \:\/:/ \ \:\/:/ \ \:\/:/ + \__\::::/ \ \::/ \ \::/ \ \::/ + ~~~~ \__\/ \__\/ \__\/ + +http://vccw.cc/ + +Initial code by Takayuki Miyauchi. +https://github.com/miya0001 diff --git a/vagrant/provision/site-cookbooks/vccw/templates/default/phpenv.sh.erb b/vagrant/provision/site-cookbooks/vccw/templates/default/phpenv.sh.erb new file mode 100644 index 0000000..86f705c --- /dev/null +++ b/vagrant/provision/site-cookbooks/vccw/templates/default/phpenv.sh.erb @@ -0,0 +1,6 @@ +# encoding: utf-8 +# vim: ft=ruby expandtab shiftwidth=2 tabstop=2 + +export PHPENV_ROOT="<%= @phpenv_root %>" +export PATH="${PHPENV_ROOT}/bin:$PATH" +eval "$(phpenv init -)" diff --git a/vagrant/provision/site-cookbooks/vccw/templates/default/sudoers.erb b/vagrant/provision/site-cookbooks/vccw/templates/default/sudoers.erb new file mode 100644 index 0000000..365dd45 --- /dev/null +++ b/vagrant/provision/site-cookbooks/vccw/templates/default/sudoers.erb @@ -0,0 +1 @@ +Defaults secure_path = <%= @phpenv_root %>/shims:<%= @phpenv_root %>/bin:/sbin:/bin:/usr/sbin:/usr/bin diff --git a/vagrant/provision/site-cookbooks/vccw/templates/default/vccw.ini.erb b/vagrant/provision/site-cookbooks/vccw/templates/default/vccw.ini.erb new file mode 100644 index 0000000..0d3078b --- /dev/null +++ b/vagrant/provision/site-cookbooks/vccw/templates/default/vccw.ini.erb @@ -0,0 +1,3 @@ +<% @directives.sort_by { |key, val| key }.each do |directive, value| -%> +<%= "#{directive}=\"#{value}\"" %> +<% end -%> diff --git a/vagrant/provision/site-cookbooks/vccw/templates/default/wp-test-install.sh.erb b/vagrant/provision/site-cookbooks/vccw/templates/default/wp-test-install.sh.erb new file mode 100644 index 0000000..8995647 --- /dev/null +++ b/vagrant/provision/site-cookbooks/vccw/templates/default/wp-test-install.sh.erb @@ -0,0 +1,89 @@ +#!/usr/bin/env bash + +set -ex; + +DB_NAME='wordpress_test' +DB_USER='root' +DB_PASS='wordpress' +DB_HOST='localhost' +WP_VERSION='latest' + +echo "DROP DATABASE IF EXISTS $DB_NAME;" | mysql -u root -p$DB_PASS + +if [ -e /tmp/wordpress ]; then + sudo rm -fr /tmp/wordpress +fi + +if [ -e /tmp/wordpress-tests-lib ]; then + sudo rm -fr /tmp/wordpress-tests-lib +fi + +if [ -e /tmp/wordpress.tar.gz ]; then + sudo rm -fr /tmp/wordpress.tar.gz +fi + +WP_TESTS_DIR=${WP_TESTS_DIR-/tmp/wordpress-tests-lib} +WP_CORE_DIR=${WP_CORE_DIR-/tmp/wordpress/} + +set -ex + +install_wp() { + mkdir -p $WP_CORE_DIR + + if [ $WP_VERSION == 'latest' ]; then + local ARCHIVE_NAME='latest' + else + local ARCHIVE_NAME="wordpress-$WP_VERSION" + fi + + wget -nv -O /tmp/wordpress.tar.gz https://wordpress.org/${ARCHIVE_NAME}.tar.gz + tar --strip-components=1 -zxmf /tmp/wordpress.tar.gz -C $WP_CORE_DIR + + wget -nv -O $WP_CORE_DIR/wp-content/db.php https://raw.github.com/markoheijnen/wp-mysqli/master/db.php +} + +install_test_suite() { + # portable in-place argument for both GNU sed and Mac OSX sed + if [[ $(uname -s) == 'Darwin' ]]; then + local ioption='-i .bak' + else + local ioption='-i' + fi + + # set up testing suite + mkdir -p $WP_TESTS_DIR + cd $WP_TESTS_DIR + svn co --quiet https://develop.svn.wordpress.org/trunk/tests/phpunit/includes/ + + wget -nv -O wp-tests-config.php https://develop.svn.wordpress.org/trunk/wp-tests-config-sample.php + sed $ioption "s:dirname( __FILE__ ) . '/src/':'$WP_CORE_DIR':" wp-tests-config.php + sed $ioption "s/youremptytestdbnamehere/$DB_NAME/" wp-tests-config.php + sed $ioption "s/yourusernamehere/$DB_USER/" wp-tests-config.php + sed $ioption "s/yourpasswordhere/$DB_PASS/" wp-tests-config.php + sed $ioption "s|localhost|${DB_HOST}|" wp-tests-config.php +} + +install_db() { + # parse DB_HOST for port or socket references + local PARTS=(${DB_HOST//\:/ }) + local DB_HOSTNAME=${PARTS[0]}; + local DB_SOCK_OR_PORT=${PARTS[1]}; + local EXTRA="" + + if ! [ -z $DB_HOSTNAME ] ; then + if [ $(echo $DB_SOCK_OR_PORT | grep -e '^[0-9]\{1,\}$') ]; then + EXTRA=" --host=$DB_HOSTNAME --port=$DB_SOCK_OR_PORT --protocol=tcp" + elif ! [ -z $DB_SOCK_OR_PORT ] ; then + EXTRA=" --socket=$DB_SOCK_OR_PORT" + elif ! [ -z $DB_HOSTNAME ] ; then + EXTRA=" --host=$DB_HOSTNAME --protocol=tcp" + fi + fi + + # create database + mysqladmin create $DB_NAME --user="$DB_USER" --password="$DB_PASS"$EXTRA +} + +install_wp +install_test_suite +install_db diff --git a/vagrant/provision/site-cookbooks/wpcli/attributes/default.rb b/vagrant/provision/site-cookbooks/wpcli/attributes/default.rb new file mode 100644 index 0000000..74eb164 --- /dev/null +++ b/vagrant/provision/site-cookbooks/wpcli/attributes/default.rb @@ -0,0 +1,58 @@ +# +# Cookbook Name:: wpcli +# Attributes:: default +# +# Author:: Takayuki Miyauchi +# License: MIT +# + +# default[:wpcli][:wpcli-dir] = '/usr/local/share/wpcli' +# default[:wpcli][:wpcli-link] = '/usr/local/bin/wp' +# default[:wpcli][:installer] = 'https://raw.github.com/wpcli/builds/gh-pages/phar/wpcli.phar' + +default[:wpcli][:config_path] = '/home/vagrant/.wp-cli/config.yml' +default[:wpcli][:user] = 'vagrant' +default[:wpcli][:group] = 'vagrant' + +default[:wpcli][:dir] = '/usr/share/wp-cli' +default[:wpcli][:link] = '/usr/local/bin/wp' + +default[:wpcli][:locale] = "" +default[:wpcli][:wp_version] = "latest" + +default[:wpcli][:wp_host] = "wordpress.local" +default[:wpcli][:wp_home] = "" +default[:wpcli][:wp_siteurl] = "" +default[:wpcli][:wp_docroot] = "/var/www/wordpress" +default[:wpcli][:title] = "Welcome to the WordPress" + +default[:wpcli][:dbhost] = "localhost" +default[:wpcli][:dbname] = "wordpress" +default[:wpcli][:dbuser] = "wordpress" +default[:wpcli][:dbpassword] = "wordpress" +default[:wpcli][:dbprefix] = "wp_" + +default[:wpcli][:admin_user] = "admin" +default[:wpcli][:admin_password] = "admin" +default[:wpcli][:admin_email] = "vagrant@example.com" + +default[:wpcli][:default_plugins] = [] +default[:wpcli][:default_theme] = '' + +default[:wpcli][:is_multisite] = false +default[:wpcli][:debug_mode] = false +default[:wpcli][:savequeries] = false + +default[:wpcli][:theme_unit_test] = true +default[:wpcli][:theme_unit_test_data_url] = 'https://wpcom-themes.svn.automattic.com/demo/theme-unit-test-data.xml' +default[:wpcli][:theme_unit_test_data] = '/tmp/theme-unit-test-data.xml' + +default[:wpcli][:gitignore_url] = 'https://raw.githubusercontent.com/github/gitignore/master/WordPress.gitignore' +default[:wpcli][:gitignore] = '/var/www/wordpress/.gitignore' + +default[:wpcli][:is_multisite] = false +default[:wpcli][:force_ssl_admin] = false +default[:wpcli][:always_reset] = true + +default[:wpcli][:options] = {} +default[:wpcli][:rewrite_structure] = '/archives/%post_id%' diff --git a/vagrant/provision/site-cookbooks/wpcli/metadata.rb b/vagrant/provision/site-cookbooks/wpcli/metadata.rb new file mode 100644 index 0000000..baa6ff4 --- /dev/null +++ b/vagrant/provision/site-cookbooks/wpcli/metadata.rb @@ -0,0 +1,4 @@ +depends 'yum' +depends 'mysql' +depends 'php' +depends 'apache2' diff --git a/vagrant/provision/site-cookbooks/wpcli/recipes/default.rb b/vagrant/provision/site-cookbooks/wpcli/recipes/default.rb new file mode 100644 index 0000000..7dd5986 --- /dev/null +++ b/vagrant/provision/site-cookbooks/wpcli/recipes/default.rb @@ -0,0 +1,59 @@ +# encoding: utf-8 +# vim: ft=ruby expandtab shiftwidth=2 tabstop=2 + +require 'shellwords' + +include_recipe "yum::remi" +include_recipe 'php::package' + +packages = %w{git subversion zip unzip kernel-devel gcc perl make jq httpd-devel libxml2-devel libcurl-devel libjpeg-turbo-devel libpng-devel giflib-devel gd-devel libmcrypt-devel sqlite-devel libtidy-devel libxslt-devel} + +packages.each do |pkg| + package pkg do + action [:install, :upgrade] + end +end + +git node[:wpcli][:dir] do + repository "https://github.com/wp-cli/builds.git" + action :sync +end + +bin = ::File.join(node[:wpcli][:dir], 'phar', 'wp-cli.phar') +file bin do + mode '0755' + action :create +end + +link node[:wpcli][:link] do + to bin +end + +directory File.join("/home/", Shellwords.shellescape(node[:wpcli][:user]), "/.wp-cli") do + recursive true + owner node[:wpcli][:user] + group node[:wpcli][:group] +end + +directory File.join("/home/", Shellwords.shellescape(node[:wpcli][:user]), "/.wp-cli/commands") do + recursive true + owner node[:wpcli][:user] + group node[:wpcli][:group] +end + +template File.join("/home/", Shellwords.shellescape(node[:wpcli][:user]), "/.wp-cli/config.yml") do + source "config.yml.erb" + owner node[:wpcli][:user] + group node[:wpcli][:group] + mode "0644" + variables( + :docroot => File.join(node[:wpcli][:wp_docroot], node[:wpcli][:wp_siteurl]) + ) +end + +git File.join("/home/", Shellwords.shellescape(node[:wpcli][:user]), "/.wp-cli/commands/dictator") do + repository "https://github.com/danielbachhuber/dictator.git" + user node[:wpcli][:user] + group node[:wpcli][:group] + action :sync +end diff --git a/vagrant/provision/site-cookbooks/wpcli/recipes/install.rb b/vagrant/provision/site-cookbooks/wpcli/recipes/install.rb new file mode 100644 index 0000000..d3e1cc0 --- /dev/null +++ b/vagrant/provision/site-cookbooks/wpcli/recipes/install.rb @@ -0,0 +1,287 @@ +# encoding: utf-8 +# vim: ft=ruby expandtab shiftwidth=2 tabstop=2 + +require 'shellwords' + +include_recipe 'apache2' +include_recipe 'apache2::mod_php5' +include_recipe 'apache2::mod_ssl' +include_recipe 'mysql::server' +include_recipe 'mysql::ruby' + +service "iptables" do + supports :status => true, :restart => true + action [:disable, :stop] +end + +execute "mysql-install-wp-privileges" do + command "/usr/bin/mysql -u root -p\"#{node[:mysql][:server_root_password]}\" < #{node[:mysql][:conf_dir]}/wp-grants.sql" + action :nothing +end + +template File.join(node[:mysql][:conf_dir], '/wp-grants.sql') do + source "grants.sql.erb" + owner node[:wpcli][:user] + group node[:wpcli][:group] + mode "0600" + variables( + :user => node[:wpcli][:dbuser], + :password => node[:wpcli][:dbpassword], + :database => node[:wpcli][:dbname] + ) + notifies :run, "execute[mysql-install-wp-privileges]", :immediately +end + + +execute "create wordpress database" do + command "/usr/bin/mysqladmin -u root -p\"#{node[:mysql][:server_root_password]}\" create #{node[:wpcli][:dbname]}" + not_if do + # Make sure gem is detected if it was just installed earlier in this recipe + require 'rubygems' + Gem.clear_paths + require 'mysql' + m = Mysql.new("localhost", "root", node[:mysql][:server_root_password]) + m.list_dbs.include?(node[:wpcli][:dbname]) + end + notifies :create, "ruby_block[save node data]", :immediately unless Chef::Config[:solo] +end + + +directory File.join(node[:wpcli][:wp_docroot], node[:wpcli][:wp_home]) do + recursive true + owner node[:wpcli][:user] + group node[:wpcli][:group] +end + + +bash "wordpress-core-download" do + user node[:wpcli][:user] + group node[:wpcli][:group] + if node[:wpcli][:wp_version] == 'latest' then + code <<-EOH +WP_CLI_CONFIG_PATH=#{Shellwords.shellescape(node[:wpcli][:config_path])} wp core download \\ +--path=#{File.join(node[:wpcli][:wp_docroot], node[:wpcli][:wp_siteurl])} \\ +--locale=#{Shellwords.shellescape(node[:wpcli][:locale])} \\ +--force + EOH + elsif node[:wpcli][:wp_version] =~ %r{^http(s)?://.*?\.zip$} + code <<-EOH + cd /tmp && wget -O ./download.zip #{Shellwords.shellescape(node[:wpcli][:wp_version])} && unzip -d /var/www/ ./download.zip && rm ./download.zip + EOH + else + code <<-EOH +WP_CLI_CONFIG_PATH=#{Shellwords.shellescape(node[:wpcli][:config_path])} wp core download \\ +--path=#{File.join(node[:wpcli][:wp_docroot], node[:wpcli][:wp_siteurl])} \\ +--locale=#{Shellwords.shellescape(node[:wpcli][:locale])} \\ +--version=#{Shellwords.shellescape(node[:wpcli][:wp_version].to_s)} \\ +--force + EOH + end +end + + +file File.join(node[:wpcli][:wp_docroot], node[:wpcli][:wp_siteurl], "wp-config.php") do + action :delete + backup false +end + + +bash "wordpress-core-config" do + user node[:wpcli][:user] + group node[:wpcli][:group] + cwd File.join(node[:wpcli][:wp_docroot], node[:wpcli][:wp_siteurl]) + code <<-EOH + WP_CLI_CONFIG_PATH=#{Shellwords.shellescape(node[:wpcli][:config_path])} wp core config \\ + --dbhost=#{Shellwords.shellescape(node[:wpcli][:dbhost])} \\ + --dbname=#{Shellwords.shellescape(node[:wpcli][:dbname])} \\ + --dbuser=#{Shellwords.shellescape(node[:wpcli][:dbuser])} \\ + --dbpass=#{Shellwords.shellescape(node[:wpcli][:dbpassword])} \\ + --dbprefix=#{Shellwords.shellescape(node[:wpcli][:dbprefix])} \\ + --locale=#{Shellwords.shellescape(node[:wpcli][:locale])} \\ + --extra-php < File.join(node[:wpcli][:wp_docroot], node[:wpcli][:wp_siteurl]) + ) + end + end +end + + +if node[:wpcli][:locale] == 'ja' then + bash "wordpress-plugin-ja-install" do + user node[:wpcli][:user] + group node[:wpcli][:group] + cwd File.join(node[:wpcli][:wp_docroot], node[:wpcli][:wp_siteurl]) + code "WP_CLI_CONFIG_PATH=#{Shellwords.shellescape(node[:wpcli][:config_path])} wp plugin activate wp-multibyte-patch" + end +end + +node[:wpcli][:default_plugins].each do |plugin| + bash "WordPress #{plugin} install" do + user node[:wpcli][:user] + group node[:wpcli][:group] + cwd File.join(node[:wpcli][:wp_docroot], node[:wpcli][:wp_siteurl]) + code "WP_CLI_CONFIG_PATH=#{Shellwords.shellescape(node[:wpcli][:config_path])} wp plugin install #{Shellwords.shellescape(plugin)} --activate" + end +end + +if node[:wpcli][:default_theme] != '' then + bash "WordPress #{node[:wpcli][:default_theme]} install" do + user node[:wpcli][:user] + group node[:wpcli][:group] + cwd File.join(node[:wpcli][:wp_docroot], node[:wpcli][:wp_siteurl]) + code "WP_CLI_CONFIG_PATH=#{Shellwords.shellescape(node[:wpcli][:config_path])} wp theme install #{Shellwords.shellescape(node[:wpcli][:default_theme])} --activate" + end +end + + +if node[:wpcli][:theme_unit_test] == true then + remote_file node[:wpcli][:theme_unit_test_data] do + source node[:wpcli][:theme_unit_test_data_url] + mode 0644 + action :create + end + + bash "Import theme unit test data" do + user node[:wpcli][:user] + group node[:wpcli][:group] + cwd File.join(node[:wpcli][:wp_docroot], node[:wpcli][:wp_siteurl]) + code "WP_CLI_CONFIG_PATH=#{Shellwords.shellescape(node[:wpcli][:config_path])} wp plugin install wordpress-importer --activate" + end + + bash "Import theme unit test data" do + user node[:wpcli][:user] + group node[:wpcli][:group] + cwd File.join(node[:wpcli][:wp_docroot], node[:wpcli][:wp_siteurl]) + code "WP_CLI_CONFIG_PATH=#{Shellwords.shellescape(node[:wpcli][:config_path])} wp import --authors=create #{Shellwords.shellescape(node[:wpcli][:theme_unit_test_data])}" + end +end + + +node[:wpcli][:options].each do |key, value| + bash "Setting up WordPress option #{key}" do + user node[:wpcli][:user] + group node[:wpcli][:group] + cwd File.join(node[:wpcli][:wp_docroot], node[:wpcli][:wp_siteurl]) + code "WP_CLI_CONFIG_PATH=#{Shellwords.shellescape(node[:wpcli][:config_path])} wp option update #{Shellwords.shellescape(key.to_s)} #{Shellwords.shellescape(value.to_s)}" + end +end + + +if node[:wpcli][:rewrite_structure] then + bash "Setting up rewrite rules" do + user node[:wpcli][:user] + group node[:wpcli][:group] + cwd File.join(node[:wpcli][:wp_docroot], node[:wpcli][:wp_siteurl]) + code "WP_CLI_CONFIG_PATH=#{Shellwords.shellescape(node[:wpcli][:config_path])} wp rewrite structure #{Shellwords.shellescape(node[:wpcli][:rewrite_structure])}" + end + + bash "Flush rewrite rules" do + user node[:wpcli][:user] + group node[:wpcli][:group] + cwd File.join(node[:wpcli][:wp_docroot], node[:wpcli][:wp_siteurl]) + code "WP_CLI_CONFIG_PATH=#{Shellwords.shellescape(node[:wpcli][:config_path])} wp rewrite flush --hard" + end +end + + +if node[:wpcli][:is_multisite] == true then + bash "Setup multisite" do + user node[:wpcli][:user] + group node[:wpcli][:group] + cwd File.join(node[:wpcli][:wp_docroot], node[:wpcli][:wp_siteurl]) + code "WP_CLI_CONFIG_PATH=#{Shellwords.shellescape(node[:wpcli][:config_path])} wp core multisite-convert" + end + + template File.join(node[:wpcli][:wp_docroot], node[:wpcli][:wp_home], '.htaccess') do + source "multisite.htaccess.erb" + owner node[:wpcli][:user] + group node[:wpcli][:group] + mode "0644" + end +end + +template File.join(node[:wpcli][:wp_docroot], node[:wpcli][:wp_home], '.gitignore') do + source "gitignore.erb" + owner node[:wpcli][:user] + group node[:wpcli][:group] + mode "0644" + action :create_if_missing + variables( + :siteurl => File.join(node[:wpcli][:wp_siteurl], '/'), + ) +end + +apache_site "000-default" do + enable false +end + +web_app "wordpress" do + template "wordpress.conf.erb" + docroot node[:wpcli][:wp_docroot] + server_name node[:fqdn] +end + +bash "create-ssl-keys" do + user "root" + group "root" + cwd File.join(node[:apache][:dir], 'ssl') + code <<-EOH + openssl genrsa -out server.key 2048 + openssl req -new -key server.key -sha256 -subj '/C=JP/ST=Wakayama/L=Kushimoto/O=My Corporate/CN=#{node[:fqdn]}' -out server.csr + openssl x509 -in server.csr -days 365 -req -signkey server.key > server.crt + EOH + notifies :restart, "service[apache2]" +end + +template File.join( node[:wpcli][:wp_docroot], ".editorconfig" ) do + source "editorconfig.erb" + owner node[:wpcli][:user] + group node[:wpcli][:group] + mode "0644" + action :create_if_missing +end diff --git a/vagrant/provision/site-cookbooks/wpcli/templates/default/config.yml.erb b/vagrant/provision/site-cookbooks/wpcli/templates/default/config.yml.erb new file mode 100644 index 0000000..764fae4 --- /dev/null +++ b/vagrant/provision/site-cookbooks/wpcli/templates/default/config.yml.erb @@ -0,0 +1,5 @@ +path: <%= @docroot %> +apache_modules: + - mod_rewrite +require: + - commands/dictator/dictator.php diff --git a/vagrant/provision/site-cookbooks/wpcli/templates/default/editorconfig.erb b/vagrant/provision/site-cookbooks/wpcli/templates/default/editorconfig.erb new file mode 100644 index 0000000..e1cc194 --- /dev/null +++ b/vagrant/provision/site-cookbooks/wpcli/templates/default/editorconfig.erb @@ -0,0 +1,21 @@ +# This file is for unifying the coding style for different editors and IDEs +# editorconfig.org + +# WordPress Coding Standards +# https://make.wordpress.org/core/handbook/coding-standards/ + +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +indent_style = tab + +[{.jshintrc,*.json,*.yml}] +indent_style = space +indent_size = 2 + +[{*.txt,wp-config-sample.php}] +end_of_line = crlf diff --git a/vagrant/provision/site-cookbooks/wpcli/templates/default/gitignore.erb b/vagrant/provision/site-cookbooks/wpcli/templates/default/gitignore.erb new file mode 100644 index 0000000..26decab --- /dev/null +++ b/vagrant/provision/site-cookbooks/wpcli/templates/default/gitignore.erb @@ -0,0 +1,12 @@ +.htaccess +sitemap.xml +sitemap.xml.gz +<%= @siteurl %>wp-config.php +<%= @siteurl %>wp-content/advanced-cache.php +<%= @siteurl %>wp-content/backup-db/ +<%= @siteurl %>wp-content/backups/ +<%= @siteurl %>wp-content/blogs.dir/ +<%= @siteurl %>wp-content/cache/ +<%= @siteurl %>wp-content/upgrade/ +<%= @siteurl %>wp-content/uploads/ +<%= @siteurl %>wp-content/wp-cache-config.php diff --git a/vagrant/provision/site-cookbooks/wpcli/templates/default/grants.sql.erb b/vagrant/provision/site-cookbooks/wpcli/templates/default/grants.sql.erb new file mode 100644 index 0000000..197a79f --- /dev/null +++ b/vagrant/provision/site-cookbooks/wpcli/templates/default/grants.sql.erb @@ -0,0 +1,5 @@ +GRANT ALL ON <%= @database %>.* TO '<%= @user %>'@'%' IDENTIFIED BY '<%= @password %>'; +GRANT ALL ON <%= @database %>.* TO '<%= @user %>'@'<%= node['fqdn'] %>' IDENTIFIED BY '<%= @password %>'; +GRANT ALL ON <%= @database %>.* TO '<%= @user %>'@'localhost' IDENTIFIED BY '<%= @password %>'; + +FLUSH PRIVILEGES; diff --git a/vagrant/provision/site-cookbooks/wpcli/templates/default/index.php.erb b/vagrant/provision/site-cookbooks/wpcli/templates/default/index.php.erb new file mode 100644 index 0000000..1a38379 --- /dev/null +++ b/vagrant/provision/site-cookbooks/wpcli/templates/default/index.php.erb @@ -0,0 +1,17 @@ +/wp-blog-header.php' ); diff --git a/vagrant/provision/site-cookbooks/wpcli/templates/default/multisite.htaccess.erb b/vagrant/provision/site-cookbooks/wpcli/templates/default/multisite.htaccess.erb new file mode 100644 index 0000000..9c34704 --- /dev/null +++ b/vagrant/provision/site-cookbooks/wpcli/templates/default/multisite.htaccess.erb @@ -0,0 +1,13 @@ +RewriteEngine On +RewriteBase / +RewriteRule ^index\.php$ - [L] + +# add a trailing slash to /wp-admin +RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L] + +RewriteCond %{REQUEST_FILENAME} -f [OR] +RewriteCond %{REQUEST_FILENAME} -d +RewriteRule ^ - [L] +RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L] +RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L] +RewriteRule . index.php [L] diff --git a/vagrant/provision/site-cookbooks/wpcli/templates/default/wordpress.conf.erb b/vagrant/provision/site-cookbooks/wpcli/templates/default/wordpress.conf.erb new file mode 100644 index 0000000..9e25bdd --- /dev/null +++ b/vagrant/provision/site-cookbooks/wpcli/templates/default/wordpress.conf.erb @@ -0,0 +1,63 @@ + + ServerName <%= @params[:server_name] %> + DocumentRoot <%= @params[:docroot] %> + + EnableSendfile off + + > + Options FollowSymLinks + AllowOverride FileInfo Options Limit + Order allow,deny + Allow from all + + + + Options FollowSymLinks + AllowOverride None + + + LogLevel info + ErrorLog <%= node['apache']['log_dir'] %>/<%= @params[:name] %>-error.log + CustomLog <%= node['apache']['log_dir'] %>/<%= @params[:name] %>-access.log combined + + RewriteEngine On + RewriteLog <%= node['apache']['log_dir'] %>/<%= @application_name %>-rewrite.log + RewriteLogLevel 0 + + + + + + + + ServerName <%= @params[:server_name] %> + DocumentRoot <%= @params[:docroot] %> + + > + Options FollowSymLinks + AllowOverride FileInfo Options Limit + Order allow,deny + Allow from all + + + + Options FollowSymLinks + AllowOverride None + + + LogLevel info + ErrorLog <%= node['apache']['log_dir'] %>/<%= @params[:name] %>-error.log + CustomLog <%= node['apache']['log_dir'] %>/<%= @params[:name] %>-access.log combined + + RewriteEngine On + RewriteLog <%= node['apache']['log_dir'] %>/<%= @application_name %>-rewrite.log + RewriteLogLevel 0 + + SSLEngine On + SSLCertificateFile /etc/httpd/ssl/server.crt + SSLCertificateKeyFile /etc/httpd/ssl/server.key + + + + + diff --git a/vagrant/spec/default/vccw_spec.rb b/vagrant/spec/default/vccw_spec.rb new file mode 100644 index 0000000..b77caab --- /dev/null +++ b/vagrant/spec/default/vccw_spec.rb @@ -0,0 +1,84 @@ +# encoding: utf-8 +# vim: ft=ruby expandtab shiftwidth=2 tabstop=2 + +require 'spec_helper' +require 'shellwords' + +describe file('/usr/local/share/wp-i18n/makepot.php') do + let(:disable_sudo) { true } + it { should be_file } +end + +describe command('grunt --version') do + let(:disable_sudo) { true } + its(:exit_status) { should eq 0 } +end + +describe command('grunt-init --version') do + let(:disable_sudo) { true } + its(:exit_status) { should eq 0 } + end + +describe file("/home/#{Shellwords.shellescape($conf['user'])}/.grunt-init/hatamoto/README.md") do + let(:disable_sudo) { true } + it { should be_file } +end + +describe file("/home/#{Shellwords.shellescape($conf['user'])}/.grunt-init/iemoto/README.md") do + let(:disable_sudo) { true } + it { should be_file } +end + +describe command('/usr/local/bin/phpunit --version') do + let(:disable_sudo) { true } + its(:exit_status) { should eq 0 } +end + +describe file('/tmp/wordpress') do + it { should be_directory } + it { should be_owned_by 'vagrant' } + it { should be_writable.by_user('vagrant') } +end + +describe file('/tmp/wordpress-tests-lib') do + it { should be_directory } + it { should be_owned_by 'vagrant' } + it { should be_writable.by_user('vagrant') } +end + +describe file('/tmp/wordpress.tar.gz') do + it { should be_file } + it { should be_owned_by 'vagrant' } + it { should be_writable.by_user('vagrant') } +end + +describe file('/tmp/wordpress/license.txt') do + let(:disable_sudo) { true } + it { should be_file } +end + +describe command('/usr/local/bin/composer --version') do + let(:disable_sudo) { true } + its(:exit_status) { should eq 0 } +end + +describe command('~/.composer/vendor/bin/phpcs --version') do + let(:disable_sudo) { true } + its(:exit_status) { should eq 0 } +end + +describe file('/vagrant/Movefile') do + let(:disable_sudo) { true } + it { should be_file } +end + +describe command('wordmove help') do + let(:disable_sudo) { true } + its(:exit_status) { should eq 0 } +end + +# describe command('wpcs --version') do +# let(:disable_sudo) { true } +# let(:pre_command) { 'source ~/.bash_profile' } +# its(:exit_status) { should eq 0 } +# end diff --git a/vagrant/spec/default/wp-cli_spec.rb b/vagrant/spec/default/wp-cli_spec.rb new file mode 100644 index 0000000..b20c146 --- /dev/null +++ b/vagrant/spec/default/wp-cli_spec.rb @@ -0,0 +1,128 @@ +# encoding: utf-8 +# vim: ft=ruby expandtab shiftwidth=2 tabstop=2 + +require 'spec_helper' +require 'shellwords' + +describe host($conf['hostname']) do + it { should be_resolvable.by('hosts') } +end + +describe interface('eth1') do + it { should have_ipv4_address($conf['ip']) } +end + +describe package('httpd') do + it { should be_installed } +end + +describe service('httpd') do + it { should be_enabled } + it { should be_running } +end + +describe port(80) do + it { should be_listening } +end + +describe port(443) do + it { should be_listening } +end + +describe 'PHP config parameters' do + context php_config('default_charset') do + its(:value) { should eq 'UTF-8' } + end + + context php_config('mbstring.language') do + its(:value) { should eq 'neutral' } + end + + context php_config('mbstring.internal_encoding') do + its(:value) { should eq 'UTF-8' } + end + + context php_config('date.timezone') do + its(:value) { should eq 'UTC' } + end + + context php_config('short_open_tag') do + its(:value) { should eq 'Off' } + end + + context php_config('session.save_path') do + its(:value) { should eq '/tmp' } + end +end + +describe command('wp --version') do + let(:disable_sudo) { true } + its(:exit_status) { should eq 0 } +end + +describe command('wp help dictator') do + let(:disable_sudo) { true } + its(:exit_status) { should eq 0 } +end + +describe command("wget -q http://" + File.join($conf['ip'], $conf['wp_home'], '/') + " -O - | head -100 | grep generator") do + its(:stdout) { should match / #{config.path}` + +options = Net::SSH::Config.for(host, [config.path]) +puts options.to_s +set :host, host +set :ssh_options, options From 8456d43c207b88f4d57229dd2b05d9776d34d0f7 Mon Sep 17 00:00:00 2001 From: Dan Milon Date: Fri, 13 Nov 2015 23:55:19 +0200 Subject: [PATCH 2/8] partially fix datetime to timestamp --- open-csa-wp-db-tables.php | 40 +++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/open-csa-wp-db-tables.php b/open-csa-wp-db-tables.php index de28c1e..4fca0fa 100644 --- a/open-csa-wp-db-tables.php +++ b/open-csa-wp-db-tables.php @@ -8,12 +8,12 @@ function open_csa_wp_db_tables_creation () { - global $wpdb; + global $wpdb; $charset_collate = $wpdb->get_charset_collate(); - - - $sql = " - + + + $sql = " + CREATE TABLE ". OPEN_CSA_WP_TABLE_SPOTS ." ( id int(4) NOT NULL UNIQUE AUTO_INCREMENT, spot_name varchar(30) NOT NULL, @@ -33,17 +33,17 @@ function open_csa_wp_db_tables_creation () { parking enum('easy','possible','hard','impossible') DEFAULT NULL, PRIMARY KEY (id) ) $charset_collate; - + CREATE TABLE ". OPEN_CSA_WP_TABLE_SPOTS_TO_USERS ." ( - spot_id int(10) NOT NULL, - user_id int(10) NOT NULL, + spot_id int(10) NOT NULL, + user_id int(10) NOT NULL, type enum('production','delivery','home') NOT NULL, PRIMARY KEY (spot_id,user_id,type) - ) $charset_collate; - + ) $charset_collate; + CREATE TABLE ". OPEN_CSA_WP_TABLE_PRODUCT_CATEGORIES ." ( - id int(4) NOT NULL AUTO_INCREMENT, - name varchar(20) NOT NULL, + id int(4) NOT NULL AUTO_INCREMENT, + name varchar(20) NOT NULL, description varchar(100) DEFAULT NULL, PRIMARY KEY (id) ) $charset_collate; @@ -52,7 +52,7 @@ function open_csa_wp_db_tables_creation () { id int(10) NOT NULL AUTO_INCREMENT, name varchar(30) NOT NULL, category int(4) NOT NULL, - variety varchar(30) DEFAULT NULL, + variety varchar(30) DEFAULT NULL, current_price_in_euro float(5) NOT NULL, measurement_unit enum('piece', 'litre', 'kilogram', 'bunch') NOT NULL, producer int(4) NOT NULL, @@ -60,7 +60,7 @@ function open_csa_wp_db_tables_creation () { is_available boolean NOT NULL, PRIMARY KEY (id) ) $charset_collate; - + CREATE TABLE ". OPEN_CSA_WP_TABLE_DELIVERIES ." ( id int(11) NOT NULL AUTO_INCREMENT, spot_id int(4) NOT NULL, @@ -68,7 +68,7 @@ function open_csa_wp_db_tables_creation () { order_deadline_time time NOT NULL, delivery_date date NOT NULL, delivery_start_time time NOT NULL, - delivery_end_time time NOT NULL, + delivery_end_time time NOT NULL, user_in_charge int(4) DEFAULT NULL, are_orders_open boolean NOT NULL, PRIMARY KEY (id) @@ -79,24 +79,24 @@ function open_csa_wp_db_tables_creation () { user_id int(11) NOT NULL, product_id int(11) NOT NULL, quantity int(4) NOT NULL, - status enum('pending', 'accomplished', 'cancelled') DEFAULT 'pending', + status enum('pending', 'accomplished', 'cancelled') DEFAULT 'pending', custom_price float(5) DEFAULT NULL, comments varchar(100) DEFAULT NULL, submission_or_last_edit_datetime datetime DEFAULT NULL, PRIMARY KEY (delivery_id,user_id,product_id) ) $charset_collate; - + CREATE TABLE ". OPEN_CSA_WP_TABLE_USER_ORDERS ." ( delivery_id int(11) NOT NULL, user_id int(11) NOT NULL, time_of_arrival time DEFAULT NULL, comments varchar(500) DEFAULT NULL, - submission_datetime datetime DEFAULT NOW(), + submission_datetime TIMESTAMP DEFAULT CURRENT_TIMESTAMP, last_edit_datetime datetime DEFAULT NULL, PRIMARY KEY (delivery_id,user_id) ) $charset_collate; "; - + require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); dbDelta( $sql ); @@ -110,7 +110,7 @@ function open_csa_wp_db_tables_creation () { function open_csa_wp_db_tables_drop() { - global $wpdb; + global $wpdb; $wpdb->query("DROP TABLE IF EXISTS ". OPEN_CSA_WP_TABLE_SPOTS); $wpdb->query("DROP TABLE IF EXISTS ". OPEN_CSA_WP_TABLE_SPOTS_TO_USERS); From b8cd3a44d6e805b5ae019b28f929e6f0527fe215 Mon Sep 17 00:00:00 2001 From: Dan Milon Date: Sat, 14 Nov 2015 14:35:03 +0200 Subject: [PATCH 3/8] add first translation PO --- translations/el.mo | Bin 0 -> 860 bytes translations/el.po | 664 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 664 insertions(+) create mode 100644 translations/el.mo create mode 100644 translations/el.po diff --git a/translations/el.mo b/translations/el.mo new file mode 100644 index 0000000000000000000000000000000000000000..b1e7dd66b1d67087d095477c756fa1d32c953f04 GIT binary patch literal 860 zcmaJfgc5N!n~A31Z_q8?hoINp5Fuu(4b1655$1Zl;sn%Yxmk+ZwnU8nSi@b~yF zj2l6)6tmKkJ)ZaG&5q~StCv6b`0O)YGY%Oq81ER(88hDShY$R0IDgOF+wYV|xGdn7 ze9+b?VI3LB1Hz+A=ARdE>Ioxf;0z-v(a+=vqy#w>a;OG_w^={Smy=1mXv!K(f(7B~pI8a1lIzRs^KEA`&5~1VA{nmn5&l!Qz4Hh+tOF`^k{t%W;#SA z?(VjkuY^8d&e;~S*1rHOR@yM1dv2!e&`_1SrQ4~MZEZo7UX#}pIu-r4qI{lC1rN2! z8^3Phpe^KU@g{ZJ4BKqyZBg?A=Db^_{cnS#oyu;f_icV~Hg=Ow+T=R?xx?OXXpj;9 literal 0 HcmV?d00001 diff --git a/translations/el.po b/translations/el.po new file mode 100644 index 0000000..2a03568 --- /dev/null +++ b/translations/el.po @@ -0,0 +1,664 @@ +msgid "" +msgstr "" +"Project-Id-Version: open-csa-wp\n" +"POT-Creation-Date: 2015-11-14 14:33+0200\n" +"PO-Revision-Date: 2015-11-14 14:34+0200\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.5\n" +"X-Poedit-Basepath: ../Documents/dev/open-csa-wp\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-KeywordsList: __\n" +"X-Poedit-SearchPath-0: open-csa-wp-administration-panel.php\n" +"X-Poedit-SearchPath-1: open-csa-wp-deliveries.php\n" +"X-Poedit-SearchPath-2: open-csa-wp-general-functions.php\n" +"X-Poedit-SearchPath-3: open-csa-wp-orders.php\n" +"X-Poedit-SearchPath-4: open-csa-wp-product-categories.php\n" +"X-Poedit-SearchPath-5: open-csa-wp-products.php\n" +"X-Poedit-SearchPath-6: open-csa-wp-spots.php\n" +"X-Poedit-SearchPath-7: open-csa-wp-users.php\n" + +#: open-csa-wp-administration-panel.php:15 +msgid "CSA Management" +msgstr "" + +#: open-csa-wp-administration-panel.php:15 +msgid "CSA" +msgstr "" + +#: open-csa-wp-administration-panel.php:16 +msgid "Manage CSA Products" +msgstr "" + +#: open-csa-wp-administration-panel.php:16 +msgid "Products" +msgstr "" + +#: open-csa-wp-administration-panel.php:17 +msgid "Manage CSA Spots" +msgstr "" + +#: open-csa-wp-administration-panel.php:17 +msgid "Spots" +msgstr "" + +#: open-csa-wp-administration-panel.php:18 +msgid "Manage CSA Deliveries" +msgstr "" + +#: open-csa-wp-administration-panel.php:18 +msgid "Deliveries" +msgstr "" + +#: open-csa-wp-administration-panel.php:19 +msgid "Manage CSA Orders" +msgstr "" + +#: open-csa-wp-administration-panel.php:19 +msgid "Orders" +msgstr "" + +#: open-csa-wp-administration-panel.php:20 +msgid "Manage CSA Users" +msgstr "" + +#: open-csa-wp-administration-panel.php:20 +msgid "Users" +msgstr "" + +#: open-csa-wp-administration-panel.php:38 +#: open-csa-wp-administration-panel.php:76 +#: open-csa-wp-administration-panel.php:100 +#: open-csa-wp-administration-panel.php:169 +msgid "CSA Management Panel" +msgstr "" + +#: open-csa-wp-administration-panel.php:40 +msgid "Manage Products" +msgstr "" + +#: open-csa-wp-administration-panel.php:163 open-csa-wp-users.php:432 +msgid "sorry... you need to log in first..." +msgstr "" + +#: open-csa-wp-administration-panel.php:171 +msgid "Manage User Orders" +msgstr "" + +#: open-csa-wp-administration-panel.php:173 +msgid "Manage Your Orders" +msgstr "" + +#: open-csa-wp-administration-panel.php:231 +msgid "Total Orders of Deliveries You Are Responsible" +msgstr "" + +#: open-csa-wp-administration-panel.php:235 +msgid "Your Total Orders per Delivery" +msgstr "" + +#: open-csa-wp-administration-panel.php:258 +msgid "You do not have sufficient permissions to access this page." +msgstr "" + +#: open-csa-wp-deliveries.php:108 open-csa-wp-deliveries.php:115 +#: open-csa-wp-deliveries.php:117 +msgid "Initiate New Delivery" +msgstr "" + +#: open-csa-wp-deliveries.php:108 +msgid " \tform" +msgstr "" + +#: open-csa-wp-deliveries.php:115 open-csa-wp-orders.php:40 +#: open-csa-wp-product-categories.php:18 open-csa-wp-products.php:30 +msgid "show form" +msgstr "" + +#: open-csa-wp-deliveries.php:117 open-csa-wp-orders.php:42 +#: open-csa-wp-product-categories.php:20 open-csa-wp-products.php:32 +msgid "hide form" +msgstr "" + +#: open-csa-wp-deliveries.php:121 +msgid "Edit Delivery" +msgstr "" + +#: open-csa-wp-deliveries.php:124 +msgid "Initiating new delivery for " +msgstr "" + +#: open-csa-wp-deliveries.php:172 +msgid "" +"Below, you can customize the deadline and delivery dates (and times) for " +"this delivery." +msgstr "" + +#: open-csa-wp-deliveries.php:174 +msgid "with default values... (point here)" +msgstr "" + +#: open-csa-wp-deliveries.php:177 +msgid "with custom values..." +msgstr "" + +#: open-csa-wp-deliveries.php:220 open-csa-wp-deliveries.php:494 +#: open-csa-wp-deliveries.php:1077 open-csa-wp-spots.php:214 +#: open-csa-wp-spots.php:219 +msgid "up to" +msgstr "" + +#: open-csa-wp-deliveries.php:231 +msgid "Order deadline is on" +msgstr "" + +#: open-csa-wp-deliveries.php:298 +msgid "Responsible for this delivery is" +msgstr "" + +#: open-csa-wp-deliveries.php:333 +msgid "Currently, new orders can be submitted" +msgstr "" + +#: open-csa-wp-deliveries.php:334 +msgid "Currently, new orders can not be submitted" +msgstr "" + +#: open-csa-wp-deliveries.php:358 +msgid "Initiate Delivery" +msgstr "" + +#: open-csa-wp-deliveries.php:363 +msgid "Update Delivery" +msgstr "" + +#: open-csa-wp-deliveries.php:400 open-csa-wp-deliveries.php:413 +msgid "Custom values" +msgstr "" + +#: open-csa-wp-deliveries.php:400 open-csa-wp-deliveries.php:402 +#: open-csa-wp-deliveries.php:413 open-csa-wp-deliveries.php:415 +#: open-csa-wp-products.php:23 open-csa-wp-spots.php:24 +msgid "form" +msgstr "" + +#: open-csa-wp-deliveries.php:402 open-csa-wp-deliveries.php:415 +msgid "Customize default values" +msgstr "" + +#: open-csa-wp-deliveries.php:484 +msgid "order deadline is on" +msgstr "" + +#: open-csa-wp-deliveries.php:542 open-csa-wp-spots.php:268 +msgid "Delivery day is" +msgstr "" + +#: open-csa-wp-deliveries.php:594 open-csa-wp-spots.php:307 +#: open-csa-wp-spots.php:312 +msgid "to" +msgstr "" + +#: open-csa-wp-deliveries.php:646 +msgid "Reset to default values" +msgstr "" + +#: open-csa-wp-deliveries.php:800 open-csa-wp-deliveries.php:802 +msgid "Deliveries List" +msgstr "" + +#: open-csa-wp-deliveries.php:800 open-csa-wp-orders.php:126 +#: open-csa-wp-orders.php:625 open-csa-wp-orders.php:817 +#: open-csa-wp-product-categories.php:111 open-csa-wp-products.php:452 +msgid "show" +msgstr "" + +#: open-csa-wp-deliveries.php:802 open-csa-wp-orders.php:623 +#: open-csa-wp-orders.php:819 open-csa-wp-product-categories.php:113 +#: open-csa-wp-products.php:454 +msgid "hide" +msgstr "" + +#: open-csa-wp-deliveries.php:891 +msgid "remover" +msgstr "" + +#: open-csa-wp-deliveries.php:891 +msgid "grant" +msgstr "" + +#: open-csa-wp-deliveries.php:891 +msgid "ability to order" +msgstr "" + +#: open-csa-wp-deliveries.php:900 +msgid "click to edit this delivery" +msgstr "" + +#: open-csa-wp-deliveries.php:908 +msgid "delete delivery" +msgstr "" + +#: open-csa-wp-deliveries.php:987 +msgid "" +"You are not able to sumbit new order, since there is no delivery accepting " +"new order submissions" +msgstr "" + +#: open-csa-wp-deliveries.php:988 +msgid "You can create new deliveries" +msgstr "" + +#: open-csa-wp-deliveries.php:991 +msgid "here" +msgstr "" + +#: open-csa-wp-deliveries.php:1072 +msgid "Delivery for spot" +msgstr "" + +#: open-csa-wp-deliveries.php:1072 +msgid "with" +msgstr "" + +#: open-csa-wp-deliveries.php:1073 +msgid "deadline on" +msgstr "" + +#: open-csa-wp-deliveries.php:1075 +msgid "and delivery on" +msgstr "" + +#: open-csa-wp-deliveries.php:1076 open-csa-wp-spots.php:278 +#: open-csa-wp-spots.php:283 +msgid "from" +msgstr "" + +#: open-csa-wp-orders.php:18 +msgid "Submit New Order" +msgstr "" + +#: open-csa-wp-orders.php:26 +msgid "Edit Order" +msgstr "" + +#: open-csa-wp-orders.php:75 +msgid "for user" +msgstr "" + +#: open-csa-wp-orders.php:106 +msgid "on delivery spot" +msgstr "" + +#: open-csa-wp-orders.php:126 +msgid "spot details" +msgstr "" + +#: open-csa-wp-orders.php:189 open-csa-wp-spots.php:540 +msgid "It has refrigerator to store products" +msgstr "" + +#: open-csa-wp-orders.php:190 +msgid "It does not have refrigerator to store products" +msgstr "" + +#: open-csa-wp-orders.php:227 +msgid "for delivery with" +msgstr "" + +#: open-csa-wp-orders.php:233 +msgid "currently, this delivery spot has no active deliveries" +msgstr "" + +#: open-csa-wp-orders.php:289 +msgid "" +"Choose the quantity of each product you want to order and press \"Submit\" " +"at the end of the page." +msgstr "" + +#: open-csa-wp-orders.php:290 +msgid "" +"After submitting your order, you will still be able to edit it, until the " +"deadline for order submission of this delivery." +msgstr "" + +#: open-csa-wp-orders.php:291 +msgid "" +"You can read additional information for each product, by pointing to \"info" +"\"." +msgstr "" + +#: open-csa-wp-orders.php:294 +msgid "by pointing here you can read additional information." +msgstr "" + +#: open-csa-wp-orders.php:374 +msgid "remove this product from your order" +msgstr "" + +#: open-csa-wp-orders.php:397 +msgid "Do you have any comments to add" +msgstr "" + +#: open-csa-wp-orders.php:550 +msgid "Submit Additional Order" +msgstr "" + +#: open-csa-wp-orders.php:552 +msgid "Submit Order" +msgstr "" + +#: open-csa-wp-orders.php:563 +msgid "cancel" +msgstr "" + +#: open-csa-wp-orders.php:601 +msgid "You have not yet submitted any order." +msgstr "" + +#: open-csa-wp-orders.php:603 +msgid "No user has yet submitted any order." +msgstr "" + +#: open-csa-wp-orders.php:617 +msgid "Your Orders List" +msgstr "" + +#: open-csa-wp-orders.php:619 +msgid "User Orders List" +msgstr "" + +#: open-csa-wp-orders.php:645 +msgid "" +"You can become responsible for some delivery (if none exists) by clicking on " +"the \"list\" icon." +msgstr "" + +#: open-csa-wp-orders.php:662 +msgid "User" +msgstr "" + +#: open-csa-wp-orders.php:737 +msgid "click to edit this order" +msgstr "" + +#: open-csa-wp-orders.php:750 +msgid "click to become responsible for this delivery" +msgstr "" + +#: open-csa-wp-orders.php:789 +msgid "No delivery has yet been initiated." +msgstr "" + +#: open-csa-wp-orders.php:791 +msgid "You have not yet become responsible for any delivery." +msgstr "" + +#: open-csa-wp-orders.php:795 +msgid "List" +msgstr "" + +#: open-csa-wp-orders.php:797 +msgid "Delivery Total Orders List" +msgstr "" + +#: open-csa-wp-orders.php:857 +msgid "User In Charge" +msgstr "" + +#: open-csa-wp-orders.php:917 +msgid "click to view the total user orders for this delivery" +msgstr "" + +#: open-csa-wp-orders.php:962 +msgid "No order has yet been submitted, for this delivery." +msgstr "" + +#: open-csa-wp-orders.php:964 +msgid "You have no orders in this delivery." +msgstr "" + +#: open-csa-wp-orders.php:982 open-csa-wp-users.php:36 +msgid "Producer" +msgstr "" + +#: open-csa-wp-orders.php:1066 +msgid "Total" +msgstr "" + +#: open-csa-wp-product-categories.php:18 open-csa-wp-product-categories.php:20 +msgid "Add New Category of Products" +msgstr "" + +#: open-csa-wp-product-categories.php:111 +#: open-csa-wp-product-categories.php:113 +msgid "Product Categories List" +msgstr "" + +#: open-csa-wp-product-categories.php:166 open-csa-wp-products.php:555 +msgid "delete product" +msgstr "" + +#: open-csa-wp-products.php:23 open-csa-wp-products.php:30 +#: open-csa-wp-products.php:32 +msgid "Add New Product" +msgstr "" + +#: open-csa-wp-products.php:35 +msgid "Edit Product" +msgstr "" + +#: open-csa-wp-products.php:93 +msgid "Category is " +msgstr "" + +#: open-csa-wp-products.php:127 +msgid "Producer is " +msgstr "" + +#: open-csa-wp-products.php:150 +msgid "Variety is" +msgstr "" + +#: open-csa-wp-products.php:166 +msgid "It costs" +msgstr "" + +#: open-csa-wp-products.php:269 +msgid "Currently, it is available" +msgstr "" + +#: open-csa-wp-products.php:269 open-csa-wp-spots.php:542 +msgid "yes" +msgstr "" + +#: open-csa-wp-products.php:270 +msgid "Currently, it is not available" +msgstr "" + +#: open-csa-wp-products.php:270 open-csa-wp-spots.php:556 +msgid "no" +msgstr "" + +#: open-csa-wp-products.php:290 +msgid "Add Product" +msgstr "" + +#: open-csa-wp-products.php:293 +msgid "Update Product" +msgstr "" + +#: open-csa-wp-products.php:305 open-csa-wp-spots.php:591 +msgid "Reset Info" +msgstr "" + +#: open-csa-wp-products.php:310 open-csa-wp-spots.php:595 +msgid "Cancel" +msgstr "" + +#: open-csa-wp-products.php:331 +msgid "per kilogram" +msgstr "" + +#: open-csa-wp-products.php:333 +msgid "kilogram" +msgstr "" + +#: open-csa-wp-products.php:341 +msgid "per piece" +msgstr "" + +#: open-csa-wp-products.php:343 +msgid "piece" +msgstr "" + +#: open-csa-wp-products.php:351 +msgid "per bunch" +msgstr "" + +#: open-csa-wp-products.php:353 +msgid "bunch" +msgstr "" + +#: open-csa-wp-products.php:361 +msgid "per litre" +msgstr "" + +#: open-csa-wp-products.php:363 +msgid "litre" +msgstr "" + +#: open-csa-wp-products.php:452 open-csa-wp-products.php:454 +msgid "Product List" +msgstr "" + +#: open-csa-wp-products.php:538 +msgid "mark it as" +msgstr "" + +#: open-csa-wp-products.php:538 +msgid "unavailable" +msgstr "" + +#: open-csa-wp-products.php:538 +msgid "available" +msgstr "" + +#: open-csa-wp-products.php:547 +msgid "click to edit this product" +msgstr "" + +#: open-csa-wp-products.php:670 +msgid "" +"sorry... no available products found... be patient, soon they will have " +"grown enough... !" +msgstr "" + +#: open-csa-wp-spots.php:24 +msgid "Add New Spot" +msgstr "" + +#: open-csa-wp-spots.php:36 +msgid "Edit Spot #" +msgstr "" + +#: open-csa-wp-spots.php:54 +msgid "Spot Name *" +msgstr "" + +#: open-csa-wp-spots.php:67 +msgid "Street Name *" +msgstr "" + +#: open-csa-wp-spots.php:77 +msgid "Street Number *" +msgstr "" + +#: open-csa-wp-spots.php:88 +msgid "City *" +msgstr "" + +#: open-csa-wp-spots.php:98 +msgid "Region *" +msgstr "" + +#: open-csa-wp-spots.php:170 +msgid "The owner of this delivery spot is: " +msgstr "" + +#: open-csa-wp-spots.php:204 +msgid "Order deadline is on " +msgstr "" + +#: open-csa-wp-spots.php:366 open-csa-wp-spots.php:379 +msgid "Order close" +msgstr "" + +#: open-csa-wp-spots.php:453 open-csa-wp-spots.php:466 +#: open-csa-wp-spots.php:479 open-csa-wp-spots.php:492 +msgid "Finding parking space is" +msgstr "" + +#: open-csa-wp-spots.php:572 +msgid "Add Spot" +msgstr "" + +#: open-csa-wp-spots.php:577 +msgid "Update Spot" +msgstr "" + +#: open-csa-wp-spots.php:583 +msgid "Please fill in required fields, i.e. those marked with (*)" +msgstr "" + +#: open-csa-wp-spots.php:811 +msgid "click to edit this spot" +msgstr "" + +#: open-csa-wp-spots.php:819 +msgid "click to delete this spot" +msgstr "" + +#: open-csa-wp-users.php:31 +msgid "Your account's type in CSA has not yet been defined" +msgstr "" + +#: open-csa-wp-users.php:32 +msgid "Your account's role in CSA has not yet been defined" +msgstr "" + +#: open-csa-wp-users.php:38 +msgid "Producer and Consumer" +msgstr "" + +#: open-csa-wp-users.php:41 +msgid "Simple User" +msgstr "" + +#: open-csa-wp-users.php:43 +msgid "You can become responsible for some delivery" +msgstr "" + +#: open-csa-wp-users.php:50 +msgid "CSA Properties" +msgstr "" + +#: open-csa-wp-users.php:54 +msgid "Type" +msgstr "" + +#: open-csa-wp-users.php:58 +msgid "Role" +msgstr "" + +#: open-csa-wp-users.php:440 +#, php-format +msgid "" +"sorry... you do not have sufficient privileges to access \\\"%s\\\" page. In " +"case something goes wrong, please contant one of your team's " +"administrators..." +msgstr "" From dba4802e9efa91a52bdf883a75853123d06817fe Mon Sep 17 00:00:00 2001 From: gina Date: Sat, 14 Nov 2015 14:47:10 +0200 Subject: [PATCH 4/8] first translation try --- translations/el.po | 163 +++++++++++++++++++++++++-------------------- 1 file changed, 91 insertions(+), 72 deletions(-) diff --git a/translations/el.po b/translations/el.po index 2a03568..cce4209 100644 --- a/translations/el.po +++ b/translations/el.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: open-csa-wp\n" "POT-Creation-Date: 2015-11-14 14:33+0200\n" -"PO-Revision-Date: 2015-11-14 14:34+0200\n" -"Last-Translator: \n" +"PO-Revision-Date: 2015-11-14 14:46+0200\n" +"Last-Translator: gin \n" "Language-Team: \n" "Language: el\n" "MIME-Version: 1.0\n" @@ -24,43 +24,43 @@ msgstr "" #: open-csa-wp-administration-panel.php:15 msgid "CSA Management" -msgstr "" +msgstr "Διαχείριση CSA" #: open-csa-wp-administration-panel.php:15 msgid "CSA" -msgstr "" +msgstr "CSA" #: open-csa-wp-administration-panel.php:16 msgid "Manage CSA Products" -msgstr "" +msgstr "Διαχείριση Προϊόντων" #: open-csa-wp-administration-panel.php:16 msgid "Products" -msgstr "" +msgstr "Προϊόντα" #: open-csa-wp-administration-panel.php:17 msgid "Manage CSA Spots" -msgstr "" +msgstr "Διαχείριση Τοποθεσιών CSA" #: open-csa-wp-administration-panel.php:17 msgid "Spots" -msgstr "" +msgstr "Τοποθεσίες" #: open-csa-wp-administration-panel.php:18 msgid "Manage CSA Deliveries" -msgstr "" +msgstr "Διαχείριση Παραδόσεων" #: open-csa-wp-administration-panel.php:18 msgid "Deliveries" -msgstr "" +msgstr "Παραδόσεις" #: open-csa-wp-administration-panel.php:19 msgid "Manage CSA Orders" -msgstr "" +msgstr "Διαχείριση Παραγγελιών" #: open-csa-wp-administration-panel.php:19 msgid "Orders" -msgstr "" +msgstr "Παραγγελίες" #: open-csa-wp-administration-panel.php:20 msgid "Manage CSA Users" @@ -81,7 +81,8 @@ msgstr "" msgid "Manage Products" msgstr "" -#: open-csa-wp-administration-panel.php:163 open-csa-wp-users.php:432 +#: open-csa-wp-administration-panel.php:163 +#: open-csa-wp-users.php:432 msgid "sorry... you need to log in first..." msgstr "" @@ -105,7 +106,8 @@ msgstr "" msgid "You do not have sufficient permissions to access this page." msgstr "" -#: open-csa-wp-deliveries.php:108 open-csa-wp-deliveries.php:115 +#: open-csa-wp-deliveries.php:108 +#: open-csa-wp-deliveries.php:115 #: open-csa-wp-deliveries.php:117 msgid "Initiate New Delivery" msgstr "" @@ -114,13 +116,17 @@ msgstr "" msgid " \tform" msgstr "" -#: open-csa-wp-deliveries.php:115 open-csa-wp-orders.php:40 -#: open-csa-wp-product-categories.php:18 open-csa-wp-products.php:30 +#: open-csa-wp-deliveries.php:115 +#: open-csa-wp-orders.php:40 +#: open-csa-wp-product-categories.php:18 +#: open-csa-wp-products.php:30 msgid "show form" msgstr "" -#: open-csa-wp-deliveries.php:117 open-csa-wp-orders.php:42 -#: open-csa-wp-product-categories.php:20 open-csa-wp-products.php:32 +#: open-csa-wp-deliveries.php:117 +#: open-csa-wp-orders.php:42 +#: open-csa-wp-product-categories.php:20 +#: open-csa-wp-products.php:32 msgid "hide form" msgstr "" @@ -133,9 +139,7 @@ msgid "Initiating new delivery for " msgstr "" #: open-csa-wp-deliveries.php:172 -msgid "" -"Below, you can customize the deadline and delivery dates (and times) for " -"this delivery." +msgid "Below, you can customize the deadline and delivery dates (and times) for this delivery." msgstr "" #: open-csa-wp-deliveries.php:174 @@ -146,8 +150,10 @@ msgstr "" msgid "with custom values..." msgstr "" -#: open-csa-wp-deliveries.php:220 open-csa-wp-deliveries.php:494 -#: open-csa-wp-deliveries.php:1077 open-csa-wp-spots.php:214 +#: open-csa-wp-deliveries.php:220 +#: open-csa-wp-deliveries.php:494 +#: open-csa-wp-deliveries.php:1077 +#: open-csa-wp-spots.php:214 #: open-csa-wp-spots.php:219 msgid "up to" msgstr "" @@ -176,17 +182,22 @@ msgstr "" msgid "Update Delivery" msgstr "" -#: open-csa-wp-deliveries.php:400 open-csa-wp-deliveries.php:413 +#: open-csa-wp-deliveries.php:400 +#: open-csa-wp-deliveries.php:413 msgid "Custom values" msgstr "" -#: open-csa-wp-deliveries.php:400 open-csa-wp-deliveries.php:402 -#: open-csa-wp-deliveries.php:413 open-csa-wp-deliveries.php:415 -#: open-csa-wp-products.php:23 open-csa-wp-spots.php:24 +#: open-csa-wp-deliveries.php:400 +#: open-csa-wp-deliveries.php:402 +#: open-csa-wp-deliveries.php:413 +#: open-csa-wp-deliveries.php:415 +#: open-csa-wp-products.php:23 +#: open-csa-wp-spots.php:24 msgid "form" msgstr "" -#: open-csa-wp-deliveries.php:402 open-csa-wp-deliveries.php:415 +#: open-csa-wp-deliveries.php:402 +#: open-csa-wp-deliveries.php:415 msgid "Customize default values" msgstr "" @@ -194,11 +205,13 @@ msgstr "" msgid "order deadline is on" msgstr "" -#: open-csa-wp-deliveries.php:542 open-csa-wp-spots.php:268 +#: open-csa-wp-deliveries.php:542 +#: open-csa-wp-spots.php:268 msgid "Delivery day is" msgstr "" -#: open-csa-wp-deliveries.php:594 open-csa-wp-spots.php:307 +#: open-csa-wp-deliveries.php:594 +#: open-csa-wp-spots.php:307 #: open-csa-wp-spots.php:312 msgid "to" msgstr "" @@ -207,18 +220,24 @@ msgstr "" msgid "Reset to default values" msgstr "" -#: open-csa-wp-deliveries.php:800 open-csa-wp-deliveries.php:802 +#: open-csa-wp-deliveries.php:800 +#: open-csa-wp-deliveries.php:802 msgid "Deliveries List" msgstr "" -#: open-csa-wp-deliveries.php:800 open-csa-wp-orders.php:126 -#: open-csa-wp-orders.php:625 open-csa-wp-orders.php:817 -#: open-csa-wp-product-categories.php:111 open-csa-wp-products.php:452 +#: open-csa-wp-deliveries.php:800 +#: open-csa-wp-orders.php:126 +#: open-csa-wp-orders.php:625 +#: open-csa-wp-orders.php:817 +#: open-csa-wp-product-categories.php:111 +#: open-csa-wp-products.php:452 msgid "show" msgstr "" -#: open-csa-wp-deliveries.php:802 open-csa-wp-orders.php:623 -#: open-csa-wp-orders.php:819 open-csa-wp-product-categories.php:113 +#: open-csa-wp-deliveries.php:802 +#: open-csa-wp-orders.php:623 +#: open-csa-wp-orders.php:819 +#: open-csa-wp-product-categories.php:113 #: open-csa-wp-products.php:454 msgid "hide" msgstr "" @@ -244,9 +263,7 @@ msgid "delete delivery" msgstr "" #: open-csa-wp-deliveries.php:987 -msgid "" -"You are not able to sumbit new order, since there is no delivery accepting " -"new order submissions" +msgid "You are not able to sumbit new order, since there is no delivery accepting new order submissions" msgstr "" #: open-csa-wp-deliveries.php:988 @@ -273,7 +290,8 @@ msgstr "" msgid "and delivery on" msgstr "" -#: open-csa-wp-deliveries.php:1076 open-csa-wp-spots.php:278 +#: open-csa-wp-deliveries.php:1076 +#: open-csa-wp-spots.php:278 #: open-csa-wp-spots.php:283 msgid "from" msgstr "" @@ -298,7 +316,8 @@ msgstr "" msgid "spot details" msgstr "" -#: open-csa-wp-orders.php:189 open-csa-wp-spots.php:540 +#: open-csa-wp-orders.php:189 +#: open-csa-wp-spots.php:540 msgid "It has refrigerator to store products" msgstr "" @@ -315,21 +334,15 @@ msgid "currently, this delivery spot has no active deliveries" msgstr "" #: open-csa-wp-orders.php:289 -msgid "" -"Choose the quantity of each product you want to order and press \"Submit\" " -"at the end of the page." +msgid "Choose the quantity of each product you want to order and press \"Submit\" at the end of the page." msgstr "" #: open-csa-wp-orders.php:290 -msgid "" -"After submitting your order, you will still be able to edit it, until the " -"deadline for order submission of this delivery." +msgid "After submitting your order, you will still be able to edit it, until the deadline for order submission of this delivery." msgstr "" #: open-csa-wp-orders.php:291 -msgid "" -"You can read additional information for each product, by pointing to \"info" -"\"." +msgid "You can read additional information for each product, by pointing to \"info\"." msgstr "" #: open-csa-wp-orders.php:294 @@ -373,9 +386,7 @@ msgid "User Orders List" msgstr "" #: open-csa-wp-orders.php:645 -msgid "" -"You can become responsible for some delivery (if none exists) by clicking on " -"the \"list\" icon." +msgid "You can become responsible for some delivery (if none exists) by clicking on the \"list\" icon." msgstr "" #: open-csa-wp-orders.php:662 @@ -422,7 +433,8 @@ msgstr "" msgid "You have no orders in this delivery." msgstr "" -#: open-csa-wp-orders.php:982 open-csa-wp-users.php:36 +#: open-csa-wp-orders.php:982 +#: open-csa-wp-users.php:36 msgid "Producer" msgstr "" @@ -430,7 +442,8 @@ msgstr "" msgid "Total" msgstr "" -#: open-csa-wp-product-categories.php:18 open-csa-wp-product-categories.php:20 +#: open-csa-wp-product-categories.php:18 +#: open-csa-wp-product-categories.php:20 msgid "Add New Category of Products" msgstr "" @@ -439,11 +452,13 @@ msgstr "" msgid "Product Categories List" msgstr "" -#: open-csa-wp-product-categories.php:166 open-csa-wp-products.php:555 +#: open-csa-wp-product-categories.php:166 +#: open-csa-wp-products.php:555 msgid "delete product" msgstr "" -#: open-csa-wp-products.php:23 open-csa-wp-products.php:30 +#: open-csa-wp-products.php:23 +#: open-csa-wp-products.php:30 #: open-csa-wp-products.php:32 msgid "Add New Product" msgstr "" @@ -472,7 +487,8 @@ msgstr "" msgid "Currently, it is available" msgstr "" -#: open-csa-wp-products.php:269 open-csa-wp-spots.php:542 +#: open-csa-wp-products.php:269 +#: open-csa-wp-spots.php:542 msgid "yes" msgstr "" @@ -480,7 +496,8 @@ msgstr "" msgid "Currently, it is not available" msgstr "" -#: open-csa-wp-products.php:270 open-csa-wp-spots.php:556 +#: open-csa-wp-products.php:270 +#: open-csa-wp-spots.php:556 msgid "no" msgstr "" @@ -492,11 +509,13 @@ msgstr "" msgid "Update Product" msgstr "" -#: open-csa-wp-products.php:305 open-csa-wp-spots.php:591 +#: open-csa-wp-products.php:305 +#: open-csa-wp-spots.php:591 msgid "Reset Info" msgstr "" -#: open-csa-wp-products.php:310 open-csa-wp-spots.php:595 +#: open-csa-wp-products.php:310 +#: open-csa-wp-spots.php:595 msgid "Cancel" msgstr "" @@ -532,7 +551,8 @@ msgstr "" msgid "litre" msgstr "" -#: open-csa-wp-products.php:452 open-csa-wp-products.php:454 +#: open-csa-wp-products.php:452 +#: open-csa-wp-products.php:454 msgid "Product List" msgstr "" @@ -553,9 +573,7 @@ msgid "click to edit this product" msgstr "" #: open-csa-wp-products.php:670 -msgid "" -"sorry... no available products found... be patient, soon they will have " -"grown enough... !" +msgid "sorry... no available products found... be patient, soon they will have grown enough... !" msgstr "" #: open-csa-wp-spots.php:24 @@ -594,12 +612,15 @@ msgstr "" msgid "Order deadline is on " msgstr "" -#: open-csa-wp-spots.php:366 open-csa-wp-spots.php:379 +#: open-csa-wp-spots.php:366 +#: open-csa-wp-spots.php:379 msgid "Order close" msgstr "" -#: open-csa-wp-spots.php:453 open-csa-wp-spots.php:466 -#: open-csa-wp-spots.php:479 open-csa-wp-spots.php:492 +#: open-csa-wp-spots.php:453 +#: open-csa-wp-spots.php:466 +#: open-csa-wp-spots.php:479 +#: open-csa-wp-spots.php:492 msgid "Finding parking space is" msgstr "" @@ -657,8 +678,6 @@ msgstr "" #: open-csa-wp-users.php:440 #, php-format -msgid "" -"sorry... you do not have sufficient privileges to access \\\"%s\\\" page. In " -"case something goes wrong, please contant one of your team's " -"administrators..." +msgid "sorry... you do not have sufficient privileges to access \\\"%s\\\" page. In case something goes wrong, please contant one of your team's administrators..." msgstr "" + From 4a3f692dd8eb72fcbe443014c184758192e395c8 Mon Sep 17 00:00:00 2001 From: gina Date: Sat, 14 Nov 2015 16:48:25 +0200 Subject: [PATCH 5/8] translated all! --- translations/el.po | 280 ++++++++++++++++++++++----------------------- 1 file changed, 140 insertions(+), 140 deletions(-) diff --git a/translations/el.po b/translations/el.po index cce4209..ce7f5fd 100644 --- a/translations/el.po +++ b/translations/el.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: open-csa-wp\n" "POT-Creation-Date: 2015-11-14 14:33+0200\n" -"PO-Revision-Date: 2015-11-14 14:46+0200\n" +"PO-Revision-Date: 2015-11-14 16:47+0200\n" "Last-Translator: gin \n" "Language-Team: \n" "Language: el\n" @@ -64,91 +64,91 @@ msgstr "Παραγγελίες" #: open-csa-wp-administration-panel.php:20 msgid "Manage CSA Users" -msgstr "" +msgstr "Διαχείριση Χρηστών" #: open-csa-wp-administration-panel.php:20 msgid "Users" -msgstr "" +msgstr "Χρήστες" #: open-csa-wp-administration-panel.php:38 #: open-csa-wp-administration-panel.php:76 #: open-csa-wp-administration-panel.php:100 #: open-csa-wp-administration-panel.php:169 msgid "CSA Management Panel" -msgstr "" +msgstr "Πίνακας Διαχείρισης" #: open-csa-wp-administration-panel.php:40 msgid "Manage Products" -msgstr "" +msgstr "Διαχείριση Προϊόντων" #: open-csa-wp-administration-panel.php:163 #: open-csa-wp-users.php:432 msgid "sorry... you need to log in first..." -msgstr "" +msgstr "Θα πρέπει να συνδεθείτε με το όνομα χρήστη σας για να δείτε το περιεχόμενο της σελίδας." #: open-csa-wp-administration-panel.php:171 msgid "Manage User Orders" -msgstr "" +msgstr "Διαχείριση των παραγγελιών των χρηστών" #: open-csa-wp-administration-panel.php:173 msgid "Manage Your Orders" -msgstr "" +msgstr "Διαχείριση των παραγγελιών μου" #: open-csa-wp-administration-panel.php:231 msgid "Total Orders of Deliveries You Are Responsible" -msgstr "" +msgstr "Συνολικές παραγγελίες των παραδόσεων στις οποίες είστε υπεύθυνος/η" #: open-csa-wp-administration-panel.php:235 msgid "Your Total Orders per Delivery" -msgstr "" +msgstr "Οι συνολικές παραγγελίες μου ανά παράδοση" #: open-csa-wp-administration-panel.php:258 msgid "You do not have sufficient permissions to access this page." -msgstr "" +msgstr "Δεν έχετε επαρκή δικαιώματα για να έχετε πρόσβαση εδώ" #: open-csa-wp-deliveries.php:108 #: open-csa-wp-deliveries.php:115 #: open-csa-wp-deliveries.php:117 msgid "Initiate New Delivery" -msgstr "" +msgstr "Δημιουργία νέας παραγγελίας" #: open-csa-wp-deliveries.php:108 msgid " \tform" -msgstr "" +msgstr "\tφόρμα" #: open-csa-wp-deliveries.php:115 #: open-csa-wp-orders.php:40 #: open-csa-wp-product-categories.php:18 #: open-csa-wp-products.php:30 msgid "show form" -msgstr "" +msgstr "εμφάνιση φόρμας" #: open-csa-wp-deliveries.php:117 #: open-csa-wp-orders.php:42 #: open-csa-wp-product-categories.php:20 #: open-csa-wp-products.php:32 msgid "hide form" -msgstr "" +msgstr "απόκρυψη φόρμας" #: open-csa-wp-deliveries.php:121 msgid "Edit Delivery" -msgstr "" +msgstr "Επεξεργασία παράδοσης" #: open-csa-wp-deliveries.php:124 msgid "Initiating new delivery for " -msgstr "" +msgstr "Δημιουργία νέας παραγγελίας για" #: open-csa-wp-deliveries.php:172 msgid "Below, you can customize the deadline and delivery dates (and times) for this delivery." -msgstr "" +msgstr "Παρακάτω μπορείτε να αλλάξετε την προθεσμία για καταχώρηση παραγγελιών, όπως και την ημερομηνία και ώρα για τις παραδόσεις." #: open-csa-wp-deliveries.php:174 msgid "with default values... (point here)" -msgstr "" +msgstr "με προεπιλεγμένες τιμές... (κινήστε το δείκτη σας εδώ)" #: open-csa-wp-deliveries.php:177 msgid "with custom values..." -msgstr "" +msgstr "με τιμές επιλεγμένες από τον χρήστη" #: open-csa-wp-deliveries.php:220 #: open-csa-wp-deliveries.php:494 @@ -156,36 +156,36 @@ msgstr "" #: open-csa-wp-spots.php:214 #: open-csa-wp-spots.php:219 msgid "up to" -msgstr "" +msgstr "μέχρι" #: open-csa-wp-deliveries.php:231 msgid "Order deadline is on" -msgstr "" +msgstr "Η προθεσμία για τις παραγγελίες είναι ενεργοποιημένη" #: open-csa-wp-deliveries.php:298 msgid "Responsible for this delivery is" -msgstr "" +msgstr "Υπεύθυνος/η για αυτή την παράδοση είναι ο χρήστης:" #: open-csa-wp-deliveries.php:333 msgid "Currently, new orders can be submitted" -msgstr "" +msgstr "Νέες παραγγελίες μπορούν να καταχωρούνται" #: open-csa-wp-deliveries.php:334 msgid "Currently, new orders can not be submitted" -msgstr "" +msgstr "Προς το παρόν, νέες παραγγελίες δεν μπορούν να καταχωρούνται" #: open-csa-wp-deliveries.php:358 msgid "Initiate Delivery" -msgstr "" +msgstr "Δημιουργία παράδοσης" #: open-csa-wp-deliveries.php:363 msgid "Update Delivery" -msgstr "" +msgstr "Ανανέωση παράδοσης" #: open-csa-wp-deliveries.php:400 #: open-csa-wp-deliveries.php:413 msgid "Custom values" -msgstr "" +msgstr "Προεπιλεγμένες τιμές" #: open-csa-wp-deliveries.php:400 #: open-csa-wp-deliveries.php:402 @@ -194,36 +194,36 @@ msgstr "" #: open-csa-wp-products.php:23 #: open-csa-wp-spots.php:24 msgid "form" -msgstr "" +msgstr "φόρμα" #: open-csa-wp-deliveries.php:402 #: open-csa-wp-deliveries.php:415 msgid "Customize default values" -msgstr "" +msgstr "Αλλαγή από τις προεπιλεγμένες τιμές" #: open-csa-wp-deliveries.php:484 msgid "order deadline is on" -msgstr "" +msgstr "Η προθεσμία για τις παραγγελίες είναι ενεργοποιημένη" #: open-csa-wp-deliveries.php:542 #: open-csa-wp-spots.php:268 msgid "Delivery day is" -msgstr "" +msgstr "Η μέρα παράδοσης είναι" #: open-csa-wp-deliveries.php:594 #: open-csa-wp-spots.php:307 #: open-csa-wp-spots.php:312 msgid "to" -msgstr "" +msgstr "έως" #: open-csa-wp-deliveries.php:646 msgid "Reset to default values" -msgstr "" +msgstr "Επαναφορά στις προεπιλεγμένες (αρχικές) τιμές" #: open-csa-wp-deliveries.php:800 #: open-csa-wp-deliveries.php:802 msgid "Deliveries List" -msgstr "" +msgstr "Λίστα παραδόσεων" #: open-csa-wp-deliveries.php:800 #: open-csa-wp-orders.php:126 @@ -232,7 +232,7 @@ msgstr "" #: open-csa-wp-product-categories.php:111 #: open-csa-wp-products.php:452 msgid "show" -msgstr "" +msgstr "εμφάνιση" #: open-csa-wp-deliveries.php:802 #: open-csa-wp-orders.php:623 @@ -240,7 +240,7 @@ msgstr "" #: open-csa-wp-product-categories.php:113 #: open-csa-wp-products.php:454 msgid "hide" -msgstr "" +msgstr "απόκρυψη" #: open-csa-wp-deliveries.php:891 msgid "remover" @@ -252,432 +252,432 @@ msgstr "" #: open-csa-wp-deliveries.php:891 msgid "ability to order" -msgstr "" +msgstr "Δυνατότητα δημιουργίας παραγγελίας" #: open-csa-wp-deliveries.php:900 msgid "click to edit this delivery" -msgstr "" +msgstr "Επιλέξτε για επεξεργασία παράδοσης" #: open-csa-wp-deliveries.php:908 msgid "delete delivery" -msgstr "" +msgstr "Διαγραφή παραγγελίας" #: open-csa-wp-deliveries.php:987 msgid "You are not able to sumbit new order, since there is no delivery accepting new order submissions" -msgstr "" +msgstr "Δεν μπορείτε να καταχωρήσετε νέα παραγγελία επειδή δεν υπάρχει παράδοση που να δέχεται νέες καταχωρήσεις" #: open-csa-wp-deliveries.php:988 msgid "You can create new deliveries" -msgstr "" +msgstr "Μπορείτε να δημιουργήσετε νέες παραδόσεις" #: open-csa-wp-deliveries.php:991 msgid "here" -msgstr "" +msgstr "εδώ" #: open-csa-wp-deliveries.php:1072 msgid "Delivery for spot" -msgstr "" +msgstr "Παράδοση για τοποθεσία" #: open-csa-wp-deliveries.php:1072 msgid "with" -msgstr "" +msgstr "με" #: open-csa-wp-deliveries.php:1073 msgid "deadline on" -msgstr "" +msgstr "Προθεσμία για καταχώρηση παραγγελιών στις" #: open-csa-wp-deliveries.php:1075 msgid "and delivery on" -msgstr "" +msgstr "και παράδοση στις" #: open-csa-wp-deliveries.php:1076 #: open-csa-wp-spots.php:278 #: open-csa-wp-spots.php:283 msgid "from" -msgstr "" +msgstr "από" #: open-csa-wp-orders.php:18 msgid "Submit New Order" -msgstr "" +msgstr "Καταχώρηση νέας παραγγελίας" #: open-csa-wp-orders.php:26 msgid "Edit Order" -msgstr "" +msgstr "Επεξεργασία παραγγελίας" #: open-csa-wp-orders.php:75 msgid "for user" -msgstr "" +msgstr "για τον χρήστη" #: open-csa-wp-orders.php:106 msgid "on delivery spot" -msgstr "" +msgstr "στην τοποθεσία παράδοσης" #: open-csa-wp-orders.php:126 msgid "spot details" -msgstr "" +msgstr "λεπτομέρειες τοποθεσίας" #: open-csa-wp-orders.php:189 #: open-csa-wp-spots.php:540 msgid "It has refrigerator to store products" -msgstr "" +msgstr "Διαθέτει ψυγείο για την αποθήκευση προϊόντων" #: open-csa-wp-orders.php:190 msgid "It does not have refrigerator to store products" -msgstr "" +msgstr "Δε διαθέτει ψυγείο για την αποθήκευση προϊόντων" #: open-csa-wp-orders.php:227 msgid "for delivery with" -msgstr "" +msgstr "για παράδοση με" #: open-csa-wp-orders.php:233 msgid "currently, this delivery spot has no active deliveries" -msgstr "" +msgstr "Προς το παρόν, αυτό το σημείο παράδοσης δεν έχει ενεργές παραδόσεις" #: open-csa-wp-orders.php:289 msgid "Choose the quantity of each product you want to order and press \"Submit\" at the end of the page." -msgstr "" +msgstr "Επιλέξτε την ποσότητα κάθε προϊόντος που επιθυμείτε να παραγγείλετε και πατήστε \"Καταχώρηση\" στο τέλος της σελίδας." #: open-csa-wp-orders.php:290 msgid "After submitting your order, you will still be able to edit it, until the deadline for order submission of this delivery." -msgstr "" +msgstr "Μετά την καταχώρηση της παραγγελίας σας θα μπορείτε ακόμα να την επεξεργαστείτε, μέχρι και την προθεσμία καταχώρησης παραγγελιών για αυτήν την παράδοση." #: open-csa-wp-orders.php:291 msgid "You can read additional information for each product, by pointing to \"info\"." -msgstr "" +msgstr "Μπορείτε να διαβάσετε επιπλέον πληροφορίες για κάθε προϊόν δείχνοντας το \"πληροφορίες\"." #: open-csa-wp-orders.php:294 msgid "by pointing here you can read additional information." -msgstr "" +msgstr "κινήστε το δείκτη σας εδώ για να διαβάσετε επιπρόσθετες πληροφορίες" #: open-csa-wp-orders.php:374 msgid "remove this product from your order" -msgstr "" +msgstr "αφαιρέστε το προϊόν από την παραγγελία σας" #: open-csa-wp-orders.php:397 msgid "Do you have any comments to add" -msgstr "" +msgstr "Έχετε σχόλια να προσθέσετε" #: open-csa-wp-orders.php:550 msgid "Submit Additional Order" -msgstr "" +msgstr "Καταχώρηση επιπλέον παραγγελίας" #: open-csa-wp-orders.php:552 msgid "Submit Order" -msgstr "" +msgstr "Καταχώρηση παραγγελίας" #: open-csa-wp-orders.php:563 msgid "cancel" -msgstr "" +msgstr "ακύρωση" #: open-csa-wp-orders.php:601 msgid "You have not yet submitted any order." -msgstr "" +msgstr "Δεν έχετε καταχωρήσει ακόμα κάποια παραγγελία." #: open-csa-wp-orders.php:603 msgid "No user has yet submitted any order." -msgstr "" +msgstr "Κανείς χρήστης δεν έχει καταχωρήσει ακόμα παραγγελία." #: open-csa-wp-orders.php:617 msgid "Your Orders List" -msgstr "" +msgstr "Η λίστα παραγγελιών σας" #: open-csa-wp-orders.php:619 msgid "User Orders List" -msgstr "" +msgstr "Λίστα παραγγελιών του χρήστη" #: open-csa-wp-orders.php:645 msgid "You can become responsible for some delivery (if none exists) by clicking on the \"list\" icon." -msgstr "" +msgstr "Μπορείτε να γίνετε υπεύθυνος/η για κάποια παράδοση (εάν δεν σας πρόλαβε κανείς ακόμα) πατώντας στο εικονίδιο \"λίστα\"." #: open-csa-wp-orders.php:662 msgid "User" -msgstr "" +msgstr "Χρήστης" #: open-csa-wp-orders.php:737 msgid "click to edit this order" -msgstr "" +msgstr "Επιλέξτε για να επεξεργαστείτε την παραγγελία" #: open-csa-wp-orders.php:750 msgid "click to become responsible for this delivery" -msgstr "" +msgstr "Πατήστε εδώ για να αναλάβετε το ρόλο του υπευθύνου για αυτήν την παράδοση" #: open-csa-wp-orders.php:789 msgid "No delivery has yet been initiated." -msgstr "" +msgstr "Δεν έχει δημιουργηθεί ακόμα κάποια παράδοση." #: open-csa-wp-orders.php:791 msgid "You have not yet become responsible for any delivery." -msgstr "" +msgstr "Δεν έχετε γίνει ακόμα υπεύθυνος για καμία απολύτως παράδοση :(" #: open-csa-wp-orders.php:795 msgid "List" -msgstr "" +msgstr "Λίστα" #: open-csa-wp-orders.php:797 msgid "Delivery Total Orders List" -msgstr "" +msgstr "Λίστα συνολικών παραγγελιών για την τρέχουσα παράδοση" #: open-csa-wp-orders.php:857 msgid "User In Charge" -msgstr "" +msgstr "Υπεύθυνος/η χρήστης" #: open-csa-wp-orders.php:917 msgid "click to view the total user orders for this delivery" -msgstr "" +msgstr "επιλέξτε για να δείτε τις συνολικές παραγγελίες για αυτήν την παράδοση" #: open-csa-wp-orders.php:962 msgid "No order has yet been submitted, for this delivery." -msgstr "" +msgstr "Δεν έχει καταχωρηθεί ακόμα κάποια παραγγελία για την παράδοση." #: open-csa-wp-orders.php:964 msgid "You have no orders in this delivery." -msgstr "" +msgstr "Δεν έχετε παραγγελίες για αυτήν την παράδοση." #: open-csa-wp-orders.php:982 #: open-csa-wp-users.php:36 msgid "Producer" -msgstr "" +msgstr "Παραγωγός" #: open-csa-wp-orders.php:1066 msgid "Total" -msgstr "" +msgstr "Σύνολο" #: open-csa-wp-product-categories.php:18 #: open-csa-wp-product-categories.php:20 msgid "Add New Category of Products" -msgstr "" +msgstr "Προσθήκη νέας κατηγορίας προϊόντων" #: open-csa-wp-product-categories.php:111 #: open-csa-wp-product-categories.php:113 msgid "Product Categories List" -msgstr "" +msgstr "Λίστα κατηγοριών προϊόντων" #: open-csa-wp-product-categories.php:166 #: open-csa-wp-products.php:555 msgid "delete product" -msgstr "" +msgstr "Διαγραφή προϊόντος" #: open-csa-wp-products.php:23 #: open-csa-wp-products.php:30 #: open-csa-wp-products.php:32 msgid "Add New Product" -msgstr "" +msgstr "Προσθήκη προϊόντος" #: open-csa-wp-products.php:35 msgid "Edit Product" -msgstr "" +msgstr "Επεξεργασία προϊόντος" #: open-csa-wp-products.php:93 msgid "Category is " -msgstr "" +msgstr "Η κατηγορία είναι" #: open-csa-wp-products.php:127 msgid "Producer is " -msgstr "" +msgstr "Ο παραγωγός είναι" #: open-csa-wp-products.php:150 msgid "Variety is" -msgstr "" +msgstr "Η ποικιλία είναι" #: open-csa-wp-products.php:166 msgid "It costs" -msgstr "" +msgstr "Κοστίζει" #: open-csa-wp-products.php:269 msgid "Currently, it is available" -msgstr "" +msgstr "Διαθέσιμο" #: open-csa-wp-products.php:269 #: open-csa-wp-spots.php:542 msgid "yes" -msgstr "" +msgstr "ναι" #: open-csa-wp-products.php:270 msgid "Currently, it is not available" -msgstr "" +msgstr "Μη διαθέσιμο" #: open-csa-wp-products.php:270 #: open-csa-wp-spots.php:556 msgid "no" -msgstr "" +msgstr "όχι" #: open-csa-wp-products.php:290 msgid "Add Product" -msgstr "" +msgstr "Προσθήκη προϊόντος" #: open-csa-wp-products.php:293 msgid "Update Product" -msgstr "" +msgstr "Ενημέρωση προϊόντος" #: open-csa-wp-products.php:305 #: open-csa-wp-spots.php:591 msgid "Reset Info" -msgstr "" +msgstr "Επαναφορά Πληροφοριών" #: open-csa-wp-products.php:310 #: open-csa-wp-spots.php:595 msgid "Cancel" -msgstr "" +msgstr "Ακύρωση" #: open-csa-wp-products.php:331 msgid "per kilogram" -msgstr "" +msgstr "ανά κιλό" #: open-csa-wp-products.php:333 msgid "kilogram" -msgstr "" +msgstr "κιλό" #: open-csa-wp-products.php:341 msgid "per piece" -msgstr "" +msgstr "ανά τεμάχιο" #: open-csa-wp-products.php:343 msgid "piece" -msgstr "" +msgstr "τεμάχιο" #: open-csa-wp-products.php:351 msgid "per bunch" -msgstr "" +msgstr "ανά μάτσο" #: open-csa-wp-products.php:353 msgid "bunch" -msgstr "" +msgstr "μάτσο" #: open-csa-wp-products.php:361 msgid "per litre" -msgstr "" +msgstr "ανά λίτρο" #: open-csa-wp-products.php:363 msgid "litre" -msgstr "" +msgstr "λίτρο" #: open-csa-wp-products.php:452 #: open-csa-wp-products.php:454 msgid "Product List" -msgstr "" +msgstr "Λίστα προϊόντων" #: open-csa-wp-products.php:538 msgid "mark it as" -msgstr "" +msgstr "επισήμανση ως" #: open-csa-wp-products.php:538 msgid "unavailable" -msgstr "" +msgstr "μη διαθέσιμο" #: open-csa-wp-products.php:538 msgid "available" -msgstr "" +msgstr "διαθέσιμο" #: open-csa-wp-products.php:547 msgid "click to edit this product" -msgstr "" +msgstr "επιλέξτε για να επεξεργαστείτε το προϊόν" #: open-csa-wp-products.php:670 msgid "sorry... no available products found... be patient, soon they will have grown enough... !" -msgstr "" +msgstr "Δεν υπάρχουν διαθέσιμα προϊόντα ακόμα, λίγη υπομονή μέχρι να μεγαλώσουν τα φυτά!" #: open-csa-wp-spots.php:24 msgid "Add New Spot" -msgstr "" +msgstr "Προσθήκη νέας τοποθεσίας" #: open-csa-wp-spots.php:36 msgid "Edit Spot #" -msgstr "" +msgstr "Επεξεργασία τοποθεσίας #" #: open-csa-wp-spots.php:54 msgid "Spot Name *" -msgstr "" +msgstr "Όνομα τοποθεσίας *" #: open-csa-wp-spots.php:67 msgid "Street Name *" -msgstr "" +msgstr "Οδός *" #: open-csa-wp-spots.php:77 msgid "Street Number *" -msgstr "" +msgstr "Αριθμός οδού *" #: open-csa-wp-spots.php:88 msgid "City *" -msgstr "" +msgstr "Πόλη *" #: open-csa-wp-spots.php:98 msgid "Region *" -msgstr "" +msgstr "Περιοχή *" #: open-csa-wp-spots.php:170 msgid "The owner of this delivery spot is: " -msgstr "" +msgstr "Ο ιδιοκτήτης της τοποθεσίας παράδοσης είναι:" #: open-csa-wp-spots.php:204 msgid "Order deadline is on " -msgstr "" +msgstr "Η προθεσμία για καταχώρηση παραγγελιών είναι ενεργοποιημένη" #: open-csa-wp-spots.php:366 #: open-csa-wp-spots.php:379 msgid "Order close" -msgstr "" +msgstr "Κλείσιμο παραγγελίας" #: open-csa-wp-spots.php:453 #: open-csa-wp-spots.php:466 #: open-csa-wp-spots.php:479 #: open-csa-wp-spots.php:492 msgid "Finding parking space is" -msgstr "" +msgstr "Η εύρεση σημείου στάθμευσης είναι" #: open-csa-wp-spots.php:572 msgid "Add Spot" -msgstr "" +msgstr "Προσθήκη τοποθεσίας" #: open-csa-wp-spots.php:577 msgid "Update Spot" -msgstr "" +msgstr "Ενημέρωση τοποθεσίας" #: open-csa-wp-spots.php:583 msgid "Please fill in required fields, i.e. those marked with (*)" -msgstr "" +msgstr "Παρακαλώ συμπληρώστε όλα τα πεδία με την ένδειξη (*)" #: open-csa-wp-spots.php:811 msgid "click to edit this spot" -msgstr "" +msgstr "επιλέξτε για να επεξεργαστείτε αυτήν την τοποθεσία" #: open-csa-wp-spots.php:819 msgid "click to delete this spot" -msgstr "" +msgstr "επιλέξτε για να διαγράψετε αυτήν την τοποθεσία" #: open-csa-wp-users.php:31 msgid "Your account's type in CSA has not yet been defined" -msgstr "" +msgstr "Ο τύπος του λογαριασμού σας δεν έχει οριστεί ακόμα" #: open-csa-wp-users.php:32 msgid "Your account's role in CSA has not yet been defined" -msgstr "" +msgstr "Ο ρόλος του λογαριασμού σας δεν έχει οριστεί ακόμα" #: open-csa-wp-users.php:38 msgid "Producer and Consumer" -msgstr "" +msgstr "Παραγωγός και Καταναλωτής" #: open-csa-wp-users.php:41 msgid "Simple User" -msgstr "" +msgstr "Απλός χρήστης" #: open-csa-wp-users.php:43 msgid "You can become responsible for some delivery" -msgstr "" +msgstr "Μπορείτε να γίνετε υπεύθυνος/η για κάποια παράδοση " #: open-csa-wp-users.php:50 msgid "CSA Properties" -msgstr "" +msgstr "Ιδιότητες CSA" #: open-csa-wp-users.php:54 msgid "Type" -msgstr "" +msgstr "Τύπος" #: open-csa-wp-users.php:58 msgid "Role" -msgstr "" +msgstr "Ρόλος" #: open-csa-wp-users.php:440 #, php-format msgid "sorry... you do not have sufficient privileges to access \\\"%s\\\" page. In case something goes wrong, please contant one of your team's administrators..." -msgstr "" +msgstr "Δεν έχετε τα απαιτούμενα δικαιώματα για να έχετε πρόσβαση στη σελίδα \\\"%s\\\". Αν κάτι έχει πάει στραβά, επικοινωνήστε με κάποιον από τους διαχειριστές στην ομάδα σας." From ea924f755cef6457f097d57ac81c260144e559c1 Mon Sep 17 00:00:00 2001 From: Kostas Kerk Date: Sat, 14 Nov 2015 17:38:17 +0200 Subject: [PATCH 6/8] Fix of delivery form bug --- open-csa-wp-deliveries.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/open-csa-wp-deliveries.js b/open-csa-wp-deliveries.js index 38081dc..1817626 100644 --- a/open-csa-wp-deliveries.js +++ b/open-csa-wp-deliveries.js @@ -170,6 +170,6 @@ function open_csa_wp_toggle_delivery_ability_to_order (delivery_id, plugins_dir) } image_obj.src = plugins_dir + "/open-csa-wp/icons/close.png"; text_obj.innerHTML = deliveries_translation.no; - image_obj.title = deliveries_translation.grant_ability_to_order"; + image_obj.title = deliveries_translation.grant_ability_to_order; } -} \ No newline at end of file +} From 6c7f071db12e164d7b4045b6cb6b70ce0dfc5294 Mon Sep 17 00:00:00 2001 From: Kostas Kerk Date: Sat, 14 Nov 2015 17:45:03 +0200 Subject: [PATCH 7/8] Fix of add product bug. Undefined variable error. --- open-csa-wp-products.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/open-csa-wp-products.php b/open-csa-wp-products.php index 4e6cfcf..1d4b9b1 100644 --- a/open-csa-wp-products.php +++ b/open-csa-wp-products.php @@ -7,7 +7,7 @@ function open_csa_wp_show_new_product_form($product_id, $display, $page_url) { wp_enqueue_script( 'open-csa-wp-products-scripts' ); global $days_of_week,$wpdb; - $product_info; + $product_info = null; if ($product_id != null) { $product_info = $wpdb->get_results($wpdb->prepare("SELECT * FROM ".OPEN_CSA_WP_TABLE_PRODUCTS." WHERE id=%d", $product_id)); } @@ -673,4 +673,4 @@ function open_csa_wp_delivery_products_exist (){ } else { return true; } -} \ No newline at end of file +} From f9fd0ba24973e9359138a31290efc96fce618ad5 Mon Sep 17 00:00:00 2001 From: gina Date: Tue, 17 Nov 2015 10:19:24 +0200 Subject: [PATCH 8/8] statred adding names for translation in open-csa-wp-products.php --- open-csa-wp-products.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/open-csa-wp-products.php b/open-csa-wp-products.php index 4e6cfcf..6037052 100644 --- a/open-csa-wp-products.php +++ b/open-csa-wp-products.php @@ -7,7 +7,7 @@ function open_csa_wp_show_new_product_form($product_id, $display, $page_url) { wp_enqueue_script( 'open-csa-wp-products-scripts' ); global $days_of_week,$wpdb; - $product_info; + $product_info = null; if ($product_id != null) { $product_info = $wpdb->get_results($wpdb->prepare("SELECT * FROM ".OPEN_CSA_WP_TABLE_PRODUCTS." WHERE id=%d", $product_id)); } @@ -84,7 +84,7 @@ function open_csa_wp_show_new_product_form($product_id, $display, $page_url) { selected='selected' disabled='disabled' id = "open-csa-wp-newProductForm_category_input_disabled_id" - >Category * + > * disabled='disabled' id = "open-csa-wp-newProductForm_producer_input_disabled_id" - >Producer * + > * producer:null, __("Producer is ", OPEN_CSA_WP_DOMAIN)); ?> @@ -212,7 +212,7 @@ function open_csa_wp_show_new_product_form($product_id, $display, $page_url) { ?> disabled='disabled' id = "open-csa-wp-newProductForm_unit_input_disabled_id" - >per... * + > * @@ -262,7 +262,7 @@ function open_csa_wp_show_new_product_form($product_id, $display, $page_url) { ?> disabled='disabled' id = "open-csa-wp-newProductForm_availability_input_disabled_id" - >Available? * + > *