On May 8, 2008, a gaggle of samba developers came together in a sambaXP followup meeting in Göttingen at SerNet, and the idea was born to combine the best parts of Samba3 and Samba4 to form Franky - a complete Samba Active Directory server that is also a performant file server and a print server.
The Idea - A Hybrid Samba Active Directory Controller
The Samba4 and Samba3 daemons should run in parallel and the tasks should be distributed among the processes. The various deamons should communicate via unix domain sockets.
One essential part for the feasibility of the project is Volker Lendecke's recent work on Samba 3 on adding the ability to delegate named pipes (dcerpc services) to external programs over unix domain sockets.
The Plumbing Design
This is the basic idea of how to distribute the tasks:
- The main daemon to be run is the Samba4 smbd.
- smbd4 listens on the Kerberos, LDAP, CLDAP, GC, Endpoint mapper and WINS ports.
- smbd4 offers the named pipes samr, lsa, netlogon, epm, and drsuapi
- smbd4 forks smbd3 (and other samba3 daemons)
- smbd3 listens on the smb ports (139/445)
- smbd3 offers the named pipes spoolss and possibly winreg
- nmbd3 offers browsing (138) (or else add browsing support would have to be completed in samba4)
- samba3 winbindd talks to trusted domains
The daemons have to talk to each other in order for the scenario to work.
See the notes from the meeting for more details.
Name Of The Game
The codename Franky was coined for the combined Samba branch.
- unify the build system to have a common build and install (almost completed by Jelmer)
- make smbd4 talk to samba3 winbind.
- either add browsing support to samba4 or disable all but browsing in samba3 nmbd.
- extend the samba4 endpoint mapper to allow registering external services dynamically
At some later point:
- reconcile configuration files and options
- Named pipe forwarding in Samba 3: s3-merge34 @ git://git.samba.org/vl/samba.git
- Named pipe connection accepting in Samba 4: s4-merge34 @ git://git.samba.org/vl/samba.git
- S3+S4 Build integration: "franky" @ git://git.samba.org/jelmer/samba3.git
To build the integration branch once you've checked it out, first checkout out the samba 4 submodule:
$ git submodule init $ git submodule update
After that, proceed as usual:
$ cd source $ ./autogen.sh $ ./configure.developer --disable-shared-libs
(shared libs and symbol versioning don't work yet because of conflicts between the samba 3 and samba 4 versions of libraries)
$ make basics $ make
This should build all of Samba 3 as well as Samba 4's smbd