[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Request for TC to rule on a course of action for supporting build-arch



On Sat, Jun 11, 2011 at 01:04:00AM -0700, Steve Langasek wrote:
> Hi Roger,
> 
> On Sat, Jun 11, 2011 at 02:02:52AM +0100, Roger Leigh wrote:
> > On Tue, Jun 07, 2011 at 11:14:14AM +0200, Tollef Fog Heen wrote:
> > > ]] Steve Langasek 
> > Summarised:
> > - autodetection with "make -qn" breaks few, if any packages.
> 
> This is one of the key questions, but without a very clear answer.  Which of
> the rows in your output correspond to packages that *may* have been broken
> by autodetection?  I'm not sure how to aggregate the rows in the first query
> to get this answer, and the rows in the second query all seem to be keyed on
> build status when building with build-arch unconditionally.  What is
> interesting to know when evaluating the autodetection solution is if there
> are any regressions in package buildability when comparing *only* to the
> current use of 'debian/rules build', and I don't get that from these tables.

That should be in the last table, though it might not be clear.
Here we are comparing whether autodetection or unconditional use
succeed or fail compared with current successful use.  Here we
ignore all packages which are currently unbuildable with current
dpkg-buildpackage.

Simplified, we have this (for all these, all were originally
successful with unpatched dpkg-buildpackage):

autodetection:
┌────────────┬───────────────┬──────────────┬───────┐
│   status   │ found_missing │ used_missing │ count │
├────────────┼───────────────┼──────────────┼───────┤
│ attempted  │ f             │ f            │   109 │
│ attempted  │ t             │ f            │    19 │
│ successful │ f             │ f            │  4667 │
│ successful │ t             │ f            │  3873 │
└────────────┴───────────────┴──────────────┴───────┘
total failed=128, successful=8540

unconditional:
┌────────────┬───────────────┬──────────────┬───────┐
│   status   │ found_missing │ used_missing │ count │
├────────────┼───────────────┼──────────────┼───────┤
│ attempted  │               │ f            │   116 │
│ attempted  │               │ t            │  3838 │
│ successful │               │ f            │  4702 │
└────────────┴───────────────┴──────────────┴───────┘
total failed=3954, successful=4702

The more complex table below combines these results so we can look
at how the two differ side by side.

I've picked a few example packages from failing categories to
demonstrate why they differ, and what corrective action (if any)
needs taking:

   ad=autodetect, uc=unconditional
┌────────────┬────────────┬─────────┬────────────┬─────────┬───────┐
│ ad_status  │ ad_missing │ ad_used │ uc_status  │ uc_used │ count │
├────────────┼────────────┼─────────┼────────────┼─────────┼───────┤
│ attempted  │ f          │ f       │ attempted  │ f       │   109 │ 1
│ attempted  │ t          │ f       │ attempted  │ t       │    19 │ 2
├────────────┼────────────┼─────────┼────────────┼─────────┼───────┤
│ successful │ f          │ f       │ attempted  │ f       │     3 │ 3
│ successful │ t          │ f       │ attempted  │ f       │     2 │ 4
│ successful │ t          │ f       │ attempted  │ t       │  3818 │ 5
├────────────┼────────────┼─────────┼────────────┼─────────┼───────┤
│ successful │ f          │ f       │ successful │ f       │  4662 │ 6
│ successful │ t          │ f       │ successful │ f       │    40 │ 7
└────────────┴────────────┴─────────┴────────────┴─────────┴───────┘

General points:
- autodetection /never/ failed by using build-arch when not present
  (ad_used).  So we never autodetect build-arch when it isn't present
  (false positive).
- If autodetection fails to detect build-arch when present (false
  negative), the effect is benign (we fall back to build, which must
  succeed at present).
- unconditional does fail when it uses build-arch when not present
  (uc_used=t).  This results in immediate build failure.

