Ubuntu – Why are packages listed as “installed”, “installed,automatic”, or “installed,local”

aptpackage-management

I have read What classifies an application as 'installed' in Ubuntu? but it does not address the following issue:

When I runapt list --installed on Kubuntu 16.04, I see that all my listed packages have [installed] or [installed,automatic]. Yet, I've see reports where users have a few or even the majority of their packages being described as [installed,local]. And in this, last, case, their packages seem to be outdated.

Is [installed,local] the equivalent of what the Synaptic Package Manager would describe as "local or obsolete" as discussed in What does “local or obsolete” mean in Synaptic?

Best Answer

Checking my system using:

apt list --installed | awk -F/ '/local]/{print $1}' | xargs apt-cache policy

Every package marked local has an installed version which is not available in the repositories. For example, I installed folly using checkinstall. In apt list --installed:

folly/now 57.0-1 amd64 [installed,local]

And for apt-cache policy:

folly:
  Installed: 57.0-1
  Candidate: 57.0-1
  Version table:
 *** 57.0-1 100
        100 /var/lib/dpkg/status

You can verify this from the source. apt list calls apt-private/private-list.cc's DoList() function, which in turn ends up calling apt-private/private-output.cc's ListSingleVersion(), where you can see:

 if (state.Upgradable() && state.CandidateVer != NULL)
    strprintf(StatusStr, _("[installed,upgradable to: %s]"),
      CandidateVerStr.c_str());
 else if (V.Downloadable() == false)
    StatusStr = _("[installed,local]");
 else if(V.Automatic() == true && state.Garbage == true)
    StatusStr = _("[installed,auto-removable]");
 else if ((state.Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto)
    StatusStr = _("[installed,automatic]");
 else
    StatusStr = _("[installed]");