0c7436699ed9048933ffb2ef3140aad03ac5c492
[openafs-wiki.git] / devel / HowToBuildOpenAfsRpmPackages.mdwn
1 # Building RPM packages for OpenAFS
2
3 This pages describes how to build OpenAFS client and server packages for RHEL
4 and CentOS using the contributed RPM spec file available in the OpenAFS source
5 tree.  Packages may be built from the OpenAFS release tar files or from a clone
6 of the OpenAFS git repository.
7
8 ## How to build release packages from an OpenAFS source distribution
9
10 The OpenAFS project provides releases as [source code distributions][3]. A
11 source RPM (src.rpm) file can easily be built from a source distribution
12 release, which can then be used to build rpm packages.
13
14 Step 1. Download the source distribution files.
15
16 Four files are provided in a release; source tarball, documentation tarball,
17 release notes, and a change log.
18
19     $ wget https://www.openafs.org/dl/openafs/1.8.5/openafs-1.8.5-src.tar.bz2
20     $ wget https://www.openafs.org/dl/openafs/1.8.5/openafs-1.8.5-doc.tar.bz2
21     $ wget https://www.openafs.org/dl/openafs/1.8.5/RELNOTES-1.8.5
22     $ wget https://www.openafs.org/dl/openafs/1.8.5/ChangeLog
23
24 Step 2. Extract packaging files contained in the source tarball.
25
26     $ tar xf openafs-1.8.5-src.tar.bz2 openafs-1.8.5/src/packaging/RedHat
27
28 Step 3. Run `makesrpm.pl` to build the source rpm file.
29
30     $ ./openafs-1.8.5/src/packaging/RedHat/makesrpm.pl \
31       openafs-1.8.5-src.tar.bz2 \
32       openafs-1.8.5-doc.tar.bz2 \
33       RELNOTES-1.8.5 \
34       ChangeLog
35     ...
36     SRPM is openafs-1.8.5-1.src.rpm
37
38 Step 4: Build the rpm packages.
39
40     $ rpmbuild --rebuild -bb --define "_topdir $(pwd)/rpmbuild" openafs-1.8.5-1.src.rpm
41
42
43 ## How to build release packages from git
44
45 The following commands show how to build RPM packages from a git checkout of a
46 release tag.
47
48     $ git clone git://git.openafs.org/openafs.git
49     $ cd openafs
50     $ git checkout <openafs-release-tag>  # e.g., openafs-stable-1_8_5
51
52     $ ./regen.sh
53     $ ./configure  # configure options are not required here.
54     $ make dist    # creates the source distribution in ./packages
55     $ make srpm    # get the source rpm name from the output
56
57     $ rpmbuild --rebuild -ba --define "_topdir $(pwd)/packages/rpmbuild" packages/<name>.src.rpm
58
59 The RPM packages will be created in the `packages/rpmbuild/RPMS` directory.  See
60 the RPM spec file in src/packaging/RedHat for `--define` options for optional
61 features and packages.
62
63 Note: One downside to this method is the RELNOTES and ChangeLog from the
64 OpenAFS release download page are not included in the built packages.
65
66 ## How to build release packages with afsutil
67
68 The contributed [afsutil][1] script can be used to build packages from a git
69 checkout. This tool is a front-end with various options to support building
70 client and server packages from release tags as well as non-release commits.
71 `afsutil` is available on [PyPI][2] and [github][1]
72
73     $ pip install afsutil
74
75     $ git clone git://git.openafs.org/openafs.git
76     $ cd openafs
77     $ git checkout <tag>  # e.g., openafs-stable-1_8_5
78
79     $ afsutil package [options]
80
81 The RPM packages will be written into the `packages/rpmbuild/RPMS` directory.
82
83 Some commonly used `afsutil package` options are:
84
85     --version=<custom-version> # for testing or building custom versions
86     --csdb=<path-to-custom-CellServDB-file>
87     --spec=<path-to-custom-openafs-spec-file>
88     --build=<what to build, one of: all, sources, srpm, userspace, kmods>
89     --kernel-version=<kernel-version> # may be given more than once
90
91 See `afsutil package --help` for a complete list of options.
92
93
94 [1]: https://github.com/openafs-contrib/afsutil
95 [2]: https://pypi.org/project/afsutil/
96 [3]: https://www.openafs.org/release/