ソースコードの中で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