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".
|