# # Cookbook:: apache2 # Recipe:: default # # Copyright:: 2008-2013, Chef Software, Inc. # Copyright:: 2014-2015, Alexander van Zoest # # 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 # ~FC009 only available in apt_package. See #388 package_name node['apache']['package'] default_release node['apache']['default_release'] unless node['apache']['default_release'].nil? end %w(sites-available sites-enabled mods-available mods-enabled conf-available conf-enabled).each do |dir| directory "#{node['apache']['dir']}/#{dir}" do mode '0755' owner 'root' group node['apache']['root_group'] end end %w(default default.conf 000-default 000-default.conf).each do |site| link "#{node['apache']['dir']}/sites-enabled/#{site}" do action :delete not_if { site == "#{node['apache']['default_site_name']}.conf" && node['apache']['default_site_enabled'] } end file "#{node['apache']['dir']}/sites-available/#{site}" do action :delete backup false not_if { site == "#{node['apache']['default_site_name']}.conf" && node['apache']['default_site_enabled'] } end end directory node['apache']['log_dir'] do mode '0755' recursive true end # perl is needed for the a2* scripts package node['apache']['perl_pkg'] package 'perl-Getopt-Long-Descriptive' if platform?('fedora') %w(a2ensite a2dissite a2enmod a2dismod a2enconf a2disconf).each do |modscript| link "/usr/sbin/#{modscript}" do action :delete only_if { ::File.symlink?("/usr/sbin/#{modscript}") } end template "/usr/sbin/#{modscript}" do source "#{modscript}.erb" mode '0700' owner 'root' group node['apache']['root_group'] action :create end end unless platform_family?('debian') cookbook_file '/usr/local/bin/apache2_module_conf_generate.pl' do source 'apache2_module_conf_generate.pl' mode '0755' owner 'root' group node['apache']['root_group'] 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 end if platform_family?('freebsd') directory "#{node['apache']['dir']}/Includes" do action :delete recursive true end directory "#{node['apache']['dir']}/extra" do action :delete recursive true end end if platform_family?('suse') directory "#{node['apache']['dir']}/vhosts.d" do action :delete recursive true end %w(charset.conv default-vhost.conf default-server.conf default-vhost-ssl.conf errors.conf listen.conf mime.types mod_autoindex-defaults.conf mod_info.conf mod_log_config.conf mod_status.conf mod_userdir.conf mod_usertrack.conf uid.conf).each do |file| file "#{node['apache']['dir']}/#{file}" do action :delete backup false end end end %W( #{node['apache']['dir']}/ssl #{node['apache']['cache_dir']} ).each do |path| directory path do mode '0755' owner 'root' group node['apache']['root_group'] end end directory node['apache']['lock_dir'] do mode '0755' if node['platform_family'] == 'debian' owner node['apache']['user'] else owner 'root' end group node['apache']['root_group'] end # Set the preferred execution binary - prefork or worker template "/etc/sysconfig/#{node['apache']['package']}" do source 'etc-sysconfig-httpd.erb' owner 'root' group node['apache']['root_group'] mode '0644' notifies :restart, 'service[apache2]', :delayed only_if { platform_family?('rhel', 'amazon', 'fedora', 'suse') } end template "#{node['apache']['dir']}/envvars" do source 'envvars.erb' owner 'root' group node['apache']['root_group'] mode '0644' notifies :reload, 'service[apache2]', :delayed only_if { platform_family?('debian') } end template 'apache2.conf' do if platform_family?('rhel', 'amazon', 'fedora', 'arch', 'freebsd') path "#{node['apache']['conf_dir']}/httpd.conf" elsif platform_family?('debian') path "#{node['apache']['conf_dir']}/apache2.conf" elsif platform_family?('suse') path "#{node['apache']['conf_dir']}/httpd.conf" end action :create source 'apache2.conf.erb' owner 'root' group node['apache']['root_group'] mode '0644' notifies :reload, 'service[apache2]', :delayed end %w(security charset).each do |conf| apache_conf conf do enable true end end apache_conf 'ports' do enable false conf_path node['apache']['dir'] end if node['apache']['version'] == '2.4' if node['apache']['mpm_support'].include?(node['apache']['mpm']) include_recipe "apache2::mpm_#{node['apache']['mpm']}" else Chef::Log.warn("apache2: #{node['apache']['mpm']} module is not supported and must be handled separately!") end end node['apache']['default_modules'].each do |mod| module_recipe_name = mod =~ /^mod_/ ? mod : "mod_#{mod}" include_recipe "apache2::#{module_recipe_name}" end if node['apache']['default_site_enabled'] web_app node['apache']['default_site_name'] do template 'default-site.conf.erb' enable node['apache']['default_site_enabled'] end end apache_service_name = node['apache']['service_name'] service 'apache2' do service_name apache_service_name case node['platform_family'] when 'rhel' if node['platform_version'].to_f < 7.0 && node['apache']['version'] != '2.4' restart_command "/sbin/service #{apache_service_name} restart && sleep 1" reload_command "/sbin/service #{apache_service_name} graceful && sleep 1" end when 'debian' provider Chef::Provider::Service::Debian when 'arch' service_name apache_service_name end supports [:start, :restart, :reload, :status] action [:enable, :start] only_if "#{node['apache']['binary']} -t", environment: { 'APACHE_LOG_DIR' => node['apache']['log_dir'] }, timeout: 10 end