1<?xml version="1.0" encoding="iso-8859-1"?> 2<!DOCTYPE chapter PUBLIC "-//Samba-Team//DTD DocBook V4.2-Based Variant V1.0//EN" "http://www.samba.org/samba/DTD/samba-doc"> 3<chapter id="compiling"> 4<chapterinfo> 5 &author.jelmer; 6 &author.jht; 7 &author.tridge; 8 9 <pubdate> 22 May 2001 </pubdate> 10 <pubdate> 18 March 2003 </pubdate> 11 <pubdate> June 2005 </pubdate> 12</chapterinfo> 13 14<title>How to Compile Samba</title> 15 16<para> 17You can obtain the Samba source file from the 18<ulink url="http://samba.org/">Samba Web site</ulink>. To obtain a development version, 19you can download Samba from Subversion or using <command>rsync</command>. 20</para> 21 22<sect1> 23<title>Access Samba Source Code via Subversion</title> 24 25 26<sect2> 27<title>Introduction</title> 28 29<para> 30<indexterm><primary>Subversion</primary></indexterm> 31Samba is developed in an open environment. Developers use a 32Subversion to <quote>checkin</quote> (also known as 33<quote>commit</quote>) new source code. Samba's various Subversion branches can 34be accessed via anonymous Subversion using the instructions 35detailed in this chapter. 36</para> 37 38<para> 39This chapter is a modified version of the instructions found at the 40<ulink noescape="1" url="http://samba.org/samba/subversion.html">Samba</ulink> Web site. 41</para> 42 43</sect2> 44 45<sect2> 46<title>Subversion Access to samba.org</title> 47 48<para> 49The machine samba.org runs a publicly accessible Subversion 50repository for access to the source code of several packages, 51including Samba, rsync, distcc, ccache, and jitterbug. There are two main ways 52of accessing the Subversion server on this host. 53</para> 54 55<sect3> 56<title>Access via ViewCVS</title> 57 58 59<para> 60<indexterm><primary>SVN</primary><secondary>web</secondary></indexterm> 61You can access the source code via your favorite WWW browser. This allows you to access 62the contents of individual files in the repository and also to look at the revision 63history and commit logs of individual files. You can also ask for a diff 64listing between any two versions on the repository. 65</para> 66 67<para> 68Use the URL 69<ulink noescape="1" url="http://viewcvs.samba.org/">http://viewcvs.samba.org/</ulink>. 70</para> 71</sect3> 72 73<sect3> 74<title>Access via Subversion</title> 75 76<para> 77<indexterm><primary>Subversion</primary></indexterm> 78You can also access the source code via a normal Subversion client. This gives you much more control over what 79you can do with the repository and allows you to check out whole source trees and keep them up to date via 80normal Subversion commands. This is the preferred method of access if you are a developer and not just a 81casual browser. 82</para> 83 84<para>In order to be able to download the Samba sources off Subversion, you need 85a Subversion client. Your distribution might include one, or you can download the 86sources from <ulink noescape="1" url="http://subversion.tigris.org/">http://subversion.tigris.org/</ulink>. 87</para> 88 89<para> 90To gain access via anonymous Subversion, use the following steps. 91</para> 92 93<procedure> 94 <title>Retrieving Samba using Subversion</title> 95 96 <step> 97 <para> 98 Install a recent copy of Subversion. All you really need is a 99 copy of the Subversion client binary. 100 </para> 101 </step> 102 103 <step> 104 <para> 105 Run the command 106 <screen> 107 <userinput>svn co svn://svnanon.samba.org/samba/trunk samba</userinput>. 108 </screen> 109 </para> 110 111 <para> 112 This will create a directory called <filename>samba</filename> containing the 113 latest Samba source code (usually the branch that is going to be the next major release). This 114 currently corresponds to the 3.1 development tree. 115 </para> 116 117 <para> 118 Subversion branches other then trunk can be obtained by adding branches/BRANCH_NAME to the URL you check 119 out. A list of branch names can be found on the <quote>Development</quote> page of the Samba Web site. A 120 common request is to obtain the latest 3.0 release code. This could be done by using the following command: 121 <screen> 122 <userinput>svn co svn://svnanon.samba.org/samba/branches/SAMBA_3_0 samba_3</userinput>. 123 </screen> 124 </para> 125 </step> 126 127 <step> 128 <para> 129 Whenever you want to merge in the latest code changes, use the following command from within the Samba 130 directory: 131 <screen> 132 <userinput>svn update</userinput> 133 </screen> 134 </para> 135 </step> 136</procedure> 137 138</sect3> 139</sect2> 140 141</sect1> 142 143<sect1> 144 <title>Accessing the Samba Sources via rsync and ftp</title> 145 146 147 <para> 148 <indexterm><primary>rsync</primary></indexterm> 149 <indexterm><primary>ftp</primary></indexterm> 150 <parameter>pserver.samba.org</parameter> also exports unpacked copies of most parts of the Subversion tree 151 at the Samba <ulink noescape="1" url="ftp://pserver.samba.org/pub/unpacked">pserver</ulink> location and also 152 via anonymous rsync at the Samba <ulink noescape="1" 153 url="rsync://pserver.samba.org/ftp/unpacked/">rsync</ulink> server location. I recommend using rsync rather 154 than ftp, because rsync is capable of compressing data streams, but it is also more useful than FTP because 155 during a partial update it will transfer only the data that is missing plus a small overhead. See <ulink 156 noescape="1" url="http://rsync.samba.org/">the rsync home page</ulink> for more info on rsync. 157 </para> 158 159 <para> 160 The disadvantage of the unpacked trees is that they do not support automatic 161 merging of local changes as Subversion does. <command>rsync</command> access is most convenient 162 for an initial install. 163 </para> 164</sect1> 165 166<sect1> 167<title>Verifying Samba's PGP Signature</title> 168 169<para> 170<indexterm><primary>GPG</primary></indexterm> 171<indexterm><primary>PGP</primary></indexterm> 172It is strongly recommended that you verify the PGP signature for any source file before 173installing it. Even if you're not downloading from a mirror site, verifying PGP signatures 174should be a standard reflex. Many people today use the GNU GPG tool set in place of PGP. 175GPG can substitute for PGP. 176</para> 177 178 179<para> 180With that said, go ahead and download the following files: 181</para> 182 183<para><screen> 184&prompt;<userinput>wget http://us1.samba.org/samba/ftp/samba-3.0.20.tar.asc</userinput> 185&prompt;<userinput>wget http://us1.samba.org/samba/ftp/samba-pubkey.asc</userinput> 186</screen></para> 187 188 189<para> 190<indexterm><primary>PGP</primary></indexterm> 191The first file is the PGP signature for the Samba source file; the other is the Samba public 192PGP key itself. Import the public PGP key with: 193<screen> 194&prompt;<userinput>gpg --import samba-pubkey.asc</userinput> 195</screen> 196and verify the Samba source code integrity with: 197<screen> 198&prompt;<userinput>gzip -d samba-3.0.20.tar.gz</userinput> 199&prompt;<userinput>gpg --verify samba-3.0.20.tar.asc</userinput> 200</screen> 201</para> 202 203<para> 204If you receive a message like, <quote>Good signature from Samba Distribution Verification Key...,</quote> 205then all is well. The warnings about trust relationships can be ignored. An 206example of what you would not want to see would be: 207<screen> 208gpg: BAD signature from <quote>Samba Distribution Verification Key</quote> 209</screen> 210</para> 211 212</sect1> 213 214<sect1> 215 <title>Building the Binaries</title> 216 217 <para> 218 <indexterm><primary>autogen.sh</primary></indexterm> 219<indexterm><primary>configure</primary></indexterm> 220 After the source tarball has been unpacked, the next step involves 221 configuration to match Samba to your operating system platform. 222 If your source directory does not contain the <command>configure</command> script, 223 it is necessary to build it before you can continue. Building of 224 the configure script requires the correct version of the autoconf 225 tool kit. Where the necessary version of autoconf is present, 226 the configure script can be generated by executing the following 227 (please note that in Samba 3.4.x, the directory is called source3 instead 228 of source): 229<screen> 230&rootprompt; cd samba-3.0.20/source 231&rootprompt; ./autogen.sh 232</screen> 233 </para> 234 235 236 <para> 237 <indexterm><primary>configure</primary></indexterm> 238 To build the binaries, run the program <userinput>./configure 239 </userinput> in the source directory. This should automatically 240 configure Samba for your operating system. If you have unusual 241 needs, then you may wish to first run: 242<screen> 243&rootprompt;<userinput>./configure --help</userinput> 244</screen> 245</para> 246 247 <para> 248 This will help you to see what special options can be enabled. Now execute 249 <userinput>./configure</userinput> with any arguments it might need: 250<screen> 251&rootprompt;<userinput>./configure <replaceable>[... arguments ...]</replaceable></userinput> 252</screen> 253 </para> 254 255 <para> 256 <indexterm><primary>make</primary></indexterm> 257 Execute the following create the binaries: 258<screen> 259&rootprompt; <userinput>make</userinput> 260</screen> 261 Once it is successfully compiled, you can execute the command shown here to 262 install the binaries and manual pages: 263<screen> 264&rootprompt; <userinput>make install</userinput> 265</screen> 266 </para> 267 268 <para> 269 Some people prefer to install binary files and man pages separately. If this is 270 your wish, the binary files can be installed by executing: 271<screen> 272&rootprompt; <userinput>make installbin</userinput> 273</screen> 274 The man pages can be installed using this command: 275<screen> 276&rootprompt; <userinput>make installman</userinput> 277</screen> 278 </para> 279 280 <para> 281 Note that if you are upgrading from a previous version of Samba the old 282 versions of the binaries will be renamed with an <quote>.old</quote> extension. 283 You can go back to the previous version by executing: 284<screen> 285&rootprompt; <userinput>make revert</userinput> 286</screen> 287 As you can see from this, building and installing Samba does not need to 288 result in disaster! 289 </para> 290 291 292 <sect2> 293 <title>Compiling Samba with Active Directory Support</title> 294 295 <para> 296 In order to compile Samba with ADS support, you need to have installed 297 on your system: 298 </para> 299 300 <itemizedlist> 301 302 <listitem><para> 303 The MIT or Heimdal Kerberos development libraries 304 (either install from the sources or use a package). 305 </para></listitem> 306 307 <listitem><para> 308 The OpenLDAP development libraries. 309 </para></listitem> 310 311 </itemizedlist> 312 313 <para> 314 If your Kerberos libraries are in a nonstandard location, then 315 remember to add the configure option 316 <option>--with-krb5=<replaceable>DIR</replaceable></option>. 317 </para> 318 319 <para> 320 After you run configure, make sure that the 321 <filename>include/config.h</filename> it generates contain lines like this: 322<programlisting> 323#define HAVE_KRB5 1 324#define HAVE_LDAP 1 325</programlisting> 326 </para> 327 328 <para> 329 If it does not, configure did not find your KRB5 libraries or 330 your LDAP libraries. Look in <filename>config.log</filename> to figure 331 out why and fix it. 332 </para> 333 334 <sect3> 335 <title>Installing the Required Packages for Debian</title> 336 337 <para>On Debian, you need to install the following packages:</para> 338 <para> 339 <itemizedlist> 340 <listitem><para>libkrb5-dev</para></listitem> 341 <listitem><para>krb5-user</para></listitem> 342 </itemizedlist> 343 </para> 344 </sect3> 345 346 <sect3> 347 <title>Installing the Required Packages for Red Hat Linux</title> 348 349 <para>On Red Hat Linux, this means you should have at least: </para> 350 <para> 351 <itemizedlist> 352 <listitem><para>krb5-workstation (for kinit)</para></listitem> 353 <listitem><para>krb5-libs (for linking with)</para></listitem> 354 <listitem><para>krb5-devel (because you are compiling from source)</para></listitem> 355 </itemizedlist> 356 </para> 357 358 <para>in addition to the standard development environment.</para> 359 360 <para>If these files are not installed on your system, you should check the installation 361 CDs to find which has them and install the files using your tool of choice. If in doubt 362 about what tool to use, refer to the Red Hat Linux documentation.</para> 363 364 </sect3> 365 366 <sect3> 367 <title>SuSE Linux Package Requirements</title> 368 369 <para> 370 SuSE Linux installs Heimdal packages that may be required to allow you to build 371 binary packages. You should verify that the development libraries have been installed on 372 your system. 373 </para> 374 375 <para> 376 SuSE Linux Samba RPMs support Kerberos. Please refer to the documentation for 377 your SuSE Linux system for information regarding SuSE Linux specific configuration. 378 Additionally, SuSE is very active in the maintenance of Samba packages that provide 379 the maximum capabilities that are available. You should consider using SuSE-provided 380 packages where they are available. 381 </para> 382 383 </sect3> 384 385 </sect2> 386 387</sect1> 388 389<sect1 id="startingSamba"> 390 <title>Starting the &smbd; &nmbd; and &winbindd;</title> 391 392 393 <para> 394 <indexterm><primary>inetd</primary></indexterm> 395 You must choose to start &smbd;, &winbindd; and &nmbd; either as daemons or from 396 <application>inetd</application>. Don't try to do both! Either you can put 397 them in <filename> inetd.conf</filename> and have them started on demand by 398 <application>inetd</application> or <application>xinetd</application>, or you 399 can start them as daemons either from the command-line or in 400 <filename>/etc/rc.local</filename>. See the man pages for details on the 401 command line options. Take particular care to read the bit about what user 402 you need to have to start Samba. In many cases, you must be root. 403 </para> 404 405 <para> 406 The main advantage of starting &smbd; and &nmbd; using the recommended daemon method 407 is that they will respond slightly more quickly to an initial connection request. 408 </para> 409 410 <sect2> 411 <title>Starting from inetd.conf</title> 412 413 <indexterm><primary>inetd</primary></indexterm> 414 415 <note> 416 <para>The following will be different if 417 you use NIS, NIS+, or LDAP to distribute services maps.</para> 418 </note> 419 420 <para>Look at your <filename>/etc/services</filename>. 421 What is defined at port 139/tcp? If nothing is defined, 422 then add a line like this:</para> 423 424 <para><programlisting>netbios-ssn 139/tcp</programlisting></para> 425 426 <para>Similarly for 137/udp, you should have an entry like:</para> 427 428 <para><programlisting>netbios-ns 137/udp</programlisting></para> 429 430 <para> 431 Next, edit your <filename>/etc/inetd.conf</filename> and add two lines like this: 432<programlisting> 433netbios-ssn stream tcp nowait root /usr/local/samba/sbin/smbd smbd 434netbios-ns dgram udp wait root /usr/local/samba/sbin/nmbd nmbd 435</programlisting> 436 </para> 437 438<indexterm><primary>/etc/inetd.conf</primary></indexterm> 439 <para> 440 The exact syntax of <filename>/etc/inetd.conf</filename> 441 varies between UNIXes. Look at the other entries in inetd.conf 442 for a guide. 443 </para> 444 445 <para> 446 <indexterm><primary>xinetd</primary></indexterm> 447 Some distributions use xinetd instead of inetd. Consult the 448 xinetd manual for configuration information. 449 </para> 450 451 <note><para>Some UNIXes already have entries like netbios_ns 452 (note the underscore) in <filename>/etc/services</filename>. 453 You must edit <filename>/etc/services</filename> or 454 <filename>/etc/inetd.conf</filename> to make them consistent. 455 </para></note> 456 457 <note><para> 458 <indexterm><primary>ifconfig</primary></indexterm> 459 On many systems you may need to use the 460 <smbconfoption name="interfaces"/> option in &smb.conf; to specify 461 the IP address and netmask of your interfaces. Run 462 <application>ifconfig</application> as root if you do 463 not know what the broadcast is for your net. &nmbd; tries 464 to determine it at runtime, but fails on some UNIXes. 465 </para></note> 466 467 <warning><para> 468 Many UNIXes only accept around five parameters on the command 469 line in <filename>inetd.conf</filename>. This means you shouldn't 470 use spaces between the options and arguments, or you should use 471 a script and start the script from <command>inetd</command>. 472 </para></warning> 473 474 <para> 475 Restart <application>inetd</application>, perhaps just send it a HUP, 476 like this: 477<indexterm><primary>killall</primary></indexterm> 478<screen> 479&rootprompt;<userinput>killall -HUP inetd</userinput> 480</screen> 481 </para> 482 483 </sect2> 484 485 <sect2> 486 <title>Alternative: Starting &smbd; as a Daemon</title> 487 488 <para> 489 <indexterm><primary>daemon</primary></indexterm> 490<indexterm><primary>startsmb</primary></indexterm> 491 To start the server as a daemon, you should create a script something 492 like this one, perhaps calling it <filename>startsmb</filename>. 493 </para> 494 495<para><programlisting> 496#!/bin/sh 497/usr/local/samba/sbin/smbd -D 498/usr/local/samba/sbin/winbindd -D 499/usr/local/samba/sbin/nmbd -D 500</programlisting></para> 501 502 <para> 503 Make it executable with <command>chmod +x startsmb</command>. 504 </para> 505 506 <para> 507 You can then run <command>startsmb</command> by hand or execute 508 it from <filename>/etc/rc.local</filename>. 509 </para> 510 511 <para> 512 To kill it, send a kill signal to the processes &nmbd; and &smbd;. 513 </para> 514 515 <note><para> 516 If you use the SVR4-style init system, you may like to look at the 517 <filename>examples/svr4-startup</filename> script to make Samba fit 518 into that system. 519 </para></note> 520 521 <sect3> 522 <title>Starting Samba for Red Hat Linux</title> 523 524 <para> 525 Red Hat Linux has not always included all Samba components in the standard installation. 526 So versions of Red Hat Linux do not install the winbind utility, even though it is present 527 on the installation CDROM media. Check to see if the <command>winbindd</command> is present 528 on the system: 529<screen> 530&rootprompt; ls /usr/sbin/winbindd 531/usr/sbin/winbindd 532</screen> 533 This means that the appropriate RPM package was installed. The following response means 534 that it is not installed: 535<screen> 536/bin/ls: /usr/sbin/winbind: No such file or directory 537</screen> 538 In this case, it should be installed if you intend to use <command>winbindd</command>. Search 539 the CDROM installation media for the samba-winbind RPM and install it following Red Hat 540 guidelines. 541 </para> 542 543 <para> 544 The process for starting Samba will now be outlined. Be sure to configure Samba's &smb.conf; 545 file before starting Samba. When configured, start Samba by executing: 546<screen> 547&rootprompt; service smb start 548&rootprompt; service winbind start 549</screen> 550 These steps will start &nmbd;, &smbd; and &winbindd;. 551 </para> 552 553 <para> 554 To ensure that these services will be automatically restarted when the system is rebooted 555 execute: 556<screen> 557&rootprompt; chkconfig smb on 558&rootprompt; chkconfig winbind on 559</screen> 560 Samba will be started automatically at every system reboot. 561 </para> 562 563 </sect3> 564 565 <sect3> 566 <title>Starting Samba for Novell SUSE Linux</title> 567 568 <para> 569 Novell SUSE Linux products automatically install all essential Samba components in a default installation. 570 Configure your &smb.conf; file, then execute the following to start Samba: 571<screen> 572&rootprompt; rcnmb start 573&rootprompt; rcsmb start 574&rootprompt; rcwinbind start 575</screen> 576 Now execute these commands so that Samba will be started automatically following a system 577 reboot: 578<screen> 579&rootprompt; chkconfig nmb on 580&rootprompt; chkconfig smb on 581&rootprompt; chkconfig winbind on 582</screen> 583 The Samba services will now be started automatically following a system reboot. 584 </para> 585 586 </sect3> 587 588 </sect2> 589 590</sect1> 591 592</chapter> 593