如何列出可用的向后升级

ric*_*cab 13 upgrade package-management apt backport

我刚刚按照Ubuntu Backports激活手动向后移植,我有几个问题。我怎样才能在命令行(例如apt-cacheraptitude)中:

  1. 列出具有可用反向移植升级的已安装软件包?(之前,我用于apt-show-versions -u可升级包)
  2. 列出所有可用的向后移植软件包(已安装或未安装)?

ric*_*cab 14

  1. 列出具有可用 backport 升级的已安装软件包

    aptitude search '?and(~i, ~Araring-backports)'
    
    Run Code Online (Sandbox Code Playgroud)
  2. 列出所有可用的向后移植包(已安装或未安装)

    aptitude search '~Abackports ?not(~S ~i ~Abackports)'
    
    Run Code Online (Sandbox Code Playgroud)


Jas*_*nti 6

此信息在 Synaptic 中可用,默认情况下未安装,但可以通过以下方式获得,

sudo apt-get install synaptic
Run Code Online (Sandbox Code Playgroud)

在左侧边栏中选择Origin将允许按包的来源浏览包,例如 raring-backports/universe,以及本地安装的包。

如果你对命令行解决方案感兴趣,我编写了一个快速而肮脏的 python 脚本来列出 backports 中的包,但不幸的是它很慢。

from __future__ import print_function

import apt

def backport_version(package):
  if package.versions is None:
    return False
  for version in package.versions:
    for origin in version.origins:
      if origin.archive.endswith("backports"):
        return version.version
  return None

with apt.Cache() as cache:
  for package in cache:
    version = backport_version(package)
    if version is not None:
      print(package.fullname, version)
      if package.is_installed:
        print("    Installed:", package.installed.version)
Run Code Online (Sandbox Code Playgroud)

它列出了所有可用的 backport 软件包,以及已安装的版本(如果已安装)。

  • 感谢所有的答复。您的 aptitude 解决方案解决了 2。对于 1,我必须进行更多研究才能获得:`aptitude search '~i ~Abackports ?not(~S ~i ~Abackports)'`。这解决了 1(假设向后移植版本总是更高)。如果没有你的帮助,我不会得到它,所以如果你想让它成为一个答案,我会选择它 (3认同)

小智 5

编辑:经过一些实验,我找到了一个非常适合我的解决方案!它仅列出 -backports 存储库中具有较新版本的软件包,仅此而已(其他解决方案列出了其他软件包。

要列出可用的向后移植更新,请运行以下命令:

aptitude search -t $(lsb_release -sc)-backports '~U ~Abackports'
Run Code Online (Sandbox Code Playgroud)

如果您希望列表也显示当前版本和更新版本,请改为运行以下命令:

aptitude search -t $(lsb_release -sc)-backports -F '%p %v -> %V' '~U ~Abackports'
Run Code Online (Sandbox Code Playgroud)

这将显示如下内容:

nvidia-settings               331.20-0ubuntu -> 346.59-0ubuntu
screen                        4.1.0~20120320 -> 4.2.1-2~ubuntu
yelp-xsl                      3.10.1-1       -> 3.12.0-1~ubunt
Run Code Online (Sandbox Code Playgroud)

如果您不想记住此命令,请将其添加到您的~/.bashrc

alias apt-list-backports="aptitude search -t $(lsb_release -sc)-backports -F '%p %v -> %V' '~U ~Abackports'"
Run Code Online (Sandbox Code Playgroud)

现在你只需要写apt-list-backports


原答案

刚刚找到了另一种方法:

apt-get upgrade -s -t $(lsb_release -sc)-backports
Run Code Online (Sandbox Code Playgroud)

这将模拟升级并列出将升级的软件包。但也包括对向后移植的升级(我认为也显示了正常升级)。

您还可以添加选项-V以显示软件包将升级到的版本。


要在 backports 中查看包的更改日志,请使用:

apt-get changelog -t $(lsb_release -sc)-backports PACKAGE_NAME
Run Code Online (Sandbox Code Playgroud)