以下のようなスクリプトを用意します。
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