1) Failed to build for both (build-arch present)
   - autodetection found and used build-arch successfully
   - unconditional used build-arch
   - both failed
   - this category includes both failures due to archive churn and
     failure due to broken build-arch targets

   Failure classes:
   These packages provide build-arch, but fail to build due to bugs
   - configure triggered by build rather than build-arch and build-indep
   - files needed for installation not created by build-arch
   - files needed by install/binary targets not created by build-arch
   - build-arch is an empty target
   - these all need fixing by their maintainers

   Broken rules:
   alt-ergo_0.93-3
   atlas_3.8.3-29 (possibly)
   avbin_7-1.1
   bmf_0.9.4-5
   bsdgames_2.17-19 (possibly)
   bsdiff_4.3-10
   caret_5.6.4~dfsg.1-1
   c-icap_1:0.1.5-1
   coolkey_1.1.0-8
   dsdp_5.8-8
   emoslib_000380+dfsg-3
   espeakedit_1.43.03-1
   eterm_0.9.5-2
   etherpuppet_0.3-1
   fbcat_0.2-2
   gurlchecker_0.13.1-2
   gxemul_0.4.7.2-1
   imlib2_1.4.4-1
   infon_0~r198-3
   libiptcdata_1.0.4-1
   libsvm_3.0-1
   libwebp_0.1.2-1
   libxml2_2.7.8.dfsg-3
   libxslt_1.1.26-7
   loadlin_1.6e-1
   mtink_1.0.16-3
   mumble_1.2.3-2
   noweb_2.11b-7
   ocamlgraph_1.7-1
   ocaml-libvirt_0.6.1.0-2
   openr2_1.3.0-2
   plplot_5.9.5-4
   polybori_0.5~rc1-2.1
   python-prctl_1.1.1-1
   qmk-groundstation_1.0.1-2
   raul_0.6.0-1.2
   rpm_4.9.0-5
   scmxx_0.9.0-2.2
   suricata_1.0.3-1
   taglib_1.7-1
   tnef_1.4.8-1
   uw-imap_8:2007e~dfsg-3.1
   weechat_0.3.5-1
   wkhtmltopdf_0.9.9-3
   wmbattery_2.40

   build failures
   - not directly attributable to build-arch in most cases
   - a few configure errors with
     configure: error: cannot run /bin/bash ./config.sub

   gcj and ocaml failures
   - I assume due to recent archive changes, not build-arch, but could
   be wrong

   docbook/xml failures: probably not built via build-arch so fail
   file installation:
   cameleon_1.9.20-1
   camlidl_1.05-13
   camomile_0.7.2-2
   docbook-xsl-saxon_1.00.dfsg.1-4
   drbd8_2:8.3.9-1

2) Failed to build for both (build-arch missing)
   - autodetect failed to find build-arch and fell back to build,
     but the build failed anyway
   - unconditional used build-arch, and failure would be expected

   All java or gcd errors; not interesting for us.  php5 also failed
   due to mysql errrors.

3) Built only with autodetection
   - autodetection found and used build-arch successfully
   - unconditional failed despite the existence of build-arch
   - this is random build failure only, not interesting for us

   Example: dulwich_0.7.1-2
     - random python breakage caused unconditional build failure
       (not an autodetection or debian/rules issue)

   Example: eina_1.0.0-1
     - failure in testsuite aused unconditional build failure
       (not an autodetection or debian/rules issue)

   Example: solfege_3.19.6-1
     - failure in testsuite aused unconditional build failure
       (not an autodetection or debian/rules issue)

4) Built only with autodetection
   - autodetect failed to find build-arch and fell back to build
   - unconditional used build-arch, but the failure was not due to
     missing build-arch

   Example: kicad_0.0.20110507-1
     - broken debian/rules (build-indep/arch don't depend on configure)
     - autodetection fails for some reason (as for (7)).

   Example: leave_1.12-2
     - debian/rules is a shell script which made autodetection fall
       back.  unconditional failed due to the target being
       unsupported.
     - needs fixing by making debian/rule a makefile

5) Built only with autodetection (build-arch missing)
   - autodetection failed to find build-arch and fell back to build
   - unconditional used build-arch and failed
   No examples for this one; it's working exactly as expected.

6) Successful builds
   - autodetection found and used build-arch
   - unconditional used build-arch
   No examples for this one; it's working exactly as expected.

