Debian Packaging Tutorial – Feedback Welcome
blog.ssundarraj.me
blog.ssundarraj.me
Better tutorials:
https://wiki.debian.org/IntroDebianPackaging
https://wiki.debian.org/HowToPackageForDebian
https://people.debian.org/~osamu/maint-guide.html
https://wiki.debian.org/PackagingWithGit (because we are all going to git the world).
The Debian packaging pipeline is really insanely complex. Arch packaging barely needs a tutorial at all. The best part about it is how all the packaging tools are shipped with the package manager. pacman can install remote packages as well as tarballs, and "makepkg" ships with pacman.
Scratch that actually - the best part about it is how development libraries ship alongside the packages. I really don't miss having to install -dev packages all the time, especially having hundreds of them polluting all my queries.
When I tried creating packages for debian (this was quite a way back and it seems like things have improved, but not that much), I spent ages getting all the packages I needed in the first place and I had to keep track of far too many commands, had to constantly re-open the tutorials every time I wanted to create a new one. The PPA system is also far too cumbersome for one-off packages you want to distribute, compared to distributing just a PKGBUILD / source package (especially since arch has the AUR).
I feel the debian world could really stand to take some lessons from Arch in that aspect.
You can build Debian packages as Arch but that wouldn't be the Debian way.
Stability - our QA process is huge and much more strict then the Arch one. We often notice upstream bugs during our packaging and testing process and we also often patch them before upstream.
Security - we have Debian Security Team which is ruthless and security is a big focus so when for example the Chromium security problems was found, it was also noticed that that feature was disabled in Debian chromium package by default.
Upgrading - I don't think any distro can offer this without issues and those issues are exactly prevented with out packaging guides and Debian Policy. In Arch you would get from time to time - please do this manual things in order to upgrade to next version of this software. While in Debian you can go to trip to Mars, live there for few years, come back and then just apt update && apt dist-upgrade the thing and go on coffee without worry.
Also notice we had much before Arch the gpg signing of packages, you can't become Debian maintainer without at least two Debian Developer signatures on your key which happen in face-to-face meetings (so we create a web of trust you will not introduce bad code in your packaging).
So yes, you are correct that easier is to create Arch package then Debian official one, but in Debian you can also create very quickly packages (checkinstall, fpm etc etc) but then you miss all the power of Debian and you're on your own with those packages and potential breakage with system (or is that a freedom you have?) :)
It's well known that the debian repositories are extremely well reviewed and tested. But you could have that with Arch's packaging system as well.
When someone builds a package themselves however, they are not expecting Debian's QA & testing nor are they usually interested in it. But a package, untested as it may be, is far, far better than a sudo make install.
When I used debian this was such a huge pain. Building packages was not worth the hassle so I would simply sudo make install and feel awful about it, and end up with conflicts and everything that a package manager is supposed to solve...
As you said, Arch could have all that but it doesn't and there are the reason why people who use Debian don't use Arch. Again, you can quickly make deb packages without following any of our docs and no, package manager should not solve what differs from our official build quality and Debian Policy (it would be too much hassle to predict and implement in how many ways people can break their system).
I am glad that Arch exists, so everyone has a freedom to choose it if they want :)
However, none of this is required for unofficial packages. You can do it, but you don't have to. This is where I'm saying you're conflating two different things - QA and packaging are separate.
Please don't get me wrong, I love debian and they do an incredible service to the Linux community with their testing. But why force it all on users that just want to build a simple package instead of doing make install as root?
Again, no one is forcing you to do official Debian packaging if you want to create simple deb for your purposes and it was mentioned in this thread by other and me several times (and several tools).
Also you can use equivs for creating quick (dummy?) packages :D
As to the debian.org guides, I've always found them obtuse precisely because they emphasise what you've got to do to get a package distributed, rather than the plain technical details of how they work.
And nobody is hiding from you any tutorial - Debian is an open community and the wiki is open to everyone so you can search for what you need but I really don't see the point in your sentences (are you saying that we should favorite somehow quick and dirty hacks instead of our strict high-quality ways of building packages? Because if yes, then Debian wouldn't be what it is today...)
Second: saying that Debian's tutorials are less useful because they have specific goal of high quality - makes me really sad. Debian is community and not corporation, so to see that community has higher standard then any corporation should be praised. Also Debian's packaging evolved over 20+ years by thousands of hackers (experts in their field) all over world in their unique collaboration. I am sure this should be taken as a pride that you can go on net an read such tutorials.
And really, if someone thinks he is technical but can't read few pages of not so demanding tutorial, then problem is in them because in software world you evolve every day and need to read and code a lot to keep a pace. Only problem that you could say is that maybe isn't that fun to read (because Debian wikis are old school so the sentences stretch through entire screen while today's web is focused on centering all which makes it a bit easy to read and so on).
What does Debian miss that you need for your servers (I am really interested).
Also for quick and dirty you could use checkinstall.
There is also a good tutorial on DigitalOcean about fpm:
https://www.digitalocean.com/community/tutorials/how-to-use-...
And just maybe me nitpicking too much but the title should be then "How to quickly create deb package for personal needs". Notice that this means you don't get Debian Security support for your own package so that can be a huge breaker for many people running servers :)
I agree with the modified title suggestion and have changed the title of my blog post.
Thanks for your feedback! :)
For simple things you probably want to use in future more of checkinstall (to keep it easier for yourself the creation, installation and removal part):
If you want to do that, you will be better off using Jordan Sissel's fpm tool: https://github.com/jordansissel/fpm It can take any project and quickly package it into a .deb, .rpm, .whatever package.
While you can build a package of something simple like this example (static html), as soon as you want to compile a binary you're going to need to be building on the same environment as you're targeting.
I'd suggest removing any mention of OSX from the guide, or making it clear of the limitations of trying to build debs on it.
Want to ship a systemd service file? include "--with systemd" in the dh invocation in debian/rules (and add dh-systemd as a build dependency), and you can drop your system files in debian/yourpackage.service. The helper will do all the work for you like copying the service file to the right location, doing the "daemon-reload" to make sure it is read after it's changed, reload it after package installation, stop if when the package is uninstalled, and so on.
Want to create an empty directory? add it to debian/dirs. Want to install additional files? add them to debian/install.
Want to create a debian package from an existing perl module? "dh-make-perl --cpan The::Package".
And the nice thing is that all of these mechanisms are composable, and it is easy to override steps you want to customize.
At first, I found the standard debhelper toolchain to be complex too, but it actually makes simple things easy, and hard things possible.
Shameless plug: Yesterday I've blogged about debian packaging a simplistic Perl web application: http://perlgeek.de/blog-en/automating-deployments/2016-005-e... (not much Perl specific in there).