Adoptable Cookbooks List

Looking for a cookbook to adopt? You can now see a list of cookbooks available for adoption!
List of Adoptable Cookbooks

Supermarket Belongs to the Community

Supermarket belongs to the community. While Chef has the responsibility to keep it running and be stewards of its functionality, what it does and how it works is driven by the community. The chef/supermarket repository will continue to be where development of the Supermarket application takes place. Come be part of shaping the direction of Supermarket by opening issues and pull requests or by joining us on the Chef Mailing List.

Select Badges

Select Supported Platforms

Select Status

RSS

postfix-dovecot (9) Versions 2.0.0

Installs and configures a mail server using Postfix, Dovecot, PostfixAdmin and SpamAssassin, including Amazon SES support.

Policyfile
Berkshelf
Knife
cookbook 'postfix-dovecot', '= 2.0.0', :supermarket
cookbook 'postfix-dovecot', '= 2.0.0'
knife supermarket install postfix-dovecot
knife supermarket download postfix-dovecot
README
Dependencies
Changelog
Quality 100%

Postfix Dovecot Cookbook

Cookbook Version
Dependency Status
Build Status

Installs and configures a mail server using Postfix, Dovecot, PostfixAdmin and SpamAssassin, including Amazon SES support.

Requirements

Supported Platforms

This cookbook has been tested on the following platforms:

  • Amazon Linux
  • CentOS >= 6.0
  • Debian >= 7.0
  • Fedora >= 17.0
  • Ubuntu >= 12.04

Please, let us know if you use it successfully on any other platform.

Required Cookbooks

Required Applications

  • Dovecot >= 2: requires this version of dovecot to be available by the distribution's package manager
  • Ruby >= 1.9.3
  • Chef >= 11.14.2

Attributes

Attribute Default Description
node['postfix-dovecot']['postmaster_address'] 'postmaster@foo.bar' Postmaster mail address.
node['postfix-dovecot']['hostname'] node['fqdn'] Hostname.
node['postfix-dovecot']['rbls'] [] Mail RBLs array.
node['postfix-dovecot']['database']['type'] 'mysql' Database type. Possible values are: 'mysql', 'postgresql' (Please, see below).
node['postfix-dovecot']['sieve']['enabled'] true Whether to enable sieve.
node['postfix-dovecot']['sieve']['global_path'] "#{default['dovecot']['conf_path']}/sieve/default.sieve" Sieve global path.
node['postfix-dovecot']['spamc']['enabled'] true Whether to enable SpamAssassin.
node['postfix-dovecot']['spamc']['recipe'] 'onddo-spamassassin' Spamc recipe name to use.
node['postfix-dovecot']['vmail']['user'] 'vmail' Virtual mail system user name.
node['postfix-dovecot']['vmail']['group'] node['postfix-dovecot']['vmail']['user'] Virtual mail system group name.
node['postfix-dovecot']['vmail']['uid'] 5000 Virtual mail system user id.
node['postfix-dovecot']['vmail']['gid'] node['postfix-dovecot']['vmail']['uid'] Virtual mail system group id.
node['postfix-dovecot']['vmail']['home'] '/var/vmail' Virtual mail user home path.

Amazon SES Attributes

You can use node['postfix-dovecot']['ses']['enabled'] to enable SES for sending emails.

Attribute Default Description
node['postfix-dovecot']['ses']['enabled'] false Whether to enable Amazon SES.
node['postfix-dovecot']['ses']['source'] 'attributes' Where to read the credentials from. Possible values: 'attributes', 'chef-vault'.
node['postfix-dovecot']['ses']['vault'] 'amazon' Chef Vault bag to read SES credentials from.
node['postfix-dovecot']['ses']['item'] 'ses' Chef Vault item.
node['postfix-dovecot']['ses']['region'] 'us-east-1' Amazon AWS region, used to calculate the servers.
node['postfix-dovecot']['ses']['servers'] calculated Amazon SES SMTP servers array.
node['postfix-dovecot']['ses']['username'] 'USERNAME' SES SMTP username. See Obtaining Your Amazon SES SMTP Credentials documentation.
node['postfix-dovecot']['ses']['password'] 'PASSWORD' Amazon SES SMTP password.

