2/15/18 compiz update broke unity

This compiz update forced removal of unity and ubuntu-desktop on my 16.04 Ubuntu system.

The offending package that is missing, but unity needs, seems to be compiz-core-abiversion-20151010. It seems to be a virtual package, and I can't find it to download.

enter image description here

As it happens, I mostly use LXDE on this system, but I'd be very unhappy if I used Unity...

Since I do occasionally use the Unity desktop, is there a fix for this?

Edit: related questions are rolling in. Looks like a major quality escape

"Kept back" packages for update , want to uninstall unity?

compiz upgrade uninstalled unity

Ubuntu TaskBar is gone. Launcher is missing

What did you guys just DO! Updates to both my 16.04 environs killed the desktops!

Edit 2: Bug 1749839 submitted to launchpad


I have found a solution. apt-get fails to be able to handle the situation, but aptitude can handle it.

sudo aptitude install ubuntu-desktop

Note that the first solution offered by aptitude doesn't correct the problem, because that chooses not to install the package. I had to select no the first time, and then aptitude offered a second solution of downgrading the compiz packages that caused all the problems. The downgrade fixes the dependency problem, and then ubuntu-desktop and unity are reinstalled.


Very strange situation.
Yes compiz-core-abiversion-20151010 is virtual on xenial and zesty, but it is provided by compiz-core:

$ apt-cache show compiz-core  | grep "Version\|Provides\|Package"
Package: compiz-core
Version: 1:0.9.12.3+16.04.20180221-0ubuntu1
Provides: compiz-core-abiversion-20180221
Package: compiz-core
Version: 1:0.9.12.2+16.04.20160415-0ubuntu1
Provides: compiz-core-abiversion-20151010

So APT and dpkg knows about both of them.

Full list of compiz-core-abiversion family is as follows:

$ aptitude search compiz-core-abiversion-
v   compiz-core-abiversion-20151010                                -
v   compiz-core-abiversion-20151010:i386                           -
v   compiz-core-abiversion-20180221                                -
v   compiz-core-abiversion-20180221:i386                           -

Here as we know compiz-core-abiversion-20151010 is not installable:

$ sudo apt-get install compiz-core-abiversion-20151010
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package compiz-core-abiversion-20151010 is a virtual package provided by:
  compiz-core 1:0.9.12.2+16.04.20160415-0ubuntu1 [Not candidate version]

E: Package 'compiz-core-abiversion-20151010' has no installation candidate

But we can install newer (actual) version:

$ sudo apt-get install compiz-core-abiversion-20180221
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Note, selecting 'compiz-core' instead of 'compiz-core-abiversion-20180221'
The following additional packages will be installed:
  compiz-gnome compiz-plugins compiz-plugins-default libcompizconfig0 libdecoration0 libunity-core-6.0-9 unity unity-schemas unity-services
The following packages will be upgraded:
  compiz-core compiz-gnome compiz-plugins compiz-plugins-default libcompizconfig0 libdecoration0 libunity-core-6.0-9 unity unity-schemas
  unity-services
10 upgraded, 0 newly installed, 0 to remove and 32 not upgraded.
Need to get 5 302 kB of archives.
After this operation, 278 kB of additional disk space will be used.
Do you want to continue? [Y/n] n

So on normal consistent system all we need is to have all upgrades installed.
But if unity package was removed, we can install it with:

sudo aptitude update
sudo aptitude safe-upgrade
sudo aptitude install unity ubuntu-desktop

Note 1: My Ubuntu 16.04 LTS installations with Unity and MATE DE (1 clean xenial and and 3 old precise->trusty->xenial) work normally after regular upgrades without my intervention. All these systems did not tried to remove neither Unity nor ubuntu-desktop during upgrades. And of course xenial-proposed is disabled on my system, since I do not want to transform my Ubuntu LTS to bleeding-edge self-breakable ArchLinux.

Note 2: I edited my answer 2018-03-12 because of the fact that compiz-core-abiversion-20170630 was removed from repositories.


Assuming you're logged in and your UI is stuck without unity, you can do the following:

  1. Go to tty4 using Ctrl+Alt+F4.
  2. Login.
  3. Install aptitude:

    sudo apt install aptitude
    
  4. Install unity using aptitude:

    sudo aptitude install unity
    

It will then tell you that there is a conflicting package. You answer 'n' and it will propose that you downgrade compiz. Go ahead and accept that.


This is the second times in less than 6 months that the Ubuntu teams made a proposed update without any testing and breaking working Ubuntu systems.

These guys recently are set loose to break the current LTS version with phony and untested proposed updates ... That is new, till last year it never happened.

The solution is to NEVER install a proposed and so called Partial Upgrade ... You can still update your system through Synaptic package by package (although to make good sense of it Synaptic is now removed from the official release) ... Until you block all updates of the buggy release. Here is an example:

