[Samba] ctdb do not start nmbd if serving AD

Ali Bendriss ali.bendriss at gmail.com
Fri Jul 18 03:49:03 MDT 2014


On 07/18/2014 09:26 AM, Rowland Penny wrote:
> On 18/07/14 07:41, steve wrote:
>> ctdb 2.5.3 dual node file server with 4.1.9 serving AD domain
>>
>> Hi
>> We have enabled the script at:
>> /etc/cdb/events.d/50.samba
>> but when we are the enabled node, it starts not only smbd but also nmbd.
>> This doesn't make sense in an AD domain. I've tried disabling nmbd
>> starting under openSUSE's systemd but ctdb overrides that, I've had a
>> look at the script but can't decipher the bit that starts nmbd.
>>
>> Qn: Do we have a 'start smbd' version of 50.samba?
>>
>> Or could any script guru get this to disable nmbd;)
>> Cheers and TIA,
>> Steve
>> Oh, and thanks for an amazing piece of software in ctdb.
>>
>> #!/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:-samba}
>>         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
>>      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
>>      }
>>      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
>>
> OK Steve, on opensuse try this:
>
> Change
>
>      suse)
>          CTDB_SERVICE_SMB=${CTDB_SERVICE_SMB:-smb}
>          CTDB_SERVICE_NMB=${CTDB_SERVICE_NMB:-nmb}
>
> To
>
>      suse)
>          CTDB_SERVICE_SMB=${CTDB_SERVICE_SMB:-smb}
>          #CTDB_SERVICE_NMB=${CTDB_SERVICE_NMB:-nmb}
>
> This should let the script stop any instances of the nmbd deamon that
> are running, but would then wouldn't start nmbd again.
>
> I think that the script would have to be rewritten for any other OS.
>
> Rowland
>

Hello,

Not tested but I think that you may define
CTDB_SERVICE_NMB=""
in ctdbd.conf rather than modifying the event script.

--
Ali


More information about the samba mailing list