You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

277 lines
12 KiB

  1. #
  2. # Copyright (C) 2014-2015 OpenWrt.org
  3. #
  4. # This is free software, licensed under the GNU General Public License v2.
  5. # See /LICENSE for more information.
  6. #
  7. include $(TOPDIR)/rules.mk
  8. PKG_NAME:=postfix
  9. PKG_RELEASE:=2
  10. PKG_SOURCE_URL:=ftp://ftp.porcupine.org/mirrors/postfix-release/official/
  11. PKG_VERSION:=3.1.4
  12. PKG_MD5SUM:=878a059d92ee3b093d7d3e97248c915d
  13. PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
  14. PKG_MAINTAINER:=Denis Shulyaka <Shulyaka@gmail.com>
  15. PKG_LICENSE:=IPL-1.0
  16. PKG_LICENSE_FILES:=LICENSE
  17. PKG_BUILD_DEPENDS:=+POSTFIX_CDB:tinycdb
  18. include $(INCLUDE_DIR)/package.mk
  19. define Package/postfix
  20. SECTION:=mail
  21. CATEGORY:=Mail
  22. TITLE:=Postfix Mail Transmit Agent
  23. URL:=http://www.postfix.org/
  24. DEPENDS:=+POSTFIX_TLS:libopenssl +POSTFIX_SASL:libsasl2 +POSTFIX_LDAP:libopenldap +POSTFIX_DB:libdb47 +POSTFIX_SQLITE:libsqlite3 +POSTFIX_EAI:icu +libpcre
  25. endef
  26. define Package/postfix/description
  27. 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.
  28. endef
  29. define Package/postfix/config
  30. menu "Select postfix build options"
  31. config POSTFIX_TLS
  32. bool "TLS support"
  33. default y
  34. help
  35. Implements TLS support in postfix (using OpenSSL).
  36. config POSTFIX_SASL
  37. bool "SASL support"
  38. default y
  39. help
  40. Implements SASL support in postfix (using Cyrus SASL).
  41. config POSTFIX_LDAP
  42. bool "LDAP support"
  43. default y
  44. help
  45. Implements LDAP support in postfix (using OpenLDAP).
  46. config POSTFIX_DB
  47. bool "BerkeleyDB support"
  48. default n
  49. help
  50. Implements support for btree files using Berkeley DB. Note that hash files support is not compiled into Berkeley DB OpenWRT distribution
  51. config POSTFIX_CDB
  52. bool "CDB support"
  53. default y
  54. help
  55. Implements support for cdb files using tinycdb
  56. config POSTFIX_SQLITE
  57. bool "SQLITE support"
  58. default y
  59. help
  60. Implements support for SQLite3 DB
  61. config POSTFIX_EAI
  62. bool "SMTPUTF8 support"
  63. default n
  64. help
  65. Enable Postfix support for Email Address Internationalization
  66. (EAI) as defined in RFC 6531 (SMTPUTF8 extension), RFC 6532
  67. (Internationalized email headers) and RFC 6533
  68. (Internationalized delivery status notifications).
  69. Since version 3.0, Postfix fully supports UTF-8 email
  70. addresses and UTF-8 message header values.
  71. endmenu
  72. endef
  73. CCARGS=-DNO_NIS
  74. AUXLIBS=-L$(STAGING_DIR)/usr/lib
  75. default_database_type=cdb
  76. ifdef CONFIG_POSTFIX_TLS
  77. CCARGS+=-DUSE_TLS
  78. AUXLIBS+=-lssl -lcrypto
  79. endif
  80. ifdef CONFIG_POSTFIX_SASL
  81. CCARGS+=-DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I$(STAGING_DIR)/usr/include/sasl
  82. AUXLIBS+=-lsasl2
  83. endif
  84. ifdef CONFIG_POSTFIX_LDAP
  85. CCARGS+=-DHAS_LDAP
  86. AUXLIBS+=-lldap -llber
  87. endif
  88. ifdef CONFIG_POSTFIX_CDB
  89. CCARGS+=-DHAS_CDB
  90. AUXLIBS+=-lcdb
  91. endif
  92. ifdef CONFIG_POSTFIX_DB
  93. AUXLIBS+=-ldb
  94. CCARGS+=-DHAS_DB
  95. ifndef CONFIG_POSTFIX_CDB
  96. default_database_type=btree
  97. endif
  98. else
  99. CCARGS+=-DNO_DB
  100. endif
  101. ifdef CONFIG_POSTFIX_SQLITE
  102. CCARGS+=-DHAS_SQLITE -I$(STAGING_DIR)/usr/include/
  103. AUXLIBS+=-L$(STAGING_DIR)/usr/lib -lsqlite3 -lpthread
  104. endif
  105. ifdef CONFIG_POSTFIX_EAI
  106. AUXLIBS+=-licuuc
  107. CCARGS+=-DHAS_EAI
  108. smtputf8_conf = yes
  109. else
  110. CCARGS+=-DNO_EAI
  111. smtputf8_conf = no
  112. endif
  113. CCARGS+=-DDEF_DB_TYPE=\"$(default_database_type)\"
  114. config_directory=/etc/postfix# also add this to postfix init file
  115. sample_directory=/etc/postfix
  116. command_directory=/usr/sbin
  117. daemon_directory=/usr/libexec/postfix
  118. data_directory=/usr/var/lib/postfix
  119. queue_directory=/usr/var/spool/postfix
  120. mail_spool_directory=/usr/var/mail
  121. html_directory=no
  122. manpage_directory=no
  123. readme_directory=no
  124. sendmail_path=/usr/sbin/sendmail
  125. newaliases_path=/usr/bin/newaliases
  126. mailq_path=/usr/bin/mailq
  127. shlib_directory=/usr/lib/postfix
  128. meta_directory=/etc/postfix
  129. ln_suffix=.postfix
  130. ln_old_suffix=.old
  131. define Package/postfix/conffiles
  132. $(config_directory)/main.cf
  133. $(config_directory)/master.cf
  134. $(config_directory)/aliases
  135. $(config_directory)/virtual
  136. endef
  137. define Build/Configure
  138. if [ "$(CONFIG_POSTFIX_DB)" = "" -a "$(CONFIG_POSTFIX_CDB)" = "" ]; then\
  139. echo "Build error: You must select at least one of the DB types";\
  140. exit 1;\
  141. fi
  142. cd $(PKG_BUILD_DIR); $(MAKE) makefiles CCARGS='$(CCARGS)' $(TARGET_CONFIGURE_OPTS) AUXLIBS="$(AUXLIBS)"
  143. endef
  144. # Steps to regenerate files/main.cf.default:
  145. #
  146. # 1. Compile the package with current file
  147. # 2. Execute the following command on target device:
  148. # postconf -d > /tmp/main.cf.new
  149. # 3. Transfer /tmp/main.cf.new file to the build system
  150. # 4. Execute the following command:
  151. # 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
  152. # 5. Done. Now you can rebuild the package with new main.cf.default.
  153. #
  154. define Build/Compile
  155. # 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
  156. cd $(PKG_BUILD_DIR); $(MAKE) $(TARGET_CONFIGURE_OPTS) CC='$(TARGET_CC) $(CCARGS)'
  157. cp ./files/main.cf.default $(PKG_BUILD_DIR)/conf/main.cf.default
  158. echo "default_database_type = $(default_database_type)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
  159. echo "alias_database = $(default_database_type):$(config_directory)/aliases" >> $(PKG_BUILD_DIR)/conf/main.cf.default
  160. echo "alias_maps = $(default_database_type):$(config_directory)/aliases" >> $(PKG_BUILD_DIR)/conf/main.cf.default
  161. echo "virtual_maps = $(default_database_type):$(config_directory)/virtual" >> $(PKG_BUILD_DIR)/conf/main.cf.default
  162. echo "sendmail_path = $(sendmail_path)$(ln_suffix)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
  163. echo "newaliases_path = $(newaliases_path)$(ln_suffix)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
  164. echo "mailq_path = $(mailq_path)$(ln_suffix)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
  165. echo "html_directory = $(html_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
  166. echo "manpage_directory = $(manpage_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
  167. echo "sample_directory = $(sample_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
  168. echo "readme_directory = $(readme_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
  169. echo "command_directory = $(command_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
  170. echo "daemon_directory = $(daemon_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
  171. echo "data_directory = $(data_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
  172. echo "queue_directory = $(queue_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
  173. echo "config_directory = $(config_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
  174. echo "mail_spool_directory = $(mail_spool_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
  175. echo "shlib_directory = $(shlib_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
  176. echo "meta_directory = $(meta_directory)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
  177. echo "smtputf8_enable = $(smtputf8_conf)" >> $(PKG_BUILD_DIR)/conf/main.cf.default
  178. endef
  179. define Package/postfix/install
  180. 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
  181. $(INSTALL_DIR) $(1)$(mail_spool_directory)
  182. $(INSTALL_DIR) $(1)/etc/init.d/
  183. $(INSTALL_BIN) ./files/postfix.init $(1)/etc/init.d/postfix
  184. endef
  185. define Package/postfix/postinst
  186. #!/bin/sh
  187. if [ -f "$${IPKG_INSTROOT}$(sendmail_path)" -a "$$(readlink "$${IPKG_INSTROOT}$(sendmail_path)")" != "$(sendmail_path)$(ln_suffix)" ]; then
  188. mv "$${IPKG_INSTROOT}$(sendmail_path)" "$${IPKG_INSTROOT}$(sendmail_path)$(ln_old_suffix)"
  189. echo "Warning: $${IPKG_INSTROOT}$(sendmail_path) saved as $${IPKG_INSTROOT}$(sendmail_path)$(ln_old_suffix)"
  190. fi
  191. if [ ! -f "$${IPKG_INSTROOT}$(sendmail_path)" ]; then
  192. ln -s "$${IPKG_INSTROOT}$(sendmail_path)$(ln_suffix)" "$(sendmail_path)"
  193. fi
  194. if [ -f "$${IPKG_INSTROOT}$(newaliases_path)" -a "$$(readlink "$${IPKG_INSTROOT}$(newaliases_path)")" != "$(newaliases_path)$(ln_suffix)" ]; then
  195. mv "$${IPKG_INSTROOT}$(newaliases_path)" "$${IPKG_INSTROOT}$(newaliases_path)$(ln_old_suffix)"
  196. echo "Warning: $${IPKG_INSTROOT}$(newaliases_path) saved as $${IPKG_INSTROOT}$(newaliases_path)$(ln_old_suffix)"
  197. fi
  198. if [ ! -f "$${IPKG_INSTROOT}$(newaliases_path)" ]; then
  199. ln -s "$${IPKG_INSTROOT}$(newaliases_path)$(ln_suffix)" "$(newaliases_path)"
  200. fi
  201. if [ -f "$${IPKG_INSTROOT}$(mailq_path)" -a "$$(readlink "$${IPKG_INSTROOT}$(mailq_path)")" != "$(mailq_path)$(ln_suffix)" ]; then
  202. mv "$${IPKG_INSTROOT}$(mailq_path)" "$${IPKG_INSTROOT}$(mailq_path)$(ln_old_suffix)"
  203. echo "Warning: $${IPKG_INSTROOT}$(mailq_path) saved as $${IPKG_INSTROOT}$(mailq_path)$(ln_old_suffix)"
  204. fi
  205. if [ ! -f "$(mailq_path)" ]; then
  206. ln -s "$${IPKG_INSTROOT}$(mailq_path)$(ln_suffix)" "$(mailq_path)"
  207. fi
  208. grep -qc main\.cf "$${IPKG_INSTROOT}"/etc/sysupgrade.conf >/dev/null || echo "$(config_directory)/main.cf" >> "$${IPKG_INSTROOT}"/etc/sysupgrade.conf
  209. grep -qc master\.cf "$${IPKG_INSTROOT}"/etc/sysupgrade.conf >/dev/null || echo "$(config_directory)/master.cf" >> "$${IPKG_INSTROOT}"/etc/sysupgrade.conf
  210. grep -qc aliases "$${IPKG_INSTROOT}"/etc/sysupgrade.conf >/dev/null || echo "$(config_directory)/aliases" >> "$${IPKG_INSTROOT}"/etc/sysupgrade.conf
  211. grep -qc virtual "$${IPKG_INSTROOT}"/etc/sysupgrade.conf >/dev/null || echo "$(config_directory)/virtual" >> "$${IPKG_INSTROOT}"/etc/sysupgrade.conf
  212. touch "$${IPKG_INSTROOT}$(config_directory)"/opkg_postinst
  213. if [ -z "$${IPKG_INSTROOT}" ]; then
  214. ps | grep "postfix/master" | grep -cvq grep >/dev/null && /etc/init.d/postfix restart
  215. fi
  216. endef
  217. define Package/postfix/prerm
  218. #!/bin/sh
  219. ps | grep "postfix/master" | grep -cvq grep >/dev/null && postfix stop
  220. /etc/init.d/postfix disable
  221. endef
  222. define Package/postfix/postrm
  223. #!/bin/sh
  224. rm -f $${IPKG_INSTROOT}$(config_directory)/aliases.cdb $${IPKG_INSTROOT}$(config_directory)/aliases.db $${IPKG_INSTROOT}$(data_directory)/master.lock
  225. rm -f $${IPKG_INSTROOT}$(config_directory)/virtual.cdb $${IPKG_INSTROOT}$(config_directory)/virtual.db
  226. rm -f "$${IPKG_INSTROOT}$(sendmail_path)" "$${IPKG_INSTROOT}$(newaliases_path)" "$${IPKG_INSTROOT}$(mailq_path)"
  227. if [ -f "$${IPKG_INSTROOT}$(sendmail_path)$(ln_old_suffix)" ]; then
  228. mv "$${IPKG_INSTROOT}$(sendmail_path)$(ln_old_suffix)" "$${IPKG_INSTROOT}$(sendmail_path)"
  229. echo "Warning: $${IPKG_INSTROOT}$(sendmail_path) restored from $${IPKG_INSTROOT}$(sendmail_path)$(ln_old_suffix)"
  230. fi
  231. if [ -f "$${IPKG_INSTROOT}$(newaliases_path)$(ln_old_suffix)" ]; then
  232. mv "$${IPKG_INSTROOT}$(newaliases_path)$(ln_old_suffix)" "$${IPKG_INSTROOT}$(newaliases_path)"
  233. echo "Warning: $${IPKG_INSTROOT}$(newaliases_path) restored from $${IPKG_INSTROOT}$(newaliases_path)$(ln_old_suffix)"
  234. fi
  235. if [ -f "$${IPKG_INSTROOT}$(mailq_path)$(ln_old_suffix)" ]; then
  236. mv "$${IPKG_INSTROOT}$(mailq_path)$(ln_old_suffix)" "$${IPKG_INSTROOT}$(mailq_path)"
  237. echo "Warning: $${IPKG_INSTROOT}$(mailq_path) restored from $${IPKG_INSTROOT}$(mailq_path)$(ln_old_suffix)"
  238. fi
  239. endef
  240. $(eval $(call BuildPackage,postfix))