7) Failed autodetection
   - autodetection failed to detect an existing build-arch target
   - unconditional used build-arch
   A complete list of packages is at the bottom; these are selected
   examples.

   Example: spring_0.82.7.1+dfsg1-3
     In this package, the '%: dh $@' rule is at the end of the rules,
     not the beginning.  This makes "make -qn" try to run the rule:
     % make -f debian/rules -qn build-arch 
     dh build-arch
        dh_testdir -a
        debian/rules override_dh_auto_configure
     make: *** [build-arch] Error 1

     Compare with moving the rule to the start:
     % make -f debian/rules -qn build-arch 
     % echo $?
     1

   Example: isomd5sum_1.0.5-2
     This package contains a real build-arch rule, and it's .PHONY.
     Again, "make -qf" actually tries to build the target and fails:
     % make -f debian/rules -qn build-arch
     make implantisomd5 checkisomd5
     make: *** [build-isomd5sum-stamp] Error 1

   Example: phonon-backend-vlc_0.4.0-1
     % make -f debian/rules -qn build-arch
     /usr/share/pkg-kde-tools/qt-kde-team/2/dhmk.pl --with=kde,pkgkde-symbolshelper 
     make -f debian/rules dhmk_run_configure_commands DHMK_TARGET="configure"
     make: *** [debian/dhmk_configure] Error 1
     Probably somewhere in the guts of
     /usr/share/pkg-kde-tools/qt-kde-team/2/dhmk.mk where the
     generic '%: debian/dhmk_%' expansion is.
     Note that most of the failures are in KDE packages, so fixing this
     will fix the majority of the failures.

   Example: mg_20110120-1
     % make -f debian/rules -qn build-arch
     dh build-arch --parallel
        dh_testdir -a -O--parallel
        debian/rules override_dh_auto_configure
     make: *** [build-arch] Error 1
     Another example using dh.

   These makefiles don't appear to be broken intrinsically.  Could this
   be a bug in make?  It certainly shouldn't be actually running stuff
   when run with '-q'.

> >   arch-any packages (the fraction not providing a build-arch
> >   target).
> 
> That's pretty substantial, and persuades me that it's not a good idea.

Agreed.

By adopting "make -qf", we would need to ensure that
(1) buggy packages are fixed
(7) "make -qf" failures need examining by a better make expert than
    myself.  If this is a make bug, it still shouldn't prevent its
    use as a transitioning mechanism since it's need not be used
    permanently--it appears to be benign and since the effect is to
    fall back to using build, it's not going to cause noticable
    problems.  I am somewhat perplexed by "-q" running commands
    though...

> > Because unstable was changing between the rebuilds, some of the
> > failures are likely due to churn, including multiarch work, so a
> > failure does not necessarily implicate the patch being tested.
> 
> I'm surprised that the build environment was continuing to track updates to
> unstable at this time, as opposed to using a static mirror.  That's an
> unfortunate source of noise in the data; how can we get the list of packages
> that failed to build with autodetection that didn't fail with 'debian/rules
> build', to determine if they are indeed false positives?

These should be included (1) above.  For the purposes of deciding the
best approach to take, I hope the data in this mail will be sufficient.
Most of the differences between builds appear to be due to java
breakage; doing the rebuilds against a static mirror would have
prevented that.  For the purposes of identifying every buggy package
reliably, I'm happy to do a rebuild with a static mirror if Tollef
doesn't mind be using his machine for another two days.  This would
make the list in (1) solely consist of packages with broken
debian/rules; packages currently unbuildable would however be skipped.


Regards,
Roger


(1) Failed to build for both (build-arch present)

# SELECT o.package, o.version
FROM orig AS o
INNER JOIN auto AS a
ON o.package=a.package AND o.version=a.version
INNER JOIN break AS b
ON o.package=b.package AND o.version=b.version
WHERE
  o.status='successful' AND a.status='attempted' AND b.status='attempted' AND a.found_missing=false AND a.used_missing=false AND b.used_missing=false;
