This is my monthly summary of my Debian related activities. If you’re among the people who made a donation to support my work (170 €, thanks everybody!), then you can learn how I spent your money. Otherwise it’s just an interesting status update on my various projects.
This month passed by very quickly since I attended both the Libre Software Meeting / RMLL and the DebConf.
Libre Software Meeting / RMLL
I attended “only” 3 days out of the 6 but that was a deliberate choice since I was also attending DebConf for a full week later in the month.
During those 3 days I helped with the Debian booth that was already well taken care of by Frédéric Perrenot and Arnaud Gambonnet. Unfortunately we did not have any goodies to sell. We (as in Debian France) should do better in this regard next time.
One of the talks I attended presented EnVenteLibre. This website started as an online shop for two French associations (Ubuntu-fr, Framasoft). They externalize all the logistic to a company and only have to care about ordering goodies and delivering to the warehouse of the logistic company. They can also take some goodies from the warehouse and ship them for a conference, etc. We discussed a bit to see how Debian France could join, they are even ready to study what can be done to operate at the international level (that would be interesting for Debian with all the local associations that we have throughout the world).
Back to the LSM, while I had 3 good days in Strasbourg, it seems to mee that the event is slowly fading out… it’s far from being an international event and the number of talks doesn’t make for a better quality.
BTW, do you remember that Debconf 0 and Debconf 1 were associated to this event while it was in Bordeaux?
dpkg-source improvements
During my time in Strasbourg (and in particular the travel to go there and back!) I implemented some changes to “3.0 (quilt)” source format. It will now fail to build the source package if there are upstream changes that are not properly recorded in a quilt patch:
dpkg-source: info: local changes detected, the modified files are: 2ping-1.1/README dpkg-source: info: you can integrate the local changes with dpkg-source --commit dpkg-source: error: aborting due to unexpected upstream changes, see /tmp/2ping_1.1-1.diff.cki8YB
As the error message hints, there’s a new --commit
command supported by dpkg-source that will generate the required quilt patch to fix this. In the process you will have to submit a name and edit the patch header (pre-formatted with DEP3 compatible fields). You can get back the old behavior with the --auto-commit
option.
Build flags changes
Ever since we adopted the Ubuntu changes to let dpkg-buildpackage set some build related environment variables (see #465282), many Debian people expressed their concerns with this approach both because it broke some packages and because those variables are not set if you execute debian/rules directly.
In the end, the change was not quickly reverted and we fixed the package that this change broke. Despite this we later decided that the correct approach to inject build flags would be a new interface: dpkg-buildflags.
Before changing dpkg-buildpackage to no longer set the compilation flags, I wanted to ensure dpkg-buildflags had some decent coverage in the archive (to avoid breaking too many packages again). My criteria was that CDBS and dh (of debhelper) should be using it. With the recent debhelper change (see #544844) this has been reached so I changed dpkg-buildpackage accordingly.
Makefile snippets provided by dpkg
At the same time, I also wanted an easy way for maintainers not using dh or CDBS to be able to fix their package easily and go back to injecting the compilation flags in the environment but doing it from the rules files. Starting with the next version of dpkg, this will be possible with something like this:
DPKG_EXPORT_BUILDFLAGS = 1 include /usr/share/dpkg/default.mk
Without DPKG_EXPORT_BUILDFLAGS the variables are not exported in the environment and have no effect unless you use them somewhere.
More than build flags, this will also provide a bunch of other variables that can be useful in a rules files: all the variables provided by dpkg-architecture, vendor related variables/macro and some basic package information (mainly version related).
dpkg-buildflags improvements
Given the renewed importance that dpkg-buildflags will take now that dpkg-buildpackage no longer sets the corresponding environment variables, I thought that I could give it some love by fixing all the open issues and implementing some suggestions I got.
I also had a chat with a few members of the technical committee to discuss how hardening build flags could be enabled in Debian and this also resulted in a few ideas of improvements.
In the end, here are the main changes implemented:
- new “prepend” directive to inject flags at the start (see commit);
- new “strip” directive to strip flags from the result returned by dpkg-buildflags (see commit);
- new environment variables DEB_flag_MAINT_directive that can be set by the maintainer to adjust what dpkg-buildflags will return (see commit);
- new
--export=configure
command to inject build flags on the./configure
command line (see commit); - new
--dump
command that is the default (see #603435).
Will all those changes, the complete set of compilation flags can be returned by dpkg-buildflags (before it would only return the default flags and it was expected that the Debian packaging would add whatever else is required afterwards). Now the maintainer just has to use the new environment variables to ensure the returned values correspond to what the package needs.
DebConf: rolling and hardening build flags
I spent a full week in DebConf (from Sunday 24th to Sunday 31th) and as usual, it’s been a pleasure to meet again all my Debian friends. It’s always difficult to find a good balance between attending talks, working in the hacklab and socializing but I’m pretty happy with the result.
I did not have any goal when I arrived, except managing the Rolling Bof (slides and video here) but all the discussions during talks always lead to a growing TODO list. This year was no exception. The technical committee BoF resulted in some discussions of some of the pending issues, in particular one that interests me: how to enable hardening build flags in Debian (see #552688).
We scheduled another discussion on the topic for Tuesday and the outcome is that dpkg-buildflags is the proper interface to inject hardening build flags provided that it offers a mean to drop unwanted flags and a practical way to inject them in the ./configure command line.
Given this I got to work and implemented those new features and worked with Kees Cook to prepare a patch that enables the hardening build flags by default. It’s not ready to be merged but it’s working already (see my last update in the bug log).
A few words about the Rolling BoF too. The room was pretty crowded: as usual the topic generates lots of interest. My goal with the BoF was very limited, I wanted to weigh the importance of the various opinions expressed in the last gigantic discussion on debian-devel.
It turns out a vast majority of attendants believe that testing is already usable. But when you ask them if we must advertise it more, answers are relatively mixed. When asked if we can sustain lots of testing/rolling users, few people feel qualified to reply but those that do tend to say yes.
More dpkg work
Lots of small things done:
- I did again some bug triaging on Launchpad. But Brian Murray did a lot of it and the result is impressive, we’re down to 154 bugs (from more than 300 a month ago!).
- I updated my multiarch branch multiple times. I was hoping to meet Guillem during DebConf to make some progress on this front but alas he did not attend. I have been asked a status update multiple times during my time in DebConf.
- I fixed a regression in update-alternatives (#633627), a test-suite failure when run as root (#634961), a segfault in findbreakcycle. There have been a bunch of minor improvements too (#634510, #633539, #608260, #632937).
Package Tracking System and DEHS
Christoph Berg recently wrote a replacement for DEHS because the latter was not really reliable and not under control of the QA team. This is a centralized system that uses the watch files to detect new upstream versions of the software available in Debian.
I updated the Package Tracking System to use this new tool instead of DEHS. The new thing works well but we’re still lacking the mail notifications that DEHS used to send out. If someone wants to contribute it, that would be great!
Misc packaging work
I did some preliminary work to update the WordPress package to the latest upstream version (3.2). I still have to test the resulting package, replacing upstream shipped copies of javascript/PHP libraries is always a risk and unfortunately all of them had some changes in the integration process.
I also updated nautilus-dropbox to version 0.6.8 released upstream. I also uploaded the previous version (that was in testing at that time) to squeeze-backports. So there’s now an official package in all the Debian distributions (Squeeze, Wheezy, Sid and Experimental)!
Thanks
See you next month for a new summary of my activities.
Jose Carlos Garcia Sogo says
How the automatic detection of changes to upstream source can be disabled? I would like to do so to use the technique showed in https://honk.sigxcpu.org/piki/development/debian_packages_in_git/ in the Working from a patch-queue branch section. This way is faster when creating a patch that needs several compilations to be completed (for example when removing all “set-but-unused” vars from upstream), or creating several patches that you want to try that compile before making them final.
Thanks
Raphaël Hertzog says
I don’t how why you believe both things are related. You can certainly use the method described there even if dpkg-source detects upstream changes…
Ryan Finnie says
I know I’m a little late to the party, but I’m the author and DM of 2ping, and went back and tried 2ping_1.1-1 against the new dpkg-source, and it didn’t report that. I’m guessing you took the 2ping package as an example, and manually modified README to test? (Since 2ping is literally the first package in the archives now.)
Though when packaging 2ping_1.2.3-1, it did help me notice the Makefile was silently rebuilding the manpages in the latest version (but not previous versions), so thanks for the extra sanity check!
Raphaël Hertzog says
Hi Ryan, yes, I did a manual modification to trigger the failure. Don’t worry 😉
Teresa e Junior says
Hello, Raphaël!
A web search about the new behaviour of dpkg-source brought me here, after I installed devscripts and dpkg-dev from backports. Unfortunately, there is no –auto-commit for us in backports, so should I report this as a bug or just revert to the squeeze packages?
Thanks!
Raphaël Hertzog says
Why would there be no –auto-commit in the backport? In any case, you should be able to use dpkg-source –commit to register your changes… why would that not be possible?
Teresa e Junior says
Well, I don’t know why! Sorry if I’m wrong, but I undersood from this post that both –commit and –auto-commit were implemented together, to find out by myself that –commit works, but –auto-commit just throws an usage error:
$ dpkg-source –auto-commit
dpkg-source: need a command (-x, -b, –before-build, –after-build, –print-format, –commit)
Usage: dpkg-source [ …]
Thanks!
Raphaël Hertzog says
–auto-commit is an option to use during dpkg-source –build, so you put it in debian/source/local-options for example. Or you pass it via
dpkg-buildpackage --source-option=--auto-commit
.Teresa e Junior says
Thank you so much again, it works well!