如何找出可用的反向移植包,并避免手动升级时丢失包?

nea*_*mcb 5 apt backport

我很惊讶地看到,自 Natty 11.04 以来,即使我们启用了 backports 存储库,也不会从该存储库自动安装更新的软件包。我们必须手动安装个别更新,例如通过

apt-get install ipython/precise-backports
Run Code Online (Sandbox Code Playgroud)

UbuntuBackports - 社区 Ubuntu 文档中所述。我想我只是没有得到备忘录......

第一个问题:我们如何找出通过向后移植进行升级的选项?我很惊讶,即使我要求状态,例如通过

wajig status ipython
Run Code Online (Sandbox Code Playgroud)

它没有告诉我有可用的新版本。我想要一份我已经安装的软件包的所有升级列表。

接下来,如何避免仅仅因为通过反向移植升级而丢失现有软件包?

例如,上面的 ipython 安装告诉我:

The following packages will be REMOVED:
   ipython-notebook ipython-qtconsole
Run Code Online (Sandbox Code Playgroud)

我怎么说我想要最新的向后移植的 ipython,以及任何其他依赖它的可用更新包,而无需手动找出所有这些并安装它们?

我知道我可以更改固定以便我获得所有更新,但我很犹豫要不要违背一般建议。但是,如果用户要求更新一个包,那么更新所有依赖项不是很自然,就像您从 ppa 中得到的一样?

Bra*_*iam 5

我们如何找出通过向后移植进行升级的选项?

使用--default-release-t开关运行 apt-get :

sudo apt-get -t precise-backports upgrade
Run Code Online (Sandbox Code Playgroud)

apt-get install ipython/precise-backports您不必插入precise-backports零件相同。

我很惊讶,即使我要求状态,例如通过wajig status ipython它并没有告诉我有新版本可用。

为此,我使用apt-cache policy

apt-cache policy iceweasel
iceweasel:
  Installed: 25.0~a2+20130816004007-1~bpo70+1
  Candidate: 25.0~a2+20130816004007-1~bpo70+1
  Package pin: 25.0~a2+20130816004007-1~bpo70+1
  Version table:
 *** 25.0~a2+20130816004007-1~bpo70+1 1990
       1990 http://mozilla.debian.net/ wheezy-backports/iceweasel-aurora i386 Packages
        100 /var/lib/dpkg/status
     23.0-2 1990
         -1 http://ftp.us.debian.org/debian/ experimental/main i386 Packages
     17.0.8esr-2 1990
        990 http://ftp.utexas.edu/debian/ testing/main i386 Packages
         -1 http://ftp.de.debian.org/debian/ sid/main i386 Packages
Run Code Online (Sandbox Code Playgroud)

接下来,如何避免仅仅因为通过反向移植升级而丢失现有软件包?

如果您要升级的软件包破坏了以前的依赖关系,那么您应该决定是升级还是保持原样。或者您只是强行关闭并破坏您的安装,这完全取决于您。

我怎么说我想要最新的向后移植的 ipython,以及任何其他依赖它的可用更新包,而无需手动找出所有这些并安装它们?

和上面一样。

但是,如果用户要求更新一个包,那么更新所有依赖项不是很自然,就像您从 ppa 中得到的一样?

如果没有更新候选,则没有。这在滚动发行版中经常发生,一些包依赖于存储库中尚不可用的其他包,因此 apt 决定不升级,因为它破坏了依赖关系。

对于ipython您在评论中提到的情况:

遵循包依赖关系页面 ipython-notebook=0.13.2-1~ubuntu12.04.1取决于ipython=0.13.2-1~ubuntu12.04.1,但如果您尝试ipython单独升级,apt 将优先考虑您的操作并不惜任何代价完成它们。由于您只是告诉 aptipython从 backports安装,他明白:

履行只有不惜任何代价此条件

因此,执行此操作的唯一方法是删除/降级由于此操作 ( ipython-notebook) 并ipython从 backports安装而使其依赖项中断的任何包。正确的方法是:

sudo apt-get -t precise-backports install ipython-notebook ipython
Run Code Online (Sandbox Code Playgroud)

或者

sudo apt-get -t precise-backports upgrade
Run Code Online (Sandbox Code Playgroud)

第一个将告诉 apt-get 安装ipython-notebookipython从 backports,第二个将告诉 apt 升级任何在precise-backports存储库中有升级的已安装包。