┌─────────────────────────────────┬────────────────────┐
│             package             │      version       │
├─────────────────────────────────┼────────────────────┤
│ alt-ergo                        │ 0.93-3             │
│ ant1.7                          │ 1.7.1-7            │
│ ant                             │ 1.8.2-2            │
│ antlr3                          │ 3.2-5              │
│ atlas                           │ 3.8.3-29           │
│ avbin                           │ 7-1.1              │
│ axis                            │ 1.4-13             │
│ bin-prot                        │ 1.2.24-1           │
│ bmf                             │ 0.9.4-5            │
│ bouncycastle                    │ 1.44+dfsg-2        │
│ bsdgames                        │ 2.17-19            │
│ bsdiff                          │ 4.3-10             │
│ bsh                             │ 2.0b4-12           │
│ cameleon                        │ 1.9.20-1           │
│ camlidl                         │ 1.05-13            │
│ camomile                        │ 0.7.2-2            │
│ caret                           │ 5.6.4~dfsg.1-1     │
│ cherokee                        │ 1.2.2-2            │
│ c-icap                          │ 1:0.1.5-1          │
│ coolkey                         │ 1.1.0-8            │
│ db                              │ 5.1.25-10          │
│ distcc                          │ 3.1-4              │
│ docbook-xsl-saxon               │ 1.00.dfsg.1-4      │
│ drbd8                           │ 2:8.3.9-1          │
│ dsdp                            │ 5.8-8              │
│ ecj                             │ 3.5.1-1            │
│ emoslib                         │ 000380+dfsg-3      │
│ espeakedit                      │ 1.43.03-1          │
│ eterm                           │ 0.9.5-2            │
│ etherpuppet                     │ 0.3-1              │
│ euler                           │ 1.61.0-8           │
│ fbcat                           │ 0.2-2              │
│ fbreader                        │ 0.12.10dfsg-3      │
│ feel++                          │ 0.91.0~svn7044-1   │
│ feel++                          │ 0.91.0~svn7063-2   │
│ feel++                          │ 0.91.0~svn7079-1   │
│ fieldslib                       │ 0.1.0-2            │
│ freeradius                      │ 2.1.10+dfsg-3      │
│ gelemental                      │ 1.2.0-6            │
│ glpk-java                       │ 1.0.13-4           │
│ gnustep-back                    │ 0.18.0-3           │
│ gurlchecker                     │ 0.13.1-2           │
│ gxemul                          │ 0.4.7.2-1          │
│ hsqldb                          │ 1.8.0.10-9         │
│ htp                             │ 1.16-3             │
│ hyperestraier                   │ 1.4.13-3           │
│ ilmbase                         │ 1.0.1-3            │
│ imlib2                          │ 1.4.4-1            │
│ infon                           │ 0~r198-3           │
│ iptables                        │ 1.4.10-1           │
│ jakarta-log4j                   │ 1.2.15-11          │
│ jlint                           │ 3.0-4.4            │
│ libbuffy-bindings               │ 0.12+nmu1          │
│ libgtk2-mozembed-perl           │ 0.09-1             │
│ libgui-commands-java            │ 1.1.43-4           │
│ libiptcdata                     │ 1.0.4-1            │
│ libitext-java                   │ 2.1.7-2            │
│ libjaxp1.3-java                 │ 1.3.05-1           │
│ libjmathtex-java                │ 0.7~pre-4          │
│ libmx4j-java                    │ 3.0.2-10           │
│ libreoffice                     │ 1:3.3.2-4          │
│ librepository                   │ 0.1.4-4            │
│ libsaxon-java                   │ 1:6.5.5-7          │
│ libservlet2.4-java              │ 5.0.30-12          │
│ libsvm                          │ 3.0-1              │
│ libsvm                          │ 3.1-1              │
│ libswirl-java                   │ 1.1-1              │
│ libwebp                         │ 0.1.2-1            │
│ libxalan2-java                  │ 2.7.1-5            │
│ libxerces2-java                 │ 2.9.1-4.1          │
│ libxml2                         │ 2.7.8.dfsg-3       │
│ libxml-commons-resolver1.1-java │ 1.2-5              │
│ libxslt                         │ 1.1.26-7           │
│ loadlin                         │ 1.6e-1             │
│ lttv                            │ 0.12.37-17022011-1 │
│ lttv                            │ 0.12.37-17022011-2 │
│ mp3splt-gtk                     │ 0.5.6-1.2          │
│ mtink                           │ 1.0.16-3           │
│ mumble                          │ 1.2.3-2            │
│ noweb                           │ 2.11b-7            │
│ ocaml-data-notation             │ 0.0.3-1            │
│ ocamlgraph                      │ 1.7-1              │
│ ocaml-libvirt                   │ 0.6.1.0-2          │
│ openexr                         │ 1.6.1-4.1          │
│ openr2                          │ 1.3.0-2            │
│ pdftk                           │ 1.44-3             │
│ plplot                          │ 5.9.5-4            │
│ polybori                        │ 0.5~rc1-2.1        │
│ python-prctl                    │ 1.1.1-1            │
│ qmk-groundstation               │ 1.0.1-2            │
│ raul                            │ 0.6.0-1.2          │
│ rpm                             │ 4.9.0-5            │
│ scmxx                           │ 0.9.0-2.2          │
│ sexplib310                      │ 4.2.16-1           │
│ subversion                      │ 1.6.17dfsg-1       │
│ suricata                        │ 1.0.3-1            │
│ swt-gtk                         │ 3.6.2-1            │
│ synopsis                        │ 0.12-7             │
│ taglib                          │ 1.7-1              │
│ tnef                            │ 1.4.8-1            │
│ ttyload                         │ 0.5-4              │
│ unbound                         │ 1.4.10-1           │
│ unbound                         │ 1.4.6-1            │
│ uw-imap                         │ 8:2007e~dfsg-3.1   │
│ weechat                         │ 0.3.3-3            │
│ weechat                         │ 0.3.5-1            │
│ wkhtmltopdf                     │ 0.9.9-3            │
│ wmbattery                       │ 2.40               │
│ xml2                            │ 0.4-3              │
│ yasr                            │ 0.6.9-1            │
└─────────────────────────────────┴────────────────────┘
(110 rows)

