为什么软件包被列为“已安装”、“已安装,自动”或“已安装,本地”?

为什么软件包被列为“已安装”、“已安装,自动”或“已安装,本地”?

我读过了在 Ubuntu 中,什么将应用程序归类为‘已安装’?但它没有解决以下问题:

当我apt list --installed在 Kubuntu 16.04 上运行时,我看到我列出的所有软件包都有[installed][installed,automatic]。然而,我看到报告称,用户有几个甚至大多数软件包被描述为[installed,local]。最后一种情况下,他们的软件包似乎已经过时了。

相当于[installed,local]Synaptic 包管理器所描述的“本地或过时”Synaptic 中的“本地或过时”是什么意思

答案1

使用以下方法检查我的系统:

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

每个标记的软件包local都有一个在存储库中不可用的安装版本。例如,我folly使用安装了checkinstall。在apt list --installed

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

对于apt-cache policy

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

你可以从源头验证这一点。apt list调用apt-private/private-list.ccDoList()功能,最终又调用apt-private/private-output.ccListSingleVersion(),你可以看到:

 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]");

相关内容