summaryrefslogtreecommitdiff
path: root/index.mdwn
blob: 86f10fa43b99c0686580aee90f3f09439a374b36 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
[[!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.