--enable-cryptと--enable-lmpasswdを同時に有効にすると矛盾が生じます
のでどちらかにします。
--enable-perlはSolarisにperlの64bitライブラリがないためリンクに失敗
します。よって64bitでperlをコンパイルしてインストールするか有効にし
ないようにします。
Solaris 10 6/06から/usr/include/sys/avl.hが登場してOpenLDAPパッケー
ジのavl.hと衝突し、コンパイルが失敗します。このリリースを使う場合
は-D_AVL_HをCPPFLAGSで定義します。
Ultra SPARC T1/2 内蔵の暗号高速化エンジンを利用できるようにSolaris
Crypto Frameworkを使います。なお、他のプロセッサでもSolaris Crypto
Frameworkを使えば若干の高速化が望めるため、とにかくこれを有効にしま
す。
ソースコードに以下のパッチを適用します。
--- libraries/libldap/tls.c.orig 2008-02-12 08:24:12.000000000 +0900
+++ libraries/libldap/tls.c 2009-03-11 13:43:05.819235000 +0900
@@ -43,6 +43,11 @@
#include <openssl/err.h>
#include <openssl/rand.h>
#include <openssl/safestack.h>
+#ifdef PKCS11ENGINE
+#include <openssl/engine.h>
+ENGINE *e;
+const char *engine_id = "pkcs11";
+#endif /* PKCS11ENGINE */
#elif defined( HAVE_SSL_H )
#include <ssl.h>
#endif
@@ -193,6 +198,29 @@
tls_init_threads();
#endif
+#ifdef PKCS11ENGINE
+ /* Additional code to use of HW accelerators */
+
+ ENGINE_load_builtin_engines();
+
+ e = ENGINE_by_id(engine_id);
+ if(!e){
+ printf("error ENGINE_byid\n");
+ return;
+ }
+ if(!ENGINE_init(e)){
+ printf("error ENGINE_init\n");
+ ENGINE_free(e);
+ return;
+ }
+ if(!ENGINE_set_default_RSA(e)){
+ printf("error ENGINE_set_default_RSA\n");
+ abort();
+ }
+ ENGINE_set_default_DSA(e);
+ ENGINE_set_default_ciphers(e);
+#endif /* PKCS11ENGINE */
+
SSL_load_error_strings();
SSLeay_add_ssl_algorithms();
@@ -535,6 +563,12 @@
SSL_free( p->ssl );
LBER_FREE( sbiod->sbiod_pvt );
sbiod->sbiod_pvt = NULL;
+
+#ifdef PKCS11ENGINE
+ ENGINE_finish(e);
+ ENGINE_free(e);
+#endif /* PKCS11ENGINE */
+
return 0;
}
以下のようなスクリプトを実行します。
#!/bin/sh
if [ $# -eq 1 ]; then
. ../setup-pre.sh $1
else
. ../setup-pre.sh
fi
CPPFLAGS="-D_AVL_H -DPKCS11ENGINE $CPPFLAGS"; export CPPFLAGS
LIBS="-ldb"; export LIBS
./configure $CONFDIRS \
--localstatedir=/var \
--libexecdir=/usr/local/libexec/$ISA \
--mandir=/usr/local/share/man \
--enable-dynamic \
--enable-crypt \
--enable-spasswd \
--enable-modules \
--enable-slp \
--enable-bdb=mod \
--enable-dnssrv=mod \
--enable-hdb=mod \
--enable-ldap=mod \
--enable-meta=mod \
--enable-monitor=mod \
--enable-null=mod \
--enable-passwd=mod \
--enable-relay=mod \
--enable-overlays=mod
% ./setup.sh [sparcv9|sparcv8plus|i386|amd64]
生成されたlibtoolを置き換えます。
% cp /usr/local/bin/$ISA/libtool .
makeしてインストールします。
% gmake depend % gmake # gmake install
ISA自動起動リンクを作るために、以下のスクリプトを実行します。
#!/bin/sh
#
SBINPROG="slapacl slapauth slaptest slappasswd slapindex slapdn slapcat slapadd"
BINPROG="ldapadd ldapcompare ldapwhoami ldappasswd ldapmodrdn ldapdelete ldapmodify ldapsearch"
LIBEXECPROG="slurpd slapd"
if [ "${SBINPROG}" != "" ]; then
cd ${SBINDIR}
for prog in ${SBINPROG}
do
rm -f $prog
ln /usr/lib/isaexec $prog
echo $prog
done
fi
if [ "${BINPROG}" != "" ]; then
cd ${BINDIR}
for prog in ${BINPROG}
do
rm -f $prog
ln /usr/lib/isaexec $prog
echo $prog
done
fi
# groupadd -g 389 ldap # useradd -u 389 -g 389 -d /noexistent -s /bin/false -c "OpenLDAP Server" ldap # mkdir /var/openldap-data # mkdir /etc/openldap # chown ldap:ldap /var/openldap-data # chown ldap:ldap /etc/openldap/slapd.conf # chmod 700 /var/openldap-data # chmod 600 /etc/openldap/slapd.conf
/var/svc/manifest/network/ldap/server.xml
<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM
"/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<!--
$Id: openldap.html,v 1.7 2009/03/11 10:01:00 hiraga Exp $
Service manifest for the OpenLDAP slapd service.
-->
<service_bundle type='manifest' name='slapd'>
<service
name='network/ldap/server'
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='system-log'
grouping='optional_all'
restart_on='none'
type='service'>
<service_fmri value='svc:/system/system-log' />
</dependency>
<dependency name='config_data'
grouping='require_all'
restart_on='restart'
type='path'>
<service_fmri
value='file://localhost/etc/openldap/slapd.conf'
/>
</dependency>
<exec_method
type='method'
name='start'
exec='/lib/svc/method/slapd start'
timeout_seconds='-1'>
</exec_method>
<exec_method
type='method'
name='stop'
exec='/lib/svc/method/slapd stop'
timeout_seconds='-1'>
</exec_method>
<exec_method
type='method'
name='restart'
exec='/lib/svc/method/slapd restart'
timeout_seconds='-1'>
</exec_method>
<template>
<common_name>
<loctext xml:lang='C'>
slapd, OpenLDAP LDAP server.
</loctext>
</common_name>
<documentation>
<manpage title='slapd' section='1M'
manpath='/usr/local/man' />
</documentation>
</template>
</service>
</service_bundle>
/lib/svc/method/slapd
#!/sbin/sh
#
# OpenLDAP LDAP server
# $Id: openldap.html,v 1.7 2009/03/11 10:01:00 hiraga Exp $
#
. /lib/svc/share/smf_include.sh
UID=ldap
GID=ldap
URI="ldapi:/// ldap:/// ldaps:///"
SLAPD=/usr/local/libexec/slapd
CONF=/etc/openldap/slapd.conf
RUNDIR=/var/run/openldap
PIDFILE=$RUNDIR/slapd.pid
case "$1" in
start)
if [ ! -d ${RUNDIR} ]; then
mkdir ${RUNDIR}
fi
if [ -d ${RUNDIR} ]; then
chown ${UID}:${GID} ${RUNDIR}
fi
[ -f "${CONF}" ] && [ -f "${SLAPD}" ] || exit 0
${SLAPD} -f ${CONF} -u ${UID} -g ${GID} -h "${URI}" 2>&1 &
;;
stop)
/usr/bin/pkill slapd
if [ -d ${RUNDIR} ]; then
rmdir ${RUNDIR}
fi
;;
restart)
stop
while /usr/bin/pgrep slapd > /dev/null
do
sleep 5
done
start
;;
*)
echo "Usage: $0 { start | stop }"
exit 1
;;
esac
exit 0
manifestのimport
# chown root:bin /lib/svc/method/slapd # chmod 555 /lib/svc/method/slapd # chown root:sys /var/svc/manifest/network/ldap/server.xml # chmod 444 /var/svc/manifest/network/ldap/server.xml # /usr/sbin/svccfg validate /var/svc/manifest/network/ldap/server.xml # /usr/sbin/svccfg -v import /var/svc/manifest/network/ldap/server.xml
有効化
# svcadm enable svc:/network/ldap/server
#!/sbin/sh
#
UID=ldap
GID=ldap
SLAPD=/usr/local/libexec/slapd
URI="ldap:/// ldaps:///"
RUN=/var/run/openldap
CONF=/etc/openldap/slapd.conf
case "$1" in
start)
if [ ! -d $RUN ]; then
mkdir $RUN
chown ${UID}:${GID} $RUN
fi
[ -f "$CONF" ] && [ -f "$SLAPD" ] || exit 0
$SLAPD -f $CONF -h "$URI" 2>&1 &
;;
stop)
[ -f "$SLAPD" ] && pkill slapd
;;
*)
echo "Usage: $0 { start | stop }"
exit 1
;;
esac
exit 0