build debian/ubuntu packages to make it easy for users to...
TRANSCRIPT
![Page 1: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/1.jpg)
1
Build Debian/Ubuntu packagesto make it easy for users to install
your software
Samuel Thibault
2016 November 8th
![Page 2: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/2.jpg)
2
Outline
● Why making packages?● How about Debian● Introduction to distribution & packages● Introduction to making a package● Introduction to distributing a package
![Page 3: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/3.jpg)
3
Why making packages?
./configure && make && make install● Install where?● Manage upgrades● Missing dependencies● Make sure dependencies kept installed
![Page 4: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/4.jpg)
4
How about Debian?
One of the main GNU/Linux distributions● Started in 1993● Community-based● Ported to a dozen architectures● Basically includes most available free software● Many many many derivatives
● More than 300, 120 of which still active● Ubuntu, notably
● ~1000 developers● And many many more maintainers
![Page 5: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/5.jpg)
5
How about Debian?
Social Contract● Between developers and users● Basically
● “Debian will always be free”● “We won’t hide problems”
– Everything is public, except debian-private● “Users are our priority”● “There is non-free software out there”
– “non-free” and “contrib” sections
![Page 6: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/6.jpg)
6
What is a distribution?
From source to installed system● Gather coherent set of source code
● Linux kernel (or others)● Libc● System tools● Libraries● Applications● Desktop environments
● Compile everything● “binary Packages”
![Page 7: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/7.jpg)
7
What is a distribution?
● Archive● http mirrors
● Installer● Unpacks basic system● Then make it install binary packages
● Package manager● To install more binary packages
And that’s about it!
![Page 8: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/8.jpg)
8
What is a package?
Source vs. binary package● Source package:
● “upstream” source code (as a tarball)● debian/ directory (as another tarball, or patch)
– Debian meta-data– some patches against upstream source code
...build…● Binary package(s):
● Binaries + meta-data
![Page 9: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/9.jpg)
9
Put into practice
€ apt-get source hello
€ ls hello*
hello_2.10-1.dsc
hello_2.10.orig.tar.gz
hello_2.10-1.debian.tar.xz
hello-2.10/
€ cd hello-2.10
€ ls
INSTALL README TODO Makefile.am Makefile.in
debian/
lib/ man/ po/ src/ tests/
![Page 10: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/10.jpg)
10
Put into practice
€ sudo apt-get build-dep hello
€ dpkg-buildpackage
…
€ cd ..
€ ls
…
hello_2.10-1_amd64.changes
hello_2.10-1_amd64.deb
€ sudo apt-get install ./hello_*.deb
![Page 11: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/11.jpg)
11
What is a source package?
The source is all the source, only the source● No pre-built stuff
● or regenerate it during the build
● No embedded copies of other software
Best guarantee for user to have free software● Able to rebuild it all● Able to modify all of it● Make sure to modify a library
![Page 12: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/12.jpg)
12
What is a source package?
Source meta-data● Potentially very large information● Basically
● debian/copyright: document licences● debian/control: package name, dependencies● debian/rules: how to build the package● debian/changelog: as name suggests
![Page 13: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/13.jpg)
13
Put into practice
Minimal debian/control
Source: hello
Build-Depends: debhelper (>= 10)
Package: hello
Architecture: any
Description: hello
This is just a test package
![Page 14: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/14.jpg)
14
Put into practice
Minimal debian/rules
#!/usr/bin/make -f
%:
dh $@
Thanks to debian/compat containing
10
![Page 15: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/15.jpg)
15
Put into practice
Minimal debian/changelog
hello (2.10-1) sid; urgency=low
* Initial packaging.
-- Samuel Thibault <[email protected]> Tue, 08 Nov 2016 14:00:00 +0100
![Page 16: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/16.jpg)
16
Package build
Several steps done by dpkg-buildpackage● debian/rules clean
● make clean
● debian/rules build● configure && make && make check
● debian/rules binary● make install● dh_install● dh_builddeb
![Page 17: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/17.jpg)
17
What is dh_install?
Simple case: one binary package● make install into debian/hello● dh_install basically no-op, dh_builddeb packs
Several binary packages● make install into debian/tmp● dh_install moves files to debian/hello-foo and
debian/hello-bar● dh_builddeb packs hello-foo and hello-bar
![Page 18: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/18.jpg)
18
What is dh_install?
Library example
debian/libhello1.install:
/usr/lib/*/lib*.so.*
debian/libhello-dev.install:
/usr/include
/usr/lib/*/lib*.a
/usr/lib/*/lib*.so
/usr/lib/*/pkgconfig/*
![Page 19: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/19.jpg)
19
Why two packages for a lib?
Basically, room● One usually don’t need -dev for all installed libs● And even less -doc● Saves
● Disk● Network bandwidth on upgrade● Directory indexing
![Page 20: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/20.jpg)
20
Dependencies
libfoo1 vs libfoo-dev
Say my hello uses libfoo● Needs libfoo-dev at build time
● apt-get build-dep hello
● Needs libfoo1 at run time● User shouldn’t have to care about it
![Page 21: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/21.jpg)
21
Put into practice
More involved debian/controlSource: hello
Build-Depends: debhelper (>= 10), libfoo-dev, libbar-dev
Package: hello
Architecture: any
Depends: ${shlibs:Depends}
Description: hello
This is just a test package
dh_shlibdeps step will compute Depends
![Page 22: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/22.jpg)
22
Architecture: any?
Arch-dependent vs Arch-independent● Does it depend on arch?
● Processor instruction set● 32bit vs 64bit● Little vs big endian➔ Arch-dependent: libfoo_1.0-1_amd64.deb
➔ Otherwise, arch-independent● Architecture: all packages● e.g. libfoo-data_1.0-1_all.deb
![Page 23: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/23.jpg)
23
Architecture: all packages?
● Data● Documentation● Non-compiled langages
● Python● Perl● TeX
No need to rebuild them for each arch
One copy on mirrors
![Page 24: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/24.jpg)
24
Summing it up
My program● One source package: foo● One binary package: foo
My library● One source package: libfoo● E.g. three binary packages:
● libfoo1 (arch:any)● libfoo-dev (arch:any)● libfoo-doc (arch:all)
![Page 25: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/25.jpg)
25
Making it simple
€ apt-get install dh-make
€ dh_make
Type of package: (single, indep, library, python) [silp]?
€ $EDITOR debian/control debian/copyright
€ dpkg-buildpackage
Will just work fine if your upstream is nice (autoconf, cmake, ...)
![Page 26: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/26.jpg)
26
A bit less simple
I lied, doesn’t work with hello source● Because odd GNUmakefile lingering there● dh_auto_clean thinks it can run make clean,
fails
override_dh_auto_clean:
[ ! -f Makefile ] || $(MAKE) distclean
override_dh_installdocs:
dh_installdocs NEWS
![Page 27: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/27.jpg)
27
More information
● Debian Packaging Tutorial● http://www.debian.org/devel/● Debian New Maintainer’s Guide● Debian Developer’s Reference● Debian Policy
![Page 28: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/28.jpg)
28
Yay, my package is ready!
Check its soundness € lintian hello_1.0-1_amd64.changes
Now let’s publish it● My own website● Debian/Ubuntu
What to publish?● Source packages● Binary packages
● For various distribs
![Page 29: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/29.jpg)
29
Why various binary packages
● Library versions● Debian 8 contains libicu52● Debian 9 contains libicu57, not libicu52● No compatibility● Packages using libicu need a rebuild
● Must not be blindly overriden● There be dragons!
![Page 30: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/30.jpg)
30
Building for various distribs
€ apt-get install pbuilder
€ sudo pbuilder create --basetgz $HOME/base-jessie.tgz
--distribution jessie
--mirror http://ftp.fr.debian.org/debian
€ cd ~/hello-2.10
€ pdebuild -- --basetgz $HOME/base-jessie.tgz
€ cd /var/cache/pbuilder/result/
Also useful for checking missing Build-Depends
![Page 31: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/31.jpg)
31
For each distrib
€ mkdir jessie
€ cd jessie
€ mv /var/cache/pbuilder/result/*2.10* .
€ dpkg-scanpackages . . | tee Packages | bzip2
> Packages.bz2
In sources.list:deb http://my.website/jessie ./
![Page 32: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/32.jpg)
32
Pushing to Debian
And thus all its derivatives● Needs review & approval of course● And actually uploaded at some point
● Signed with gpg key
Debian Developers (DD)● Can upload anything
Debian Maintainers (DM)● Can upload the packages they are allowed to
![Page 33: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/33.jpg)
33
Pushing to Debian
Becoming a DD● Prove technical skills and knowledge of Debian● Long work
Becoming a DM● Get some DD sign your gpg key and advocate you● Get some DD to allow you to upload● After mentoring for some time, usually
Get sponsored● Get some DD or DM to do the upload
![Page 34: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/34.jpg)
34
Pushing to Debian
Any DD out there?● Brice Goglin and I● Emmanuel Bouthenot, Rémi Vanicat in
Bordeaux too, possibly others● Some SED people?
Way better if you maintain your package :)
Also debian-mentors for help
![Page 35: Build Debian/Ubuntu packages to make it easy for users to ...sed.bordeaux.inria.fr/seminars/debian_20161108.pdf · Build Debian/Ubuntu packages to make it easy for users to install](https://reader033.vdocuments.us/reader033/viewer/2022053007/5f0b52e97e708231d42ff3c5/html5/thumbnails/35.jpg)
35
Cheatlist
€ debcheckout hello
€ dgit clone hello
€ dget http://www.foo.org/foo.dsc
€ dpkg-source -x foo.dsc
€ dpkg-checkbuilddeps
€ mk-build-deps -s sudo -r -i
€ debdiff hello_1.0-{1,2}_amd64.changes
€ rmadison libicu52