# Copyright 1999-2004 Gentoo Technologies, Inc. # Distributed under the terms of the GNU General Public License v2 # $Header: /home/cvsroot/gentoo-x86/net-mail/qmail-ldap/qmail-ldap-1.03-r4.ebuild,v 1.2 2004/04/07 02:06:20 mr_bones_ Exp $ IUSE="ssl mailwrapper" inherit toolchain-funcs eutils fixheadtails QMAIL_LDAP_VERSION="20041201" S=${WORKDIR}/qmail-${PV} DESCRIPTION="A modern replacement for sendmail which uses maildirs" HOMEPAGE="http://www.qmail.org/ http://www.jedi.claranet.fr/qmail-tuning.html http://iain.cx/unix/qmail/mysql.php http://www.nrg4u.com/" SRC_URI="mirror://qmail/qmail-${PV}.tar.gz http://www.suspectclass.com/~sgifford/qmail/qmail-0.0.0.0.patch http://www.qmail-ldap.org/qmail/qmail-ldap-1.03-${QMAIL_LDAP_VERSION}.patch.gz mirror://gentoo/${P}-r2-tls.patch.bz2" DEPEND="virtual/libc sys-libs/zlib sys-apps/groff >=net-nds/openldap-2.1.23 >=sys-apps/ucspi-tcp-0.88 ssl? ( >=dev-libs/openssl-0.9.6e ) >=net-mail/queue-fix-1.4-r1 !mail-mta/qmail " RDEPEND="${DEPEND} >=sys-process/daemontools-0.76-r1 >=net-mail/dot-forward-0.71 >=net-mail/mailbase-0.00 !mailwrapper? ( !virtual/mta ) mailwrapper? ( >=net-mail/mailwrapper-0.2 ) " PROVIDE="virtual/mta virtual/mda" SLOT="0" LICENSE="as-is" KEYWORDS="x86 ~ppc ~sparc" src_unpack() { unpack qmail-1.03.tar.gz unpack qmail-ldap-1.03-${QMAIL_LDAP_VERSION}.patch.gz cd ${S} #main ldap patch #includes : qmail-queue patch | big todo | errno #qmail-103.patch | qmail-local-tabs.patch | big-concurrency.patch epatch ${WORKDIR}/qmail-ldap-1.03-${QMAIL_LDAP_VERSION}.patch || die "ldap patch failed" #define 0.0.0.0 as local system/network epatch ${DISTDIR}/qmail-0.0.0.0.patch || die "0.0.0.0 patch did not apply" # AUTOHOME DIR MAKE AND FEATURES PATCH (not needed) #epatch ${FILESDIR}/${PV}-${PR}/gentoo.patch || die "Homedir patch did not apply" # Account for Linux filesystems lack of a synchronus link() epatch ${FILESDIR}/qmail-link-sync-gentoo.patch.bz2 || die "linksync patch did not apply" # Lets make Aiko Barz very happy with his patch, this allows you to use a # pipe in deliverpath. epatch ${FILESDIR}/pipehack.patch.bz2 || die "pipehack did not apply correctly" # verisign (not needed) #epatch ${FILESDIR}/${PV}-${PR}/qmail-verisign.patch.bz2 || die "verisign did not apply correctly" # smtpd (check and remove exe files) (not needed) #epatch ${FILESDIR}/${PV}-${PR}/qmail-smtpd_exe_check.patch || die "smtpd_exe_check did not apply correctly" # virtual user patch (homedirectory is used by the system but doesn't contain any mail) epatch ${FILESDIR}/${PV}-${PR}/qmail-virtualuser.patch || die "virtualuser did not apply correctly" # qmail.schema fixes for openldap22 #epatch ${FILESDIR}/openldap22_schema_fixes.chris.patch.bz2 || \ # die "qmail.schema fixes for openldap22 did not apply correctly" # make the qmail 'sendmail' binary behave like sendmail's for -f #BROKEN #epatch ${DISTDIR}/sendmail-flagf.patch # This will make the emails headers be written in localtime rather than GMT # If you really want, uncomment it yourself, as mail really should be in GMT #epatch ${DISTDIR}/qmail-date-localtime.patch.txt || die "qmail-date-localtime.patch did not apply" if use ssl; then epatch ${FILESDIR}/tls.patch.bz2 || die "tls+auth patch failed"; fi epatch ${FILESDIR}/${PV}-${PR}/makefile-conf.chris.patch.bz2 || die epatch ${FILESDIR}/${PV}-${PR}/qmqp-hack.chris.patch.bz2 || die echo -n "$(tc-getCC) ${CFLAGS}" >${S}/conf-cc echo -n "$(tc-getCC) ${LDFLAGS}" > ${S}/conf-ld #echo -n "${CC} ${CFLAGS}" >${S}/conf-cc #echo -n "${CC} ${LDFLAGS}" > ${S}/conf-ld echo "500" > conf-spawn } src_compile() { cd ${S} emake clean perl -pi -e "s|/Maildir/|/.maildir/|g" * emake it man ldap|| die gcc gettimeofday.c -o gettimeofday } src_install() { cd ${S} einfo "Setting up directory hierarchy ..." diropts -m 755 -o root -g qmail dodir /var/qmail for i in bin boot control do dodir /var/qmail/${i} done keepdir /var/qmail/users diropts -m 755 -o alias -g qmail dodir /var/qmail/alias einfo "Installing the qmail software ..." #insopts -o root -g qmail -m 755 #insinto /var/qmail/boot #doins home home+df proc proc+df binm1 binm1+df binm2 binm2+df binm3 binm3+df ## Some docs into /usr dodoc ${FILESDIR}/samples.ldif dodoc FAQ UPGRADE SENDMAIL INSTALL* TEST* REMOVE* PIC* SECURITY dodoc SYSDEPS TARGETS THANKS THOUGHTS TODO VERSION dodoc QLDAP* EXTTODO POPBEFORESMTP insopts -o qmailq -g qmail -m 4711 insinto /var/qmail/bin doins qmail-queue qmail-qmqpc || die insopts -o root -g qmail -m 700 insinto /var/qmail/bin doins qmail-lspawn qmail-start qmail-newu qmail-newmrh qmail-cdb \ || die insopts -o root -g qmail -m 711 insinto /var/qmail/bin doins qmail-getpw qmail-local qmail-remote qmail-rspawn \ qmail-clean qmail-send splogger qmail-pw2u qmail-popup \ qmail-ldaplookup \ || die if [ -f qmail-todo ]; then doins qmail-todo || die fi insopts -o root -g qmail -m 755 insinto /var/qmail/bin doins qmail-inject predate datemail mailsubj qmail-showctl \ qmail-qread qmail-qstat qmail-tcpto qmail-tcpok qmail-pop3d \ qmail-qmqpd qmail-qmtpd qmail-smtpd \ sendmail tcp-env qreceipt qsmhook qbiff forward preline \ condredirect condwrite bouncesaying except maildirmake maildir2mbox \ maildirwatch qail elq pinq qmail-reply qmail-quotawarn config-fast \ dirmaker qmail-todo auth_smtp qmail-verify digest qmail-forward \ qmail-secretary qmail-group pbsadd pbscheck pbsdbd \ gettimeofday condredirect condwrite \ || die insopts -o root -g qmail -m 700 insinto /var/qmail/bin doins auth_imap auth_pop || die into /usr for i in *.1 *.5 *.8 do doman $i || die done einfo "Adding env.d entry for qmail" dodir /etc/env.d insinto /etc/env.d doins ${FILESDIR}/99qmail || die diropts -m 755 dodir /usr/sbin # mailwrapper stuff if use mailwrapper then dosym /var/qmail/bin/sendmail /usr/sbin/sendmail.qmail || die insinto /etc/mail doins "${FILESDIR}/mailer.conf" else einfo "Creating sendmail replacement ..." dosym /var/qmail/bin/sendmail /usr/sbin/sendmail || die fi einfo "Setting up the default aliases ..." diropts -m 700 -o alias -g qmail ${D}/var/qmail/bin/maildirmake ${D}/var/qmail/alias/.maildir # for good measure keepdir /var/qmail/alias/.maildir/{cur,new,tmp} for i in mailer-daemon postmaster root do if [ ! -f ${ROOT}/var/qmail/alias/.qmail-${i} ]; then touch ${D}/var/qmail/alias/.qmail-${i} fowners alias:qmail /var/qmail/alias/.qmail-${i} fi done einfo "Setting up maildirs by default in the account skeleton ..." diropts -m 755 -o root -g root insinto /etc/skel newins ${FILESDIR}/dot_qmail .qmail.sample || die fperms 644 /etc/skel/.qmail.sample ${D}/var/qmail/bin/maildirmake ${D}/etc/skel/.maildir # for good measure keepdir /etc/skel/.maildir/{cur,new,tmp} einfo "Setting up all services (send smtpd smtpd-amavis qmqpd pop3d pop3d-ssl imapd imapd-ssl pbsdbd qmtpd) ..." insopts -o root -g root -m 755 diropts -m 755 -o root -g root dodir /var/qmail/boot for i in send smtpd smtpd-amavis qmqpd pop3d pop3d-ssl imapd imapd-ssl pbsdbd qmtpd ; do insopts -o root -g root -m 755 diropts -m 755 -o root -g root dodir /var/qmail/boot/qmail-${i}{,/log,/env} keepdir /var/qmail/boot/qmail-${i}/env diropts -m 755 -o qmaill keepdir /var/log/qmail/qmail-${i} fperms +t /var/qmail/boot/qmail-${i}{,/log} insinto /var/qmail/boot/qmail-${i} newins ${FILESDIR}/${PV}-${PR}/run-qmail-${i} run || die insinto /var/qmail/boot/qmail-${i}/log newins ${FILESDIR}/${PV}-${PR}/run-qmail-${i}-log run || die done einfo "Setting up tcprules files ..." for i in smtpd smtpd-amavis qmtpd qmqpd pop3d pop3sd imapd imapsd pbsdbd; do insinto /var/qmail/control insopts -o root -g root -m 644 newins ${FILESDIR}/${PV}-${PR}/qmail-${i}.rules qmail-${i}.rules || die done insinto /var/qmail/control insopts -o root -g root -m 644 newins ${FILESDIR}/${PV}-${PR}/Makefile.cdb Makefile || die einfo "Installing the qmail control file ..." exeinto /var/qmail/bin doexe ${FILESDIR}/${PV}-${PR}/qmail-control || die einfo "Installing the qmail startup file ..." insopts -o root -g root -m 755 insinto /var/qmail doins ${FILESDIR}/${PV}-${PR}/rc || die einfo "Installing the qmail configuration file ..." insinto /var/qmail/control insopts -o root -g root -m 644 doins ${FILESDIR}/control/defaultdomain \ ${FILESDIR}/control/defaulthost \ ${FILESDIR}/control/dirmaker \ ${FILESDIR}/control/ldapbasedn \ ${FILESDIR}/control/ldapgid \ ${FILESDIR}/control/ldaplocaldelivery \ ${FILESDIR}/control/ldaplogin \ ${FILESDIR}/control/ldapmessagestore \ ${FILESDIR}/control/ldapserver \ ${FILESDIR}/control/ldapuid \ || die #\ #${FILESDIR}/bin/qmailAccountPurge.sh \ insopts -o qmaild -g root -m 600 insinto /var/qmail/control doins ${FILESDIR}/control/ldappassword || die einfo "Installing the qmail.schema ..." insinto /etc/openldap/schema insopts -o ldap -g ldap -m 644 doins qmail.schema || die newins qmail.schema qmail.schema.default || die einfo "Insalling some stock configuration files" insinto /var/qmail/control insopts -o root -g root -m 644 doins ${FILESDIR}/${PV}-${PR}/conf-* || die newins ${FILESDIR}/dot_qmail aliasempty || die use ssl && doins ${FILESDIR}/servercert.cnf || die einfo "Configuration sanity checker" into /var/qmail insopts -o root -g root -m 644 dobin ${FILESDIR}/${PV}-${PR}/config-sanity-check || die dobin ${FILESDIR}/${PV}-${PR}/config-auto || die if use ssl; then einfo "SSL Certificate creation script" dobin ${FILESDIR}/mkservercert || die einfo "RSA key generation cronjob" insinto /etc/cron.daily insopts -m 755 doins ${FILESDIR}/qmail-genrsacert.sh || die fi } rootmailfixup() { # so you can check mail as root easily local TMPCMD="ln -sf /var/qmail/alias/.maildir/ ${ROOT}/root/.maildir" if [ -d "${ROOT}/root/.maildir" ] && [ ! -L "${ROOT}/root/.maildir" ] ; then einfo "Previously the qmail ebuilds created /root/.maildir/ but not" einfo "mail was every delivered there. If the directory does not" einfo "contain any mail, please delete it and run:" einfo "${TMPCMD}" else ${TMPCMD} fi chown -R alias:qmail ${ROOT}/var/qmail/alias/.maildir 2>/dev/null } qmail_schemafixup() { chown ldap:ldap ${ROOT}/etc/openldap/schema/qmail.schema } buildtcprules() { make -C ${ROOT}var/qmail/control/ } pkg_postinst() { einfo "Setting up the message queue hierarchy ..." # queue-fix makes life easy! /var/qmail/bin/queue-fix ${ROOT}/var/qmail/queue >/dev/null rootmailfixup qmail_schemafixup buildtcprules # for good measure env-update enewgroup ldapauth enewuser ldapauth 11184 /bin/true /var/qmail/maildirs ldapauth #if [ "`getent group ldapauth | cut -d: -f1`" != "ldapauth" ]; then # groupadd ldapauth &>/dev/null #fi # #if [ "`getent passwd ldapauth | cut -d: -f1`" != "ldapauth" ]; then # useradd -g ldapauth -d /var/qmail/maildirs -s /bin/true -u 11184 ldapauth #fi einfo "Please do not forget to run, the following syntax :" einfo "ebuild /var/db/pkg/${CATEGORY}/${PN}-${PV}-${PR}/${PN}-${PV}-${PR}.ebuild config " einfo "This will setup qmail to run out-of-the-box on your system including SSL. " echo einfo "To start qmail at boot you have to enable the /etc/init.d/svscan rc file " einfo "and create the following links : " einfo "ln -s /var/qmail/boot/qmail-send /service/qmail-send " einfo "ln -s /var/qmail/boot/qmail-smtpd /service/qmail-smtpd " einfo "ln -s /var/qmail/boot/qmail-smtpd /service/qmail-smtpd-amavis " einfo "ln -s /var/qmail/boot/qmail-qmtpd /service/qmail-qmtpd " einfo "ln -s /var/qmail/boot/qmail-pop3d /service/qmail-pop3d " einfo "ln -s /var/qmail/boot/qmail-pop3d-ssl /service/qmail-pop3d-ssl " einfo "ln -s /var/qmail/boot/qmail-imapd /service/qmail-imapd " einfo "ln -s /var/qmail/boot/qmail-imapd-ssl /service/qmail-imapd-ssl " einfo "ln -s /var/qmail/boot/qmail-pbsdbd /service/qmail-pbsdbd " echo einfo "NOTE: Please check your /var/qmail/control/ldap* files to match your local " einfo "ldap settings and add the qmail.schema along with \"allow bind_v2\" to your " einfo "slapd.conf. For sample ldifs, please check " einfo "/usr/share/doc/${PN}-${PV}-${PR}/samples.ldif.gz " } pkg_config() { # avoid some weird locale problems export LC_ALL="C" if [ ${ROOT} = "/" ] ; then if [ ! -f ${ROOT}var/qmail/control/me ] ; then export qhost=`hostname --fqdn` ${ROOT}var/qmail/bin/config-fast $qhost fi else ewarn "Skipping some configuration as it MUST be run on the final host" fi einfo "Accepting relaying by default from all ips configured on this machine." #LOCALIPS=`/sbin/ifconfig | grep inet | cut -d' ' -f 12 -s | cut -b 6-20` #if use ssl; then #TCPSTRING=":allow,SMTPAUTH=\"TLSREQUIRED\""; #else #TCPSTRING=":allow,RELAYCLIENT=\"\",RBLSMTPD=\"\"" #fi #for ip in $LOCALIPS; do # myline="${ip}${TCPSTRING}" # for proto in smtp qmtp qmqp; do # f="${ROOT}var/qmail/control/qmail-${proto}d.rules" # egrep -q "${myline}" ${f} || echo "${myline}" >>${f} # done #done einfo "Default: run pbsserver on the local interface" einfo "" if [ ! -f ${ROOT}service/qmail-pbsdbd ]; then einfo "To start pbsserver at boot you have to enable the /etc/init.d/svscan rc file " einfo "and create the following link : " einfo "ln -s /var/qmail/boot/qmail-pbsdbd /service/qmail-pbsdbd " fi if [ ! -f ${ROOT}var/qmail/control/pbsservers ]; then echo "127.0.0.1" > ${ROOT}var/qmail/control/pbsservers fi buildtcprules if use ssl; then ${ROOT}etc/cron.daily/qmail-genrsacert.sh einfo "Creating a self-signed ssl-certificate:" /var/qmail/bin/mkservercert einfo "If you want to have a properly signed certificate " einfo "instead, do the following:" einfo "openssl req -new -nodes -out req.pem \\" einfo "-config /var/qmail/control/servercert.cnf \\" einfo "-keyout /var/qmail/control/servercert.pem" einfo "Send req.pem to your CA to obtain signed_req.pem, and do:" einfo "cat signed_req.pem >> /var/qmail/control/servercert.pem" fi }