我有一个关于更新管理器和终端命令的好奇问题,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
,则必须编辑配置文件。这很容易做到(如果您愿意,可以用 替换 )lts
:normal
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 -d
will >= true,如下do-release-upgrade -d
所示:
Check if upgrading to the latest devel (*development) release is possible
那将是您当前正在运行的 >=(更大)版本,但不是 LTS 版本,而是正在开发的版本(不稳定)。
但do-release-upgrade -c
will >= 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 -d
和do-release-upgrade -c
或-c -d
一起将返回正数。在这种情况下-c
甚至可以删除,因为-d
如果有的话,这将使其适用于两者。
如果将通知设置为Never
两个命令,则将返回负值。这甚至可以称为阻止功能,就好像您无法使用命令中的任一-c
或将版本升级到任何新版本一样。我接受这一点,因为它可能是这样设计的。-d
do-release-upgrade
附言
@muru的答案对我来说比我的还要好。谢谢 :)。但我也会出于兴趣而保留这个。