为什么软件和更新会影响终端中的 do-release-upgrade 命令?

为什么软件和更新会影响终端中的 do-release-upgrade 命令?

我有一个关于更新管理器和终端命令的好奇问题,do-release-upgrade作为用户,我注意到很多人在运行时会问问题:

do-release-upgrade -d

并返回:

Checking for a new Ubuntu release
Get:1 Upgrade tool signature[198B]                                           
Get:2 Upgrade tool[1,147kB]                                                  
Fetched 1,148 kB in 0s(0B/s)                                                 
authenticate 'utopic.tar.gz' against 'utopic.tar.gz.gpg' 
extracting 'utopic.tar.gz'

但是当你运行:

do-release-upgrade -c

它返回:

Checking for a new Ubuntu release
No new release found

如果我进入软件和更新 --> 更新 --> 通知我有新的 Ubuntu 版本并将其设置为For any new version

do-release-upgrade -d

将返回:

Checking for a new Ubuntu release
Get:1 Upgrade tool signature[198B]                                           
Get:2 Upgrade tool[1,147kB]                                                  
Fetched 1,148 kB in 0s(0B/s)                                                 
authenticate 'utopic.tar.gz' against 'utopic.tar.gz.gpg' 
extracting 'utopic.tar.gz'

还有:

do-release-upgrade -c

将返回:

Checking for a new Ubuntu release
New release '14.10' available.
Run 'do-release-upgrade' to upgrade to it.

如果我将其设置为Never两个命令do-release-upgrade -d并将do-release-upgrade -c返回:

Checking for a new Ubuntu release
No new release found

但是在软件和更新中,我将所有其他更新设置Never为仅通过终端通知我dist-upgrade,并且它确实有效,它会升级所有可用的更新和安全补丁。

那么为什么它不能与 一起使用do-release-upgrade?它不应该按照我的指示去做,而不管软件和更新中设置了什么吗?还是它只是这样设计的?

编辑

对这个问题做了一个小修改,以便更清楚地说明这一点,我不想收到有关新的可用更新或发布或其他任何内容的图形通知,因此在“软件和更新”中,我将更新和通知设置为,Never因为我想通过终端执行此操作,并且一切正常,除了do-release-upgrade

答案1

do-release-upgrade命令、更新管理器、软件源程序和软件中心都共享一些公共库和配置文件。

您正在查看的特定方面(您想要提示的下一个 Ubuntu 版本)在文件中设置/etc/update-manager/release-upgrades

您可以编辑它,并设置选项的值Prompt。引用评论:

Default prompting behavior, valid options:

 never  - Never check for a new release.
 normal - Check to see if a new release is available.  If more than one new
          release is found, the release upgrader will attempt to upgrade to
          the release that immediately succeeds the currently-running
          release.
 lts    - Check to see if a new LTS release is available.  The upgrader
          will attempt to upgrade to the first LTS release available after
          the currently-running one.  Note that this option should not be
          used if the currently-running release is not itself an LTS
          release, since in that case the upgrader won't be able to
          determine if a newer release is available.

GUI 和命令行都派生出这些设置(因为最终它们都使用 Python 类UpdateManager.Core.MetaRelease.MetaReleaseCore,其中:

 # some constants
 CONF = "/etc/update-manager/release-upgrades"
 CONF_METARELEASE = "/etc/update-manager/meta-release"

if parser.has_option("DEFAULT", "Prompt"):
    type = parser.get("DEFAULT", "Prompt").lower()
    if (type == "never" or type == "no"):
        # nothing to do for this object
        # FIXME: what about no longer supported?
        self.downloaded.set()
        return

因此,这就是它的编码方式,没有任何选项可以覆盖配置文件。

因此,如果您想禁用 GUI 通知,但又能使用do-release-upgrade,则必须编辑配置文件。这很容易做到(如果您愿意,可以用 替换 )ltsnormal

sed -i.bak 's/^Prompt=.*$/Prompt=lts/' /etc/update-manager/release-upgrades
do-release-upgrade -c
sed -i.bak 's/^Prompt=.*$/Prompt=never/' /etc/update-manager/release-upgrades

请注意,似乎有一个用于可扩展配置的目录(/etc/update-manager/release-upgrades.d),但截至目前似乎尚未使用。

答案2

这个对我来说是现在最好理解的解释,例如在软件和更新 --> 更新 --> 通知我有新的 Ubuntu 版本并将其设置为,for long-term support versions则输出do-release-upgrade -dwill >= true,如下do-release-upgrade -d所示:

Check if upgrading to the latest devel (*development) release is possible

那将是您当前正在运行的 >=(更大)版本,但不是 LTS 版本,而是正在开发的版本(不稳定)。

do-release-upgrade -cwill >= false 代表:

Check only if a new distribution release is available
and report the result via the exit code

那就是 LTS 版本(稳定版)。只有当有比您当前运行的版本更高的 LTS 版本可用时,它才会起作用。

但是如果你在软件和更新 --> 更新 --> 通知我新的 Ubuntu 版本for any versions,这将意味着稳定和不稳定(开发)版本。那么两个命令do-release-upgrade -ddo-release-upgrade -c-c -d一起将返回正数。在这种情况下-c甚至可以删除,因为-d如果有的话,这将使其适用于两者。

如果将通知设置为Never两个命令,则将返回负值。这甚至可以称为阻止功能,就好像您无法使用命令中的任一-c或将版本升级到任何新版本一样。我接受这一点,因为它可能是这样设计的。-ddo-release-upgrade

附言

@muru的答案对我来说比我的还要好。谢谢 :)。但我也会出于兴趣而保留这个。

相关内容