Difference between revisions of "Managing the Samba AD DC Service Using an Init Script"

(Removed Upstart related content (moved to a page about Upstart), removed init script for a domain member (not required on this page. It will get it's own page later).)
Line 131: Line 131:
  
 
   $ update-rc.d samba-ad-dc defaults
 
   $ update-rc.d samba-ad-dc defaults
 
== Upstart Systems (such as Ubuntu) ==
 
 
Ubuntu uses the upstart system. To retrieve the upstart config file, run:
 
 
  $ wget -O /etc/init/samba-ad-dc.conf 'http://anonscm.debian.org/gitweb/?p=pkg-samba/samba.git;a=blob_plain;f=debian/samba-ad-dc.upstart;hb=HEAD'
 
 
The following init script will start a source installed NON AD samba server. i.e 'classic' mode:
 
 
#!/bin/sh
 
 
### BEGIN INIT INFO
 
# Provides:          samba
 
# Required-Start:    $network $local_fs $remote_fs
 
# Required-Stop:    $network $local_fs $remote_fs
 
# Default-Start:    2 3 4 5
 
# Default-Stop:      0 1 6
 
# Should-Start:      slapd
 
# Should-Stop:      slapd
 
# Short-Description: start Samba daemons (nmbd and smbd)
 
### END INIT INFO
 
 
# Description of this script:
 
#                   
 
# This script comes initially from a Debian Squeeze machine on
 
# which samba 3.x was installed with "apt-get install samba". The script
 
# was modified/adjusted so it points to the correct paths of a default
 
# samba4 installation (/usr/local/samba).
 
#
 
# Installation instructions:
 
# (1) copy the content of this script into your clipboard or download it
 
# (2) save the content into /etc/init.d/samba of your samba4 host.
 
# (3) execute "chmod +x /etc/init.d/samba" to have the script executable
 
# (4) execute "update-rc.d samba defaults" to install auto-start function.
 
#    smbd+nmbd will automatically being started after earch system start/reboot
 
#
 
# Modified by local@#samba~irc.freenode.net at 06th March 2013
 
# The script was successfully tested on Debian GNU/Linux Squeeze+Wheezy
 
 
# Defaults
 
RUN_MODE="daemons"
 
 
# Reads config file (will override defaults above)
 
[ -r /etc/default/samba ] && . /etc/default/samba
 
 
PIDDIR=/usr/local/samba/var/run
 
NMBDPID=$PIDDIR/nmbd.pid
 
SMBDPID=$PIDDIR/smbd.pid
 
 
# clear conflicting settings from the environment
 
unset TMPDIR
 
 
# See if the daemons are there
 
test -x /usr/local/samba/sbin/nmbd -a -x /usr/local/samba/sbin/smbd || exit 0
 
 
. /lib/lsb/init-functions
 
 
case "$1" in
 
        start)
 
                log_daemon_msg "Starting Samba daemons"
 
                # Make sure we have our PIDDIR, even if it's on a tmpfs
 
                install -o root -g root -m 755 -d $PIDDIR
 
 
                NMBD_DISABLED=`testparm -s --parameter-name='disable netbios' 2>/dev/null`
 
                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
 
                # Wait a little and remove stale PID file
 
                sleep 1
 
                if [ -f $NMBDPID ] && ! ps h `cat $NMBDPID` > /dev/null
 
                then
 
                        # Stale PID file (nmbd was succesfully stopped),
 
                        # remove it (should be removed by nmbd itself IMHO.)
 
                        rm -f $NMBDPID
 
                fi
 
 
                if [ "$RUN_MODE" != "inetd" ]; then
 
                        log_progress_msg "smbd"
 
                        start-stop-daemon --stop --quiet --pidfile $SMBDPID
 
                        # Wait a little and remove stale PID file
 
                        sleep 1
 
                        if [ -f $SMBDPID ] && ! ps h `cat $SMBDPID` > /dev/null
 
                        then
 
                                # Stale PID file (nmbd was succesfully stopped),
 
                                # remove it (should be removed by smbd itself IMHO.)
 
                                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/samba {start|stop|reload|restart|force-reload|status}"
 
                exit 1
 
                ;;
 
esac
 
 
exit 0
 

Revision as of 13:58, 8 January 2017

This is a topic which pops every so often -- where are the Init scripts for Samba4? The problem is that init scripts are very distribution specific. The HOWTO states, "Samba4 alpha13 doesn't yet have init scripts included for each platform, but making one for your platform should not be difficult." Well, they may not be rocket science, but not everyone knows how to build a robust startup script and then integrate it with their particular startup infrastructure. This gets even more weird when distributions like Fedora radically overhaul their approach to init. (SysV to "systemd")

The intent of this page is to provide a sample of at least a few init scripts, listed by their distribution family (eg., Debian based systems and Red Hat/Fedora).

Red Hat/Fedora based systems

For SysV style service init scripts, Red Hat puts the init scripts in the /etc/rc.d/init.d directory, and then links to these scripts from the various run level directories (eg, link in /etc/rc3.d/S80samba4 -> ../rc.d/init.d/samba4)

Fedora has gone to a systemd based startup for Init. You can still use SysV style scripts such as this one, and configure the automatic startup of the Samba4 server and different run levels through the "chkconfig" tool.

#!/bin/bash
#
# samba4        This shell script takes care of starting and stopping
#               samba4 daemons.
#
# chkconfig: - 58 74
# description: Samba 4.0 will be the next version of the Samba suite
# and incorporates all the technology found in both the Samba4 alpha
# series and the stable 3.x series. The primary additional features
# over Samba 3.6 are support for the Active Directory logon protocols
# used by Windows 2000 and above.

### BEGIN INIT INFO
# Provides: samba4
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Should-Start: $syslog $named
# Should-Stop: $syslog $named
# Short-Description: start and stop samba4
# Description: Samba 4.0 will be the next version of the Samba suite
# and incorporates all the technology found in both the Samba4 alpha
# series and the stable 3.x series. The primary additional features
# over Samba 3.6 are support for the Active Directory logon protocols
# used by Windows 2000 and above.
### END INIT INFO

# Source function library.
. /etc/init.d/functions


# Source networking configuration.
. /etc/sysconfig/network


prog=samba
prog_dir=/usr/local/samba/sbin/
lockfile=/var/lock/subsys/$prog


start() {
        [ "$NETWORKING" = "no" ] && exit 1
#       [ -x /usr/sbin/ntpd ] || exit 5

                # Start daemons.
                echo -n $"Starting samba4: "
                daemon $prog_dir/$prog -D
        RETVAL=$?
                echo
        [ $RETVAL -eq 0 ] && touch $lockfile
        return $RETVAL
}


stop() {
        [ "$EUID" != "0" ] && exit 4
                echo -n $"Shutting down samba4: "
        killproc $prog_dir/$prog
        RETVAL=$?
                echo
        [ $RETVAL -eq 0 ] && rm -f $lockfile
        return $RETVAL
}


# See how we were called.
case "$1" in
start)
        start
        ;;
