-
Not Synced
Hi, everybody, I'm Eric Doland.
-
Not Synced
-
Not Synced
I'm the automake maintainer,
among other things.
-
Not Synced
Today I'm going to talk about removing obsolete packages.
-
Not Synced
This is meant to be a BOF.
-
Not Synced
I only have sixteen slides,
-
Not Synced
so I'm going to talk about my experiences
-
Not Synced
in removing old versions of automake.
-
Not Synced
Please feel free to interrupt with questions
-
Not Synced
or criticisms or comments as we go.
-
Not Synced
Hopefully with a bit of discussion about how to do this better in the future,
-
Not Synced
or maybe not better, we'll see.
-
Not Synced
So just to set the context a little bit,
-
Not Synced
automake in Debian,
-
Not Synced
I started maintaining it a really long time ago.
-
Not Synced
It's making me feel old. 2002.
-
Not Synced
This was around the time that automake 1.6 came out, I think.
-
Not Synced
One of the problems automake has is
-
Not Synced
that new releases of it usually have incompatibilities
-
Not Synced
with backwards-compatible completely.
-
Not Synced
There's various reasons why this is,
-
Not Synced
it provides a very weird interface,
-
Not Synced
because you're basically embedding things inside make files,
-
Not Synced
and it's hard to control the API of a make file.
-
Not Synced
Back in the day, there was, for a very long time,
-
Not Synced
automake 1.4, and that just sort of worked,
-
Not Synced
and then, automake 1.5 was introduced,
-
Not Synced
Debian upgraded to automake 1.5, and lots of packages broke.
-
Not Synced
So what ended up happening is that automake 1.5 got moved into its own package,
-
Not Synced
and automake 1.4 was automake package.
-
Not Synced
Nowadays, the older versions get moved into their own packages,
-
Not Synced
and generally, the currently released version--the most up-to-date version--
-
Not Synced
is the automake package.
-
Not Synced
This has some downsides, because it's not necessarily fully backwards-compatible,
-
Not Synced
but this is usually what people want.
-
Not Synced
They want the latest version of automake, and they don't want to have to install
-
Not Synced
a new package any time a new version of automake comes out.
-
Not Synced
All the automake packages provide an alternative
-
Not Synced
so that you can have your /usr/bin/automake
-
Not Synced
be exactly which automake you want it to be.
-
Not Synced
The priority of that alternative usually means that the latest version of automake
-
Not Synced
is the one automatically selected, but of course, you can override that.
-
Not Synced
There's a note here that, depending on automake directly, is a little risky,
-
Not Synced
because fancy automake files, new versions of automake, might break you, potentially.
-
Not Synced
Anyway, this is not the automake BOF, this is just a little context
-
Not Synced
about why automake is what it is in Debian.
-
Not Synced
So there's problems with this, because these backwards-compatible issues, as I said,
-
Not Synced
were packaging all the versions of automake.
-
Not Synced
Each new version was getting a new package, basically,
-
Not Synced
and we've gone through a lot of automake packages over the years.
-
Not Synced
I didn't count them up, but it looks like almost close to ten, I guess,
-
Not Synced
which is a lot of packages you have to deal with.
-
Not Synced
People will depend on these individual packages, for whatever reason,
-
Not Synced
and then getting them out of the system, when they become old, is troublesome.
-
Not Synced
As of the wheezy release, we had four different automakes in the wheezy release.
-
Not Synced
So we had what the old, old--as you can see, 1.4, 1.9, 1.10, and 1.11--
-
Not Synced
and they say that at one point we're going to have five different versions of automake,
-
Not Synced
which is a lot of versions of automake.
-
Not Synced
You can also see that the 1.4 version was released in 2002,
-
Not Synced
when I started maintaining this stuff, so it's really old.
-
Not Synced
No one should be using it, and no one should have been using it for the last ten years,
-
Not Synced
but we sort of kept it around because people were like
-
Not Synced
"oh, maybe there's old software that, you know, still depends on automake 1.4."
-
Not Synced
Um, yeah.
-
Not Synced
This is crazy.
There are too many versions of automake.
-
Not Synced
No one really wants them. So, I started out on this mission
-
Not Synced
to bring us down to, hopefully, one or two versions of automake for the next release.
-
Not Synced
I've been doing this over the last year, and I was makign these slides
-
Not Synced
and I was thinking about, it sort of had these weird parallels
-
Not Synced
with some things I'd read about, so now I present to you
-
Not Synced
the five stages of removing an obsolete package from Debian.
-
Not Synced
The first stage is denial.
-
Not Synced
[laughter]
-
Not Synced
"If I send mail to debian-devel asking everyone to very nicely
-
Not Synced
move off of these old versions of automake, they'll just do it, right?
-
Not Synced
I mean, doesn't everyone agree that that's what will happen?
-
Not Synced
Yeah, so that's what I started out by doing.
-
Not Synced
I'm going to talk a little bit about the tools and stuff that I used in this process,
-
Not Synced
so this is sort of technical, and sort of procedural.
-
Not Synced
If you've got questions about either side, just shoot up your hand.
-
Not Synced
The first thing you do, or the first thing I did, is that I used grep-dctrl to figure out
-
Not Synced
which packages were build dependent on automake.
-
Not Synced
Automake basically has no actual binary dependencies, it's all build dependencies.
-
Not Synced
There were one hundred and sixty-nine packages--source packages.
-
Not Synced
That's a lot, but in Debian scale, it's not that much. It should be fine, right?
-
Not Synced
Then, I used the dlist tool to turn that list of packages into a list of maintainers,
-
Not Synced
with their packages. It's a very nice tool for just ??
-
Not Synced
Then, I sent out an email debian-devel saying,
-
Not Synced
"Here's my plan: I want to get rid of these old versions of automake.
-
Not Synced
Here are the packages that are build-dependent on them.
-
Not Synced
Please, do your part and fix this.
-
Not Synced
I sent that mail out on May 27, 2013, so before last DebConf, which I was not at.
-
Not Synced
Stage Two: Anger.
-
Not Synced
People aren't fixing these things!
-
Not Synced
I'm going to have to actually do something other than send an email. All right, fine.
-
Not Synced
The next thing I did, to try to encourage people again to make this move,
-
Not Synced
Lintian has this really nice facility. One of tests is actually--there's a list of obsolete packages.
-
Not Synced
If you put your package in that list,
-
Not Synced
lintian will complain any time anyone depends on that package,
-
Not Synced
to try to force maintainers that are paying attention,
-
Not Synced
that they should't actually be depending on these packages.
-
Not Synced
That's good. It's cheap to do. Just sent the patch to lintian.
-
Not Synced
I don't see any reason they wouldn't take it if it made sense.
-
Not Synced
Now, I have to file bugs. People don't read debian-devel.
-
Not Synced
It's sort of, it's fair I guess. So I basically just went through the list of packages I had,
-
Not Synced
with a simple substitution script, so now it mailed a mail that was like
-
Not Synced
"Please stop depending on automake blank." with a very boiler-plate thing saying
-
Not Synced
"this is why we're getting rid of these old versions of automake"
-
Not Synced
and I sent that off to BTS. Which is really easy, right? Because BTS is just email.
-
Not Synced
So you can just do that. You can file a bunch of bugs that way.
-
Not Synced
I should note that my initial email was a proposal for this mass bug filing, as well,
-
Not Synced
which you're supposed to do as part of the procedure of sending out mass bug filings.
-
Not Synced
When I did this, I had to file one hundred and seventeen bugs.
-
Not Synced
There's fifty two packages that got fixed between me sending my initial email
-
Not Synced
and the bugs. So that's good, I shouldn't be that angry, maybe.
-
Not Synced
I did wait four months between these two events, though, so there's plenty of time.
-
Not Synced
The other thing I used was using BTS user tags, to track all of these bugs very easily easily
-
Not Synced
using this automake clean-up 2013 tag. I added the date because
-
Not Synced
I knew this would not be the last automake clean-up that I would have to do,
-
Not Synced
so I keep these separate.
-
Not Synced
Always good to date your work if you think you might have to repeat it.
-
Not Synced
Yeah, no, I did not finish in 2013. I started in 2013.
-
Not Synced
It should've been automake clean-up 2015 or something, if I wanted the finish date.
-
Not Synced
All right, so stage three. Bargaining.
-
Not Synced
Okay, so, I'm past the anger stage, and now I'm like "okay, I've filed all these bugs,
-
Not Synced
but not much is happening, so let me just fix this for you.
-
Not Synced
I'll give you the exact fix on how to much to the newer version of automake.
-
Not Synced
Here's the patch. Just apply it and upload your package.
-
Not Synced
I've done all the work; I've done all the hard stuff."
-
Not Synced
So, before I even did this, thirty four packages were fixed
-
Not Synced
without supplying a patch. I began the patching in late October of 2013
-
Not Synced
and--this is the hard part, this is the part that's tough to automate--in many cases,
-
Not Synced
just switching to the new version of automake worked, and then it was easy,
-
Not Synced
but that was maybe 50% of the cases.
-
Not Synced
I didn't keep good statistics about how tough this was exactly,
-
Not Synced
but in a lot of cases, I had to fiddle with the build system,
-
Not Synced
or a lot of build rules would run automake itself,
-
Not Synced
instead of using dh-autoreconf.
-
Not Synced
There was a lot of actual fiddling with packages, trying to get them to build,
-
Not Synced
and then just waiting to build these things, which can take a very long time,
-
Not Synced
to test that this worked. So this is a lot of actual, tough work.
-
Not Synced
What else? I used pbuilder to do the builds and then if I successfully built something,
-
Not Synced
with the new version of automake,
I would just mail off a patch
-
Not Synced
to the existing bug, in BTS, and flip the patch tag, saying "here's the patch."
-
Not Synced
So I thought, okay, at this point, you know, there's patches out there
-
Not Synced
for almost all of these problems.
-
Not Synced
There should be a wave of uploads and everything should be great.
-
Not Synced
Stage Four: Depression.
-
Not Synced
That's not what happened. I was pretty much on my own.
-
Not Synced
The responsible maintainers have already fixed this problem.
-
Not Synced
So we're into this, sort of, long tale of people who don't care,
-
Not Synced
or people who are too busy to deal with their packages or do anything here.
-
Not Synced
Now I have to upload NMUs. I started this in late January, I think
-
Not Synced