#!/bin/sh
#
# Add nemo package to update blacklist
# Run script as super user i.e. sudo ./block-upd-unity.sh
#

if [ $(id -u) != 0 ]; then
   echo "This script requires root permissions"
   sudo "$0"
   exit
fi
echo "nemo hold" | dpkg --set-selections
echo "nemo-data hold" | dpkg --set-selections
echo "nemo-fileroller hold" | dpkg --set-selections

Then run the script by its name in the current directory, like:

$ ./block-upd-nemo

To unblock

#!/bin/sh
#
# Remove nemo package from update blacklist
# Run script as super user i.e. sudo ./block-upd-unity.sh
#

if [ $(id -u) != 0 ]; then
   echo "This script requires root permissions"
   sudo "$0"
   exit
fi
echo "nemo install" | dpkg --set-selections
echo "nemo-data install" | dpkg --set-selections
echo "nemo-fileroller install" | dpkg --set-selections

Then

$ ./unblock-upd-nemo

Here in Synaptic you can see a long list of compiz related packages which are breaking Xenial LTS by removing these packages:

ubuntu-desktop unity unity-tweak-tool unsettings ...

The packages to block are:

[List Updated as I missed the unity affected packages]

compiz compiz-core compiz-dev compiz-gnome compiz-plugins compiz-plugins-default compiz-plugins-extra compiz-plugins-main compiz-plugins-main-default compizconfig-settings-manager libcompizconfig0 libdecoration0 libdecoration0-dev python-compizconfig libunity-core-6.0-9 libunity-core-6.0-dev unity unity-schemas unity-services

Quite a long list. Manageable through Shell scripting.

A recovery solution would be to boot from a Xenial install USB stick and to perform a chroot. Go to the Launchpad website for compiz to download the Release (main) packages and force install them with dpkg -i *.deb then block all updates, or remove the proposed releases from your update configuration.

[Update]: You need as well to go to the Launchpad website for unity and download the Release (main) affected packages (see below in the script).

Google search if you are not familiar with it.

Here is my blocking script for compiz I just finished:

[Updated as I missed the unity affected packages]

#!/bin/sh
#
# Add compiz package to update blacklist
# Run script as super user i.e. sudo ./block-upd-compiz.sh
#

if [ $(id -u) != 0 ]; then
   echo "This script requires root permissions"
   sudo "$0"
   exit
fi
echo "compiz hold" | dpkg --set-selections
echo "compiz-core hold" | dpkg --set-selections
echo "compiz-dev hold" | dpkg --set-selections
echo "compiz-gnome hold" | dpkg --set-selections
echo "compiz-plugins hold" | dpkg --set-selections
echo "compiz-plugins-default hold" | dpkg --set-selections
echo "compiz-plugins-extra hold" | dpkg --set-selections
echo "compiz-plugins-main hold" | dpkg --set-selections
echo "compiz-plugins-main-default hold" | dpkg --set-selections
echo "compizconfig-settings-manager hold" | dpkg --set-selections
echo "libcompizconfig0 hold" | dpkg --set-selections
echo "libdecoration0 hold" | dpkg --set-selections
echo "libdecoration0-dev hold" | dpkg --set-selections
echo "python-compizconfig hold" | dpkg --set-selections
echo "libunity-core-6.0-9 hold" | dpkg --set-selections
echo "libunity-core-6.0-dev hold" | dpkg --set-selections
echo "unity hold" | dpkg --set-selections
echo "unity-schemas hold" | dpkg --set-selections
echo "unity-services hold" | dpkg --set-selections

Don't forget to set the scripts executable ...

$ chmod a+x block-upd-compiz

[Folllow Up]: After running a Shell script to unblock the 19 packages from compiz and unity. I tried out the N0rbet solution and it seems to work:

$ sudo apt-get install compiz-core-abiversion-20170630
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Note, selecting 'compiz-core' instead of 'compiz-core-abiversion-20170630'
The following additional packages will be installed:
  compiz-dev compiz-gnome compiz-plugins compiz-plugins-default libcompizconfig0 libdecoration0
  libdecoration0-dev libunity-core-6.0-9 libunity-core-6.0-dev unity unity-schemas unity-services
The following packages will be upgraded:
  compiz-core compiz-dev compiz-gnome compiz-plugins compiz-plugins-default libcompizconfig0 libdecoration0
  libdecoration0-dev libunity-core-6.0-9 libunity-core-6.0-dev unity unity-schemas unity-services
13 upgraded, 0 newly installed, 0 to remove and 13 not upgraded.
Need to get 5,410 kB of archives.
After this operation, 283 kB of additional disk space will be used.
Do you want to continue? [Y/n] y