Samba 3.3.12

以下のようなスクリプトを用意します。

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

64bit版

# 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

32bit版

# 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

Sambaの起動

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

hiraga@next-hop.net
Last modified: $Date: 2010/03/12 06:07:23 $
Apache