[Openstack-operators] Packaging with fpm
Mathieu Gagné
mgagne at iweb.com
Wed Mar 4 16:31:45 UTC 2015
Hi,
I'm currently experimenting with fpm.
I learned that fpm does not generate the files needed to upload your new
package to an APT repository. Since the package type built by fpm is
binary, that file would be the .changes control file.
This bothers me a lot because my current workflow looks like this:
1) Fork Ubuntu Cloud Archive OpenStack source packages
2) Apply custom patches using quilt [1]
3) Build source and binary packages using standard dpkg tools
4) Upload source and binary packages to private APT repository with dput
5) Install new packages
(repeat steps 2-4 until a new upstream release is available)
While I didn't test fpm against OpenStack packages, I did test it with
other internal projects. I faced the same challenges and came to similar
conclusions:
If I used fpm instead, step 4 would fail because there is no .changes
control file required by dput to upload to APT.
This raises the question:
How are people (using fpm) managing and uploading their deb packages for
distribution? APT? Maven? Pulp? Black magic?
I really like APT repositories and would like to continue using them for
the time being.
fpm vs native tools
-------------------
To continue on the general subject of packaging:
I do understand that fpm gives you some advantages like:
- being able to run the packaging step on non-Debian operating systems
- not having to create/manage a debian/ folder.
Are those really advantages?
With Docker, Vagrant and friends, you always have access to a "native"
operating system to package your stuff and use their tooling.
As for debian/, I feel not everyone like Debian packaging for various
reasons but I happen to still like them. They serve me very well.
So I thought about something regarding OpenStack packaging (for
operators, not upstream):
What if there was a place to get OpenStack package Debian *skeletons* so
you can build your own packages from master? AFAIK, the Anvil project
ships with .spec files. [2]
Why not doing the same for Debian packages? If such thing exists, would
you use it?
One important requirement for me is that package should be "compatible"
with native packages so Puppet can manage them without too much
modifications. This means Puppet shouldn't fail because it couldn't find
the nova-compute package. (because fpm only created the all-in-one nova
package)
Virtualenv
----------
I understand that people also like Python virtualenv because they are
(mostly) self-contained: no need to natively package python modules.
That's super interesting and I'm planning on trying it out myself in the
following months.
The giftwrap project [3] leverages fpm by automating the git checkout
and virtualenv parts.
Unfortunately, the packages generated aren't 100% compatible with Puppet
nor can they be uploaded to an APT repository. (still missing that
.changes control file)
Does it bother anyone else? Or are people using giftwrap not using
Puppet and APT repository to deploy their stuff?
Other system packages
---------------------
What about other system packages like libvirt or QEMU. Anyone (patching
and) packaging them? If so, how are you doing it? git-buildpackage?
Would there be interests in sharing the tooling and methodology?
So how can we have the cake AND eat it? =)
[1] Using gbp-pq from git-buildpackage to keep some level of sanity
[2]
https://github.com/stackforge/anvil/tree/master/conf/templates/packaging/specs
[3] https://github.com/blueboxgroup/giftwrap
--
Mathieu
More information about the OpenStack-operators
mailing list