Skip to content

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/control and other FIXME on each package.
  • Put debian/ folder in a debian branch 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