[[!meta title="Debian packaging effort!"]] In the past, we used to be [heavy slackware users](https://simplepkg.fluxo.info) when we just had a few boxes to manage. Then we had to change our whole packaging paradigm when we switched to Debian. These notes are mainly references to the detailed Debian/Ubuntu documentations we're using in the course of learning the intricacies of Debian packaging. Grab this repository using git clone --recursive git://git.fluxo.info/debian.git Configuration files ------------------- All the commands in this guide assumes that you're using [these configuration files](https://git.fluxo.info/?p=rhatto/dotfiles/debian.git;a=summary). Starting a new package ---------------------- We use the `packages/` folder from this repo to store sources: mkdir package/$package cd package/$package Build environment creation -------------------------- The following steps needs to be run just once for each arch and distro version. ### Setup cowbuilder chroots This is the recommended method: sudo mkdir -p /var/cache/pbuilder/sid-amd64 sudo -E cowbuilder --create sudo mkdir -p /var/cache/pbuilder/wheezy-amd64 sudo -E DIST=wheezy cowbuilder --create ### Setup pbuilder chroots If you want to setup directly using `pbuilder`: git-pbuilder create DIST=wheezy git-pbuilder ### Compatibility with git-buildpackage This is a workaround while we don't find a cleaner way to fix [this issue](http://ramblingfoo.blogspot.com.br/2012/10/howto-sudo-cowbuilder-git-buildpackage.html) with `git-buildpackage` not getting `~/.pbuilderrc` from the local user: ( cd /var/cache/pbuilder/ && sudo ln -s sid-amd64/base.cow ) External repo integration ------------------------- If your package storage lives elsewhere, make a symlink like this: ( cd /var/cache/pbuilder/wheezy-amd64 && \ sudo rm -rf result && \ sudo ln -s /var/data/apps/distros/debian/packages/build-area/wheezy-amd64 result ) Environment maintenance ----------------------- These steps should be run once in a while to ensure we have an up to date packaging environment. ### Pbuilder DIST=sid git-pbuilder update DIST=wheezy git-pbuilder update --override-config ### Cowbuilder DIST=sid sudo -E cowbuilder --update DIST=wheezy sudo -E cowbuilder --update --override-config Building -------- DIST=wheezy sudo -E cowbuilder --build $package*.dsc Signing ------- To sign both the `.dsc` and the `.changes` files: debsign $package*.changes Uploading --------- Simply run dupload *changes This assumes a `~/.dupload.conf` like the following: package config; $default_host = "myremote"; $cfg{'myremote'} = { fqdn => "myremote.example.org", login => "user", method => "scpb", incoming => "/var/reprepro/incoming/", # The dinstall on ftp-master sends emails itself #dinstall_runs => 1, }; It's also important that: 1. The host remote port is correctly defined at your `~/.ssh/config`. 2. The user is in the `reprepro` group in the server.