Gunther Hess
2002-Feb-24 05:40 UTC
[Samba] Multiple Instancies of Samba on a single System
Hi out there,
i intend to run multiple Instancies of Samba
on a single, multi-homed, server, with each instance bound
to a specific (logical) interface.
If this works, it would be fine to me.
Mainly for administrative Reasons. (You won't believe,
but from time to time it becomes necessary to restart
some services, but restarting the entire server is a
real mess)
Well here my questions:
- Most important:
Can anyone out there tell me, that this is definitely impossible?
- Most helpful:
Which settings must appear in the Configuration, to split the
working-directories? (locks, logs, private-dir and so on)
- Very interesting:
Has anyone experience with such a configuration?
Thanks in advance
Gunther
--
Dr. Gunther Hess Elmos Semiconductor AG
Tel.: ++49 +231 7549-520 Heinrich Hertz Str. 1
Fax: ++49 +231 7549-109 D-44227 Dortmund
WWW: http://www.elmos.de Opinions are strictly of my own
George Finster
2002-Feb-24 07:06 UTC
[Samba] Multiple Instancies of Samba on a single System
Can anyone out there tell me, that this is definitely impossible? Yes. I have a freebsd machine with two ip addresses (one nic) and have a samba server bound to each address. Which settings must appear in the Configuration, to split the working-directories? (locks, logs, private-dir and so on) I did this in an easier way for me. I installed two versions of samba! (I am a lazy, lazy man. Typing ./configure --prefix=/usr/local/samba-cvs; make ; make install and the editing the smb.conf file seemed much less complicated to me) One under /usr/local/samba-cvs and one just under /usr/local. Has anyone experience with such a configuration? I only set up the second server so I could mess around with having a pdc on my network which would emulate the one at my wife's work for when she brought her laptop home without having to screw up the existing server. It seems to work. _________________________________________________________________ Chat with friends online, try MSN Messenger: http://messenger.msn.com
Gunther Hess
2002-Feb-25 15:54 UTC
[Samba] Solution: Multiple Instancies of Samba on a single System
Hi out there,
i asked the question, how to establish multiple
Samba-instancies on a single system. Well, nobody made objections
that this should work and apparently it really works with the following
setup:
- Compilation (config.status):
(nothing special about it, except that i enforce the existance
of /etc/smb.conf for samba to work properly)
./configure --prefix=/opt/samba-2.2.3a \
--localstatedir=/var/samba --with-configdir=/etc \
--with-automount --with-syslog --with-quotas --with-utmp \
--with-msdfs --with-vfs --with-libsmbclient --with-acl-support
/opt/samba-2.2.3a is a shared, readonly directory on a central
server, while /etc and /var are local, writable directories
on different samba-servers.
- Startup/Setup
- The attached Shell-Script "samba" is my startup/shutdown
script for the servers.
- /etc/smb.conf-<Server> - is the instance-configuration
- <Server> == zerberos is my PDC, which has an alter-Ego
/etc/nmb.conf (/etc/nmb.conf is symlinked to /etc/smb.conf-zerberos)
This is due to the fact, that apparently a Samba-PDC does
not work without a running nmbd, which processes the
logon-packets. But only one nmbd must run on a single system.
- /etc/smb.conf is a symlink to /etc/smb.conf-zerberos too,
which is required for smbpasswd to work properly, due to
my specific compilation.
## And _never_ name your PDC with the domain-name!!
- Instance-Setups (smb.conf-devil1):
As already seen in the zerberos-configuration, two parameters are
important to split the working-directories:
log file = /var/samba/devil1/log/%M.%m
lock directory = /var/samba/devil1/locks
(devil1 has an alter-ego named devil2, which shares his locks
and logs, what is the reason for the "config file"-parameter
in the attached file)
And a final note:
Both configurations bind to a single interface (32Bit Mask).
The PDC also binds to the loopback-interface (for smbpasswd
to work on this system.
Hope that this helps others and sorry for this lengthly mail.
Regards
Gunther
P.S.: my `ps -axuww | fgrep samba` looks like this after /etc/init.d/samba start
root 22823 0.1 0.2 2488 1912 ? S 23:44:43 0:00 nmbd -D -d 1 -H
/etc/lmhosts -l /var/samba/nmb/log -s /etc/nmb.conf
root 22925 0.0 0.2 3472 1616 ? S 23:46:22 0:00 smbd -D -d 1 -l
/var/samba/devil1/log -s /etc/smb.conf-devil1
root 22848 0.0 0.2 3456 1664 ? S 23:44:44 0:00 smbd -D -d 1 -l
/var/samba/zerberos/log -s /etc/smb.conf-zerberos
Gunther Hess wrote:>
> Hi out there,
> i intend to run multiple Instancies of Samba
> on a single, multi-homed, server, with each instance bound
> to a specific (logical) interface.
>
> If this works, it would be fine to me.
> Mainly for administrative Reasons. (You won't believe,
> but from time to time it becomes necessary to restart
> some services, but restarting the entire server is a
> real mess)
>
> Well here my questions:
>
> - Most important:
> Can anyone out there tell me, that this is definitely impossible?
>
> - Most helpful:
> Which settings must appear in the Configuration, to split the
> working-directories? (locks, logs, private-dir and so on)
>
> - Very interesting:
> Has anyone experience with such a configuration?
>
> Thanks in advance
> Gunther
> --
--
Dr. Gunther Hess Elmos Semiconductor AG
Tel.: ++49 +231 7549-520 Heinrich Hertz Str. 1
Fax: ++49 +231 7549-109 D-44227 Dortmund
WWW: http://www.elmos.de Opinions are strictly of my own
-------------- next part --------------
#! /bin/sh
# @(#) Start-Script for Samba
# @(#) $Id: samba,v 1.4 2002/02/25 22:15:33 root Exp root $
# Please send info on modifications to ghess@elmos.de
PRGBASE=/opt/samba-2.2.3a
# CNFBASE is a script-debugging-variable
CNFBASE=""
# if /usr ist not mounted, give up without comments
if [ ! -d /usr/bin ]
then # /usr not mounted
exit
fi
# Gunther's universal Path
PATH="/root/bin:/etc:/usr/local/bin:/opt/bin"
PATH="/usr/ccs/bin:/usr/ucb:/usr/sbin:/usr/bin:/bin:/sbin:${PATH}"
# /usr/lib is o.k. for Solaris, but not for SunOS or Linux
# but with Samba it is not crucial
LD_LIBRARY_PATH=/usr/lib
export PATH LD_LIBRARY_PATH
#
# Add the Program-Base in front of the Path
#
if [ -d "$PRGBASE/bin" ]
then
PATH="${PRGBASE}/bin:${PATH}"
fi
if [ -d "$PRGBASE/sbin" ]
then
PATH="${PRGBASE}/sbin:${PATH}"
fi
if [ -d "$PRGBASE/lib" ]
then
LD_LIBRARY_PATH="${PRGBASE}/lib:${LD_LIBRARY_PATH}"
fi
#
export PATH LD_LIBRARY_PATH
#
# Save the arguments
#
OPARG="${1-help}"
if [ $# -gt 0 ]
then
shift
fi
SVARG="$*"
#
# Which servers do "exist" ?
#
SERVERS=""
for F in $CNFBASE/etc/smb.conf-*
do
if [ -f "$F" ]
then
SVR="`echo $F | sed -e 's/.*\/etc\/smb.conf-//'`"
if [ "$SERVERS" = "" -o "$SERVERS" = "
" ]
then
SERVERS="$SVR"
else
SERVERS="$SERVERS $SVR"
fi
fi
done
if [ "$SERVERS" != "" -a "$SERVERS" != "
" ]
then
if [ -f $CNFBASE/etc/nmb.conf ]
then
SERVERS="nmb $SERVERS"
fi
elif [ -f $CNFBASE/etc/smb.conf ]
then
SERVERS=simple
fi
if [ "$SERVERS" = "" -o "$SERVERS" = " "
]
then
echo "###"
echo "### cannot start/stop samba without configuration file(s)"
echo "### (no /etc/smb.conf and/or /etc/smb.conf-<server>)"
echo "###"
exit 1
fi
if [ "$SVARG" = "" -o "$SVARG" = " " ]
then
SVARG="$SERVERS"
fi
echo " OPARG=$OPARG"
echo " SVARG=$SVARG"
echo "SERVERS=$SERVERS"
# Verify SVARG
set $SVARG
SVARG=""
while [ $# -gt 0 ]
do
MATCH=false
for SVR in $SERVERS
do
if [ "$1" = "$SVR" ]
then
MATCH=true
if [ "$SVARG" = "" -o "$SVARG" = "
" ]
then
SVARG="$SVR"
else
SVARG="$SVARG $SVR"
fi
break
fi
done
if [ "$MATCH" = "false" ]
then
echo "### Server $1 is not configured"
fi
shift
done
echo " SVARG=$SVARG"
if [ "$SVARG" = "" -o "$SVRAG" = " " ]
then
echo "###"
echo "### no valid servers specified"
echo "###"
exit 1
fi
# Start/stop processes required for samba server
case "$OPARG" in
# Start Samba-Services
start)
for SVR in $SVARG
do
echo "# starting Samba-Server $SVR"
if [ "$SVR" = "simple" ]
then
for D in /var/samba \
/var/samba/log /var/samba/locks /var/samba/private
do
mkdir -p $D
chmod 755 $D
chown 0 $D
chgrp 0 $D
done
chmod 700 /var/samba/private
if [ ! -f /var/samba/private/smbpasswd ]
then
touch /var/samba/private/smbpasswd
chmod 700 /var/samba/private/smbpasswd
fi
rm -f /var/samba/locks/smbd.pid /var/samba/locks/nmbd.pid
smbd -D -d 1 -l /var/samba/log -s $CNFBASE/etc/smb.conf
if [ -f "$CNFBASE/etc/lmhosts" ]
then
nmbd -D -d 1 -H $CNFBASE/etc/lmhosts -l /var/samba/log \
-s $CNFBASE/etc/smb.conf
else
nmbd -D -d 1 -l /var/samba/log -s $CNFBASE/etc/smb.conf
fi
else
for D in /var/samba /var/samba/$SVR \
/var/samba/$SVR/log /var/samba/$SVR/locks \
/var/samba/$SVR/private
do
mkdir -p $D
chmod 755 $D
chown 0 $D
chgrp 0 $D
done
chmod 700 /var/samba/$SVR/private
if [ ! -f /var/samba/$SVR/private/smbpasswd ]
then
touch /var/samba/$SVR/private/smbpasswd
chmod 700 /var/samba/$SVR/private/smbpasswd
fi
rm -f /var/samba/$SVR/locks/smbd.pid /var/samba/$SVR/locks/nmbd.pid
if [ "$SVR" = "nmb" ]
then
if [ -f "$CNFBASE/etc/lmhosts" ]
then
nmbd -D -d 1 -H $CNFBASE/etc/lmhosts -l /var/samba/$SVR/log \
-s $CNFBASE/etc/nmb.conf
else
nmbd -D -d 1 -l /var/samba/$SVR/log -s $CNFBASE/etc/nmb.conf
fi
else
smbd -D -d 1 -l /var/samba/$SVR/log -s $CNFBASE/etc/smb.conf-$SVR
fi
fi
done
;;
## Stop Samba-Services
stop)
for SVR in $SVARG
do
echo "# stopping Samba-Server $SVR"
if [ "$SVR" = "simple" ]
then
if [ -f /var/samba/locks/smbd.pid ]
then
kill `cat /var/samba/locks/smbd.pid`
fi
if [ -f /var/samba/locks/nmbd.pid ]
then
kill `cat /var/samba/locks/nmbd.pid`
fi
sleep 2
rm -f /var/samba/locks/smbd.pid /var/samba/locks/nmbd.pid
else
if [ -f /var/samba/$SVR/locks/smbd.pid ]
then
kill `cat /var/samba/$SVR/locks/smbd.pid`
fi
if [ -f /var/samba/$SVR/locks/nmbd.pid ]
then
kill `cat /var/samba/$SVR/locks/nmbd.pid`
fi
sleep 2
rm -f /var/samba/$SVR/locks/smbd.pid /var/samba/$SVR/locks/nmbd.pid
fi
done
;;
## Help-Message
*)
echo "Usage: /etc/init.d/samba { start | stop } [server]*"
;;
esac
exit 0
-------------- next part --------------
# $Id: smb.conf-zerberos,v 1.35 2002/01/09 19:36:56 ghess Exp $
[global]
workgroup = devil
log file = /var/samba/zerberos/log/%M.%m
max log size = 2500
; socket options = TCP_NODELAY
; keep alive = 10
log level = 1
syslog = 1
utmp = true
utmp directory = /var/adm
lock directory = /var/samba/zerberos/locks
time server = yes
bind interfaces only = true
interfaces = 127.0.0.1/8 \
192.168.18.19/32
netbios name = zerberos
load printers = false
encrypt passwords = Yes
smb passwd file = /var/samba/zerberos/private/smbpasswd
security = user
; I would prefer, that this machine is not a domain-master-browser,
; but it has to, since othewise it would not be accepted by some
; windows clients as the PDC. So sorry. GHess 11-Jan-2002
os level = 64
local master = yes
domain master = yes
domain admin group = +winadmin
preferred master = yes
; Nevertheless, we try to move (keep) the wins server to the real
; fileserver with samba-2.2.2. GHess 11-Jan-2002
wins server = samba1
wins support = no
wins proxy = no
default case = lower
preserve case = false
short preserve case = false
mangle case = no
case sensitive = no
; apparently it is better to disable oplocks, with 2.2.2 too.
; GHess 11-Jan-2002
oplocks = false
; Es wird ein spezielle NIS-MAp f?r die Heimatverzeichnisse verwendet
nis homedir = true
homedir map = auto.devil
; Dies ist der Anmelde-Server!
domain logons = yes
; Derzeit genau Ein Logon-Script unter netlogon zu finden
logon script = %M.bat
; Die Profiles liegen in den PC-Heimatverzeichnissen
; W95, WfW use logon home
; all use the sharename as Home-Directory
logon drive = Z:
logon home = \\%N\%U\profiles\%a
; logon path is used by NT
logon path = \\%N\%U\profiles\%a
; Der netlogon-Dienst muss fuer jedermann lesbar sein
[netlogon]
comment = Network Logon Scripts
path = /var/samba/netlogon
guest ok = Yes
writable = no
browseable = yes
root preexec = /var/samba/etc/mklogon.sh %U %M %a %N
root preexec close = true
write list = @winadmin
-------------- next part --------------
# $Id: smb.conf-devil1,v 1.31 2002/01/02 21:34:52 root Exp $
[global]
config file = /var/samba/etc/smb.conf-%L
workgroup = devil
log file = /var/samba/devil1/log/%M.%m
max log size = 2500
socket options = TCP_NODELAY
keep alive = 10
log level = 1
syslog = yes
utmp = true
utmp directory = /var/adm
lock directory = /var/samba/devil1/locks
time server = yes
host msdfs = true
bind interfaces only = true
interfaces = 192.168.18.20/32
netbios name = devil1
netbios aliases = devil2
load printers = false
encrypt passwords = Yes
smb passwd file = /var/samba/devil1/private/smbpasswd
password server = zerberos
security = server
map to guest = nobody
os level = 64
local master = yes
domain master = no
domain admin group = +winadmin
preferred master = yes
wins server = samba1
wins support = no
wins proxy = no
default case = lower
preserve case = false
short preserve case = false
mangle case = no
case sensitive = no
#==================== spezielle Shares des Servers ==========================
[homes]
comment = %u PC-Heimatverzeichnis
path = /pchome/%u
browseable = yes
read only = no
security mask = 03777
directory security mask = 03777
inherit permissions = true
invalid users = root
[common]
comment = Produktions Common Tree
path = /common
read only = no
public = no
browseable = yes
security mask = 03777
directory security mask = 03777
inherit permissions = true
invalid users = root
Yes, this works, however, you probably will want to build different
executables. I first got it to work starting the daemons with
different configuration files, but then I had a problem with
smbpasswd: it has no config file option. You can't make it
work differently for the different servers. I just did multiple
configure/make runs:
./configure \
--with-configdir=/etc/samba-red \
--libdir=/etc/samba-red \
--sharedstatedir=/var/samba-red/run \
--localstatedir=/var/samba-red/run \
--with-privatedir=/etc/samba-red/private \
--with-lockdir=/var/samba-red/locks \
... && make &&
make install INSTALLCMD="/bin/sh `/bin/pwd`/source/install-sh
-t='s/^/red-/'" &&
make clean
./configure \
--with-configdir=/etc/samba-blue \
--libdir=/etc/samba-blue \
--sharedstatedir=/var/samba-blue/run \
--localstatedir=/var/samba-blue/run \
--with-privatedir=/etc/samba-blue/private \
--with-lockdir=/var/samba-blue/locks \
... && make &&
make install INSTALLCMD="/bin/sh `/bin/pwd`/source/install-sh
-t='s/^/blue-/'" &&
make clean
With this the smpbasswd that uses the /etc/samba-red/smb.conf file is named
"red-smbpasswd", etc.
However, to get the install to work correctly I needed to force the Makefile
to use the proper install-sh, not the in-line copies as the Makefile is
supplied. The install-sh can do name translations. The patch to make this
happen is:
Index: source/Makefile.in
==================================================================RCS file:
/u/itsrc/cvs/networking/fs/samba/source/Makefile.in,v
retrieving revision 1.1.1.10
retrieving revision 1.1.1.10.2.1
diff -u -r1.1.1.10 -r1.1.1.10.2.1
--- Makefile.in 2002/02/06 16:18:58 1.1.1.10
+++ Makefile.in 2002/02/07 18:25:01 1.1.1.10.2.1
@@ -21,7 +21,7 @@
LINK=$(CC) $(FLAGS) $(LDFLAGS)
-INSTALLCMD=@INSTALL@
+INSTALLCMD=/bin/sh @srcdir@/install-sh
VPATH=@srcdir@
srcdir=@srcdir@
@@ -654,18 +654,23 @@
install: installbin installman installscripts installcp installswat
installdirs:
- $(SHELL) $(srcdir)/install-sh -d -m $(INSTALLPERMS) \
+ $(INSTALLCMD) -d -m $(INSTALLPERMS) \
$(BASEDIR) $(SBINDIR) $(BINDIR) $(LIBDIR) $(VARDIR) $(CODEPAGEDIR)
installservers: all installdirs
- @$(SHELL) $(srcdir)/script/installbin.sh $(INSTALLPERMS) $(BASEDIR)
$(SBINDIR) $(LIBDIR) $(VARDIR) $(SPROGS)
+ @echo Installing $(SPROGS) to $(SBINDIR)
+ @for f in $(SPROGS) ; do $(INSTALLCMD) -c -m $(INSTALLPERMS) $$f
$(SBINDIR) ; done
installbin: all installdirs
- @$(SHELL) $(srcdir)/script/installbin.sh $(INSTALLPERMS) $(BASEDIR)
$(SBINDIR) $(LIBDIR) $(VARDIR) $(SPROGS) $(WINBIND_SPROGS)
- @$(SHELL) $(srcdir)/script/installbin.sh $(INSTALLPERMS) $(BASEDIR)
$(BINDIR) $(LIBDIR) $(VARDIR) $(PROGS) $(WINBIND_PROGS)
+ @echo Installing $(SPROGS) $(WINBIND_SPROGS) to $(SBINDIR)
+ @for f in $(SPROGS) $(WINBIND_SPROGS) ; do $(INSTALLCMD) -c -m
$(INSTALLPERMS) $$f $(SBINDIR) ; done
+ @echo Installing $(PROGS) $(WINBIND_PROGS) to $(SBINDIR)
+ @for f in $(PROGS) $(WINBIND_PROGS) ; do $(INSTALLCMD) -c -m
$(INSTALLPERMS) $$f $(BINDIR) ; done
installscripts: installdirs
- @$(SHELL) $(srcdir)/script/installscripts.sh $(INSTALLPERMS) $(BINDIR)
$(SCRIPTS)
+ @echo Installing $(SCRIPTS) to $(BINDIR)
+ @for f in $(SCRIPTS) ; do $(INSTALLCMD) -c -m $(INSTALLPERMS) $$f
$(BINDIR) ; done
+
installcp: installdirs installbin
@$(SHELL) $(srcdir)/script/installcp.sh $(srcdir) $(LIBDIR)
$(CODEPAGEDIR) $(BINDIR) $(CODEPAGELIST)
Index: source/script/installcp.sh
==================================================================RCS file:
/u/itsrc/cvs/networking/fs/samba/source/script/installcp.sh,v
retrieving revision 1.1.1.1
retrieving revision 1.1.1.1.30.1
diff -u -r1.1.1.1 -r1.1.1.1.30.1
--- installcp.sh 2001/04/20 14:30:40 1.1.1.1
+++ installcp.sh 2002/02/07 18:25:02 1.1.1.1.30.1
@@ -23,11 +23,11 @@
for p in $*; do
if [ -f ${srcdir}/codepages/codepage_def.$p ]; then
echo Creating codepage file $CODEPAGEDIR/codepage.$p
- $BINDIR/make_smbcodepage c $p ${srcdir}/codepages/codepage_def.$p
$CODEPAGEDIR/codepage.$p
+ ${srcdir}/bin/make_smbcodepage c $p ${srcdir}/codepages/codepage_def.$p
$CODEPAGEDIR/codepage.$p
fi
if [ -f ${srcdir}/codepages/CP${p}.TXT ]; then
echo Creating unicode map $CODEPAGEDIR/unicode_map.$p
- $BINDIR/make_unicodemap $p ${srcdir}/codepages/CP${p}.TXT
$CODEPAGEDIR/unicode_map.$p
+ ${srcdir}/bin/make_unicodemap $p ${srcdir}/codepages/CP${p}.TXT
$CODEPAGEDIR/unicode_map.$p
fi
done
[If these changes became part of the official code, it would be nice so we
could take advantage of the options supported by install-sh.]
Gunther Hess wrote:> Hi out there,
> i intend to run multiple Instancies of Samba
> on a single, multi-homed, server, with each instance bound
> to a specific (logical) interface.
>
> If this works, it would be fine to me.
> Mainly for administrative Reasons. (You won't believe,
> but from time to time it becomes necessary to restart
> some services, but restarting the entire server is a
> real mess)
>
> Well here my questions:
>
> - Most important:
> Can anyone out there tell me, that this is definitely impossible?
>
> - Most helpful:
> Which settings must appear in the Configuration, to split the
> working-directories? (locks, logs, private-dir and so on)
>
> - Very interesting:
> Has anyone experience with such a configuration?
>
> Thanks in advance
> Gunther
>
--
Gary Algier, WB2FWZ gaa at ulticom.com +1 856 787 2758
Ulticom Inc., 1020 Briggs Rd, Mt. Laurel, NJ 08054 Fax:+1 856 866 2033
A self-addressed envelope would be addressed "envelope."