# About building cephadm
This is a dist-git repo for cephadm. https://git.centos.org/rpms/cephadm
The master brach is unused: use an existing branch instead.
Branch names follow convention like c<VERSION>-sig-storage-ceph-VERSION> as described
on [Naming and Patterns for Mapping Git Branches to Koji Tags](https://wiki.centos.org/BrianStinson/GitBranchesandKojiTags)
```
c8-sig-storage-ceph-octopus: CentOS-8
c8-sig-storage-ceph-pacific: CentOS-8
...
```
Instructions for building the ceph package for the CentOS Storage SIG can be found in the following places:
[Comunity Build System](https://wiki.centos.org/HowTos/CommunityBuildSystem)
[Storage SIG landing page](https://wiki.centos.org/SpecialInterestGroup/Storage)
Before starting, choose the branch containing the maintained spec for the cephadm package:
```
git checkout -t origin/c8-sig-storage-ceph-<VERSION>
```
You can find the sha1 for the "patches_base" comment and "Source0" with "git ls-remote", e.g.
```
$ git ls-remote https://github.com/ceph/ceph pacific
ca0faa0a628c041f5b5313060344006830812e25 refs/heads/pacific
```
The source code can be downloaded using the 'spectool' tool , which uses the Source0 entry in the SPEC:
```
$ spectool -g SPECS/cephadm.spec
$ mv cephadm SOURCES/cephadm
```
Create a src.rpm with:
```
$ rpmbuild -bs \ --define "_sourcedir $PWD/SOURCES" --define "_srcrpmdir $PWD" \ --define "dist .el8" SPECS/cephadm.spec
```
and finally we can build it running:
```
$ cbs build [--scratch] storage8-ceph-pacific-el8 cephadm.el8.src.rpm
```
## Build cephadm using the Makefile
A Makefile is provided with the purpose of automating the steps described before.
It provides an helper function and can be used to build the srpm, as well as obtaining
additional information on the current build.
The act of running the 'cbs build' command is not automated on the Makefile since it's out
of scope: feel free to refer to the last step of the previous section to run the cbs build
after the Makefile execution ends.
### Executing the Makefile without parameters
If no parameters are provided, the Makefile computes the branch name, the version
and the release from the current spec file.
The Release field is increased by 1 but the version remains the same: this is because
we're building the package against a newer hash instead of bumping the cephadm version
according to the provided tags (the ceph-ansible approach).
If you want to produce a new srpm for an existing cephadm version, just run:
```
make
```
and you will see an output like this:
```
[fmount@buildbot cephadm]$ make
sed SPECS/cephadm.spec.in \
-e "s/89ceb19fd8609fd4c99d10dd63f42e6786e37c86/dcf77bd9ff89dfef682c4a2dda05ac5c8651dbe5/" \
-e 's/@VERSION@/16.1.0/' \
-e 's/@RELEASE@/2/' \
> SPECS/cephadm.spec
cp SPECS/cephadm.spec SPECS/cephadm.spec.in
/usr/bin/spectool -g SPECS/cephadm.spec -C SOURCES -f
Getting https://github.com/ceph/ceph/raw/dcf77bd9ff89dfef682c4a2dda05ac5c8651dbe5/src/cephadm/cephadm to SOURCES/cephadm
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 170 100 170 0 0 32 0 0:00:05 0:00:05 --:--:-- 40
100 214k 100 214k 0 0 20886 0 0:00:10 0:00:10 --:--:-- 47630
rpmbuild -bs /home/fmount/cephadm/SPECS/cephadm.spec \
--define "_sourcedir /home/fmount/cephadm/SOURCES" \
--define "_srcrpmdir /home/fmount/cephadm" \
--define "dist .el8"
Wrote: /home/fmount/cephadm/cephadm-16.1.0-2.el8.src.rpm
```
In addition, a cephadm.spec file is generated from the input `SPECS/cephadm.spec.in` and it can be
found under the SPECS directory.
At the end of this process, as described in the previous section, you can run the cbs build:
```
$ cbs build [--scratch] storage8-ceph-pacific-el8 cephadm-16.1.0-2.el8.src.rpm
```
### Executing the Makefile overriding some input parameters
If you want to bump to a newer released version, the hash computation remains unchanged,
but you might want to patch the spec input file properly.
For this reason a few parameters, exposed via the `cephadm.spec.in` file can be overrided:
* RELEASE
* DIST = el8 by default
* VERSION
For instance, assuming you have the following data in the current spec:
```
[fmount@buildbot cephadm]$ cat SPECS/cephadm.spec | grep -iE "(Release|Version)"
Version: 16.1.0
Release: 2%{?dist}
```
you can patch (and bump to a newer NVR) the current (existing) spec file by running:
```
DIST=el8 RELEASE=1 VERSION=16.1.0 make
```
Then, running the regular cbs build command a new cephadm rpm can be built:
```
$ cbs build [--scratch] storage8-ceph-pacific-el8 cephadm-16.1.0-2.el8.src.rpm
```