(2) Failed to build for both (build-arch missing)

# SELECT o.package, o.version
FROM orig AS o
INNER JOIN auto AS a
ON o.package=a.package AND o.version=a.version
INNER JOIN break AS b
ON o.package=b.package AND o.version=b.version
WHERE
  o.status='successful' AND a.status='attempted' AND b.status='attempted' AND a.found_missing=true AND a.used_missing=false AND b.used_missing=true;
┌─────────────────┬───────────────┐
│     package     │    version    │
├─────────────────┼───────────────┤
│ a7xpg           │ 0.11.dfsg1-6  │
│ antlr           │ 2.7.7-17      │
│ babel           │ 1.4.0.dfsg-8  │
│ gunroar         │ 0.15.dfsg1-4  │
│ ii-esu          │ 1.0a.dfsg1-3  │
│ libidn          │ 1.20-1        │
│ mu-cade         │ 0.11.dfsg1-5  │
│ openjdk-6       │ 6b18-1.8.7-5  │
│ parsec47        │ 0.2.dfsg1-3   │
│ php5            │ 5.3.6-11      │
│ projectl        │ 1.001.dfsg1-3 │
│ sacjava         │ 1.3-3         │
│ tatan           │ 1.0.dfsg1-2   │
│ titanion        │ 0.3.dfsg1-3   │
│ torus-trooper   │ 0.22.dfsg1-6  │
│ tumiki-fighters │ 0.2.dfsg1-4   │
│ val-and-rick    │ 0.1a.dfsg1-2  │
│ voms            │ 1.9.19.2-2    │
│ xxdiff          │ 1:3.2-10      │
└─────────────────┴───────────────┘
(19 rows)

(7) Packages failing due to broken autodetection

