[Samba] ctdb event script 50.samba does not start smbd
steve
steve at steve-ss.com
Fri Aug 15 06:33:21 MDT 2014
On Fri, 2014-08-15 at 14:18 +0200, Davor Vusir wrote:
> 2014-08-15 12:40 GMT+02:00 steve <steve at steve-ss.com>:
> > Ubuntu 14.04. 2 node ctdb in an 4.1.11 AD domain with 4.1.11 member
> > servers on each node. winbindd is present but nss and pam are controlled
> > by sssd. All OK, except that the event script which starts samba is not
> > working.
> >
> > smb.conf
> > [global]
> > workgroup = ALTEA
> > realm = ALTEA.SITE
> > security = ADS
> > kerberos method = secrets and keytab
> > netbios name = SMBCLUSTER
> > clustering = Yes
> > ctdbd socket = /usr/local/var/run/ctdb/ctdbd.socket
>
> 3. Add disable netbios = Yes
>
> > [users]
> > path = /cluster/users
> > read only = No
> >
> > starting ctdbd
> > sudo ctdbd --dbdir=/usr/local/var/lib/ctdb
> > --dbdir-persistent=/usr/local/var/lib/ctdb/persistent
> > --event-script-dir=/usr/local/etc/ctdb/events.d
> > --public-addresses=/usr/local/etc/ctdb/public_addresses
> > --socket=/usr/local/var/run/ctdb/ctdbd.socket --logfile=/var/log/syslog
> >
> > Here is the service script copied from the samba wiki. It is installed
> > chmod + x'd at /etc/init.d/smbd. It works fine manually:
> >
> > #!/bin/sh
> > RUN_MODE="daemons"
> > [ -r /etc/default/samba ] && . /etc/default/samba
> > PIDDIR=/usr/local/samba/var/run
> > NMBDPID=$PIDDIR/nmbd.pid
> > SMBDPID=$PIDDIR/smbd.pid
> > unset TMPDIR
> > test -x /usr/local/samba/sbin/nmbd -a -x /usr/local/samba/sbin/smbd ||
> > exit
> > . /lib/lsb/init-functions
> > case "$1" in
> > start)
> > log_daemon_msg "Starting Samba daemons"
> > install -o root -g root -m 755 -d $PIDDIR
> > NMBD_DISABLED=`testparm -s --parameter-name='disable
> > netbios' 2>/dev/null`
>
> 3. Add disable netbios = Yes to smb.conf
>
> > if [ "$NMBD_DISABLED" != 'Yes' ]; then
> > log_progress_msg "nmbd"
> > if ! start-stop-daemon --start --quiet --oknodo
> > --exec /usr/local/samba/sbin/nmbd -- -D
> > then
> > log_end_msg 1
> > exit 1
> > fi
> > fi
> >
> > if [ "$RUN_MODE" != "inetd" ]; then
> > log_progress_msg "smbd"
> > if ! start-stop-daemon --start --quiet --oknodo
> > --exec /usr/local/samba/sbin/smbd -- -D
> > then
> > log_end_msg 1
> > exit 1
> > fi
> > fi
> >
> > log_end_msg 0
> > ;;
> > stop)
> > log_daemon_msg "Stopping Samba daemons"
> > log_progress_msg "nmbd"
> >
> > start-stop-daemon --stop --quiet --pidfile $NMBDPID
> > sleep 1
> > if [ -f $NMBDPID ] && ! ps h `cat $NMBDPID` > /dev/null
> > then
> > rm -f $NMBDPID
> > fi
> >
> > if [ "$RUN_MODE" != "inetd" ]; then
> > log_progress_msg "smbd"
> > start-stop-daemon --stop --quiet --pidfile
> > $SMBDPID
> > sleep 1
> > if [ -f $SMBDPID ] && ! ps h `cat $SMBDPID`
> >>/dev/null
> > then
> > rm -f $SMBDPID
> > fi
> > fi
> >
> > log_end_msg 0
> >
> > ;;
> >
> > reload)
> > log_daemon_msg "Reloading /usr/local/samba/etc/smb.conf"
> > "smbd only"
> >
> > start-stop-daemon --stop --signal HUP --pidfile $SMBDPID
> >
> > log_end_msg 0
> > ;;
> > restart|force-reload)
> > $0 stop
> > sleep 1
> > $0 start
> > ;;
> > status)
> > status="0"
> > NMBD_DISABLED=`testparm -s --parameter-name='disable
> > netbios' 2>/dev/null`
> > if [ "$NMBD_DISABLED" != "Yes" ]; then
> > status_of_proc -p $NMBDPID
> > /usr/local/samba/sbin/nmbd nmbd || status=$?
> > fi
> > if [ "$RUN_MODE" != "inetd" ]; then
> > status_of_proc -p $SMBDPID
> > /usr/local/samba/sbin/smbd smbd || status=$?
> > fi
> > if [ "$NMBD_DISABLED" = "Yes" -a "$RUN_MODE" = "inetd"
> > ];
> > then
> > status="4"
> > fi
> > exit $status
> > ;;
> > *)
> > echo "Usage: /etc/init.d/smbd{start|stop|reload|restart|
> > force-reload|status}"
> > exit 1
> > ;;
> > esac
> > exit 0
> >
> > Here is the event script. We got as far as changing samba to smbd for
> > debian as we're on Ubuntu.
> >
> > /usr/local/etc/ctdb/events.d/50.samba (marked executable)
> >
> > #!/bin/sh
> > # ctdb event script for Samba
> >
> > [ -n "$CTDB_BASE" ] || \
> > export CTDB_BASE=$(cd -P $(dirname "$0") ; dirname "$PWD")
> >
> > . $CTDB_BASE/functions
> >
> > detect_init_style
> >
> > case $CTDB_INIT_STYLE in
> > suse)
> > CTDB_SERVICE_SMB=${CTDB_SERVICE_SMB:-smb}
> > CTDB_SERVICE_NMB=${CTDB_SERVICE_NMB:-nmb}
> > ;;
> > debian)
> > CTDB_SERVICE_SMB=${CTDB_SERVICE_SMB:-smbd} ##changed to smbd here
> > #CTDB_SERVICE_NMB=${CTDB_SERVICE_NMB:-""}
> > ;;
> > *)
> > # Use redhat style as default:
> > CTDB_SERVICE_SMB=${CTDB_SERVICE_SMB:-smb}
> > CTDB_SERVICE_NMB=${CTDB_SERVICE_NMB:-""}
> > ;;
> > esac
> >
> > service_name="samba"
> >
> > loadconfig
> >
> > ctdb_setup_service_state_dir
> >
> > service_start ()
> > {
> > # make sure samba is not already started
> > service "$CTDB_SERVICE_SMB" stop > /dev/null 2>&1
>
> Is /etc/init.d/smbd a service start script?
Yes.
>
> > if [ -n "$CTDB_SERVICE_NMB" ] ; then
> > service "$CTDB_SERVICE_NMB" stop > /dev/null 2>&1
> > fi
> > killall -0 -q smbd && {
> > sleep 1
> > # make absolutely sure samba is dead
> > killall -q -9 smbd
> > }
>
> --- comment this block ---
> > killall -0 -q nmbd && {
> > sleep 1
> > # make absolutely sure samba is dead
> > killall -q -9 nmbd
> > }
> ---
>
> >
> > # start Samba service. Start it reniced, as under very heavy load
> > # the number of smbd processes will mean that it leaves few cycles
> > # for anything else
> > net serverid wipe
> >
> > if [ -n "$CTDB_SERVICE_NMB" ] ; then
> > nice_service "$CTDB_SERVICE_NMB" start || die "Failed to start nmbd"
> > fi
> >
> > nice_service "$CTDB_SERVICE_SMB" start || die "Failed to start
> > samba"
> > }
> >
> > service_stop ()
> > {
> > service "$CTDB_SERVICE_SMB" stop
> > if [ -n "$CTDB_SERVICE_NMB" ] ; then
> > service "$CTDB_SERVICE_NMB" stop
> > fi
> > }
> >
> > ######################################################################
> > # Show the testparm output using a cached smb.conf to avoid delays due
> > # to registry access.
> >
> > smbconf_cache="$service_state_dir/smb.conf.cache"
> >
> > testparm_foreground_update ()
> > {
> > _timeout="$1"
> >
> > if ! _out=$(timeout $_timeout testparm -v -s 2>/dev/null) ; then
> > if [ -f "$smbconf_cache" ] ; then
> > echo "WARNING: smb.conf cache update failed - using old cache file"
> > return 1
> > else
> > die "ERROR: smb.conf cache create failed"
> > fi
> > fi
> >
> > _tmpfile="${smbconf_cache}.$$"
> > # Patterns to exclude...
> > pat='^[[:space:]]+(registry[[:space:]]+shares|include|copy|
> > winbind[[:space:]]+separator)[[:space:]]+='
> > echo "$_out" | grep -Ev "$pat" >"$_tmpfile"
> > mv "$_tmpfile" "$smbconf_cache" # atomic
> >
> > return 0
> > }
> >
> > testparm_background_update ()
> > {
> > _timeout="$1"
> >
> > testparm_foreground_update $_timeout >/dev/null 2>&1 </dev/null &
> > }
> >
> > testparm_cat ()
> > {
> > testparm -s "$smbconf_cache" "$@" 2>/dev/null
> > }
> >
> > list_samba_shares ()
> > {
> > testparm_cat |
> > sed -n -e 's@^[[:space:]]*path[[:space:]]*=[[:space:]]@@p' |
> > sed -e 's/"//g'
> > }
> >
> > list_samba_ports ()
> > {
> > testparm_cat --parameter-name="smb ports" |
> > sed -e 's@,@ @g'
> > }
> >
> > ###########################
> >
> > ctdb_start_stop_service
> >
> > is_ctdb_managed_service || exit 0
> >
> > ###########################
> >
> > case "$1" in
> > startup)
> > ctdb_service_start
> > ;;
> >
> > shutdown)
> > ctdb_service_stop
> > ;;
> >
> > monitor)
> > testparm_foreground_update 10
> > ret=$?
> >
> > smb_ports="$CTDB_SAMBA_CHECK_PORTS"
> > if [ -z "$smb_ports" ] ; then
> > smb_ports=$(list_samba_ports)
> > [ -n "$smb_ports" ] || die "Failed to set smb ports"
> > fi
> > ctdb_check_tcp_ports $smb_ports || exit $?
> >
> > if [ "$CTDB_SAMBA_SKIP_SHARE_CHECK" != "yes" ] ; then
> > list_samba_shares | ctdb_check_directories || exit $?
> > fi
> >
> > if [ $ret -ne 0 ] ; then
> > testparm_background_update 10
> > fi
> > ;;
> >
> > *)
> > ctdb_standard_event_handler "$@"
> > ;;
> > esac
> > exit 0
> >
> > We got as far as changing samba to smbd.
> >
> > 1. smbd is not started on calling ctdbd
> > 2. What is supposed to happen to smbd when we start ctdb
> > 3. What's the best way to stop nmbd starting? (we're in AD)
>
> 3. Add disable netbios = Yes to smb.conf
OK, thanks. That's stopped nmbd. Any ideas on 1 and 2?
Cheers,
Steve
More information about the samba
mailing list