Ryan Hass 518f982af3 Properly support FreeBSD
We now disable all sendmail services and periodic services on FreeBSD
before attempting to start postfix. Additionally, this updates
mailer.conf mappings to use postfix applications rather than sendmail.
2017-11-16 17:22:13 -08:00

190 lines
6.0 KiB
Ruby

# Author:: Joshua Timberman(<joshua@chef.io>)
# Cookbook:: common
# Recipe:: default
#
# Copyright:: 2009-2017, Chef Software, 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 'postfix::_attributes'
package 'postfix'
package 'procmail' if node['postfix']['use_procmail']
case node['platform_family']
when 'rhel', 'fedora', 'amazon'
service 'sendmail' do
action :nothing
end
execute 'switch_mailer_to_postfix' do
command '/usr/sbin/alternatives --set mta /usr/sbin/sendmail.postfix'
notifies :stop, 'service[sendmail]'
notifies :start, 'service[postfix]'
not_if '/usr/bin/test /etc/alternatives/mta -ef /usr/sbin/sendmail.postfix'
end
when 'omnios'
manifest_path = ::File.join(Chef::Config[:file_cache_path], 'manifest-postfix.xml')
# we need to manage the postfix group and user
# and then subscribe to the package install because it creates a
# postdrop group and adds postfix user to it.
group 'postfix' do
append true
end
user 'postfix' do
uid node['postfix']['uid']
gid 'postfix'
home '/var/spool/postfix'
subscribes :manage, 'package[postfix]'
notifies :run, 'execute[/opt/omni/sbin/postfix set-permissions]', :immediately
end
# we don't guard this because if the user creation was successful (or happened out of band), then this won't get executed when the action is :nothing.
execute '/opt/omni/sbin/postfix set-permissions'
template manifest_path do
source 'manifest-postfix.xml.erb'
owner 'root'
group node['root_group']
mode '0644'
notifies :run, 'execute[load postfix manifest]', :immediately
end
execute 'load postfix manifest' do
action :nothing
command "svccfg import #{manifest_path}"
notifies :restart, 'service[postfix]'
end
when 'freebsd'
# Actions are based on docs provided by FreeBSD:
# https://www.freebsd.org/doc/handbook/mail-changingmta.html
service 'sendmail' do
action :nothing
end
template '/etc/mail/mailer.conf' do
source 'mailer.erb'
owner 'root'
group 0
notifies :restart, 'service[postfix]'
end
execute 'switch_mailer_to_postfix' do
command [
'sysrc',
'sendmail_enable=NO',
'sendmail_submit_enable=NO',
'sendmail_outbound_enable=NO',
'sendmail_msp_queue_enable=NO',
'postfix_enable=YES',
]
notifies :stop, 'service[sendmail]', :immediately
notifies :disable, 'service[sendmail]', :immediately
notifies :start, 'service[postfix]', :delayed
only_if "sysrc sendmail_enable sendmail_submit_enable sendmail_outbound_enable sendmail_msp_queue_enable | egrep -q '(YES|unknown variable)' || sysrc postfix_enable | egrep -q '(NO|unknown variable)'"
end
execute 'disable_periodic' do
# rubocop:disable Lint/ParenthesesAsGroupedExpression
environment ({ 'RC_CONFS' => '/etc/periodic.conf' })
command [
'sysrc',
'daily_clean_hoststat_enable=NO',
'daily_status_mail_rejects_enable=NO',
'daily_status_include_submit_mailq=NO',
'daily_submit_queuerun=NO',
]
only_if "RC_CONFS=/etc/periodic.conf sysrc daily_clean_hoststat_enable daily_status_mail_rejects_enable daily_status_include_submit_mailq daily_submit_queuerun | egrep -q '(YES|unknown variable)'"
end
end
execute 'update-postfix-sender_canonical' do
command "postmap #{node['postfix']['conf_dir']}/sender_canonical"
action :nothing
end
unless node['postfix']['sender_canonical_map_entries'].empty?
template "#{node['postfix']['conf_dir']}/sender_canonical" do
owner 'root'
group node['root_group']
mode '0644'
notifies :run, 'execute[update-postfix-sender_canonical]'
notifies :reload, 'service[postfix]'
end
unless node['postfix']['main'].key?('sender_canonical_maps')
node.normal['postfix']['main']['sender_canonical_maps'] = "hash:#{node['postfix']['conf_dir']}/sender_canonical"
end
end
execute 'update-postfix-smtp_generic' do
command "postmap #{node['postfix']['conf_dir']}/smtp_generic"
action :nothing
end
unless node['postfix']['smtp_generic_map_entries'].empty?
template "#{node['postfix']['conf_dir']}/smtp_generic" do
owner 'root'
group node['root_group']
mode '0644'
notifies :run, 'execute[update-postfix-smtp_generic]'
notifies :reload, 'service[postfix]'
end
unless node['postfix']['main'].key?('smtp_generic_maps')
node.normal['postfix']['main']['smtp_generic_maps'] = "hash:#{node['postfix']['conf_dir']}/smtp_generic"
end
end
execute 'update-postfix-recipient_canonical' do
command "postmap #{node['postfix']['conf_dir']}/recipient_canonical"
action :nothing
end
unless node['postfix']['recipient_canonical_map_entries'].empty?
template "#{node['postfix']['conf_dir']}/recipient_canonical" do
owner 'root'
group node['root_group']
mode '0644'
notifies :run, 'execute[update-postfix-recipient_canonical]'
notifies :reload, 'service[postfix]'
end
unless node['postfix']['main'].key?('recipient_canonical_maps')
node.normal['postfix']['main']['recipient_canonical_maps'] = "hash:#{node['postfix']['conf_dir']}/recipient_canonical"
end
end
%w( main master ).each do |cfg|
template "#{node['postfix']['conf_dir']}/#{cfg}.cf" do
source "#{cfg}.cf.erb"
owner 'root'
group node['root_group']
mode '0644'
notifies :restart, 'service[postfix]'
variables(
lazy { { settings: node['postfix'][cfg] } }
)
cookbook node['postfix']["#{cfg}_template_source"]
end
end
service 'postfix' do
supports status: true, restart: true, reload: true
action :enable
end