Buildozer
Buildozer is an application that aims to ease the building and packaging process of software.
With this application, and with the help of the fpm library, you should be able to build and package any software like a breeze in a fully automatic manner.
Installation
Use this command to install buildozer:
gem install buildozer
Versioning
A small note about versioning of this project. Backward compatibility
for users will be kept for major version. That means that your definition
files are guaranteed to work for version 1.y.z
. The day we release
2.y.z
, it will not be backward compatible with major version lower
than 2.
Internal representation will be backward compatible for minor version.
That means that if your are using buildozer as a library, you can follow
x.1.z
whitout fear of breaking your code. However, changing from x.1.z
to x.2.z
will likely requires changes on your part.
Finally, new additions and changes that are backward compatible for users
and developers will be made on the revision version. For example, x.y.3
will be compatible with x.y.4
.
Usage
The meats that feeds every buildozer command is the definition. The
definition file (always ending with .bd.rb
) is defined using a custom
DSL based on ruby that ease packages definition. Each definition can
contains 0
to N
packages.
For each package, you defined some basic information about it like the name of the package, it's version, the url where sources can be found and many others including what the package provides and its dependencies.
For now, each definition if more or less platform specific but I hope this will change overtime to have platform agnostic package definition.
Here a sample build definition for erlang
(Important note, the build
definition is fake for now, will update it with real stuff at some
points):
# Buildozer package definition
# Architecture: x86
# Platform: CentOS 5.9
package "erlang" do
url "http://www.erlang.org/download/otp_src_R15B03-1.tar.gz"
version "R15B03"
maintainer "Matthieu Vachon"
architecture "i686"
provides "erlang"
depends "libc.so6"
includes "usr/bin"
end
package "erlang-devel" do
url "http://www.erlang.org/download/otp_src_R15B03-1.tar.gz"
version "R15B03"
maintainer "Matthieu Vachon"
architecture "i686"
provides "erlang-devel"
depends "libc.so6"
includes "usr/include"
end
A definition can contain multiple package definition. This is useful to define at the same time normal package and a development package. In the future, we plan to reduce duplication of package information maybe be specifying a inheritance mechanisms, ideas are welcome :)
Here the list of valid options for a package
-
url
- The url where the package can be downloaded. -
version
- The current version of the package -
maintainer
(optional) - The name of the maintainer of this package. This is NOT the author but rather the one who build the package. -
architecture
(optional) - The target architecture of the package. If left blank, the architecture of the machine is used. If set, it must be:auto
or a non-empty string value. -
provides
- An artifact that the package provides. Usually, this is binaries and libraries generated by the package when built. This can be call multiple times, each time adding a new provided artifact. -
depends
- An artifact that the package depends on. Usually, this will be some libraries or binaries needed to run the package. This can be call multiple times, each time adding a new dependency artifact. -
includes
- A list of folders that will be packaged when building an archive for the package like a rpm. This can be call multiple times, each time adding a new included folder.
Commands
When you have a build definition, let's call it erlang.bd.rb
, you pass it to
the various commands to do something useful with it.
Command RPM
The command rpm can be used to generate rpms from a definition file. The command will produce a single rpm for each package defined in the definition file.
> buildozer rpm -d "/path/to/built/package" erlang.bd.rb
It is important to note that you will need rpm_build
on your machine for this
to work. The command will fail if it's not the case.
In its internals, buildozer uses fpm
to produce the rpm archive file. You can
see the commands that would be executed by doing a dry-run. This will print
the commands to the standard ouput instead of executing them.
> buildozer rpm -n -d "/path/to/built/package" erlang.bd.rb
Contributing & Support
To contribute, simply fork the repository, make the changes you want and submit a pull request. Also, you can start an issue without a pull request if you would like some features or you have found some bugs.
You can also creates an issue just to discuss potential ideas and future directions for the project.