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.
6 Unless otherwise noted, the information on this page is for building
7 the OpenAFS master branch or the OpenAFS stable releases (currently
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.
17 The following shows how to download source code tarballs and build the
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>
28 See [openafs downloads](http://openafs.org/dl/openafs) for available versions.
30 The following shows how to do a git checkout and build the OpenAFS binaries,
32 $ git clone git://git.openafs.org/openafs.git
34 $ git checkout <branch-or-tag>
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
44 $ ./configure --enable-transarc-paths --enable-checking --enable-debug
48 This will build the binaries and place them in the <platform>/dest
49 directories, that is, the Transarc-style binary distribution directory layout.
51 See [[how to build OpenAFS RPM packages|HowToBuildOpenAFSRpmPackages]] for
52 instructions on how to build RPM packages.
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.
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.
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.
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.
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.
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.
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]].
97 The following tools are needed to build OpenAFS from source from a tar file:
106 - perl 5.6 or better (only to build the documention)
108 In addition to the above, the following tools are needed to build OpenAFS
112 - autoconf 2.60 or better
116 The compiler used must be capable of building kernel modules for the target
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
125 The following tools are needed to build OpenAFS RPMS:
130 The following development libraries are needed:
135 - ncurses (optional, needed to build scout/afsmonitor)
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.
143 ### Linux Debian Packages ###
145 On recent versions of Debian, use the apt-get build-dep command to install the needed
148 $ sudo apt-get build-dep openafs
149 $ sudo apt-get install linux-headers-$(uname -r)
151 On a Debian 6, the required packages can be install with the following commands apt-get commands,
153 $ sudo apt-get install git autoconf automake libtool make gcc flex bison
154 $ sudo apt-get install libc6-dev libkrb5-dev libperl-dev libncurses5-dev linux-headers-$(uname -r)
156 ### Linux RPM Packages ###
158 On a RedHat-based linux distributions, all of the required packages can be
159 installed with the following yum commands,
161 $ sudo yum install git-core gcc autoconf automake libtool make flex bison
162 $ sudo yum install glibc-devel krb5-devel perl-devel ncurses-devel pam-devel kernel-devel-$(uname -r)
163 $ sudo yum install perl-devel perl-ExtUtils-Embed
165 The following additional packages are needed to [[build RPM packages|HowToBuildOpenAfsRpmPackages]].
167 $ sudo yum install wget rpm-build redhat-rpm-config
169 ### Solaris Packages ###
171 [Oracle Solaris Studio][1] can be used to build OpenAFS binaries on the
172 solaris platform. Solaris Studio is freely available for the solaris and linux
173 platforms with a no-cost Oracle Technology Network (OTN) account. For recent
174 versions of Solaris, use the `pkg' command to install Solaris Studio. Follow the
175 package installer instructions on the Solaris Studio download page for
176 your platform type and version. This requires you to create and download a key
177 and certificate using your OTN account.
179 [1]: http://www.oracle.com/technetwork/server-storage/solarisstudio
181 All the tools and libs needed to build OpenAFS are available with the `pkg`
182 command on Solaris 11. Earlier versions of Solaris require third party tools
185 #### Solaris 10 and earlier ####
187 The [OpenCSW][2] project provides software packages for solaris 10 and earlier
188 which can be easily installed to build OpenAFS. Follow the [OpenCSW getting started][3]
189 instructions to setup the `pkgutil` package manager tool.
191 [2]: http://www.opencsw.org
192 [3]: http://www.opencsw.org/manual/for-administrators/getting-started.html
194 Update your path to include `/opt/csw/bin`.
196 With `pkgutil` installed, install the necessary packages;
198 $ sudo pkgutil -y --install git
199 $ sudo pkgutil -y --install gmake flex bison gsed automake autoconf libtool
200 $ sudo pkgutil -y --install libkrb5_dev libncurses_dev
202 Note: Is a perl devel lib needed on solaris?
206 Install [SolarisStudio][1] using the `pkg' command. You will need an SSL
207 certificate and key, which can be created using your OTN account. See the instructions
208 on the Solaris Studio download page.
210 (Alternately, install Solaris Studio from the tar file installer, and then find
211 and install any missing dependencies.)
213 Use the `pkg` tool to install the other necessary packages:
215 $ sudo pkg install git
216 $ sudo pkg install text/locale
217 $ sudo pkg install gnu-coreutils gnu-binutils gnu-sed
218 $ sudo pkg install make flex bison
219 $ sudo pkg install automake autoconf libtool
220 $ sudo pkg install onbld
222 If you have dependency issues with automake, try automake-110
224 If you have installed Solaris Studio via the tar file, you may need to install
225 the `system/header' package manually:
227 $ sudo pkg install system/header
230 ## Getting the Source Code ##
232 See [[GitDevelopers]] for details on how to use git to fetch OpenAFS source
233 code and to submit source code changes to the OpenAFS project. This is the
234 preferred method to retrieve the source code. Briefly, first create a local
235 clone of the git repository and then checkout a local branch of the version you
236 need to build. For example,
238 $ git clone git://git.openafs.org/openafs.git
240 $ git checkout openafs-stable-<major>-<minor>-<patchlevel>
242 Compressed tar files of the source tree are made available for each stable and
243 development release. The most recent release is located at
244 <http://openafs.org/release/latest.html>. Archives for releases are located at
245 /afs/openafs.org/software/openafs/ and <http://dl.openafs.org/dl>. For example,
246 to download and uncompress version 1.4.14,
248 $ wget http://dl.openafs.org/dl/1.4.14/openafs-1.4.14-src.tar.bz2
249 $ wget http://dl.openafs.org/dl/1.4.14/openafs-1.4.14-doc.tar.bz2
250 $ tar xjf openafs-1.4.14-src.tar.bz2
251 $ tar xjf openafs-1.4.14-doc.tar.bz2
254 The -src archive contains the source code and the -doc archive contains the
255 documentation in xml and pod format. Having a separate archive for
256 documentation allows people working on documentation to download just the pod
257 and xml portions of the project.
261 After a git checkout, run the regen.sh shell script to generate a
262 configure script (and a configure-libafs script) and to generate
263 the man pages. The regen.sh script runs the autoconf tools to
264 generate the configure scripts and runs perl to generate the
269 You can skip the generation of the man pages by specifying the '-q'
274 Always run regen.sh again (and then configure) if you change any of the OpenAFS
275 m4 autoconf macros, such as configure.ac or any of the macros under src/cf.
279 The OpenAFS configure script has many options available. Take some time to read
280 the README file and the output of configure --help before running configure the
281 first time. The most common options are introduced below.
285 AFS uses an identifier called a *sysname* to distinguish platforms. configure
286 will automatically detect the sysname of the build system and by default
287 assumes the target system matches. If you are building for a target system
288 which is different than the build system, or if for some reason the sysname
289 detection fails, you will need to manually specify the sysname with the
290 --with-afs-sysname option. See the README file for a complete list of sysnames.
292 The 'sysname' is also used as the name of the destination sub-directory for the
293 binaries created during the build. This sub-directory is automatically created
296 ### Installation Directory Path Modes
298 There are two modes for directory path handling: *Transarc mode* and *default
299 mode*. The mode is selected with the --enable-transarc-paths option.
301 Traditionally, AFS server binaries and configuration files are located in the
302 directory /usr/afs and client binaries and configuration files are located in
303 the directory /usr/vice/etc. This convention is known as *Transarc path mode*
304 because it was the convention adopted by Transarc/IBM in the commercial
305 predecessor of OpenAFS. Use the --enable-transarc-paths configure option to
306 build binaries compatible with the Transarc installation convention.
308 When configure is run without the --enable-transarc-paths option, the build
309 system is configured to be in the *default mode*. This mode builds OpenAFS with
310 installation paths more commonly used in open-source projects, for example
311 /usr/local. The standard configure --prefix option(s) can be used to specify
312 non-default directories. See the README for details on the type of installation
313 directories and the configure options to set the paths.
315 Installation paths are set at build time. Do not mix binaries for the two modes
318 ### Linux Kernel Headers
320 When building on linux, configure will attempt to detect the path to the linux
321 kernel headers. If this path is not found on the build system, you must
322 specify the path with the --with-linux-kernel-headers option. For example,
324 --with-linux-kernel-headers=/usr/src/linux
326 ### Kerberos 5 configuration
328 The 1.6.0 configure scripts should automatically find the kerberos 5
329 libraries and headers.
331 If you need to build 1.4.x, or if the krb5-config file is in a non-standard
332 location, use the --with-krb5-conf option to specify the path to the krb5-config
333 utility (part of the kerberos 5 development package).
335 --with-krb5-conf=/usr/bin/krb5-config
338 ### Debugging Options ###
340 To enable a debugging build, specify the --enable-debug option on the
341 ./configure command line. This builds with debugging compiler options and
342 disables stripping of binaries.
344 --enable-debug enable compilation of the user space code
345 with debugging information
346 --enable-debug-kernel enable compilation of the kernel module
347 with debugging information
348 --enable-checking Enable compiler warnings when building
349 with gcc and treat compiler warnings
352 ### Feature Options ###
354 There are many configure options for OpenAFS. See the ./configure --help
355 for a complete list and README for more details. Common options are:
357 --enable-bos-restricted-mode enable bosserver restricted mode
358 which disables certain bosserver functionality
359 --enable-bos-new-config enable bosserver pickup of BosConfig.new on restarts
360 --enable-namei-fileserver force compilation of namei fileserver
361 in preference to inode fileserver
362 on systems were inode is the default
363 --enable-supergroups enable support for nested pts groups
364 WARNING: Once you make use of this option
365 by nesting one group inside another,
366 the resulting PTS database cannot be correctly
367 and safely used by a ptserver built
370 ### Configure changes in 1.6.0 ###
372 If you have been building the 1.5.0 freatures branch, note the following configure
373 options have been removed in 1.6.0. Each feature is now always on, except as noted:
376 * --disable-largefile-fileserver
377 * --enable-bos-restricted
378 * --enable-fast-restart (off, but the code is still there)
379 * --disable-full-vos-listvol
380 * --enable-disconnected
381 * --enable-icmp-pmtu-discovery
382 * --enable-demand-attach-fs (see below)
384 In 1.5.x, the demand attach fileserver feature was enabld by the a configure
385 switch. Starting in 1.6.0, both DAFS and legacy binaries are built. The
386 DAFS binaries are prefixed with 'da', expect for the new salvageserver, since
387 salvageserver is new with DAFS.
392 After a successful configure, run make to build OpenAFS. The
393 default target will build all.
400 You can install the OpenAFS binaries outside a package system
401 by copying the binaries. If you built OpenAFS in the default
402 mode (that is, without --enable-transarc-paths), run the install
403 target as root to install the binaries.
407 If configure was run with --enable-transarc-paths, then run make to build a
408 binary distribution directory, and then manually copy the files as the root
409 user. To install the server and client binaries,
413 $ sudo mkdir /usr/afs
414 $ sudo mkdir /usr/vice
415 $ sudo mkdir /usr/vice/etc
416 $ sudo cp -p -r root.server/usr/afs/* /usr/afs
417 $ sudo cp -p -r root.client/usr/vice/etc/* /usr/vice/etc
419 See the Quick Start Guide for complete instructions to setup
420 the OpenAFS cache manager and servers.
422 The 'make dest' command places workstation binaries in the sub-directories of
423 <sysname>/dest: bin, etc, man, lib, include. Optionally, copy these to you
424 local filesystem or install them in an appropriate path in AFS. To install
425 these file into your local filesystem:
427 $ sudo mkdir /usr/afsws
428 $ sudo cp -p -r bin /usr/afsws
429 $ sudo cp -p -r etc /usr/afsws
430 $ sudo cp -p -r man /usr/afsws
431 $ sudo cp -p -r lib /usr/afsws
432 $ sudo cp -p -r include /usr/afsws
434 See [Storing AFS Binaries in AFS](http://docs.openafs.org/QuickStartUnix/ch02s29.html) for instructions on
435 how to store the workstation binaries in AFS.
439 Some make targets of interest
441 - make clean - remove build artifacts
442 - make distclean - remove build and configure artifacts
443 - make tests - make the (old) afs test suite