mirror of
https://github.com/samba-team/samba.git
synced 2025-01-27 14:04:05 +03:00
a2e3ba6e12
(This used to be commit d8fe4a81fb0d4972b2331b3d5fc4890244b44c33)
478 lines
14 KiB
XML
478 lines
14 KiB
XML
<chapter id="compiling">
|
|
<chapterinfo>
|
|
&author.jelmer;
|
|
&author.tridge;
|
|
|
|
<pubdate> 22 May 2001 </pubdate>
|
|
<pubdate> 18 March 2003 </pubdate>
|
|
</chapterinfo>
|
|
|
|
<title>How to compile Samba</title>
|
|
|
|
<para>
|
|
You can obtain the samba source from the
|
|
<ulink url="http://samba.org/">samba website</ulink>. To obtain a development version,
|
|
you can download samba from CVS or using rsync.
|
|
</para>
|
|
|
|
<sect1>
|
|
<title>Access Samba source code via CVS</title>
|
|
|
|
<indexterm><primary>CVS</primary></indexterm>
|
|
|
|
<sect2>
|
|
<title>Introduction</title>
|
|
|
|
<para>
|
|
Samba is developed in an open environment. Developers use CVS
|
|
(Concurrent Versioning System) to "checkin" (also known as
|
|
"commit") new source code. Samba's various CVS branches can
|
|
be accessed via anonymous CVS using the instructions
|
|
detailed in this chapter.
|
|
</para>
|
|
|
|
<para>
|
|
This chapter is a modified version of the instructions found at
|
|
<ulink noescape="1" url="http://samba.org/samba/cvs.html">http://samba.org/samba/cvs.html</ulink>
|
|
</para>
|
|
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>CVS Access to samba.org</title>
|
|
|
|
<para>
|
|
The machine samba.org runs a publicly accessible CVS
|
|
repository for access to the source code of several packages,
|
|
including samba, rsync, distcc, ccache and jitterbug. There are two main ways
|
|
of accessing the CVS server on this host.
|
|
</para>
|
|
|
|
<sect3>
|
|
<title>Access via CVSweb</title>
|
|
|
|
<indexterm><primary>CVS</primary><secondary>web</secondary></indexterm>
|
|
|
|
<para>
|
|
You can access the source code via your
|
|
favourite WWW browser. This allows you to access the contents of
|
|
individual files in the repository and also to look at the revision
|
|
history and commit logs of individual files. You can also ask for a diff
|
|
listing between any two versions on the repository.
|
|
</para>
|
|
|
|
<para>
|
|
Use the URL : <ulink
|
|
noescape="1" url="http://samba.org/cgi-bin/cvsweb">http://samba.org/cgi-bin/cvsweb</ulink>
|
|
</para>
|
|
</sect3>
|
|
|
|
<sect3>
|
|
<title>Access via cvs</title>
|
|
|
|
<para>
|
|
You can also access the source code via a
|
|
normal cvs client. This gives you much more control over what you can
|
|
do with the repository and allows you to checkout whole source trees
|
|
and keep them up to date via normal cvs commands. This is the
|
|
preferred method of access if you are a developer and not
|
|
just a casual browser.
|
|
</para>
|
|
|
|
<para>
|
|
To download the latest cvs source code, point your
|
|
browser at the URL :
|
|
<ulink noescape="1" url="http://www.cyclic.com/">http://www.cyclic.com/</ulink>.
|
|
and click on the 'How to get cvs' link. CVS is free software under
|
|
the GNU GPL (as is Samba). Note that there are several graphical CVS clients
|
|
which provide a graphical interface to the sometimes mundane CVS commands.
|
|
Links to theses clients are also available from the Cyclic website.
|
|
</para>
|
|
|
|
<para>
|
|
To gain access via anonymous cvs use the following steps.
|
|
For this example it is assumed that you want a copy of the
|
|
samba source code. For the other source code repositories
|
|
on this system just substitute the correct package name
|
|
</para>
|
|
|
|
<procedure>
|
|
<title>Retrieving samba using CVS</title>
|
|
|
|
<step>
|
|
<para>
|
|
Install a recent copy of cvs. All you really need is a
|
|
copy of the cvs client binary.
|
|
</para>
|
|
</step>
|
|
|
|
<step>
|
|
<para>
|
|
Run the command
|
|
</para>
|
|
|
|
<para>
|
|
<userinput>cvs -d :pserver:cvs@samba.org:/cvsroot login</userinput>
|
|
</para>
|
|
</step>
|
|
|
|
<step>
|
|
|
|
<para>
|
|
When it asks you for a password type <userinput>cvs</userinput>.
|
|
</para>
|
|
</step>
|
|
|
|
<step>
|
|
<para>
|
|
Run the command
|
|
</para>
|
|
|
|
<para>
|
|
<userinput>cvs -d :pserver:cvs@samba.org:/cvsroot co samba</userinput>
|
|
</para>
|
|
|
|
<para>
|
|
This will create a directory called samba containing the
|
|
latest samba source code (i.e. the HEAD tagged cvs branch). This
|
|
currently corresponds to the 3.0 development tree.
|
|
</para>
|
|
|
|
<para>
|
|
CVS branches other then HEAD can be obtained by using the
|
|
<option>-r</option> and defining a tag name. A list of branch tag names
|
|
can be found on the "Development" page of the samba web site. A common
|
|
request is to obtain the latest 3.0 release code. This could be done by
|
|
using the following command:
|
|
</para>
|
|
|
|
<para>
|
|
<userinput>cvs -d :pserver:cvs@samba.org:/cvsroot co -r SAMBA_3_0 samba</userinput>
|
|
</para>
|
|
</step>
|
|
|
|
<step>
|
|
<para>
|
|
Whenever you want to merge in the latest code changes use
|
|
the following command from within the samba directory:
|
|
</para>
|
|
|
|
<para>
|
|
<userinput>cvs update -d -P</userinput>
|
|
</para>
|
|
</step>
|
|
</procedure>
|
|
|
|
</sect3>
|
|
</sect2>
|
|
|
|
</sect1>
|
|
|
|
<sect1>
|
|
<title>Accessing the samba sources via rsync and ftp</title>
|
|
|
|
<indexterm><primary>rsync</primary></indexterm>
|
|
<indexterm><primary>ftp</primary></indexterm>
|
|
|
|
<para>
|
|
pserver.samba.org also exports unpacked copies of most parts of the CVS
|
|
tree at <ulink noescape="1" url="ftp://pserver.samba.org/pub/unpacked">ftp://pserver.samba.org/pub/unpacked</ulink> and also via anonymous rsync at
|
|
<ulink noescape="1" url="rsync://pserver.samba.org/ftp/unpacked/">rsync://pserver.samba.org/ftp/unpacked/</ulink>. I recommend using rsync rather than ftp.
|
|
See <ulink noescape="1" url="http://rsync.samba.org/">the rsync homepage</ulink> for more info on rsync.
|
|
</para>
|
|
|
|
<para>
|
|
The disadvantage of the unpacked trees is that they do not support automatic
|
|
merging of local changes like CVS does. rsync access is most convenient
|
|
for an initial install.
|
|
</para>
|
|
</sect1>
|
|
|
|
<sect1>
|
|
<title>Verifying Samba's PGP signature</title>
|
|
|
|
<para>
|
|
In these days of insecurity, it's strongly recommended that you verify the PGP
|
|
signature for any source file before installing it. Even if you're not
|
|
downloading from a mirror site, verifying PGP signatures should be a
|
|
standard reflex.
|
|
</para>
|
|
|
|
|
|
<para>
|
|
With that said, go ahead and download the following files:
|
|
</para>
|
|
|
|
<para><screen>
|
|
&prompt;<userinput>wget http://us1.samba.org/samba/ftp/samba-2.2.8a.tar.asc</userinput>
|
|
&prompt;<userinput>wget http://us1.samba.org/samba/ftp/samba-pubkey.asc</userinput>
|
|
</screen></para>
|
|
|
|
<indexterm><primary>GPG</primary></indexterm>
|
|
|
|
<para>
|
|
The first file is the PGP signature for the Samba source file; the other is the Samba public
|
|
PGP key itself. Import the public PGP key with:
|
|
</para>
|
|
|
|
<screen>
|
|
&prompt;<userinput>gpg --import samba-pubkey.asc</userinput>
|
|
</screen>
|
|
|
|
<para>
|
|
And verify the Samba source code integrity with:
|
|
</para>
|
|
|
|
<screen>
|
|
&prompt;<userinput>gzip -d samba-2.2.8a.tar.gz</userinput>
|
|
&prompt;<userinput>gpg --verify samba-2.2.8a.tar.asc</userinput>
|
|
</screen>
|
|
|
|
<para>
|
|
If you receive a message like, "Good signature from Samba Distribution
|
|
Verification Key..."
|
|
then all is well. The warnings about trust relationships can be ignored. An
|
|
example of what you would not want to see would be:
|
|
</para>
|
|
|
|
<computeroutput>
|
|
gpg: BAD signature from "Samba Distribution Verification Key"
|
|
</computeroutput>
|
|
|
|
</sect1>
|
|
|
|
<sect1>
|
|
<title>Building the Binaries</title>
|
|
|
|
<indexterm><primary>configure</primary></indexterm>
|
|
|
|
<para>To do this, first run the program <userinput>./configure
|
|
</userinput> in the source directory. This should automatically
|
|
configure Samba for your operating system. If you have unusual
|
|
needs then you may wish to run</para>
|
|
|
|
<para><screen>&rootprompt;<userinput>./configure --help
|
|
</userinput></screen></para>
|
|
|
|
<para>first to see what special options you can enable.
|
|
Then executing</para>
|
|
|
|
<indexterm><primary>make</primary></indexterm>
|
|
|
|
<para><screen>&rootprompt;<userinput>make</userinput></screen></para>
|
|
|
|
<para>will create the binaries. Once it's successfully
|
|
compiled you can use </para>
|
|
|
|
<para><screen>&rootprompt;<userinput>make install</userinput></screen></para>
|
|
|
|
<para>to install the binaries and manual pages. You can
|
|
separately install the binaries and/or man pages using</para>
|
|
|
|
<para><screen>&rootprompt;<userinput>make installbin
|
|
</userinput></screen></para>
|
|
|
|
<para>and</para>
|
|
|
|
<para><screen>&rootprompt;<userinput>make installman
|
|
</userinput></screen></para>
|
|
|
|
<para>Note that if you are upgrading for a previous version
|
|
of Samba you might like to know that the old versions of
|
|
the binaries will be renamed with a ".old" extension. You
|
|
can go back to the previous version with</para>
|
|
|
|
<para><screen>&rootprompt;<userinput>make revert
|
|
</userinput></screen></para>
|
|
|
|
<para>if you find this version a disaster!</para>
|
|
|
|
<sect2>
|
|
<title>Compiling samba with Active Directory support</title>
|
|
|
|
<para>In order to compile samba with ADS support, you need to have installed
|
|
on your system:</para>
|
|
<itemizedlist>
|
|
|
|
<listitem><para>the MIT kerberos development libraries
|
|
(either install from the sources or use a package). The
|
|
Heimdal libraries will not work.</para></listitem>
|
|
|
|
<listitem><para>the OpenLDAP development libraries.</para></listitem>
|
|
|
|
</itemizedlist>
|
|
|
|
<para>If your kerberos libraries are in a non-standard location then
|
|
remember to add the configure option
|
|
<option>--with-krb5=<replaceable>DIR</replaceable></option>.</para>
|
|
|
|
<para>After you run configure make sure that
|
|
<filename>include/config.h</filename> it generates contains lines like
|
|
this:</para>
|
|
|
|
<para><programlisting>
|
|
#define HAVE_KRB5 1
|
|
#define HAVE_LDAP 1
|
|
</programlisting></para>
|
|
|
|
<para>If it doesn't then configure did not find your krb5 libraries or
|
|
your ldap libraries. Look in <filename>config.log</filename> to figure
|
|
out why and fix it.</para>
|
|
|
|
<sect3>
|
|
<title>Installing the required packages for Debian</title>
|
|
|
|
<para>On Debian you need to install the following packages:</para>
|
|
<para>
|
|
<itemizedlist>
|
|
<listitem>libkrb5-dev</listitem>
|
|
<listitem>krb5-user</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
</sect3>
|
|
|
|
<sect3>
|
|
<title>Installing the required packages for RedHat</title>
|
|
|
|
<para>On RedHat this means you should have at least: </para>
|
|
<para>
|
|
<itemizedlist>
|
|
<listitem>krb5-workstation (for kinit)</listitem>
|
|
<listitem>krb5-libs (for linking with)</listitem>
|
|
<listitem>krb5-devel (because you are compiling from source)</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
|
|
<para>in addition to the standard development environment.</para>
|
|
|
|
<para>Note that these are not standard on a RedHat install, and you may need
|
|
to get them off CD2.</para>
|
|
|
|
</sect3>
|
|
|
|
</sect2>
|
|
|
|
</sect1>
|
|
|
|
<sect1>
|
|
<title>Starting the &smbd; and &nmbd;</title>
|
|
|
|
<indexterm><primary>inetd</primary></indexterm>
|
|
|
|
<para>You must choose to start &smbd; and &nmbd; either
|
|
as daemons or from <application>inetd</application>. Don't try
|
|
to do both! Either you can put them in <filename>
|
|
inetd.conf</filename> and have them started on demand
|
|
by <application>inetd</application> or <application>xinetd</application>,
|
|
or you can start them as
|
|
daemons either from the command line or in <filename>
|
|
/etc/rc.local</filename>. See the man pages for details
|
|
on the command line options. Take particular care to read
|
|
the bit about what user you need to be in order to start
|
|
Samba. In many cases you must be root.</para>
|
|
|
|
<para>The main advantage of starting &smbd;
|
|
and &nmbd; using the recommended daemon method
|
|
is that they will respond slightly more quickly to an initial connection
|
|
request.</para>
|
|
|
|
<sect2>
|
|
<title>Starting from inetd.conf</title>
|
|
|
|
<indexterm><primary>inetd</primary></indexterm>
|
|
|
|
<note>
|
|
<para>The following will be different if
|
|
you use NIS, NIS+ or LDAP to distribute services maps.</para>
|
|
</note>
|
|
|
|
<para>Look at your <filename>/etc/services</filename>.
|
|
What is defined at port 139/tcp. If nothing is defined
|
|
then add a line like this:</para>
|
|
|
|
<para><programlisting>netbios-ssn 139/tcp</programlisting></para>
|
|
|
|
<para>similarly for 137/udp you should have an entry like:</para>
|
|
|
|
<para><programlisting>netbios-ns 137/udp</programlisting></para>
|
|
|
|
<para>Next edit your <filename>/etc/inetd.conf</filename>
|
|
and add two lines something like this:</para>
|
|
|
|
<para><programlisting>
|
|
netbios-ssn stream tcp nowait root /usr/local/samba/bin/smbd smbd
|
|
netbios-ns dgram udp wait root /usr/local/samba/bin/nmbd nmbd
|
|
</programlisting></para>
|
|
|
|
<para>The exact syntax of <filename>/etc/inetd.conf</filename>
|
|
varies between unixes. Look at the other entries in inetd.conf
|
|
for a guide. </para>
|
|
|
|
<indexterm><primary>xinetd</primary></indexterm>
|
|
<para>Some distributions use xinetd instead of inetd. Consult the
|
|
xinetd manual for configuration information.</para>
|
|
|
|
<note><para>Some unixes already have entries like netbios_ns
|
|
(note the underscore) in <filename>/etc/services</filename>.
|
|
You must either edit <filename>/etc/services</filename> or
|
|
<filename>/etc/inetd.conf</filename> to make them consistent.
|
|
</para></note>
|
|
|
|
<indexterm><primary>ifconfig</primary></indexterm>
|
|
<note><para>On many systems you may need to use the
|
|
<smbconfoption><name>interfaces</name></smbconfoption> option in &smb.conf; to specify the IP
|
|
address and netmask of your interfaces. Run
|
|
<application>ifconfig</application>
|
|
as root if you don't know what the broadcast is for your
|
|
net. &nmbd; tries to determine it at run
|
|
time, but fails on some unixes.
|
|
</para></note>
|
|
|
|
<warning><para>Many unixes only accept around 5
|
|
parameters on the command line in <filename>inetd.conf</filename>.
|
|
This means you shouldn't use spaces between the options and
|
|
arguments, or you should use a script, and start the script
|
|
from <command>inetd</command>.</para></warning>
|
|
|
|
<para>Restart <application>inetd</application>, perhaps just send
|
|
it a HUP. </para>
|
|
|
|
<screen>
|
|
&rootprompt;<userinput>killall -HUP inetd</userinput>
|
|
</screen>
|
|
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>Alternative: starting it as a daemon</title>
|
|
|
|
<indexterm><primary>daemon</primary></indexterm>
|
|
|
|
<para>To start the server as a daemon you should create
|
|
a script something like this one, perhaps calling
|
|
it <filename>startsmb</filename>.</para>
|
|
|
|
<para><programlisting>
|
|
#!/bin/sh
|
|
/usr/local/samba/bin/smbd -D
|
|
/usr/local/samba/bin/nmbd -D
|
|
</programlisting></para>
|
|
|
|
<para>then make it executable with <command>chmod
|
|
+x startsmb</command></para>
|
|
|
|
<para>You can then run <command>startsmb</command> by
|
|
hand or execute it from <filename>/etc/rc.local</filename>
|
|
</para>
|
|
|
|
<para>To kill it send a kill signal to the processes
|
|
&nmbd; and &smbd;.</para>
|
|
|
|
<note><para>If you use the SVR4 style init system then
|
|
you may like to look at the <filename>examples/svr4-startup</filename>
|
|
script to make Samba fit into that system.</para></note>
|
|
</sect2>
|
|
</sect1>
|
|
|
|
</chapter>
|