ソースコードの中でSolarisのSASLライブラリでは実装されていない関数を使っ ているので、CyrusのSASLライブラリをリンクします。
以下のパッチを適用します。
diff -ur cyrus-imapd-2.3.16.orig/configure cyrus-imapd-2.3.16/configure
--- cyrus-imapd-2.3.16.orig/configure 2009-12-21 22:17:55.000000000 +0900
+++ cyrus-imapd-2.3.16/configure 2010-02-27 16:38:15.000000000 +0900
@@ -20287,13 +20287,13 @@
if test "x$ac_cv_func_MD5Init" = x""yes; then
:
else
- { $as_echo "$as_me:$LINENO: checking for MD5Init in -lmd" >&5
-$as_echo_n "checking for MD5Init in -lmd... " >&6; }
+ { $as_echo "$as_me:$LINENO: checking for MD5Init in -lmd5" >&5
+$as_echo_n "checking for MD5Init in -lmd5... " >&6; }
if test "${ac_cv_lib_md_MD5Init+set}" = set; then
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
-LIBS="-lmd $LIBS"
+LIBS="-lmd5 $LIBS"
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -20353,7 +20353,7 @@
{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_md_MD5Init" >&5
$as_echo "$ac_cv_lib_md_MD5Init" >&6; }
if test "x$ac_cv_lib_md_MD5Init" = x""yes; then
- LIBS="${LIBS} -lmd"
+ LIBS="${LIBS} -lmd5"
else
MD5OBJ="md5.o"
fi
diff -ur cyrus-imapd-2.3.16.orig/configure.in cyrus-imapd-2.3.16/configure.in
--- cyrus-imapd-2.3.16.orig/configure.in 2009-12-21 22:09:10.000000000 +0900
+++ cyrus-imapd-2.3.16/configure.in 2010-02-27 14:19:11.973296291 +0900
@@ -1171,7 +1171,7 @@
dnl Check for MD5 functions
AC_FUNC_CHECK(MD5Init,,
- AC_CHECK_LIB(md, MD5Init, LIBS="${LIBS} -lmd",
+ AC_CHECK_LIB(md, MD5Init, LIBS="${LIBS} -lmd5",
MD5OBJ="md5.o"))
AC_SUBST(MD5OBJ)
diff -ur cyrus-imapd-2.3.16.orig/imap/Makefile.in cyrus-imapd-2.3.16/imap/Makefile.in
--- cyrus-imapd-2.3.16.orig/imap/Makefile.in 2009-03-31 01:04:56.000000000 +0900
+++ cyrus-imapd-2.3.16/imap/Makefile.in 2010-02-27 14:21:46.724759315 +0900
@@ -70,7 +70,7 @@
DEPLIBS = ../lib/libcyrus.a ../lib/libcyrus_min.a @DEPLIBS@
CFLAGS = @CFLAGS@
-LDFLAGS = @LDFLAGS@ @COM_ERR_LDFLAGS@
+LDFLAGS = $(CFLAGS) @LDFLAGS@ @COM_ERR_LDFLAGS@
SHELL = /bin/sh
MAKEDEPEND = @MAKEDEPEND@
diff -ur cyrus-imapd-2.3.16.orig/imtest/Makefile.in cyrus-imapd-2.3.16/imtest/Makefile.in
--- cyrus-imapd-2.3.16.orig/imtest/Makefile.in 2008-03-25 03:55:59.000000000 +0900
+++ cyrus-imapd-2.3.16/imtest/Makefile.in 2010-02-27 14:22:35.965224943 +0900
@@ -58,7 +58,7 @@
DEPLIBS = ../lib/libcyrus.a ../lib/libcyrus_min.a @DEPLIBS@
CFLAGS = @CFLAGS@
-LDFLAGS = @LDFLAGS@ @COM_ERR_LDFLAGS@
+LDFLAGS = $(CFLAGS) @LDFLAGS@ @COM_ERR_LDFLAGS@
SHELL = /bin/sh
MAKEDEPEND = @MAKEDEPEND@
diff -ur cyrus-imapd-2.3.16.orig/lib/Makefile.in cyrus-imapd-2.3.16/lib/Makefile.in
--- cyrus-imapd-2.3.16.orig/lib/Makefile.in 2009-11-20 06:52:55.000000000 +0900
+++ cyrus-imapd-2.3.16/lib/Makefile.in 2010-02-27 14:23:04.614926179 +0900
@@ -64,7 +64,7 @@
MAKEDEPEND_CFLAGS = @CFLAGS@
CFLAGS = @CFLAGS@ @PERL_CCCDLFLAGS@
-LDFLAGS = @LDFLAGS@
+LDFLAGS = $(CFLAGS) @LDFLAGS@
SHELL = /bin/sh
MAKEDEPEND = @MAKEDEPEND@
diff -ur cyrus-imapd-2.3.16.orig/master/Makefile.in cyrus-imapd-2.3.16/master/Makefile.in
--- cyrus-imapd-2.3.16.orig/master/Makefile.in 2008-03-25 02:47:41.000000000 +0900
+++ cyrus-imapd-2.3.16/master/Makefile.in 2010-02-27 14:23:31.790663676 +0900
@@ -57,7 +57,7 @@
DEPLIBS = @DEPLIBS@
CFLAGS = @CFLAGS@
-LDFLAGS = @LDFLAGS@ @COM_ERR_LDFLAGS@
+LDFLAGS = $(CFLAGS) @LDFLAGS@ @COM_ERR_LDFLAGS@
LIBS = ../lib/libcyrus_min.a @LIB_UCDSNMP@ @LIBS@ @COM_ERR_LIBS@
SHELL = /bin/sh
diff -ur cyrus-imapd-2.3.16.orig/netnews/Makefile.in cyrus-imapd-2.3.16/netnews/Makefile.in
--- cyrus-imapd-2.3.16.orig/netnews/Makefile.in 2008-03-25 04:06:32.000000000 +0900
+++ cyrus-imapd-2.3.16/netnews/Makefile.in 2010-02-27 14:23:57.237417622 +0900
@@ -56,7 +56,7 @@
DEPLIBS = ../lib/libcyrus.a ../lib/libcyrus_min.a @DEPLIBS@
CFLAGS = @CFLAGS@
-LDFLAGS = @LDFLAGS@
+LDFLAGS = $(CFLAGS) @LDFLAGS@
SHELL = /bin/sh
MAKEDEPEND = @MAKEDEPEND@
diff -ur cyrus-imapd-2.3.16.orig/notifyd/Makefile.in cyrus-imapd-2.3.16/notifyd/Makefile.in
--- cyrus-imapd-2.3.16.orig/notifyd/Makefile.in 2008-03-25 04:59:32.000000000 +0900
+++ cyrus-imapd-2.3.16/notifyd/Makefile.in 2010-02-27 14:49:49.000000000 +0900
@@ -57,7 +57,7 @@
DEFS = @DEFS@ @LOCALDEFS@
CPPFLAGS = -I.. -I$(srcdir)/../sieve -I$(srcdir)/../imap -I$(srcdir)/../lib @COM_ERR_CPPFLAGS@ @CPPFLAGS@ @SASLFLAGS@
CFLAGS = @CFLAGS@
-LDFLAGS = @LDFLAGS@
+LDFLAGS = $(CFLAGS) @LDFLAGS@
prefix = @prefix@
exec_prefix = @exec_prefix@
diff -ur cyrus-imapd-2.3.16.orig/perl/imap/Makefile.PL cyrus-imapd-2.3.16/perl/imap/Makefile.PL
--- cyrus-imapd-2.3.16.orig/perl/imap/Makefile.PL 2009-05-06 22:48:04.000000000 +0900
+++ cyrus-imapd-2.3.16/perl/imap/Makefile.PL 2010-02-27 14:25:54.928325943 +0900
@@ -41,11 +41,11 @@
use ExtUtils::MakeMaker;
use Config;
-my $SASL_INC = $ENV{SASL_INC};
-my $SASL_LIB = $ENV{SASL_LIB} || "-lsasl2";
+my $SASL_INC = $ENV{SASL_INC} || "-I/usr/local/include";
+my $SASL_LIB = $ENV{SASL_LIB} || "-L/usr/local/lib -R/usr/local/lib -lsasl2";
-my $OPENSSL_INC = $ENV{OPENSSL_INC};
-my $OPENSSL_LIB = $ENV{OPENSSL_LIB};
+my $OPENSSL_INC = $ENV{OPENSSL_INC} || "-I/usr/sfw/include";
+my $OPENSSL_LIB = $ENV{OPENSSL_LIB} || "-L/usr/sfw/lib -R/usr/sfw/lib";
my $BDB_INC = $ENV{BDB_INC};
my $BDB_LIB = $ENV{BDB_LIB};
diff -ur cyrus-imapd-2.3.16.orig/perl/sieve/managesieve/Makefile.PL cyrus-imapd-2.3.16/perl/sieve/managesieve/Makefile.PL
--- cyrus-imapd-2.3.16.orig/perl/sieve/managesieve/Makefile.PL 2009-05-06 22:48:04.000000000 +0900
+++ cyrus-imapd-2.3.16/perl/sieve/managesieve/Makefile.PL 2010-02-27 14:27:30.272192536 +0900
@@ -43,10 +43,10 @@
use ExtUtils::MakeMaker;
use Config;
-my $SASL_INC = $ENV{SASL_INC};
-my $SASL_LIB = $ENV{SASL_LIB} || "-lsasl2";
-my $OPENSSL_INC = $ENV{OPENSSL_INC};
-my $OPENSSL_LIB = $ENV{OPENSSL_LIB};
+my $SASL_INC = $ENV{SASL_INC} || "-I/usr/local/include";
+my $SASL_LIB = $ENV{SASL_LIB} || "-L/usr/local/lib -R/usr/local/lib -lsasl2";
+my $OPENSSL_INC = $ENV{OPENSSL_INC} || "-I/usr/sfw/include";
+my $OPENSSL_LIB = $ENV{OPENSSL_LIB} || "-L/usr/sfw/lib -R/usr/sfw/lib";
my $BDB_INC = $ENV{BDB_INC};
my $BDB_LIB = $ENV{BDB_LIB};
diff -ur cyrus-imapd-2.3.16.orig/ptclient/Makefile.in cyrus-imapd-2.3.16/ptclient/Makefile.in
--- cyrus-imapd-2.3.16.orig/ptclient/Makefile.in 2008-03-25 03:34:22.000000000 +0900
+++ cyrus-imapd-2.3.16/ptclient/Makefile.in 2010-02-27 14:28:14.689349480 +0900
@@ -68,7 +68,7 @@
LDAP_LDFLAGS=@LDAP_LDFLAGS@
CFLAGS = @CFLAGS@
-LDFLAGS = @LDFLAGS@
+LDFLAGS = $(CFLAGS) @LDFLAGS@
SHELL = /bin/sh
MAKEDEPEND = @MAKEDEPEND@
diff -ur cyrus-imapd-2.3.16.orig/sieve/Makefile.in cyrus-imapd-2.3.16/sieve/Makefile.in
--- cyrus-imapd-2.3.16.orig/sieve/Makefile.in 2008-07-11 01:37:20.000000000 +0900
+++ cyrus-imapd-2.3.16/sieve/Makefile.in 2010-02-27 14:28:47.459126775 +0900
@@ -61,7 +61,7 @@
CPPFLAGS = -I.. -I$(srcdir)/../lib @COM_ERR_CPPFLAGS@ @CPPFLAGS@ @SASLFLAGS@
MAKEDEPEND_CFLAGS = @CFLAGS@
CFLAGS = @CFLAGS@ @PERL_CCCDLFLAGS@
-LDFLAGS = @LDFLAGS@
+LDFLAGS = $(CFLAGS) @LDFLAGS@
MAKEDEPEND = @MAKEDEPEND@
diff -ur cyrus-imapd-2.3.16.orig/timsieved/Makefile.in cyrus-imapd-2.3.16/timsieved/Makefile.in
--- cyrus-imapd-2.3.16.orig/timsieved/Makefile.in 2008-03-25 05:20:57.000000000 +0900
+++ cyrus-imapd-2.3.16/timsieved/Makefile.in 2010-02-27 14:29:18.557719661 +0900
@@ -57,7 +57,7 @@
DEFS = @DEFS@ @LOCALDEFS@
CPPFLAGS = -I.. -I$(srcdir)/../sieve -I$(srcdir)/../imap -I$(srcdir)/../lib @COM_ERR_CPPFLAGS@ @CPPFLAGS@ @SASLFLAGS@
CFLAGS = @CFLAGS@
-LDFLAGS = @LDFLAGS@
+LDFLAGS = $(CFLAGS) @LDFLAGS@
prefix = @prefix@
exec_prefix = @exec_prefix@
64bit用にconfigureスクリプトを一部変更したものをconfigure.64とし ます。
--- configure 2009-09-10 10:02:07.927049974 +0900
+++ configure.64 2009-09-10 09:26:08.454143826 +0900
@@ -15305,7 +15305,7 @@
;;
*) OPENSSL_INC="-I${with_openssl}/include"
- OPENSSL_LIBPATH="${with_openssl}/lib"
+ OPENSSL_LIBPATH="${with_openssl}/lib/64"
OPENSSL_LIB="-L${OPENSSL_LIBPATH}"
CPPFLAGS="${CPPFLAGS} ${OPENSSL_INC}"
32bit用はconfigureをそのままコピーします。
% cp configure configure.32
setup.sh
#!/bin/sh
if [ $# -eq 1 ]; then
. ../setup-pre.sh $1
else
. ../setup-pre.sh
fi
if [ "$ISA" = "sparcv9" -o "$ISA" = "amd64" ]; then
cp configure.64 configure
else
cp configure.32 configure
fi
if [ "$bdbinc" = "/usr/include" ]; then
bdbinc="/usr/local/include"
fi
./configure $CONFDIRS \
--sysconfdir=/etc/sasl \
--mandir=/usr/local/share/man \
--enable-idled \
--enable-murder \
--enable-replication \
--enable-listext \
--with-zlib=$zlibpath \
--with-cyrus-prefix=/usr/local/cyrus \
--with-cyrus-user=cyrus \
--with-cyrus-group=cyrus \
--with-lock=fcntl \
--with-ldap=$ldappath \
--with-krbimpl=$gss_impl \
--with-openssl=$sslpath \
--with-sasl=$saslpath \
--with-bdb-libdir=$bdblib \
--with-bdb-incdir=$bdbinc \
--with-libwrap=yes \
--with-snmp=no \
--with-syslogfacility=LOCAL7
setup.shを実行します。
% ./setup.sh [sparcv9|sparcv8plus|i386|amd64]
makeします。
% gmake
64bitではperlモジュールの一部でコンパイルに失敗しますが、Makefile 内のgccに64bitオプションを追加すればコンパイルできます。
% vi perl/sieve/managesieve/Makefile - CC= gcc + CC= gcc -m64 - LD= gcc + LD= gcc -m64 - gcc -B/usr/ccs/bin/ -E -c $(PASTHRU_INC) $(INC) \ + gcc -m64 -B/usr/ccs/bin/ -E -c $(PASTHRU_INC) $(INC) \
インストールします。
# gmake install
一部のスクリプトのコピーとISAに応じたディレクトリの移動を行うため、 以下のスクリプトを実行します。
install.sh
#!/bin/sh
if [ $# -eq 1 ]; then
. ../setup-pre.sh $1
else
. ../setup-pre.sh
fi
UBIN="imtest lmtptest mupdatetest nntptest pop3test sivtest smtptest synctest"
CBIN="arbitron chk_cyrus ctl_cyrusdb ctl_deliver ctl_mboxlist
cvt_cyrusdb cyr_dbtool cyr_df cyr_expire cyr_synclog cyrdump deliver fud
idled imapd ipurge lmtpd lmtpproxyd make_md5 make_sha1 master mbexamine
mbpath mupdate notifyd pop3d pop3proxyd proxyd ptdump ptexpire ptloader
quota reconstruct sievec sieved smmapd squatter sync_client sync_reset
sync_server timsieved tls_prune unexpunge"
cp tools/mkimap /usr/local/cyrus/bin
cp tools/masssievec /usr/local/cyrus/bin
cd /usr/local/bin
for i in $UBIN
do
mv $i $ISA/
done
cd /usr/local/cyrus/bin
for i in $CBIN
do
mv $i $ISA/
done
# ./install.sh [sparcv9|sparcv8plus|i386|amd64]
ISA自動起動リンクを作るために、以下のスクリプトを実行します。
#!/bin/sh
#
BINPROG="imtest lmtptest mupdatetest nntptest pop3test sivtest smtptest synctest"
SBINPROG="arbitron chk_cyrus ctl_cyrusdb ctl_deliver ctl_mboxlist
cvt_cyrusdb cyr_dbtool cyr_expire cyr_synclog cyrdump deliver fud idled
imapd ipurge lmtpd lmtpproxyd make_md5 make_sha1 master mbexamine mbpath
mupdate notifyd pop3d pop3proxyd proxyd ptdump ptexpire ptloader quota
reconstruct sievec sieved smmapd squatter sync_client sync_reset
sync_server timsieved tls_prune unexpunge"
SBINDIR="/usr/local/cyrus/bin"
if [ "${SBINPROG}" != "" ]; then
cd /usr/local/sbin
for prog in ${SBINPROG}
do
rm -f $prog
ln /usr/lib/isaexec $prog
echo $prog
done
fi
if [ "${BINPROG}" != "" ]; then
cd /usr/local/bin
for prog in ${BINPROG}
do
rm -f $prog
ln /usr/lib/isaexec $prog
echo $prog
done
fi
/etc/services
+ imaps 993/tcp # imap4 protocol over TLS/SSL + imaps 993/udp + pop3s 995/tcp spop3 # pop3 protocol over TLS/SSL + pop3s 995/udp spop3
/etc/sasl/cyrus.conf
# standard standalone server implementation
START {
# do not delete this entry!
recover cmd="ctl_cyrusdb -r"
# this is only necessary if using idled for IMAP IDLE
# idled cmd="idled"
}
# UNIX sockets start with a slash and are put into /var/imap/socket
SERVICES {
# add or remove based on preferences
imap cmd="imapd" listen="imap" prefork=0
imaps cmd="imapd -s" listen="imaps" prefork=0
pop3 cmd="pop3d" listen="pop3" prefork=0
pop3s cmd="pop3d -s" listen="pop3s" prefork=0
sieve cmd="timsieved" listen="sieve" prefork=0
# these are only necessary if receiving/exporting usenet via NNTP
# nntp cmd="nntpd" listen="nntp" prefork=0
# nntps cmd="nntpd -s" listen="nntps" prefork=0
# at least one LMTP is required for delivery
# lmtp cmd="lmtpd" listen="lmtp" prefork=0
lmtpunix cmd="lmtpd" listen="/var/imap/socket/lmtp" prefork=0
# this is required if using notifications
# notify cmd="notifyd" listen="/var/imap/socket/notify"
proto="udp" prefork=1
}
EVENTS {
# this is required
checkpoint cmd="ctl_cyrusdb -c" period=30
# this is only necessary if using duplicate delivery suppression,
# Sieve or NNTP
delprune cmd="cyr_expire -E 3" at=0400
# this is only necessary if caching TLS sessions
tlsprune cmd="tls_prune" at=0400
}
/etc/sasl/imapd.conf
admins: cyrusadmin configdirectory: /var/imap partition-default: /var/spool/imap sasl_pwcheck_method: saslauthd #sasl_pwcheck_method: auxprop sasl_auxprop_plugin: sasldb sasl_ldapdb_uri: ldap://127.0.0.1 unixhierarchysep: yes sievedir: /var/imap/sieve sieveusehomedir: true tls_ca_path: /usr/local/etc/cert tls_ca_file: /usr/local/etc/cert/cacert.pem tls_cert_file: /etc/certs/server.pem tls_key_file: /etc/certs/server.key
manifest: cyrus-mail.xml
<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM
"/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<!--
Service manifest for the Cyrus IMAP/POP mail service.
-->
<service_bundle type='manifest' name='cyrus-mail'>
<service
name='application/cyrus-mail'
type='service'
version='1'>
<create_default_instance enabled='false' />
<single_instance />
<dependency
name='fs-local'
grouping='require_all'
restart_on='none'
type='service'>
<service_fmri value='svc:/system/filesystem/local' />
</dependency>
<dependency
name='network-service'
grouping='require_all'
restart_on='none'
type='service'>
<service_fmri value='svc:/network/service' />
</dependency>
<dependency name='config_data'
grouping='require_all'
restart_on='restart'
type='path'>
<service_fmri
value='file://localhost/etc/sasl/cyrus.conf' />
</dependency>
<exec_method
type='method'
name='start'
exec='/lib/svc/method/cyrus-mail %m'
timeout_seconds='-1'>
</exec_method>
<exec_method
type='method'
name='stop'
exec='/lib/svc/method/cyrus-mail %m'
timeout_seconds='-1'>
</exec_method>
<exec_method
type='method'
name='restart'
exec='/lib/svc/method/cyrus-mail restart'
timeout_seconds='-1'>
</exec_method>
<template>
<common_name>
<loctext xml:lang='C'>
master, Cyrus mail server control process.
</loctext>
</common_name>
<documentation>
<manpage title='master' section='1M'
manpath='/usr/local/share/man' />
<doc_link name='Project Cyrus'
uri='http://cyrusimap.web.cmu.edu/' />
</documentation>
</template>
</service>
</service_bundle>
method: cyrus-mail
#!/sbin/sh
#
# Cyrus IMAP/POP Mail Server
#
. /lib/svc/share/smf_include.sh
result=${SMF_EXIT_OK}
method="$1"
SMF_FMRI="svc:/application/cyrus-mail"
server="/usr/local/cyrus/bin/master -d"
I=`/usr/bin/basename $0`
RUNDIR=/var/run
PIDFILE=$RUNDIR/cyrus-master.pid
case "$method" in
'start')
if [ ${result} = ${SMF_EXIT_OK} ]; then
echo "$I: Executing: ${server}"
${server}
result=$?
fi
;;
'stop')
#smf_kill_contract ${contract} TERM 1
/usr/bin/kill `cat ${PIDFILE}`
[ $? -ne 0 ] && exit 1
;;
*)
echo "Usage: $I [stop|start]" >&2
exit 1
;;
esac
exit ${result}
manifestとmethodを登録します。
# cp cyrus-mail /lib/svc/method/ # chown root:bin /lib/svc/method/cyrus-mail # chmod 555 /lib/svc/method/cyrus-mail # cp cyrus-mail.xml /var/svc/manifest/application/ # chown root:sys /var/svc/manifest/application/cyrus-mail.xml # chmod 444 /var/svc/manifest/application/cyrus-mail.xml # /usr/sbin/svccfg validate /var/svc/manifest/application/cyrus-mail.xml # /usr/sbin/svccfg -v import /var/svc/manifest/application/cyrus-mail.xml
ユーザ、グループを作成します。
# groupadd -g 60 cyrus # useradd -u 60 -g 60 cyrus
ディレクトリを作成します。
# /usr/local/cyrus/bin/mkimap # chown -R cyrus:cyrus /var/imap # chown -R cyrus:cyrus /var/spool/imap # chmod 750 /var/imap # chmod 750 /var/spool/imap
管理用ユーザを登録します。
# /usr/local/sbin/saslpasswd2 -c cyrusadmin Password: ******* Again (for verification): ******
管理ユーザがsasldbに登録されたか確認します。
# /usr/local/sbin/sasldblistusers2 cyrusadmin@imapserver: userPassword
saslauthdが有効か確認します。
# svcs saslauthd STATE STIME FMRI online 3月_02 svc:/network/security/saslauthd:default
サービスを有効化します。
# svcadm enable applicaition/cyrus-mail
ユーザのメールボックスを作成します。
# cyradm --user cyrusadmin localhost Password: localhost> cm user/hiraga
opensslで確認してみます。
% openssl s_client -connect imap.next-hop.net:993 -state CONNECTED(00000004) ...<省略> * OK [CAPABILITY IMAP4 IMAP4rev1 LITERAL+ ID AUTH=NTLM AUTH=PLAIN AUTH=DIGEST-MD5 AUTH=LOGIN AUTH=GSSAPI AUTH=CRAM-MD5 SASL-IR COMPRESS=DEFLATE] imap Cyrus IMAP v2.3.16 server ready