Mir

[regression] Mir deb packages with versioned names cannot be installed simultaneously any more

Bug #1293944 reported by Daniel van Vugt
8
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Mir
Fix Released
Critical
Mir development team
0.6
Won't Fix
Undecided
Unassigned
mir (Ubuntu)
Fix Released
High
Unassigned
mir (Ubuntu RTM)
Fix Released
High
Unassigned

Bug Description

Mir has some packages with ABI-versioned names (libmirserver17, libmirclient7) so that multiple versions can be installed simultaneously, in theory. However this plan is not working;

Package: libmirserver17
Section: libs
Architecture: i386 amd64 armhf arm64
Multi-Arch: same
Pre-Depends: ${misc:Pre-Depends}
Depends: ${misc:Depends},
         ${shlibs:Depends},
         libmirplatform (= ${binary:Version}),
         libmirplatformgraphics-mesa (= ${binary:Version}) |
           libmirplatformgraphics-android (= ${binary:Version}),

When we bump an ABI number, we also increase the ${binary:Version}. So you can see from the names that libmirplatform* can only have one version installed at a time. And that indirectly means that libmirserverN can never be installed simultaneously with libmirserverN+1.

This also leads to annoying CI failures as we're seeing this week:

The following packages have unmet dependencies:
 libmirserver16 : Depends: libmirplatform (= 0.1.6+14.04.20140310-0ubuntu1) but 0.1.7+autopilot0 is to be installed
                  Depends: libmirplatformgraphics-mesa (= 0.1.6+14.04.20140310-0ubuntu1) but 0.1.7+autopilot0 is to be installed or
                           libmirplatformgraphics-android (= 0.1.6+14.04.20140310-0ubuntu1) but 0.1.7+autopilot0 is to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

There are at least two possible solutions I can think of so far:

(1) Change our Depends' to not use straight equality. So we must change:
   libmirplatform (= ${binary:Version}),
to:
   libmirplatform (>= ${binary:Version}),
or even to
   libmirplatform (>= some_older_version_based_on_real_requirements),

(2) Change libplatform* to include some ABI number in their names. Not ideal.

I like (1).

Tags: regression

Related branches

summary: - Mir packages with versioned names cannot be installed simultaneously any
- more
+ Mir deb packages with versioned names cannot be installed simultaneously
+ any more
Changed in mir:
milestone: 0.1.8 → 0.1.9
kevin gunn (kgunn72)
Changed in mir:
milestone: 0.1.9 → 0.1.10
Revision history for this message
Chris Halse Rogers (raof) wrote : Re: Mir deb packages with versioned names cannot be installed simultaneously any more

3) Install libmirplatform in directories corresponding to the SOVER. I prefer this even more, because we then don't have plugin objects polluting the default loader path.

Revision history for this message
Daniel van Vugt (vanvugt) wrote :

Interesting. Although there are sometimes cases when you do want to treat a plugin as a shared library (e.g. plugin dependencies).
This is the reason why I've seen multiple projects continue to name their plugins:
    libfoo.so
instead of the simpler:
    foo.so
Just because there's a chance you might sometimes want to treat it as a library.

Changed in mir:
milestone: 0.2.0 → 0.3.0
Changed in mir:
milestone: 0.3.0 → 0.4.0
Changed in mir:
milestone: 0.4.0 → 0.5.0
Revision history for this message
Michael Terry (mterry) wrote :

Would (1) even work? If libmirplatform is changing ABI, the old libmirserver7 wouldn't work with it, eh? I'd expect you'd need (2) in that case.

Changed in mir:
milestone: 0.5.0 → 0.6.0
Changed in mir:
assignee: nobody → Chris Halse Rogers (raof)
status: Triaged → In Progress
Changed in mir:
milestone: 0.6.0 → 0.7.0
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

Fix committed into lp:mir/devel at revision None, scheduled for release in mir, milestone Unknown

Changed in mir:
status: In Progress → Fix Committed
Changed in mir:
milestone: 0.7.0 → 0.6.0
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

Fix backported to lp:mir/0.6 at revision 1839.

Changed in mir:
milestone: 0.6.0 → 0.7.0
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

mir (0.6.0+14.10.20140811-0ubuntu1) utopic; urgency=medium

Changed in mir (Ubuntu):
importance: Undecided → Medium
status: New → Fix Released
Changed in mir:
milestone: 0.7.0 → none
status: Fix Committed → Fix Released
Changed in mir:
milestone: none → 0.7.0
status: Fix Released → Fix Committed
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