When Chef Vault is disabled in node['postfix-dovecot']['ses']['source'], this is the default behavior, the credentials are read from ['username'] and ['password'] attributes.

When credentials should be read using chef-vault, the Chef Vault bag must have the following structure:

{
  "username": "AMAZON_USERNAME",
  "password": "AMAZON_PASSWORD"
}

See the Chef-Vault documentation to learn how to create chef-vault bags.

The SSL Certificate

This cookbook uses the ssl_certificate cookbook to create the SSL certificate. The namespace used is node['postfix-dovecot']. For example:

node.default['postfix-dovecot']['common_name'] = 'mail.example.com'
include_recipe 'postfix-dovecot'

This certificate is used for Postfix and Dovecot. For PostfixAdmin, you should use the node['postfixadmin'] namespace.

You can also tweak the supported SSL ciphers setting the node['ssl_certificate']['service']['compatibility'] attribute:

node.default['ssl_certificate']['service']['compatibility'] = :modern

include_recipe 'postfix-dovecot'

See the ssl_certificate namespace documentation for more information.

Recipes

postfix-dovecot::default

Installs and configures everything.

postfix-dovecot::vmail

Creates vmail user.

postfix-dovecot::spam

Installs and configures SpamAssassin.

postfix-dovecot::postfix

Installs and configures Postfix.

postfix-dovecot::postfix_mysql

Installs Postfix package with MySQL support. Used by the postfix-dovecot::postfix recipe.

postfix-dovecot::postfix_postgresql

Installs Postfix package with PostgreSQL support. Used by the postfix-dovecot::postfix recipe.

postfix-dovecot::postfixadmin

Installs and configures PostfixAdmin.

postfix-dovecot::dovecot

Installs and configures Dovecot 2.

Usage Examples

Including in a Cookbook Recipe

Running it from a recipe:

node['postfix-dovecot']['postmaster_address'] = 'postmaster@foobar.com'
node['postfix-dovecot']['hostname'] = 'mail.foobar.com'

include_recipe 'postfix-dovecot::default'

postfixadmin_admin 'admin@admindomain.com' do
  password 'sup3r-s3cr3t-p4ss'
  action :create
end

postfixadmin_domain 'foobar.com' do
  login_username 'admin@admindomain.com'
  login_password 'sup3r-s3cr3t-p4ss'
end

postfixadmin_mailbox 'bob@foobar.com' do
  password 'alice'
  login_username 'admin@admindomain.com'
  login_password 'sup3r-s3cr3t-p4ss'
end

postfixadmin_alias 'billing@foobar.com' do
  goto 'bob@foobar.com'
  login_username 'admin@admindomain.com'
  login_password 'sup3r-s3cr3t-p4ss'
end

Don't forget to include the postfix-dovecot cookbook as a dependency in the metadata.

# metadata.rb
# [...]

depends 'postfix-dovecot'

Including in the Run List

Another alternative is to include the default recipe in your Run List.

{
  "name": "mail.example.com",
  [...]
  "run_list": [
    [...]
    "recipe[postfix-dovecot]"
  ]
}

Enabling Some RBLs

You can enable some RBLs to avoid spam:

node.default['postfix-dovecot']['rbls'] = %w(
  dnsbl.sorbs.net
  zen.spamhaus.org
  bl.spamcop.net
  cbl.abuseat.org
)
include_recipe 'postfix-dovecot::default'

PostgreSQL Support

PostgreSQL support should be considered experimental at the moment. Use at your own risk.

Any feedback you can provide regarding the PostgreSQL support will be greatly appreciated.

PostgreSQL Support on Debian and Ubuntu

Due to postgresql cookbook issue #108, you should configure your system locale correctly for PostgreSQL to work. You can use the locale cookbook to fix this. For example:

ENV['LANGUAGE'] = ENV['LANG'] = node['locale']['lang']
ENV['LC_ALL'] = node['locale']['lang']
include_recipe 'locale'
# ...
node.default['postfix-dovecot']['database']['type'] = 'postgresql'
include_recipe 'postfix-dovecot'

PostgreSQL Support on CentOS and Fedora

