Example: packaging leap_cli and dependencies¶
Upstream: https://leap.se/code/issues/6503
Determine dependencies¶
First, in a fresh vagrant box with sid and testing in the sources.list:
sudo apt-get install rubygems gem2deb
sudo gem install leap_cli
Then we get the dependencies and build all packages:
dependencies=" `gem list | cut -d '(' -f 1` "
Which currently gives us the following result:
- activemodel
- activesupport
- base32
- blockenspiel
- builder
- capistrano
- colored
- command_line_reporter
- gli
- gpgme
- highline
- i18n
- json
- json_pure
- leap_cli
- mini_portile
- minitest
- net-scp
- net-sftp
- net-ssh
- net-ssh-gateway
- paint
- tee
- thread_safe
- tzinfo
- versionomy
- ya2yaml
Gem cleanup:
sudo gem uninstall $dependencies
Check existing dependencies:
for item in $dependencies; do
package=ruby-"`echo $item | sed -e 's/_/-/'`"
packages="$packages $package"
done
apt-get install --dry-run $packages
Then:
- Check for non-existing packages.
- Try different package names.
- Update your list of existing
$packages.
In this example we have the following $already_ported dependencies:
- capistrano
- ruby-activemodel
- ruby-activesupport
- ruby-blockenspiel
- ruby-builder
- ruby-colored
- ruby-gpgme
- ruby-highline
- ruby-i18n
- ruby-json
- ruby-minitest
- ruby-net-scp
- ruby-net-sftp
- ruby-net-ssh
- ruby-net-ssh-gateway
- ruby-paint
- ruby-thread-safe
- ruby-tzinfo
- ruby-versionomy
That means the following $gems needs to be packaged:
- base32
- command_line_reporter
- gli
- json_pure (we can just use ruby-json and ignore this dependency)
- leap_cli
- mini_portile
- tee
- ya2yaml
In summary, we need to port the following $new_packages:
- ruby-base32
- ruby-command-line-reporter
- ruby-gli
- ruby-mini-portile
- ruby-tee
- ruby-ya2yaml
- ruby-leap-cli
Build remaining packages¶
for gem in $gems; do
gem2deb $gem
done
Getting the source for the existing packages¶
for package in $already_ported; do
apt-get -t jessie source --download-only $package
dpkg-source -x $package*dsc
done
Next steps¶
- Fix
debian/controland otherFIXMEon each package. - Put
debian/folder in adebianbranch on each source. - Fix tests.
- Other best practices.
- Review the code.
- Automate building with pbuilder for
sid. - Fix lintian warnings.
- Upstream pull requests.
- Backport everything to
wheezy.
Per-package tasks¶
- ruby-faker:
- https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=765124
- https://github.com/rails/rails/issues/13164
- ruby-leap-cli:
- net-ssh compatibility:
- https://github.com/net-ssh/net-ssh/issues/145
- https://github.com/capistrano/capistrano/issues/927
-
workflow:
git checkout develop git archive --prefix=leap-cli-1.5.6/ --format=tar HEAD | bzip2 > ../tarballs/leap-cli-1.5.6.tar.bz2 git checkout debian git-buildpackage --git-ignore-branch