summaryrefslogtreecommitdiffstats
path: root/software/debian_maint.page
blob: 2b371bdf6fb9e6b43f10ae703bc3e00e56d0240a (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
120
121
122
123
124
125
126
127
128
129
130
131
132
---
format: markdown
title: Debian Maintainership
...

## Developer Machine Setup

Install pacakges:

    sudo apt install build-essential ccache cdbs cowbuilder debhelper \
        devscripts dgit dh-make distcc fakeroot git-buildpackage lintian \
        pbuilder quilt sbuild schroot svn-buildpackage wdiff piuparts

I set the following user-wide environment variables:

    DH_VERBOSE=1
    DEB_BUILD_MAINT_OPTIONS="hardening=+all"
    DEBFULLNAME=""
    DEBEMAIL=""

`~/.quiltrc`:

    QUILT_PATCHES="debian/patches"
    QUILT_NO_DIFF_INDEX=1
    QUILT_NO_DIFF_TIMESTAMPS=1
    QUILT_REFRESH_ARGS="-p ab"
    QUILT_DIFF_ARGS="--color=auto"
    QUILT_DIFF_OPTS='-p'

Create a quick blank debug docker (faster than most other tools for creating
throw-away environments):

    docker pull debian:sid
    docker run -t -i debian:sid bash
    # In container:
    apt update

Create a `cowbuilder` environment:

    sudo cowbuilder --create            # on new machines
    sudo cowbuilder --update            # ~regularly
    sudo cowbuilder --build thing.dsc   # do the build

## Basic Commands

Run from inside source directory, except apt-get commands:

    apt-get source $PKG
    dch -i      # new debian/changelog entry w/ incremented version
    dch "some task" # adds line to current changelog entry
    uscan -v .  # manually check for new package version
    gbp import-orig --uscan     # import new release via uscan (for gbp-developed packages)
    lintian -EviIL +pedantic    # after build
    apt-get build-dep $PKG
    dpkg-buildpackage -us -uc   # just build a package on local machine (no sign)
    # OR
    debuild -us -uc   # same as above + lintian? no color
    sudo debi         # install locally
    debdiff pkg_1.0.deb pkg_1.0-1
    dh_make -f ../something-1.0.tar.gz  # does the renaming to .orig.tar.gz automatically
    pdebuild --pbuilder cowbuilder

## Patches/Quilt

To apply all patches to local directory:

    quilt push -a

Create a new patch, edit files, refresh:

    quilt new some_good_name.patch
    quilt add file_to_edit.c   # could be multiple
    # make additional edits
    quilt refresh

Un-apply (return to upstream source state):

    quilt pop -a

## dgit

`dgit` is complicated! Mostly because it is flexible/powerful, works with a lot
of packaging workflows, and there is not a clear default workflow of packaging
in general or with `dgit`.

In particular dgit is mostly just about interfacing with debian project
infrastructure, not storing packaging info in git format. There are multiple
tools/workflows for the later (git-buildpackage ("gpb"), git-dpm, etc).

## Debian Helper (`dh`)

To override individual built targets, just define them in `debian/rules`.

Starting from scratch, when you have tarballs:

1. `mkdir` and `git init` an empty repo
2. `gbp import-orig --pristine-tar <tarball>`. You can filter files out here if
   you need to, eg for policy/copyright reasons.
3. `dh_make -p $PKG_$VERSION` to start with defaults.

## Other Tasks

Mentors uploads (see [intro](https://mentors.debian.net/intro-maintainers)):

- setup a `~/.dput.cf`
- create a webface account
- upload with: `dput mentors SOMETHING.changes`

`pbuilder` for cross-platform/cross-arch builds (eg, armel, mips):

    # setup ~/.pbuilderrc:
    #  https://jodal.no/2015/03/08/building-arm-debs-with-pbuilder/
    sudo apt install qemu-user-static
    sudo OS=debian DIST=stretch ARCH=armel pbuilder --create

then, each test build (slow!):

    sudo OS=debian DIST=stretch ARCH=armel pdebuild

Running piuparts is simple (but slow):

    sudo piuparts <pkg>.deb

## References

- [Official Policy Manual]([https://www.debian.org/doc/debian-policy/):
  basically a style guide for how software should be packaged and how a Debian
  operating system should work.
- [Packaging Tutorial](https://www.debian.org/doc/manuals/packaging-tutorial/packaging-tutorial.en.pdf):
  this was a great getting-started resource for me: what files under `debian/`
  do what, what automated tooling exists, how packaging has changed over time,
  etc. "Hands on".