rbm_tutorial - Man Page

A tutorial introduction to rbm

Description

This tutorial will explain how to start using rbm to build rpm and debian packages for different distributions.

In this example we will package the tor software.

Creating a New Workspace

The first step is to create a rbm workspace. In this example, we will use ~/rbm, but you could use anything :

$ mkdir ~/rbm
$ cd ~/rbm

The first thing to do is to create the main configuration file, which will contain the configuration for all projects in this workspace. For now, we will just add the compress_tar option, and add more options later when needed.

$ cat > rbm.conf <<END
compress_tar: xz
END

The compress_tar options means that we want tarballs to be compressed using xz.

Creating a New Project

We will now add the tor project. To do this we just create the directory inside the projects directory, and put a config file inside containing the configuration for the project. The main option that we will set is git_url, which is the url used to clone the git repository of the software. If your project is using mercurial rather than git, you could set hg_url instead.

$ mkdir -p projects/tor
$ cat > projects/tor/config <<END
git_url: https://git.torproject.org/tor.git
END

We can check that the project is correctly defined using the projects command :

$ rbm projects
tor

And we can display the tor project configuration using the showconf command :

$ rbm showconf tor
---
git_url: https://git.torproject.org/tor.git

Version Settings

The first thing to do when adding a new project is to configure the version settings: rbm needs to be able to compute the version of the software, for any git commit.

By default, rbm will use the latest tag on which a commit is based as the version number. Sometimes it works, when the project uses version numbers as tags, but this is not always the case. Alternatively, you can define a var/version_command option with a shell script or command that will print the version number.

For tor, we will use a var/version_command option. The version of the software is defined in the ChangeLog file, so we will use a simple command to get it. The tor config file now look like this :

git_url: https://git.torproject.org/tor.git
version: '[% exec(c("var/version_command")) %]'
var:
  version_command: perl -ne 'if (m/^Changes in version ([^-]+)-.*$/) { print "$1\n"; exit }' < ChangeLog

Using the showconf command, we can check the value of the version option for different commits :

$ rbm showconf tor version --git-hash master
0.2.5.1
$ rbm showconf tor version --git-hash tor-0.2.4.17-rc
0.2.4.17

The first time you run this command, the git repository will have to be cloned, which can take some time.

Creating a Tarball

After setting the configuration for the version, we are now ready to create a tarball based on a git commit. We can do this using the tar command :

$ rbm tar tor --git-hash master
Created /home/boklm/rbm/out/tor-0.2.5.1.tar.xz
$ rbm tar tor --git-hash tor-0.2.4.17-rc
Created /home/boklm/rbm/out/tor-0.2.4.17.tar.xz

Building an RPM Package

In order to build rpm packages, you will need to define an rpm step (see rbm_steps(7)) in rbm.conf.

The rbm.conf file should define an rpm option containing the commands to build an rpm package:

rpm: |
  #!/bin/bash
  [ here the commands for building an rpm package ]

Unfortunately, this part of the tutorial, with details about the definition of the rpm step has not been written yet.

You should be able to start a build with the build command and the --step option:

$ rbm build --step rpm tor

Building a Debian Package

Similarly to the rpm package, building debian packages will require that you define a deb step in rbm.conf. This part of the tutorial has not been written yet.

Using a Build Container

Using the remote options (see rbm_remote(7)) you can do the builds inside containers. Unfortunately this part of the tutorial has not been written yet. However you can look at the Tor Browser build repository for an example: https://gitweb.torproject.org/builders/tor-browser-build.git/

See Also

rbm(1)

Referenced By

rbm(1).

07/25/2022