b3969c55b7a4dac624b5ec400f1c3d4507b04c76
[openafs-wiki.git] / HowToBuildOpenAFSFromSource.mdwn
1 This page describes how to build OpenAFS binaries from source code.
2 The information is specific to unix-like systems. See the
3 README-WINDOWS file in the root of the OpenAFS source code tree for
4 instructions and software needed to build OpenAFS on Microsoft Windows.
5
6 Unless otherwise noted, the information on this page is for building
7 the OpenAFS master branch or the OpenAFS stable releases (currently
8 the 1.6.x series).
9
10 [[!toc levels=3]]
11
12 # The Short Version #
13
14 For the impatient, this section describes how to get a code tree and
15 build it, assuming you have a development environment already setup.
16
17 The following shows how to download source code tarballs and build the
18 OpenAFS binaries:
19
20     $ wget http://openafs.org/dl/openafs/<version>/openafs-<version>-src.tar.bz2
21     $ wget http://openafs.org/dl/openafs/<version>/openafs-<version>-doc.tar.bz2
22     $ tar xjf openafs-<version>-src.tar.bz2
23     $ tar xjf openafs-<version>-doc.tar.bz2
24     $ cd openafs-<version>
25     $ ./configure
26     $ make
27
28 See [openafs downloads](http://openafs.org/dl/openafs) for available versions.
29
30 The following shows how to do a git checkout and build the OpenAFS binaries,
31
32     $ git clone git://git.openafs.org/openafs.git
33     $ cd openafs
34     $ git checkout <branch-or-tag>
35     $ ./regen.sh
36     $ ./configure
37     $ make
38
39 You will usually want to specify configure options. For example, to enable the
40 traditional Transarc/IBM AFS installation paths, run configure with the
41 --enable-transarc-paths option. (Read on for more information about configure
42 options.)
43
44     $ ./configure --enable-transarc-paths --enable-checking --enable-debug
45     $ make
46     $ make dest
47
48 This will build the binaries and place them in the &lt;platform&gt;/dest
49 directories, that is, the Transarc-style binary distribution directory layout.
50
51 See [[how to build OpenAFS RPM packages|HowToBuildOpenAFSRpmPackages]] for
52 instructions on how to build RPM packages.
53
54 # Building OpenAFS #
55
56 Building and packaging OpenAFS is not difficult on current unix-like
57 systems. A small number of fairly common libraries and tools are required. The
58 kernel headers and a compiler capable of building a kernel module is needed to
59 build the OpenAFS kernel module (used by the cache manager and for
60 inode-backend fileservers.) The gnu autoconf and automake tools are used to
61 configure the build system, so should be familiar to most people accustomed to
62 building binaries on unix-like systems.
63
64 Begin by verifying you have the prerequisite tools and libraries installed on your
65 build host. These are listed in the next section. You will need to obtain the
66 OpenAFS source code, either by downloading a release tar file, or by checking
67 out a version from the git repository.
68
69 See the README file for details on building OpenAFS and platform specific
70 notes. See src/SOURCE-MAP for a brief description of each source code component.
71
72 A script called regen.sh is used to build the configure script and to
73 generate the man page documentation from perl pod formatted files.
74
75 The configure sets up the build system for your platform. Configure will
76 attempt to detect your platform type and capabilities. Configure will generate
77 the makefiles using automake. You may need to specify configure options to
78 enable certain compile-time features. Run ./configure --help to see a
79 complete list of the available configure options.
80
81 After a successful run of configure, run make in the top level directory to
82 build all the client and server OpenAFS binaries. The server binaries, user and
83 admin tools, and the cache manager can be installed manually if you are not
84 using your systems package manager, for example if you are installing OpenAFS
85 on solaris, or if the target system is being used for testing and development.
86 The installation paths depend on the configure options specified.
87
88 The process for building rpm packages is actually a bit different than what was
89 just described above.  Packaging scripts in the source tree are used to build
90 rpms from a source code tree tar file. You'll need to create two tar files, one
91 of the source and one of the documentation. A script is run to build a source
92 rpm, which can be used to build the various rpm packages.  Details are given
93 on the page [[How to build OpenAFS RPM packages|HowToBuildOpenAFSRpmPackages]].
94
95 ## Prerequisites ##
96
97 The following tools are needed to build OpenAFS from source from a tar file:
98
99 - make
100 - compiler
101 - assembler
102 - linker
103 - ranlib
104 - lex/yacc
105 - install
106 - perl 5.6 or better (only to build the documention)
107
108 In addition to the above, the following tools are needed to build OpenAFS
109 from a git checkout:
110
111 - git
112 - autoconf 2.60 or better
113 - automake
114 - libtool
115
116 The compiler used must be capable of building kernel modules for the target
117 platform.
118
119 > Note for RHEL users: RedHat Enterprise Linux 5.5 and less shipped with a
120 > version of autoconf too old to generate the OpenAFS configure script.
121 > Fortunately, the recently released RHEL 6.0 shipped with a more up to date
122 > version of autoconf which mets the minimum version needed to generate the
123 > configure script.
124
125 The following tools are needed to build OpenAFS RPMS:
126
127 - perl 5.6 or better
128 - rpmbuild
129
130 The following development libraries are needed:
131
132 - libc
133 - kerberos 5
134 - perl
135 - ncurses (optional, needed to build scout/afsmonitor)
136 - pam (optional)
137 - kernel headers
138
139 The ncurses libraries are needed to build the ncurses based admin tools
140 scout and afsmonitor. The kerberos 5 libraries are needed to build kerberos 5
141 support, which is *strongly* recommended.
142
143 ### Linux Debian Packages ###
144
145 On a Debian 6, the required packages can be install with the following commands apt-get commands,
146
147     $ apt-get install git autoconf automake libtool make gcc flex bison
148     $ apt-get install libc6-dev libkrb5-dev libperl-dev libncurses5-dev linux-headers-$(uname -r)
149
150 ### Linux RPM Packages ###
151
152 On a RedHat-based linux distributions, all of the required packages can be
153 installed with the following yum commands,
154
155      $ yum install git-core gcc autoconf automake libtool make flex bison
156      $ yum install glibc-devel krb5-devel perl-devel ncurses-devel pam-devel kernel-devel-$(uname -r)
157
158 The following additional packages are needed to [[build RPM packages|HowToBuildOpenAfsRpmPackages]].
159
160      $ yum install wget perl-devel perl-ExtUtils-Embed rpm-build
161
162 ### Solaris Packages ###
163
164 [Oracle Solaris Studio][1] can be used to build OpenAFS binaries on the
165 solaris platform. Solaris Studio is freely available for the solaris and linux
166 platforms with a no-cost Oracle Technology Network (OTN) account. Follow the
167 package installer instructions for your platform type and version.
168
169 [1]: http://www.oracle.com/technetwork/server-storage/solarisstudio
170
171 All the tools and libs needed to build OpenAFS are available with the `pkg`
172 command on Solaris 11.  Earlier versions of Solaris require third party tools
173 and libs.
174
175 #### Solaris 10 and earlier ####
176
177 The [OpenCSW][2] project provides software packages for solaris 10 and earlier
178 which can be easily installed to build OpenAFS.  Follow the [OpenCSW getting started][3]
179 instructions to setup the `pkgutil` package manager tool.
180
181 [2]: http://www.opencsw.org
182 [3]: http://www.opencsw.org/manual/for-administrators/getting-started.html
183
184 Update your path to include `/opt/csw/bin`.
185
186 With `pkgutil` installed, install the necessary packages;
187
188      $ sudo pkgutil -y --install git
189      $ sudo pkgutil -y --install gmake flex bison gsed automake autoconf libtool
190      $ sudo pkgutil -y --install libkrb5_dev libncurses_dev
191
192 Note: Is a perl devel lib needed on solaris?
193
194 #### Solaris 11 ####
195
196 Install [SolarisStudio][1] via tarball, or follow the instructions to install
197 the package for your platform.
198
199 Use the `pkg` tool to install the other necessary tools and libs to build OpenAFS
200 on Solaris 11.
201
202       $ sudo pkg install git
203       $ sudo pkg install make system/header flex bison gnu-m4 gnu-coreutils gnu-binutils gnu-sed 
204       $ sudo pkg install automake            /* this selects automake-111; if dependency errors are indicated, try automake-110 */
205       $ sudo pkg install autoconf libtool
206       $ sudo pkg install developer/gcc-3
207
208 The OpenAFS build process also requires the `gencat` program. Verify
209 `/usr/bin/gencat` is available, otherwise install the `SUNWloc` package.
210
211      $ sudo pkg install SUNWloc
212
213 ## Getting the Source Code ##
214
215 See [[GitDevelopers]] for details on how to use git to fetch OpenAFS source
216 code and to submit source code changes to the OpenAFS project. This is the
217 preferred method to retrieve the source code.  Briefly, first create a local
218 clone of the git repository and then checkout a local branch of the version you
219 need to build.  For example,
220
221     $ git clone git://git.openafs.org/openafs.git
222     $ cd openafs
223     $ git checkout openafs-stable-<major>-<minor>-<patchlevel>
224
225 Compressed tar files of the source tree are made available for each stable and
226 development release. The most recent release is located at
227 <http://openafs.org/release/latest.html>.  Archives for releases are located at
228 /afs/openafs.org/software/openafs/ and <http://dl.openafs.org/dl>. For example,
229 to download and uncompress version 1.4.14,
230
231     $ wget http://dl.openafs.org/dl/1.4.14/openafs-1.4.14-src.tar.bz2
232     $ wget http://dl.openafs.org/dl/1.4.14/openafs-1.4.14-doc.tar.bz2
233     $ tar xjf openafs-1.4.14-src.tar.bz2
234     $ tar xjf openafs-1.4.14-doc.tar.bz2
235     $ cd openafs-1.4.14
236
237 The -src archive contains the source code and the -doc archive contains the
238 documentation in xml and pod format. Having a separate archive for
239 documentation allows people working on documentation to download just the pod
240 and xml portions of the project.
241
242 ### Regen
243
244 After a git checkout, run the regen.sh shell script to generate a
245 configure script (and a configure-libafs script) and to generate
246 the man pages. The regen.sh script runs the autoconf tools to
247 generate the configure scripts and runs perl to generate the
248 man pages.
249
250     ./regen.sh
251
252 You can skip the generation of the man pages by specifying the '-q'
253 option to regen.sh.
254
255     ./regen.sh -q
256
257 Always run regen.sh again (and then configure) if you change any of the OpenAFS
258 m4 autoconf macros, such as configure.ac or any of the macros under src/cf.
259
260 ## Configure
261
262 The OpenAFS configure script has many options available. Take some time to read
263 the README file and the output of configure --help before running configure the
264 first time. The most common options are introduced below.
265
266 ### AFS sysname
267
268 AFS uses an identifier called a *sysname* to distinguish platforms. configure
269 will automatically detect the sysname of the build system and by default
270 assumes the target system matches. If you are building for a target system
271 which is different than the build system, or if for some reason the sysname
272 detection fails, you will need to manually specify the sysname with the
273 --with-afs-sysname option.  See the README file for a complete list of sysnames.
274
275 The 'sysname' is also used as the name of the destination sub-directory for the
276 binaries created during the build. This sub-directory is automatically created
277 during the build.
278
279 ### Installation Directory Path Modes
280
281 There are two modes for directory path handling: *Transarc mode* and *default
282 mode*. The mode is selected with the --enable-transarc-paths option.
283
284 Traditionally, AFS server binaries and configuration files are located in the
285 directory /usr/afs and client binaries and configuration files are located in
286 the directory /usr/vice/etc. This convention is known as *Transarc path mode*
287 because it was the convention adopted by Transarc/IBM in the commercial
288 predecessor of OpenAFS.  Use the --enable-transarc-paths configure option to
289 build binaries compatible with the Transarc installation convention.
290
291 When configure is run without the --enable-transarc-paths option, the build
292 system is configured to be in the *default mode*. This mode builds OpenAFS with
293 installation paths more commonly used in open-source projects, for example
294 /usr/local.  The standard configure --prefix option(s) can be used to specify
295 non-default directories.  See the README for details on the type of installation
296 directories and the configure options to set the paths.
297
298 Installation paths are set at build time. Do not mix binaries for the two modes
299 on the same system.
300
301 ### Linux Kernel Headers
302
303 When building on linux, configure will attempt to detect the path to the linux
304 kernel headers.  If this path is not found on the build system, you must
305 specify the path with the --with-linux-kernel-headers option. For example,
306
307     --with-linux-kernel-headers=/usr/src/linux
308
309 ### Kerberos 5 configuration
310
311 The 1.6.0 configure scripts should automatically find the kerberos 5
312 libraries and headers.
313
314 If you need to build 1.4.x, or if the krb5-config file is in a non-standard
315 location, use the --with-krb5-conf option to specify the path to the krb5-config
316 utility (part of the kerberos 5 development package).
317
318     --with-krb5-conf=/usr/bin/krb5-config
319
320
321 ### Debugging Options ###
322
323 To enable a debugging build, specify the --enable-debug option on the
324 ./configure command line.  This builds with debugging compiler options and
325 disables stripping of binaries.
326
327     --enable-debug                enable compilation of the user space code
328                                      with debugging information
329     --enable-debug-kernel         enable compilation of the kernel module
330                                      with debugging information
331     --enable-checking             Enable compiler warnings when building
332                                     with gcc and treat compiler warnings
333                                     as errors
334
335 ### Feature Options ###
336
337 There are many configure options for OpenAFS. See the ./configure --help
338 for a complete list and README for more details.  Common options are:
339
340     --enable-bos-restricted-mode  enable bosserver restricted mode
341                                      which disables certain bosserver functionality
342     --enable-bos-new-config       enable bosserver pickup of BosConfig.new on restarts
343     --enable-namei-fileserver     force compilation of namei fileserver
344                                     in preference to inode fileserver
345                                     on systems were inode is the default
346     --enable-supergroups          enable support for nested pts groups
347                                    WARNING: Once you make use of this option
348                                    by nesting one group inside another,
349                                    the resulting PTS database cannot be correctly
350                                    and safely used by a ptserver built
351                                    without this option.
352
353 ### Configure changes in 1.6.0 ###
354
355 If you have been building the 1.5.0 freatures branch, note the following configure
356 options have been removed in 1.6.0. Each feature is now always on, except as noted:
357
358 * --disable-afsdb
359 * --disable-largefile-fileserver
360 * --enable-bos-restricted
361 * --enable-fast-restart (off, but the code is still there)
362 * --disable-full-vos-listvol
363 * --enable-disconnected
364 * --enable-icmp-pmtu-discovery
365 * --enable-demand-attach-fs (see below)
366
367 In 1.5.x, the demand attach fileserver feature was enabld by the a configure
368 switch. Starting in 1.6.0, both DAFS and legacy binaries are built. The
369 DAFS binaries are prefixed with 'da', expect for the new salvageserver, since
370 salvageserver is new with DAFS.
371
372
373 ## Make
374
375 After a successful configure, run make to build OpenAFS. The
376 default target will build all.
377
378     $ make
379
380
381 ## Install ##
382
383 You can install the OpenAFS binaries outside a package system
384 by copying the binaries. If you built OpenAFS in the default
385 mode (that is, without --enable-transarc-paths), run the install
386 target as root to install the binaries.
387
388     $ sudo make install
389
390 If configure was run with --enable-transarc-paths, then run make to build a
391 binary distribution directory, and then manually copy the files as the root
392 user. To install the server and client binaries,
393
394     $ make dest
395     $ cd <sysname>/dest
396     $ sudo mkdir /usr/afs
397     $ sudo mkdir /usr/vice
398     $ sudo mkdir /usr/vice/etc
399     $ sudo cp -p -r root.server/usr/afs/* /usr/afs
400     $ sudo cp -p -r root.client/usr/vice/etc/* /usr/vice/etc
401
402 See the Quick Start Guide for complete instructions to setup
403 the OpenAFS cache manager and servers.
404
405 The 'make dest' command places workstation binaries in the sub-directories of
406 <sysname>/dest: bin, etc, man, lib, include. Optionally, copy these to you
407 local filesystem or install them in an appropriate path in AFS. To install
408 these file into your local filesystem:
409
410     $ sudo mkdir /usr/afsws
411     $ sudo cp -p -r bin /usr/afsws
412     $ sudo cp -p -r etc /usr/afsws
413     $ sudo cp -p -r man /usr/afsws
414     $ sudo cp -p -r lib /usr/afsws
415     $ sudo cp -p -r include /usr/afsws
416
417 See [Storing AFS Binaries in AFS](http://docs.openafs.org/QuickStartUnix/ch02s29.html) for instructions on
418 how to store the workstation binaries in AFS.
419
420 ## Post build ##
421
422 Some make targets of interest
423
424 - make clean - remove build artifacts
425 - make distclean - remove build and configure artifacts
426 - make tests - make the (old) afs test suite
427
428
429