On 30/11/12 12:51, Julien Cristau wrote:
> Before rebuilding the world, I'd like to avoid breaking partial 
> upgrades.

Here is an attempt at a better list of packages via better choice of
regexps, with notes on methodology.

Sourceful uploads (multi-arch):

gstreamer0.10 (sourceful upload request: #697025)
swami (sourceful upload request: #697026)

binNMUs:

# some of these might be false positives, but buildds don't get bored
nmu \
    4store_1.1.4-2 \
    ats-lang-anairiats_0.2.6-1 \
    gnome-vfs_1:2.24.4-1 \
    gnubiff_2.2.15-1 \
    gpredict_1.3-2 \
    libzorpll_3.9.1.3-1 \
    mysql-proxy_0.8.1-1.1 \
    passepartout_0.7.1-1 \
    purple-plugin-pack_2.6.3-2 \
    scli_0.4.0-2 \
    . armel armhf mips mipsel powerpc s390 sparc . \
    -m 'Rebuild against GLib 2.32, see #694525'

# this one might FTBFS again like it did when first tried, but it seems
# worth a go...
nmu \
    sigx_2.0.2-1
    . armel . \
    -m 'Rebuild against GLib 2.32, see #694525'

Are you able to make binNMUs of versions from testing that have a
newer version in unstable? If so, these also need doing:

nmu \
    ats-lang-anairiats_0.2.3-1 \
    mpd_0.16.7-2 \
    mtpfs_0.9-3 \
    . armel armhf mips mipsel powerpc s390 sparc . \
    -m 'Rebuild against GLib 2.32, see #694525'

and if not ... something else will need to be done about them. (Check
whether the upload is really needed, add a sourceful upload to t-p-u
if necessary?)

There are two lists of affected source packages, 61 in all, suitable
for the Breaks: you requested, at the end of this mail. I can't say
I'm looking forward to trying to map those to binary packages... (Some
of them are probably false-positives and don't actually need a Breaks.)

I'm not really convinced those 61(ish) Breaks are particularly
valuable. We don't formally support partial upgrades, the affected
architectures are not mainstream desktop systems (powerpc is the
closest), none of the broken packages are particularly "core"
(GStreamer and Java are the closest), and anyone tracking testing is
going to have encountered this breakage with the current
glib2.0/wheezy already.

In any case, if we're going to add the Breaks, I'd prefer to get the
binNMUs and the two sourceful uploads done first, so we can add them
all in one go?

Regards,
    S

----

Step 0. Restating the problem:

 In src:glib2.0, the GStaticMutex, GStaticRecMutex and GStaticRWLock
structs broke ABI by changing their sizes. These structs are
semi-opaque: they contain a set amount of padding, but only the
GThread part of GLib is allowed to dereference them (which it does by
casting to a pointer to a struct of equal size with more useful members).

In the new version of GLib, only the first sizeof(void *) bytes are
actually ever used, and the rest remain uninitialized. The old and new
sizes are both more than sizeof(void *), so the only problematic
binaries are those where the size change causes two modules to
disagree on the position of members (or the end-of-struct) appearing
after a GStaticMutex, etc. in a larger struct.

In particular, if a .c file contains a static GStaticMutex, etc. at
file scope, a private header contains an extern GStaticMutex whose
declaration is only visible within that source package, or a .c file
or private header embeds a GStaticMutex in a larger struct, then
that's fine: the whole source package is guaranteed to have been
compiled with a consistent idea of how large a GStaticMutex is.

----

Step 1. Who uses those structs, other than as a pointer or a static
(file-scope) variable?

I searched codesearch.d.n for
"(GStaticMutex|GStaticRecMutex|GStaticRWLock)\s+(\w|/|$)". I ignored
glib2.0 itself.

I also ignored occurrences in a .c file or an obviously-private header
(something-internal.h, something-private.h). Justification: these can
never be a problem because they are only visible to the package that
contains them, and any given compilation of that package was against one
particular consistent version of GLib.

I also ignored anything wrapped in #if !GLIB_CHECK_VERSION(...).
Justification: those are obviously going to break ABI with older/newer
GLib anyway, and the authors are surely aware of that. (Seen in at least
gstreamer0.10 and gst-plugins-base0.10, in what are hopefully private
headers...)

I also ignored anything that's obviously only for Windows or Mac OS -
not our problem. (A few packages have an embedded code copy of GLib in a
directory called macosx or win32gdi or something, presumably to simplify
compilation on platforms without proper package management.)

So far the list is (source packages):

4store
alsaplayer
ats-lang-anairiats
audacious-plugins
connman
efax-gtk
eiskaltdcpp
evolution-data-server
farstream
fluidsynth
gfal2
gftp
gimp-plugin-registry
glibmm2.4
gnome-vfs
gnubiff
gpredict
gsmartcontrol
gst-plugins-bad0.10
gst-plugins-bad1.0
gst-plugins-base0.10
gst-plugins-good0.10
gstreamer0.10
gxine
libinstpatch
libsyncml
libvisual
libzorpll
linuxdcpp
mpd
mtpaint
mtpfs
mysql-proxy
mysql-workbench
network-manager
nufw
openhpi
purple-plugin-pack
root-system
scli
slurm-llnl
swami
syslog-ng
workrave
zathura
zorp

Next ignore anything that does not install any headers.

xargs -n1 grep-aptavail --exact-match -S -n -s Package --pattern \
    < sources | LC_ALL=C sort -u > binaries-wheezy
zgrep '^usr/include' \
    ftp.uk.debian.org_debian_dists_wheezy_main_Contents-amd64.gz \
    | awk '{print $2}' \
    | LC_ALL=C sort -u \
    | sed -e 's@[a-z]\+/@@' \
    | grep -f binaries-wheezy > dev-wheezy

That gives a long list of potentially affected binary packages. I
edited the list to fix lines containing a comma (libivykis-dev
shares a file with libsyslog-ng-dev but is not built by an affected
source package).

Next check those binary packages for false positives: the installed
headers might not actually contain any affected structs in a problematic
form.

Potential problems:

In src:glibmm2.4, Glib::StaticMutex, Glib::StaticRWLock and
Glib::StaticRecMutex each embeds a struct of the corresponding C type
as its only data member.

In the GStreamer packages, GstCollectPads2, GstBaseVideoCodec,
GstAudioDecoder, GstAudioEncoder, GstBaseRTPDepayload each contains a
GStaticRecMutex.

In src:swami, SwamiLock contains a GStaticRecMutex.

In src:zorp, ZConnector, ZListener, ZProxy, ZStackedProxy each contain
a GStatic(Rec)Mutex.

In src:syslog-ng, LogQueue, LogTemplate each contain a GStaticMutex.

This leaves us with only these source packages in wheezy from step 1:

glibmm2.4
gst-plugins-bad0.10
gst-plugins-base0.10
gstreamer0.10
swami
syslog-ng

False positives:

/usr/include/gstreamer-0.10/gst/gsttrace.h contains a global, "extern
GStaticMutex _gst_trace_mutex" used by macros in that file. I believe
this is not a problem because each extern symbol in a library has its
own relocation, so nothing will be relying on the offset of whatever
symbol follows it?

/usr/include/gstreamer-0.10/gst/check/gstcheck.h has a GStaticRecMutex
but it's a static variable in a static inline function. Never a problem.

In src:libvisual, VisMutex contains a GStaticMutex under certain
compile-time configurations, but Debian's is configured to use
pthreads directly instead. (Libraries that change ABI depending on
compile-time configuration are usually a bug, but, whatever. Not our
problem right now.)

In src:syslog-ng, stats.h has an extern GStaticMutex with the same
reasoning for it not being a problem as gsttrace.h.

----

Step 2: who uses the structs from step 1? I searched for
\bGstCollectPads2\b, etc.

I didn't ignore uses as a pointer this time, since the module could
conceivably be dereferencing p->member where p is a GstCollectPads2
(etc.) and member comes after the affected struct.

StaticMutex, StaticRecMutex, StaticRWLock:

ardour
lightspark
passepartout
jd
me-tv
sigx

GstCollectPads2, GstBaseVideoCodec, GstAudioDecoder, GstAudioEncoder,
GstBaseRTPDepayload:

gst-plugins-bad0.10 (embedded in GstBaseVideoDecoder, GstBaseVideoEncoder)
gst-plugins-base0.10
gst-plugins-good0.10
gst-plugins-ugly0.10
gst-plugins-bad1.0
gst-plugins-base1.0
gst-plugins-good1.0
gst-plugins-ugly1.0

SwamiLock:

swami (embedded in SwamiWavetbl, SwamiRoot, SwamiPropTree,
SwamiMidiDevice, SwamiLoopFinder, SwamiControl, SwamiControlQueue)

ZConnector, ZListener, ZProxy, ZStackedProxy:

zorp

LogQueue, LogTemplate:

syslog-ng

----

Step 3: fan out again...

Swami*: nothing outside src:swami matches \b_?Swami[A-Z] so I think
we're safe.

GstBaseVideoDecoder, GstBaseVideoEncoder:
gst-plugins-bad0.10 (not embedded in any public struct)
gst-plugins-bad1.0 (not embedded in any public struct)

so I think we're done.

----

Step 4: of the step 1-3 packages, which ones are multiarched, and thus
will need sourceful uploads, if they have not already been compiled
against GLib 2.32 on every architecture?

cat sources sources-step2 \
    | sort -u \
    | xargs -n1 grep-aptavail --exact-match -n -s Source:Package \
        '(' -F Multi-arch --pattern same ')' --and -S --pattern \
    | LC_ALL=C sort -u > ma

For each of those, check the build logs for armel armhf mips mipsel
powerpc s390 sparc and see whether the version in sid, and the version
in wheezy if different, was built against 2.32 on all affected
architectures.

(These are from a less filtered list so some of them don't actually
install headers. Sorry, I've done enough on this already that I don't
want to spend yet more time filtering them... I did check that the
ones requiring a sourceful upload have public headers without false
positives, since those are going to require additional work to be done.)

                           OK version (not necessarily minimal)
audacious-plugins            3.2.4-1
farstream                    0.1.2-1
farstream-0.2                0.2.2-1
fluidsynth                   1.1.6-1
glibmm2.4                    2.32.1-1
gst-plugins-bad0.10          0.10.23-7
gst-plugins-bad1.0           1.0.4-1
gst-plugins-base0.10         0.10.36-1.1
gst-plugins-base1.0          1.0.4-1
gst-plugins-good0.10         0.10.31-3+nmu1
gst-plugins-good1.0          1.0.4-1
gst-plugins-ugly0.10         0.10.19-2+b2
gst-plugins-ugly1.0          1.0.4-1
gstreamer0.10                NONE (bug filed)
gstreamer0.10-ffmpeg         0.10.13-5
libvisual                    0.4.0-5
openjdk-6                    6b24-1.11.5-1
openjdk-7                    7u3-2.1.3-1
root-system                  5.34.00-1
swami                        NONE (bug filed)
syslog-ng                    3.3.6-1
telepathy-farstream          0.4.0-3

And the rest:

cat sources sources-step2 | LC_ALL=C sort -u | grep -v -F --file ma \
    > not-ma

                                              (assuming binNMU is done)
4store                       NONE             1.1.4-2+b1
alsaplayer                   0.99.80-5.1
ardour                       1:2.8.14-2
ats-lang-anairiats           NONE             0.2.3-1+b1, 0.2.6-1+b1
connman                      1.0-1
efax-gtk                     3.2.8-1+b1
eiskaltdcpp                  2.2.6-4
evolution-data-server        3.4.4-1
gfal2                        2.0.0-1
gftp                         2.0.19-4
gimp-plugin-registry         5.20120621
gnome-vfs                    NONE             1:2.24.4-1+b1
gnubiff                      NONE             2.2.15-1+b1
gpredict                     NONE             1.3-2+b1
gsmartcontrol                0.8.6-1.2
gxine                        0.5.907-2
jd                           1:2.8.5~beta120206-3
libsyncml                    0.5.4-2.1
libzorpll                    NONE             3.9.1.3-1+b1
lightspark                   0.6.0.1-2
linuxdcpp                    1.1.0-1+b2 (+b1 on armhf)
me-tv                        1.3.7-0.2
mpd                          0.17.1-1 (not in wheezy)
mtpaint                      3.40-1+b1
mtpfs                        1.1-2 (not in wheezy)
mysql-proxy                  NONE             0.8.1-1.1+b2 (b1 on armhf)
mysql-workbench              5.2.40+dfsg-2
network-manager              0.9.4.0-6
nufw                         2.4.3-2.2
openhpi                      2.14.1-1.2
passepartout                 NONE             0.7.1-1+b1
purple-plugin-pack           NONE             2.6.3-2+b1
scli                         NONE             0.4.0-2+b1
sigx                         2.0.2-1+b1 (not on armel)
slurm-llnl                   2.3.4-2+b1
workrave                     1.9.909+abc941eb70-1
zathura                      0.1.2-4
zorp                         3.9.5-4

That looks like a lot of Breaks, but it's better than the 227 packages
I thought it'd be.


-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to