stop)
        stop
        ;;
status)
        status $prog
        ;;
restart)
        stop
        start
        ;;
reload)
        echo "Not implemented yet."
        exit 3
        ;;
*)
        echo $"Usage: $0 {start|stop|status|restart|reload}"
        exit 2
esac

Debian Systems

1) Retrieve the init script

To retrieve the Debian init script, run:

  $ wget "http://anonscm.debian.org/gitweb/?p=pkg-samba/samba.git;a=blob_plain;f=debian/samba.samba-ad-dc.init;h=3132d2e367675f822342a5b7bc2e50c046aa3b8f;hb=HEAD" -O /etc/init.d/samba-ad-dc

2) (Optional) Update the paths where Samba is installed

The Debian package assumes that Samba is installed in /usr. If you've installed it in the default location (/usr/local/samba) instead, run:

  $ sed -i 's|/usr/sbin|/usr/local/samba/sbin|g' /etc/init.d/samba-ad-dc

Likewise the Debian package assumes you'll use /etc/samba/smb.conf for the configuration file. If you're using the default location and build run:

  $ sed -i 's|/etc/samba|/usr/local/samba/etc|g' /etc/init.d/samba-ad-dc

Again, the Debian package assumes you'll use /var/run/samba as pid directory. If you're using the default location, run:

  $ sed -i 's|/var/run/samba|/usr/local/samba/var/run|g' /etc/init.d/samba-ad-dc

Last, if you're using the default location for samba-tools, run :

  $ sed -i 's|samba-tool|/usr/local/samba/bin/samba-tool|g' /etc/init.d/samba-ad-dc

3) Make the init script executable

Make the init script executable by running:

  $ chmod 755 /etc/init.d/samba-ad-dc

4) Enable the script at startup

  $ update-rc.d samba-ad-dc defaults