The latest CentOS and Fedora versions come without PostgreSQL support in their Postfix package. So we need to recompile it using the SRPM, enabling the PostgreSQL support.

The postfix-dovecot::postfix_postgresql recipe takes care of it transparently. This recipe has been tested using test-kitchen, but it may not work for all cases. This code has been tested in the following platforms:

  • CentOS 6.5 and 7.0
  • Fedora 19 and 20.

Please, let us know if you use PostgreSQL support successfully on any other platform.

PostgreSQL Support on Amazon Linux

Support for PostgreSQL on Amazon Linux is still not finished because of the need to patch the provided SRPM. Its implementation would require a little monkey-patching.

Please, open an issue if you need the support of PostgreSQL on Amazon Linux.

PostgreSQL Versions < 9.3

If you are using PostgreSQL version < 9.3, you may need to adjust the shmmax and shmall kernel parameters to configure the shared memory. You can see [the example used for the integration tests](test/cookbooks/postfix-dovecot_test/recipes/postgresql_memory.rb).

Some cookbook attributes are used internally to add PostgreSQL support. They can make your journey smoother if you need to improve PostgreSQL support.

<table>
<tr>
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
<tr>
<td><code>node['postfix-dovecot']['yum']</code></td>
<td>A list of yum repositories to add to include the source SRPMs.</td>
<td><em>calculated</em></td>
</tr>
<tr>
<td><code>node['postfix-dovecot']['postfix']['srpm']['packages']</code></td>
<td>Packages required for compiling Postfix from sources.</td>
<td><em>calculated</em></td>
</tr>
<tr>
<td><code>node['postfix-dovecot']['postfix']['srpm']['rpm_regexp']</code></td>
<td>An array with two values, a pattern and a replacement. This Regexp is used to get the final Postfix RPM name from the SRPM name.</td>
<td><em>calculated</em></td>
</tr>
<tr>
<td><code>node['postfix-dovecot']['postfix']['srpm']['rpm_build_args']</code></td>
<td>A string with the arguments to pass to <em>rpmbuild</em> application. Normally contains the required option to enable PostgreSQL in the Postfix SRPM.</td>
<td><em>calculated</em></td>
</tr>
</table>

See the attributes/postfix_postgresql.rb file for default examples.

Please do not hesitate to make a PR if you improve the PostgreSQL support ;-)

Testing

See TESTING.md.

Contributing

Please do not hesitate to open an issue with any questions or problems.

See CONTRIBUTING.md.

TODO

See TODO.md.

License and Author

Author: Xabier de Zuazo (xabier@zuazo.org)
Copyright: Copyright (c) 2015, Xabier de Zuazo
Copyright: Copyright (c) 2014-2015, Onddo Labs, SL.
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.

Dependent cookbooks

chef-vault ~> 1.1
dovecot ~> 2.0
onddo-spamassassin ~> 1.0
postfixadmin ~> 2.0
postfix-full ~> 0.1
ssl_certificate ~> 1.2
yum ~> 3.0

Contingent cookbooks

There are no cookbooks that are contingent upon this one.

CHANGELOG for postfix-dovecot

This file is used to list changes made in each version of postfix-dovecot.

v2.0.0 (2015-08-22)

  • Breaking changes:

  • New features:

    • metadata: Add source_url and issues_url.
  • Documentation:

    • Update chef links to use chef.io domain.
    • Update contact information and links after migration.
    • README: Put the cookbook name in the title.
  • Testing:

    • Fix ChefSpec unit tests to work with latest chef-vault cookbook.
    • Use SoloRunner in some ChefSpec tests to make them faster.
    • Move ChefSpec tests to test/unit.
    • Travis: run tests against Chef 11 and Chef 12.
    • Add Debian 8 to test-kitchen tests.
    • Kitchen tests: fix MySQL password.
    • Minitest: remove some redundant tests.
    • Gemfile:
    • Fix Ruby 1.9 support.
    • Update RuboCop to 0.33.0.

v1.2.0 (2015-01-09)

  • Add Dovecot SSL certificate generation.
  • Integrate with ssl_certificate cookbook version 1.2.
  • metadata: Fix attributes default types.
  • Gemfile: Update RuboCop to 0.28.0.
  • README: Fix some typos and update Supermarket links.

