# # Copyright (C) 2014-2015 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. # include $(TOPDIR)/rules.mk PKG_NAME:=postfix PKG_RELEASE:=1 PKG_VERSION:=3.2.3 PKG_SOURCE_URL:= \ https://cdn.postfix.johnriley.me/mirrors/postfix-release/official/ \ ftp://ftp.porcupine.org/mirrors/postfix-release/official/ PKG_HASH:=5b0b975d075ea7561028d4109c581549b794aa92d733429ea6d9fa57751140bf PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_MAINTAINER:=Denis Shulyaka PKG_LICENSE:=IPL-1.0 PKG_LICENSE_FILES:=LICENSE PKG_BUILD_DEPENDS:=+POSTFIX_CDB:tinycdb PKG_CONFIG_DEPENDS:= \ CONFIG_POSTFIX_TLS \ CONFIG_POSTFIX_SASL \ CONFIG_POSTFIX_LDAP \ CONFIG_POSTFIX_CDB \ CONFIG_POSTFIX_DB \ CONFIG_POSTFIX_SQLITE \ CONFIG_POSTFIX_PGSQL \ CONFIG_POSTFIX_PCRE \ CONFIG_POSTFIX_EAI \ include $(INCLUDE_DIR)/package.mk define Package/postfix SECTION:=mail CATEGORY:=Mail TITLE:=Postfix Mail Transmit Agent URL:=http://www.postfix.org/ DEPENDS:=+POSTFIX_TLS:libopenssl +POSTFIX_SASL:libsasl2 +POSTFIX_LDAP:libopenldap +POSTFIX_DB:libdb47 +POSTFIX_SQLITE:libsqlite3 +POSTFIX_PGSQL:libpq +POSTFIX_EAI:icu +POSTFIX_PCRE:libpcre endef define Package/postfix/description Postfix is Wietse Venema's mailer that started life as an alternative to the widely-used Sendmail program. Postfix attempts to be fast, easy to administer, and secure, while at the same time being sendmail compatible enough to not upset existing users. Thus, the outside has a sendmail-ish flavor, but the inside is completely different. endef define Package/postfix/config menu "Select postfix build options" config POSTFIX_TLS bool "TLS support" default y help Implements TLS support in postfix (using OpenSSL). config POSTFIX_SASL bool "SASL support" default y help Implements SASL support in postfix (using Cyrus SASL). config POSTFIX_LDAP bool "LDAP support" default y help Implements LDAP support in postfix (using OpenLDAP). config POSTFIX_DB bool "BerkeleyDB support" default n help Implements support for btree files using Berkeley DB. Note that hash files support is not compiled into Berkeley DB OpenWRT distribution config POSTFIX_CDB bool "CDB support" default y help Implements support for cdb files using tinycdb config POSTFIX_SQLITE bool "SQLITE support" default y help Implements support for SQLite3 DB config POSTFIX_PGSQL bool "PostgreSQL support" default n help Implement support for PostgreSQL config POSTFIX_PCRE bool "PCRE support" default n help Implement support for Perl Compatible Regular Expressions config POSTFIX_EAI bool "SMTPUTF8 support" default n help Enable Postfix support for Email Address Internationalization (EAI) as defined in RFC 6531 (SMTPUTF8 extension), RFC 6532 (Internationalized email headers) and RFC 6533 (Internationalized delivery status notifications). Since version 3.0, Postfix fully supports UTF-8 email addresses and UTF-8 message header values. endmenu endef CCARGS=-DNO_NIS AUXLIBS=-L$(STAGING_DIR)/usr/lib default_database_type=cdb ifdef CONFIG_POSTFIX_TLS CCARGS+=-DUSE_TLS AUXLIBS+=-lssl -lcrypto endif ifdef CONFIG_POSTFIX_SASL CCARGS+=-DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I$(STAGING_DIR)/usr/include/sasl AUXLIBS+=-lsasl2 endif ifdef CONFIG_POSTFIX_LDAP CCARGS+=-DHAS_LDAP AUXLIBS+=-lldap -llber endif ifdef CONFIG_POSTFIX_CDB CCARGS+=-DHAS_CDB AUXLIBS+=-lcdb endif ifdef CONFIG_POSTFIX_DB AUXLIBS+=-ldb CCARGS+=-DHAS_DB ifndef CONFIG_POSTFIX_CDB default_database_type=btree endif else CCARGS+=-DNO_DB endif ifdef CONFIG_POSTFIX_SQLITE CCARGS+=-DHAS_SQLITE -I$(STAGING_DIR)/usr/include/ AUXLIBS+=-L$(STAGING_DIR)/usr/lib -lsqlite3 -lpthread endif ifdef CONFIG_POSTFIX_PGSQL CCARGS+=-DHAS_PGSQL -I$(STAGING_DIR)/usr/include/ AUXLIBS+=-L$(STAGING_DIR)/usr/lib -lpq endif ifdef CONFIG_POSTFIX_PCRE CCARGS+=-DHAS_PCRE -I$(STAGING_DIR)/usr/include/ AUXLIBS+=-L$(STAGING_DIR)/usr/lib -lpcre else CCARGS+=-DNO_PCRE endif ifdef CONFIG_POSTFIX_EAI AUXLIBS+=-licuuc CCARGS+=-DHAS_EAI smtputf8_conf = yes else CCARGS+=-DNO_EAI smtputf8_conf = no endif CCARGS+=-DDEF_DB_TYPE=\"$(default_database_type)\" config_directory=/etc/postfix# also add this to postfix init file sample_directory=/etc/postfix command_directory=/usr/sbin daemon_directory=/usr/libexec/postfix data_directory=/usr/var/lib/postfix queue_directory=/usr/var/spool/postfix mail_spool_directory=/usr/var/mail html_directory=no manpage_directory=no readme_directory=no sendmail_path=/usr/sbin/sendmail newaliases_path=/usr/bin/newaliases mailq_path=/usr/bin/mailq shlib_directory=/usr/lib/postfix meta_directory=/etc/postfix ln_suffix=.postfix ln_old_suffix=.old define Package/postfix/conffiles $(config_directory)/main.cf $(config_directory)/master.cf $(config_directory)/aliases $(config_directory)/virtual endef define Build/Configure if [ "$(CONFIG_POSTFIX_DB)" = "" -a "$(CONFIG_POSTFIX_CDB)" = "" ]; then\ echo "Build error: You must select at least one of the DB types";\ exit 1;\ fi cd $(PKG_BUILD_DIR); $(MAKE) makefiles CCARGS='$(CCARGS)' $(TARGET_CONFIGURE_OPTS) AUXLIBS="$(AUXLIBS)" endef # Steps to regenerate files/main.cf.default: # # 1. Compile the package with current file # 2. Execute the following command on target device: # postconf -d > /tmp/main.cf.new # 3. Transfer /tmp/main.cf.new file to the build system # 4. Execute the following command: # cat /tmp/main.cf.new | ( echo '# DO NOT EDIT THIS FILE. EDIT THE MAIN.CF FILE INSTEAD. THE'; echo '# TEXT HERE JUST SHOWS DEFAULT SETTINGS BUILT INTO POSTFIX.'; echo '#'; grep -v ^alias_maps\ = |grep -v ^alias_database\ = |grep -v ^command_directory\ = |grep -v ^config_directory\ = |grep -v ^daemon_directory\ = |grep -v ^data_directory\ = |grep -v ^default_database_type\ = |grep -v ^html_directory\ = |grep -v ^mail_spool_directory\ = |grep -v ^mailq_path\ = |grep -v ^manpage_directory\ = |grep -v ^meta_directory\ = |grep -v ^mydomain\ = |grep -v ^myhostname\ = |grep -v ^mynetworks\ = |grep -v ^mynetworks_style\ = |grep -v ^newaliases_path\ = |grep -v ^queue_directory\ = |grep -v ^readme_directory\ = |grep -v ^sample_directory\ = |grep -v ^sendmail_path\ = |grep -v ^shlib_directory\ = |grep -v ^smtputf8_enable\ = |grep -v ^virtual_maps\ = |grep -v ^process_id\ = ) > files/main.cf.default # 5. Done. Now you can rebuild the package with new main.cf.default. # define Build/Compile # Currently postfix has a bug with Makefiles that CCARGS are not passed to the compiler, so we are copying them to CC as a workaround cd $(PKG_BUILD_DIR); $(MAKE) $(TARGET_CONFIGURE_OPTS) CC='$(TARGET_CC) $(CCARGS)' cp ./files/main.cf.default $(PKG_BUILD_DIR)/conf/main.cf.default echo "default_database_type = $(default_database_type)" >> $(PKG_BUILD_DIR)/conf/main.cf.default echo "alias_database = $(default_database_type):$(config_directory)/aliases" >> $(PKG_BUILD_DIR)/conf/main.cf.default echo "alias_maps = $(default_database_type):$(config_directory)/aliases" >> $(PKG_BUILD_DIR)/conf/main.cf.default echo "virtual_maps = $(default_database_type):$(config_directory)/virtual" >> $(PKG_BUILD_DIR)/conf/main.cf.default echo "sendmail_path = $(sendmail_path)$(ln_suffix)" >> $(PKG_BUILD_DIR)/conf/main.cf.default echo "newaliases_path = $(newaliases_path)$(ln_suffix)" >> $(PKG_BUILD_DIR)/conf/main.cf.default echo "mailq_path = $(mailq_path)$(ln_suffix)" >> $(PKG_BUILD_DIR)/conf/main.cf.default echo "html_directory = $(html_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default echo "manpage_directory = $(manpage_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default echo "sample_directory = $(sample_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default echo "readme_directory = $(readme_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default echo "command_directory = $(command_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default echo "daemon_directory = $(daemon_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default echo "data_directory = $(data_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default echo "queue_directory = $(queue_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default echo "config_directory = $(config_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default echo "mail_spool_directory = $(mail_spool_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default echo "shlib_directory = $(shlib_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default echo "meta_directory = $(meta_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default echo "smtputf8_enable = $(smtputf8_conf)" >> $(PKG_BUILD_DIR)/conf/main.cf.default endef define Package/postfix/install cd $(PKG_BUILD_DIR); $(MAKE) install_root=$(1) command_directory=$(command_directory) daemon_directory=$(daemon_directory) data_directory=$(data_directory) html_directory=$(html_directory) mail_owner=postfix mailq_path=$(mailq_path)$(ln_suffix) manpage_directory=$(manpage_directory) newaliases_path=$(newaliases_path)$(ln_suffix) queue_directory=$(queue_directory) readme_directory=$(readme_directory) sendmail_path=$(sendmail_path)$(ln_suffix) setgid_group=postdrop sample_directory=$(sample_directory) config_directory=$(config_directory) shlib_directory=$(shlib_directory) meta_directory=$(meta_directory) mail_version=$(PKG_VERSION) non-interactive-package $(INSTALL_DIR) $(1)$(mail_spool_directory) $(INSTALL_DIR) $(1)/etc/init.d/ $(INSTALL_BIN) ./files/postfix.init $(1)/etc/init.d/postfix endef define Package/postfix/postinst #!/bin/sh if [ -f "$${IPKG_INSTROOT}$(sendmail_path)" -a "$$(readlink "$${IPKG_INSTROOT}$(sendmail_path)")" != "$(sendmail_path)$(ln_suffix)" ]; then mv "$${IPKG_INSTROOT}$(sendmail_path)" "$${IPKG_INSTROOT}$(sendmail_path)$(ln_old_suffix)" echo "Warning: $${IPKG_INSTROOT}$(sendmail_path) saved as $${IPKG_INSTROOT}$(sendmail_path)$(ln_old_suffix)" fi if [ ! -f "$${IPKG_INSTROOT}$(sendmail_path)" ]; then ln -s "$(sendmail_path)$(ln_suffix)" "$${IPKG_INSTROOT}$(sendmail_path)" fi if [ -f "$${IPKG_INSTROOT}$(newaliases_path)" -a "$$(readlink "$${IPKG_INSTROOT}$(newaliases_path)")" != "$(newaliases_path)$(ln_suffix)" ]; then mv "$${IPKG_INSTROOT}$(newaliases_path)" "$${IPKG_INSTROOT}$(newaliases_path)$(ln_old_suffix)" echo "Warning: $${IPKG_INSTROOT}$(newaliases_path) saved as $${IPKG_INSTROOT}$(newaliases_path)$(ln_old_suffix)" fi if [ ! -f "$${IPKG_INSTROOT}$(newaliases_path)" ]; then ln -s "$(newaliases_path)$(ln_suffix)" "$${IPKG_INSTROOT}$(newaliases_path)" fi if [ -f "$${IPKG_INSTROOT}$(mailq_path)" -a "$$(readlink "$${IPKG_INSTROOT}$(mailq_path)")" != "$(mailq_path)$(ln_suffix)" ]; then mv "$${IPKG_INSTROOT}$(mailq_path)" "$${IPKG_INSTROOT}$(mailq_path)$(ln_old_suffix)" echo "Warning: $${IPKG_INSTROOT}$(mailq_path) saved as $${IPKG_INSTROOT}$(mailq_path)$(ln_old_suffix)" fi if [ ! -f "$(mailq_path)" ]; then ln -s "$(mailq_path)$(ln_suffix)" "$${IPKG_INSTROOT}$(mailq_path)" fi grep -qc main\.cf "$${IPKG_INSTROOT}"/etc/sysupgrade.conf >/dev/null || echo "$(config_directory)/main.cf" >> "$${IPKG_INSTROOT}"/etc/sysupgrade.conf grep -qc master\.cf "$${IPKG_INSTROOT}"/etc/sysupgrade.conf >/dev/null || echo "$(config_directory)/master.cf" >> "$${IPKG_INSTROOT}"/etc/sysupgrade.conf grep -qc aliases "$${IPKG_INSTROOT}"/etc/sysupgrade.conf >/dev/null || echo "$(config_directory)/aliases" >> "$${IPKG_INSTROOT}"/etc/sysupgrade.conf grep -qc virtual "$${IPKG_INSTROOT}"/etc/sysupgrade.conf >/dev/null || echo "$(config_directory)/virtual" >> "$${IPKG_INSTROOT}"/etc/sysupgrade.conf touch "$${IPKG_INSTROOT}$(config_directory)"/opkg_postinst if [ -z "$${IPKG_INSTROOT}" ]; then ps | grep "postfix/master" | grep -cvq grep >/dev/null && /etc/init.d/postfix restart fi endef define Package/postfix/prerm #!/bin/sh ps | grep "postfix/master" | grep -cvq grep >/dev/null && postfix stop /etc/init.d/postfix disable endef define Package/postfix/postrm #!/bin/sh rm -f $${IPKG_INSTROOT}$(config_directory)/aliases.cdb $${IPKG_INSTROOT}$(config_directory)/aliases.db $${IPKG_INSTROOT}$(data_directory)/master.lock rm -f $${IPKG_INSTROOT}$(config_directory)/virtual.cdb $${IPKG_INSTROOT}$(config_directory)/virtual.db rm -f "$${IPKG_INSTROOT}$(sendmail_path)" "$${IPKG_INSTROOT}$(newaliases_path)" "$${IPKG_INSTROOT}$(mailq_path)" if [ -f "$${IPKG_INSTROOT}$(sendmail_path)$(ln_old_suffix)" ]; then mv "$${IPKG_INSTROOT}$(sendmail_path)$(ln_old_suffix)" "$${IPKG_INSTROOT}$(sendmail_path)" echo "Warning: $${IPKG_INSTROOT}$(sendmail_path) restored from $${IPKG_INSTROOT}$(sendmail_path)$(ln_old_suffix)" fi if [ -f "$${IPKG_INSTROOT}$(newaliases_path)$(ln_old_suffix)" ]; then mv "$${IPKG_INSTROOT}$(newaliases_path)$(ln_old_suffix)" "$${IPKG_INSTROOT}$(newaliases_path)" echo "Warning: $${IPKG_INSTROOT}$(newaliases_path) restored from $${IPKG_INSTROOT}$(newaliases_path)$(ln_old_suffix)" fi if [ -f "$${IPKG_INSTROOT}$(mailq_path)$(ln_old_suffix)" ]; then mv "$${IPKG_INSTROOT}$(mailq_path)$(ln_old_suffix)" "$${IPKG_INSTROOT}$(mailq_path)" echo "Warning: $${IPKG_INSTROOT}$(mailq_path) restored from $${IPKG_INSTROOT}$(mailq_path)$(ln_old_suffix)" fi endef $(eval $(call BuildPackage,postfix))