以下のようなスクリプトを用意します。
setup.sh
#!/bin/sh
if [ $# -eq 1 ]; then
. ../../setup-pre.sh $1
else
. ../../setup-pre.sh
fi
CPPFLAGS="-I/usr/local/include/libiconv $CPPFLAGS"; export CPPFLAGS
LDFLAGS="-L/usr/local/lib/libiconv$LIBISA -R/usr/local/lib/libiconv$LIBISA $LDFLAGS"; export LDFLAGS
LIBS="-liconv"; export LIBS
CC=gcc; export CC
PATH=$krb5path/bin/$ISA:$PATH; export PATH
case "$ISA" in
"sparcv9"|"amd64")
pampath=/usr/local/lib/security/$ISA
if [ "$CC" = "gcc" ]; then
CFLAGS="-O -m64"; export CFLAGS
CXXFLAGS="$CFLAGS"; export CXXFLAGS
fi
;;
*)
pampath=/usr/local/lib/security
if [ "$CC" = "gcc" ]; then
CFLAGS="-O -m32"; export CFLAGS
CXXFLAGS="$CFLAGS"; export CXXFLAGS
fi
;;
esac
case "`uname -r`" in
"5.10")
OSDEP=--with-acl-support
;;
"5.9")
OSDEP=--without-libmsrpc
;;
"5.8")
OSDEP=--without-libmsrpc
;;
esac
./configure \
--prefix=/usr/local \
--bindir=/usr/local/bin/$ISA \
--sbindir=/usr/local/sbin/$ISA \
--libdir=/usr/local/lib$LIBISA \
--localstatedir=/var/samba \
--mandir=/usr/local/share/man \
--with-swatdir=/usr/local/lib/samba/swat \
--with-privatedir=/etc/samba/private \
--with-lockdir=/var/samba/locks \
--with-piddir=/var/run \
--with-configdir=/etc/samba $OSDEP \
--with-ldap \
--with-ads \
--with-krb5=/usr/local \
--with-modulesdir=/usr/local/lib/samba \
--with-pam \
--with-pammodulesdir=$pampath \
--with-dnsupdate
sourceディレクトリでsetup.shを実行します。
% ./setup.sh [ sparcv8plus | sparcv9 | i386 | amd64 ]
64bit版の場合はできあがったsource/include/config.hを修正します。
- #define HAVE_LSTAT64 Whether lstat64() is available + #define HAVE_LSTAT64 1 - /* #undef HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG */ + #define HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG 1
AMD64の場合はさらにMakefileを修正します。
% vi source/Makefile - LDSHFLAGS=-G -L/usr/local/kerberos/lib/64 ... + LDSHFLAGS=-shared -L/usr/local/kerberos/lib/64 ... - WINBIND_NSS_LDSHFLAGS=-G -L/usr/local/kerberos/lib/64 ... + WINBIND_NSS_LDSHFLAGS=-shared -L/usr/local/kerberos/lib/64 ...
makeします。
% gmake % gmake bin/ad.so % gmake bin/rid.so # gmake install
# cp nsswitch/libnss_winbind.so /usr/lib/{sparcv9,amd64}/nss_winbind.so.1
# cp nsswitch/libnss_wins.so /usr/lib/{sparcv9,amd64}/nss_wins.so.1
# cp bin/ad.so /usr/local/lib/samba/idmap/64/ad.so
# cp bin/rid.so /usr/local/lib/samba/idmap/64/rid.so
# cp nsswitch/libnss_winbind.so /usr/lib/nss_winbind.so.1 # cp nsswitch/libnss_wins.so /usr/lib/nss_wins.so.1 # cp bin/ad.so /usr/local/lib/samba/idmap/ad.so # cp bin/rid.so /usr/local/lib/samba/idmap/rid.so
ISA自動起動リンクを作るために、以下のスクリプトを実行します。
#!/bin/sh
#
BINPROG="findsmb smbtar ldbrename ldbmodify ldbdel ldbadd ldbsearch
ldbedit eventlogadm smbcquotas sharesec ntlm_auth profiles smbcacls
rpcclient smbpasswd tdbtool tdbdump pdbedit nmblookup tdbbackup smbtree
smbcontrol smbget smbstatus testparm smbspool net smbclient wbinfo"
SBINPROG="winbindd swat nmbd smbd"
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
manifest: samba33.xml
<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM
"/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<!--
Copyright 2007 Sun Microsystems, Inc. All rights reserved.
Use is subject to license terms.
#ident "@(#)samba.xml 1.1 07/05/23 SMI"
NOTE: This service manifest is not editable; its contents will
be overwritten by package or patch operations, including
operating system upgrade. Make customizations in a different
file.
-->
<service_bundle type='manifest' name='samba33'>
<service name='network/samba33' type='service' version='1'>
<create_default_instance enabled='false' />
<single_instance/>
<dependency name='net-loopback' grouping='require_any'
restart_on='none' type='service'>
<service_fmri value='svc:/network/loopback' />
</dependency>
<dependency name='net-service' grouping='require_all'
restart_on='none' type='service'>
<service_fmri value='svc:/network/service'/>
</dependency>
<dependency name='net-physical' grouping='require_all'
restart_on='none' type='service'>
<service_fmri value='svc:/network/physical' />
</dependency>
<dependency name='filesystem-local' grouping='require_all'
restart_on='none' type='service'>
<service_fmri value='svc:/system/filesystem/local' />
</dependency>
<dependency
name='config_data'
grouping='require_all'
restart_on='restart'
type='path'>
<service_fmri value='file:///etc/samba/smb.conf' />
</dependency>
<exec_method type='method' name='start'
exec='/lib/svc/method/samba start'
timeout_seconds='170' />
<exec_method type='method' name='stop'
exec='/lib/svc/method/samba stop'
timeout_seconds='60' />
<stability value='Unstable' />
<template>
<common_name>
<loctext xml:lang='C'>
SMB file server
</loctext>
</common_name>
<documentation>
<manpage title='smbd' section='1m'
manpath='/usr/local/share/man' />
<manpage title='smb.conf' section='4'
manpath='/usr/local/share/man' />
</documentation>
</template>
</service>
</service_bundle>
method: samba
#!/sbin/sh
#
# Samba
#
. /lib/svc/share/smf_include.sh
result=${SMF_EXIT_OK}
# Read command line arguments
method="$1"
SMF_FMRI="svc:/network/samba33"
server="/usr/local/sbin/smbd"
server2="/usr/local/sbin/nmbd"
I=`/usr/bin/basename $0`
RUNDIR=/var/run
PIDFILE=$RUNDIR/smbd.pid
PIDFILE2=$RUNDIR/nmbd.pid
case "$method" in
'start')
cmdopts="-D"
if [ ${result} = ${SMF_EXIT_OK} ]; then
echo "$I: Executing: ${server} ${cmdopts}"
${server} ${cmdopts}
result=$?
echo "$I: Executing: ${server2} ${cmdopts}"
${server2} ${cmdopts}
fi
;;
'stop')
#smf_kill_contract ${contract} TERM 1
/usr/bin/kill `cat ${PIDFILE}`
[ $? -ne 0 ] && exit 1
/usr/bin/kill `cat ${PIDFILE2}`
[ $? -ne 0 ] && exit 1
;;
*)
echo "Usage: $I [stop|start]" >&2
exit 1
;;
esac
exit ${result}
manifestとmethodを登録します。
# cp samba /lib/svc/method # chown root:bin /lib/svc/method/samba # chmod 555 /lib/svc/method/samba # cp samba33.xml /var/svc/manifest/network # chown root:sys /var/svc/manifest/network/samba33.xml # chmod 444 /var/svc/manifest/network/samba33.xml # /usr/sbin/svccfg validate /var/svc/manifest/network/samba33.xml # /usr/sbin/svccfg -v import /var/svc/manifest/network/samba33.xml
サービスを有効化します。
# svcadm enable svc:/network/samba33