v1.1.0 (2014-11-09)

  • Add RBL support.
  • Improve SES support:
    • Read the SES credentials from chef vault bag.
    • Add node['postfix-dovecot']['ses']['region'] attribute.
    • Update SES servers.
    • Fix integration tests.
  • Allow postfix configuration (tables and master.cf) to be modfied easily.
  • ::dovecot recipe: Fix password reading with encrypt attributes enabled.
  • Create Postfix tables directory, required by SES.
  • metadata: update to use dovecot cookbook version 2.
  • Simplify smtp_tls_CAfile attribute case.
  • Fix new RuboCop offenses.
  • Integrate unit tests with should_not gem.
  • Enable ChefSpec coverage and 100% covered.
  • Add Gemfile for Serverspec integration tests.
  • Remove rubocop.yml, not needed with RuboCop 0.27.0.
  • Berksfile:
    • Fix minitest cookbook include.
    • Remove -cookbook sufix.
  • Homogenize license headers.
  • README:
    • Use single quotes in examples.
    • Use markdown tables.
    • Fix Usage Examples title.
  • TODO: Add tasks for DSPAM and CLamAV.

v1.0.0 (2014-10-07)

  • Update Warnings::

    • Ruby >= 1.9.3 required.
    • Chef >= 11.14.2 required.
    • Rename ::postfix_full recipe to ::postfix.
  • Update to work with postfixadmin cookbook 1.0.0.

  • Integrate with ssl_certificate cookbook.

  • Fix hostname attribute default value when FQDN is not set.

  • Move test/kitchen/cookbooks directory to test/cookbooks.

  • Fix all RuboCop offenses.

  • README:

    • Separate README file in multiple files.
    • Add some badges.
    • Some small documentation fixes.
    • TESTING: replace old DIGITALOCEAN_CLIENT_ID with DIGITALOCEAN_ACCESS_TOKEN.
  • Add some basic ChefSpec recipe tests and a Rakefile.

  • Add .travis.yml file.

  • Improve Postfix chroot file creation, based on postfix-full master code.

  • Set common_name for PostfixAdmin and Postfix SSL certs.

  • kitchen.yml:

    • Images update.
    • kitchen.cloud.yml: remove all DIGITAL_OCEAN_ env variables.
    • Add minitest-handler again.
    • Fix minitest test mail template.
  • Add PostgreSQL support.

  • metadata: use pessimistic version constraints.

  • Gemfile:

    • Replace vagrant by vagrant-wrapper.
    • Berkshelf update to 3.1.
  • Berkfile: use a generic Berksfile template.

  • Add Guardfile.

  • Vagrantfile:

    • Update to work properly.
    • Document it in TESTING.
  • Use #default_unless instead of #set_unless.

  • ::postfixadmin recipe: remove #set_unless usage.

  • Add Serverspec tests and more bats tests.

  • Define PATH in some integration tests, recommended to use lsof.

  • Integration tests improvement to support more platforms.

  • Fix Debian/Ubuntu PostgreSQL support using the locale cookbook.

  • Improve PostgreSQL support in RPM platforms including tests.

  • Add rubocop.yml file: include some ruby files related with Chef.

v0.3.0 (2014-09-14)

  • .kitchen.local.yml.example renamed to .kitchen.ses.yml.
  • Ensure /etc/mailname file creation.
  • Gemfile: some gem versions updated.
  • kitchen.yml: updated to support latest test-kitchen format.
  • README: Amazon SES Tests section: KITCHEN_LOCAL_YAML variable value fixed.
  • Added Fedora and Amazon Linux support.
  • Added kitchen.cloud.yml file.
  • postfix-dovecot_test metadata: added name.
  • kitchen.yml: Added forwarded port and recipe[apt] to the runlist.
  • Depends on postfixadmin cookbook version < 1.0.0.

v0.2.0 (2013-08-09)

  • Added Amazon SES support.
    • Added SES tests.
  • Fixed resolv.conf inside chroot in CentOS.

v0.1.0 (2013-06-16)

  • Initial release of postfix-dovecot.

Foodcritic Metric
            

2.0.0 passed this metric