Sorry for the confusion. Most of the 0.7.0 series got merged into 0.6.0 at a late stage. I've verified everything in 0.6.0 is also fixed in 0.7.0. So although the branched fixes in 0.7.0 have not been "released" yet, the equivalent fixes in 0.6.0 have. No need to mention them in 0.7 any more.

Changed in mir:
milestone: 0.7.0 → none
status: Fix Committed → Fix Released
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

Oops. Actually this never was really fixed. We haven't converted libmir*platform*.so yet...

More work is still coming: lp:~raof/mir/privatise-all-the-things

Changed in mir:
milestone: none → 0.7.0
status: Fix Released → In Progress
Changed in mir (Ubuntu):
status: Fix Released → In Progress
Changed in mir:
milestone: 0.7.0 → 0.8.0
Changed in mir (Ubuntu):
status: In Progress → Triaged
summary: - Mir deb packages with versioned names cannot be installed simultaneously
- any more
+ [regression] Mir deb packages with versioned names cannot be installed
+ simultaneously any more
tags: added: regression
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

Is there a simpler/faster way to resolve this bug? It seems like it will be holding up the Mir 0.8 release now:
https://code.launchpad.net/~vanvugt/mir/server-ABI-26/+merge/233142

Changed in mir:
importance: Medium → High
Changed in mir (Ubuntu):
importance: Medium → High
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

Bumped to critical per comment #9.

Changed in mir:
importance: High → Critical
assignee: Chris Halse Rogers (raof) → Mir development team (mir-team)
milestone: 0.8.0 → 0.9.0
Changed in mir:
milestone: 0.9.0 → 0.8.0
no longer affects: mir/0.8
Changed in mir:
assignee: Mir development team (mir-team) → Daniel van Vugt (vanvugt)
Changed in mir:
assignee: Daniel van Vugt (vanvugt) → Mir development team (mir-team)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

Fix committed into lp:mir/devel at revision None, scheduled for release in mir, milestone Unknown

Changed in mir:
status: In Progress → Fix Committed
Changed in mir:
status: Fix Committed → Fix Released
Changed in mir (Ubuntu RTM):
importance: Undecided → High
status: New → Triaged
Revision history for this message
Launchpad Janitor (janitor) wrote :
Download full text (5.5 KiB)

This bug was fixed in the package mir - 0.8.0+14.10.20141010-0ubuntu1