# SELECT o.package, o.version
FROM orig AS o
INNER JOIN auto AS a
ON o.package=a.package AND o.version=a.version
INNER JOIN break AS b
ON o.package=b.package AND o.version=b.version
WHERE
  o.status='successful' AND a.status='successful' AND a.found_missing=true AND a.used_missing=false AND b.used_missing=false;
┌──────────────────────────────────┬──────────────────────┐
│             package              │       version        │
├──────────────────────────────────┼──────────────────────┤
│ akonadi                          │ 1.5.3-2              │
│ cliquer                          │ 1.21-1               │
│ coq                              │ 8.3.pl2+dfsg-1       │
│ flog                             │ 1.8-3                │
│ fonttools                        │ 2.3-1                │
│ globus-callout                   │ 0.7-7                │
│ globus-common                    │ 11.6-3               │
│ globus-ftp-client                │ 6.0-2                │
│ globus-ftp-control               │ 2.11-3               │
│ globus-gass-copy                 │ 5.10-2               │
│ globus-gass-transfer             │ 4.3-3                │
│ globus-gram-client               │ 10.4-2               │
│ globus-gram-protocol             │ 9.7-3                │
│ globus-gssapi-gsi                │ 7.6-2                │
│ globus-rls-client                │ 5.2-4                │
│ globus-rls-server                │ 4.9-5                │
│ globus-rsl-assist                │ 2.2-2                │
│ globus-scheduler-event-generator │ 2.1-4                │
│ isomd5sum                        │ 1:1.0.5-2            │
│ kde4libs                         │ 4:4.6.3-3            │
│ kdeaccessibility                 │ 4:4.6.3-1            │
│ kdeadmin                         │ 4:4.6.3-1            │
│ kdeartwork                       │ 4:4.6.3-2            │
│ kdebase                          │ 4:4.6.3-1            │
│ kdebase-runtime                  │ 4:4.6.3-1            │
│ kdebase-workspace                │ 4:4.6.3-1            │
│ kdeedu                           │ 4:4.6.3-2            │
│ kdegames                         │ 4:4.6.3-1            │
│ kdegraphics                      │ 4:4.6.3-1            │
│ kdemultimedia                    │ 4:4.6.3-1            │
│ kdenetwork                       │ 4:4.6.3-1            │
│ kdepim                           │ 4:4.4.11.1+l10n-1    │
│ kdepimlibs                       │ 4:4.6.3-1            │
│ kdepim-runtime                   │ 4:4.4.11.1-2         │
│ kdeplasma-addons                 │ 4:4.6.3-1            │
│ kdesdk                           │ 4:4.6.3-1            │
│ kdetoys                          │ 4:4.6.3-1            │
│ kdeutils                         │ 4:4.6.3-1            │
│ kdewebdev                        │ 4:4.6.3-1            │
│ kicad                            │ 0.0.20110507-1       │
│ leave                            │ 1.12-2               │
│ libtommath                       │ 0.42.0-1             │
│ mg                               │ 20110120-1           │
│ phonon                           │ 4:4.6.0really4.5.0-3 │
│ phonon-backend-gstreamer         │ 4:4.6.0really4.5.1-1 │
│ phonon-backend-vlc               │ 0.4.0-1              │
│ phonon-backend-xine              │ 4:4.6.0really4.4.4-3 │
│ pkg-kde-tools                    │ 0.14.0               │
│ polkit-kde-1                     │ 0.99.0-2             │
│ polkit-qt-1                      │ 0.99.0-3             │
│ postpone                         │ 0.1                  │
│ qca2                             │ 2.0.3-1              │
│ qca2-plugin-ossl                 │ 2.0.0~beta3-1        │
│ qimageblitz                      │ 1:0.0.6-3            │
│ spring                           │ 0.82.7.1+dfsg1-3     │
└──────────────────────────────────┴──────────────────────┘
(55 rows)

-- 
  .''`.  Roger Leigh
 : :' :  Debian GNU/Linux             http://people.debian.org/~rleigh/
 `. `'   Printing on GNU/Linux?       http://gutenprint.sourceforge.net/
   `-    GPG Public Key: 0x25BFB848   Please GPG sign your mail.

Attachment: signature.asc
Description: Digital signature


Reply to: