我开始使用 WSL2,并从 Microsoft Store(没有特定版本号的那个)安装了 Ubuntu。我的理解是它会自动升级到下一个主要 LTS 版本——现在是 20.04,我估计明年会是 22.04。
那么,里面的软件包怎么办?我可以apt update
全部apt upgrade
升级,但 Microsoft Store 也会使用较新的 Ubuntu 版本自动更新,我认为这会覆盖我的部分手动更新。我应该保留它们,只升级我自己安装的软件包吗?最佳做法是什么?
答案1
注意:重复使用我的一些回答这个问题。问题的差异足以需要进行一些更改,但一些核心概念是相同的。
商店应用中的“自动升级”部分有点令人困惑。是的,商店中的“Ubuntu”(没有版本号)“自动更新”,但这可能并不意味着你认为的那样。我自己花了一点时间才习惯这个概念。
这有点难以解释,但是当你从商店安装“Ubuntu”(无版本)时,你实际上会得到三不同的“安装”:
当然,WSL 本身是先决条件。这实际上是安装 Linux 内核的地方,因为它在所有已安装的 WSL2 发行版/实例之间共享。
install.tar.gz
中带有 rootfs 包 ( )的“应用程序包”C:\Program Files\WindowsApps\CanonicalGroup...
。您可以通过启动管理 PowerShell 并运行 来查看它Get-ChildItem -Recurse 'C:\Program Files\WindowsApps\Canonical*' | Where-Object {$_.Name -eq 'install.tar.gz' }
。首次运行时(通过
ubuntu.exe
),安装程序会在您的 中创建您的实际 WSL 实例%UserProfile%\AppData\Local\Packages\CanonicalGroup...
。
Store 应用的“自动升级”到底起什么作用?
当商店中有新的应用程序更新时,系统上唯一更新的是 rootfs 包。它确实不是更改已安装的实例确实如此不是自动更新您的任何软件包实例。它甚至没有更新 WSL2 内核。
您仍需要sudo apt update && sudo apt upgrade -y
定期运行(或同等操作)来更新软件包。请注意,这不包括内核——请参阅下文了解如何操作。
我想您可以从您的问题中看出,这是一件好事。否则,您将在“商店”升级包和来自存储库的包之间产生竞争。
(网站说明:感谢 Reddit 上的 u/zoredache最初为我澄清了这一点。
那么意义何在?
无论如何,对于大多数用户来说,Store 软件包的升级几乎毫无用处,除非你:
取消注册实例(删除所有配置)并通过重新运行命令重新配置它
ubuntu.exe
。在执行初始配置时,rootfs 会被解压,因此此时您可以从商店获取“最新和最好的”。但是,请注意,与官方存储库中的软件包更新相比,商店发布的频率仍然相当低。即使在从商店安装后立即进行,您仍然几乎总是可以通过 获得大量更新apt
。想要使用它
install.tar.gz
来创建第二个 WSL/Ubuntu 实例(使用wsl --import
)。然后,新创建的实例将使用 Store 更新的 rootfs。同样,与第一种情况一样,repo 包的注意事项也适用。
这两种情况都不太常见。即使未版本控制的 StoreUbuntu
更新到(大概)22.04,也不会改变你的已安装20.04 的实例,只有 rootfs包裹。
此时,sudo do-release-upgrade -d
当您最终想要升级到 22.04(或临时版本)时,您仍然需要运行。
升级内核
请注意,Store 更新和apt
(或其他软件包方法)都不会更新 WSL2 内核。由于内核是 WSL2 本身的一部分,并在所有已安装的发行版之间共享,因此处理方式不同。使用:
wsl --update
... 检查并下载任何 WSL2 内核更新。
这假设你使用的是默认内核。你可以选择从WSL2 内核源代码。根据我的经验,内核更新可能需要几天或几周才能通过 获得wsl --update
,因此,如果您想获取最新和最好的更新,您可以。然后通过 配置 WSL2 以使用该内核.wslconfig
。
随着 WSL 最近的改变本身现在从商店安装,wsl --update
也会更新 WSL(包括内核),但对你已安装的发行版仍然没有影响(当然,比如 Ubuntu)。
还有一件事
尽管如此,“Ubuntu”(未版本控制)应用程序仍然有一个优势,那就是当您最终升级到更高版本时,您无需担心更改其名称(如在另一个问题中)。“Ubuntu 20.04”版本将始终具有实例名称Ubuntu-20.04
,即使您稍后手动将其升级为其他名称。