---------------
mir (0.8.0+14.10.20141010-0ubuntu1) utopic; urgency=medium

  [ Daniel van Vugt ]
  * New upstream release 0.8.0 (https://launchpad.net/mir/+milestone/0.8.0)
    - Enhancements:
      . Less sensitivity to ABI breaks - many headers unused by external
        projects are now hidden and not installed by -dev packaes. If you
        require any headers that are missing, just ask.
      . Touchspots: --enable-touchspots to servers; visually shows touch
        locations (warning: This affects performance LP: #1373692).
      . Client performance reporting: Any Mir client can now get accurate
        performance information (frame rate, render time, buffer lag etc)
        logged to stdout. Just set env MIR_CLIENT_PERF_REPORT=log
      . Further improved touch responsiveness, with less lag and smoother
        scrolling (so long as you don't enable touchspots).
      . Slightly faster builds using precompiled headers.
      . Turn hardware overlays on by default. When in use, this halves the
        CPU usage of a Mir server. Already enabled in unity-system-compositor.
      . More scripting to detect ABI breaks.
      . Improved src/ tree consistency (renamed "src/shared" to "src/common").
      . Improved fatal signal design: Changed from SIGTERM to SIGHUP delivered
        to clients on unexpected server disconnection.
      . Improved library/package design to allow concurrent installations
        of different Mir versions without conflicts.
      . Fd reception code is now common to client and server.
    - ABI summary: Servers need rebuilding, but clients do not;
      . Mirclient ABI unchanged at 8
      . Mircommon ABI bumped to 2
      . Mirplatform ABI bumped to 3
      . Mirserver ABI bumped to 26
    - API changes between Mir 0.7 and 0.8:
      . Lots of headers removed from the public SDK! We have only hidden
        headers not known to be used by any known projects. Please let us
        know if anything is missing - https://bugs.launchpad.net/mir/+filebug
      . graphics::Platform - interface changed significantly.
      . Lots of server API changes to support touchspots.
      . File descriptors now passed as type Fd instead of int32_t.
    - Bug fixes:
      . [regression] Mir deb packages with versioned names cannot be installed
        simultaneously any more (LP: #1293944)
      . A frozen client can hang the whole server (LP: #1350207)
      . QtMir FTBFS: fatal error: mir/input/input_channel.h: No such file or
        directory (LP: #1365934)
      . [regression] platform-api fails to build against Mir 0.8 (LP: #1368354)
      . Mir FTBFS with gcc 4.9.1-14 (utopic update):
        auto_unblock_thread.h:44:46: error: no matching function for call to
        ‘std::thread::thread(<brace-enclosed initializer list>)’ (LP: #1369389)
      . [regression] Compositing is jerky and stutters during touch events
        (LP: #1372850)
      . unit test fails: AndroidInputReceiverSetup.slow_raw_input_doesnt_cause_
        frameskipping (LP: #1373826)
      . intermittent hang in TestClientInput (LP: #1338612)
      . TestClientInput.scene_obscure_mo...

Read more...

Changed in mir (Ubuntu):
status: Triaged → Fix Released
Revision history for this message
Launchpad Janitor (janitor) wrote :
Download full text (5.4 KiB)

This bug was fixed in the package mir - 0.8.0+14.10.20141005-0ubuntu1

---------------
mir (0.8.0+14.10.20141005-0ubuntu1) 14.09; urgency=medium

  [ Daniel van Vugt ]
  * New upstream release 0.8.0 (https://launchpad.net/mir/+milestone/0.8.0)
    - Enhancements:
      . Less sensitivity to ABI breaks - many headers unused by external
        projects are now hidden and not installed by -dev packaes. If you
        require any headers that are missing, just ask.
      . Touchspots: --enable-touchspots to servers; visually shows touch
        locations (warning: This affects performance LP: #1373692).
      . Client performance reporting: Any Mir client can now get accurate
        performance information (frame rate, render time, buffer lag etc)
        logged to stdout. Just set env MIR_CLIENT_PERF_REPORT=log
      . Further improved touch responsiveness, with less lag and smoother
        scrolling (so long as you don't enable touchspots).
      . Slightly faster builds using precompiled headers.
      . Turn hardware overlays on by default. When in use, this halves the
        CPU usage of a Mir server. Already enabled in unity-system-compositor.
      . More scripting to detect ABI breaks.
      . Improved src/ tree consistency (renamed "src/shared" to "src/common").
      . Improved fatal signal design: Changed from SIGTERM to SIGHUP delivered
        to clients on unexpected server disconnection.
      . Improved library/package design to allow concurrent installations
        of different Mir versions without conflicts.
      . Fd reception code is now common to client and server.
    - ABI summary: Servers need rebuilding, but clients do not;
      . Mirclient ABI unchanged at 8
      . Mircommon ABI bumped to 2
      . Mirplatform ABI bumped to 3
      . Mirserver ABI bumped to 26
    - API changes between Mir 0.7 and 0.8:
      . Lots of headers removed from the public SDK! We have only hidden
        headers not known to be used by any known projects. Please let us
        know if anything is missing - https://bugs.launchpad.net/mir/+filebug
      . graphics::Platform - interface changed significantly.
      . Lots of server API changes to support touchspots.
      . File descriptors now passed as type Fd instead of int32_t.
    - Bug fixes:
      . [regression] Mir deb packages with versioned names cannot be installed
        simultaneously any more (LP: #1293944)
      . A frozen client can hang the whole server (LP: #1350207)
      . QtMir FTBFS: fatal error: mir/input/input_channel.h: No such file or
        directory (LP: #1365934)
      . [regression] platform-api fails to build against Mir 0.8 (LP: #1368354)
      . Mir FTBFS with gcc 4.9.1-14 (utopic update):
        auto_unblock_thread.h:44:46: error: no matching function for call to
        ‘std::thread::thread(<brace-enclosed initializer list>)’ (LP: #1369389)
      . [regression] Compositing is jerky and stutters during touch events
        (LP: #1372850)
      . unit test fails: AndroidInputReceiverSetup.slow_raw_input_doesnt_cause_
        frameskipping (LP: #1373826)
      . intermittent hang in TestClientInput (LP: #1338612)
      . TestClientInput.scene_obscure_mot...

Read more...

Changed in mir (Ubuntu RTM):
status: Triaged → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.