Reading build logs

Build logs for Debian packages can be quite long and difficult
for a human to read. Anybody who has looked at these logs
trying to figure out why a build failed will have spent
time scrolling through them and skimming for certain phrases
(lines starting with “error:” for example). In many cases,
you can spot the problem in the last 10 or 20 lines of
output – but it’s also quite common that the error is somewhere
at the beginning of many pages of error output.

The buildlog consultant

The buildlog consultant project attempts to aid in this
process by parsing sbuild and non-Debian (e.g. the output
of “make”) build logs and trying to identify the key line
that explains why a build failed. It can then either display
this specific line, or a fragment of the log around surrounding
the key line.

Classification

In addition to finding the key line explaining the failure,
it can also classify and parse the error in many cases
and return a result code and some metadata.

For example, in a failed build
of gnss-sdr that has produced 2119 lines of output,
the reason for the failure is that
log4cpp is missing – which is on line 641:

634
635
636
637
638
639
640
641
642
643
644
645
646
647
 -- Required GNU Radio Component: ANALOG missing!
 -- Could NOT find GNURADIO (missing: GNURADIO_RUNTIME_FOUND)
 -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)
 -- Could NOT find LOG4CPP (missing: LOG4CPP_INCLUDE_DIRS
 LOG4CPP_LIBRARIES)

 CMake Error at CMakeLists.txt:593 (message):
   *** Log4cpp is required to build gnss-sdr

 -- Configuring incomplete, errors occurred!
 See also "/<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/CMakeFiles/
 CMakeOutput.log".
 See also "/<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/CMakeFiles/
 CMakeError.log".

In this case, the buildlog consultant can both figure out
line was problematic and what the problem was:

 % analyse-sbuild-log build.log
 Failed stage: build
 Section: build
 Failed line: 641:
   *** Log4cpp is required to build gnss-sdr
 Error: Missing dependency: Log4cpp

Or, if you’d like to do something else with the output, use JSON output:

 % analyse-sbuild-log --json build.log
 {"stage": "build", "section": "Build", "lineno": 641, "kind": "missing-dependency", "details": {"name": "Log4cpp""}}

How it works

The consultant does some structured parsing (most notably
it can parse the sections from a sbuild log), but otherwise
is a large set of carefully crafted regular expressions
and heuristics. It doesn’t always find the problem, but
has proven to be fairly accurate. It is constantly improved
as part of the Debian Janitor project, and
that exposes it to a wide variety of different errors.

You can see the classification and error detection in action
on the result codes
page of the Janitor.

Using the buildlog consultant

You can get the buildlog consultant from either pip or Debian
unstable (package: python3-buildlog-consultant ).

The buildlog consultant comes with two scripts – analyse-build-log and analyse-sbuild-log, for analysing
build logs and sbuild logs respectively.

Go Top



Source link

By admin

Leave a Reply

Your email address will not be published. Required fields are marked *