关注了就能看到更多这么棒的文章哦~
OpenSUSE MicroOS Desktop: a Flatpak-based immutable distribution
March 29, 2023
This article was contributed by Koen Vervloesem
DeepL assisted translation
https://lwn.net/Articles/927373/
Immutable Linux 发行版最近正在快速增长,有好几个流行的发行版都在创建自己的 immutable(不可改变的)版本,正如我们之前预测的那样,这可能是 2023 年的一个新趋势。虽然这些不可变的发行版中有许多都是专注于服务器使用场景的,但也有一些提供了桌面环境。OpenSUSE MicroOS Desktop 就是其中之一,它以最小版本的 openSUSE Tumbleweed 为底层基础操作系统,应用程序则是以 Flatpak 或容器(container)的形式来运行。在日常使用中感觉很像一个正常的 openSUSE 桌面。它最大的好处是在不牺牲系统稳定性的情况下可以获得最新的软件版本。
想跟上最新软件的 Linux 用户一般都会选择滚动发布(rolling-release)的版本,如 Tumbleweed、Arch Linux 或 Gentoo Linux。然而,这种方式可能会带来软件版本之间的兼容性问题,或者导致系统不稳定。另一方面,稳定的或长期支持(LTS)的发行版则迎合了那些优先考虑稳定性而不是最新软件的用户的需求。
当然,有许多用户希望两全其美:在一个稳定的基础操作系统上获得最新的软件版本。有一些解决方案通常可以绕过发行版的本地软件包管理系统。如 Flatpak、Snap 和 AppImage 就是实现这一目的的当前领先的技术。应用程序与它们的依赖关系都被打包在一起,从而防止相互之间的干扰或底层发行版引入的干扰。通过这种方法,用户就能够运行更新版本的软件,而不会遇到依赖性问题,也不会影响系统稳定性。
MicroOS on the desktop
将这一概念发挥到极致,就是采用一个小型的 "不可改变的" 核心操作系统,把尽可能多的软件都打包在独立的软件包中。然后,该操作系统的目的非常单一,比如作为 container host 来运行,或提供一个最小的桌面环境。所有的额外软件都有望被容器化(containerized)或沙盒化(sandboxed)。这种方法在服务器领域和桌面领域的操作系统上都可以实现。对于桌面环境,有 Fedora Silverblue(使用 GNOME)和 Fedora Kinoite(使用 KDE Plasma),基于 Ubuntu(很快将基于 Debian)的 Vanilla OS,基于 Debian 的 Endless OS,以及 openSUSE MicroOS Desktop。
传统的桌面发行版提供了基础操作系统、桌面环境和应用程序。openSUSE MicroOS Desktop 则是一个单一用途的操作系统,提供了基本操作系统和桌面环境。MicroOS ISO 镜像的安装程序与 openSUSE 的普通桌面版相同,但区别在于用户能够选择的系统角色(system roles)。
对于桌面使用环境有两个系统角色:一个是使用了 GNOME,作为 release candidate,另一个是 KDE Plasma,指定为 alpha(见下图)。两者都安装了具有自动更新和回滚功能的 MicroOS 桌面,并且它们默认包括 Podman 容器引擎。安装程序给操作系统、桌面和其他工具都创建了一个 Btrfs 根文件系统,这个文件系统在启动后被 mount 为只读模式。
[安装程序]
Running an immutable desktop
MicroOS 桌面的第一次启动需要经过一个典型的刚安装好之后的配置过程,比如选择语言,选择时区,以及为 GNOME 设置在线账户。不同的是,接下来是自动安装应用程序,如 Firefox、计算器和文本编辑器。最终得到一个最小的、没有什么特别功能的桌面环境。
MicroOS Desktop 中的所有桌面应用程序都以 Flatpaks 的形式安装在用户的目录中,并自动得到更新。在 GNOME 版本中,这是用 GNOME Software 工具来完成的,它通常是使用操作系统的包管理器来安装应用程序。然而,在 MicroOS 桌面中,它被配置为只从 Flathub 安装 Flatpak,并把它们放在~/.local/share/flatpak 中。所以使用 GNOME Software 安装软件包并不会影响底层操作系统。KDE Plasma 版本的 MicroOS Desktop 使用 Discover 将采用了同样的方式来把应用程序采用 Flatpak 形式进行安装。
在日常使用中,MicroOS Desktop 看起来很像一个正常的 openSUSE 桌面系统。基础操作系统和桌面实际上是建立在与 openSUSE Tumbleweed 相同的 RPM 包上的,所以这并不令人意外。为了安装和管理 GNOME Shell extension 这些扩展,还自带了 Extension Manager。然而,MicroOS 默认只带有基本的配置工具,如 GNOME Settings 和 GNOME Tweaks。
系统更新会每天自动完成。这是由一个 systemd timer unit 来实现的,它会运行 transactional-update 命令,这是一个对于软件包管理器 zypper 的封装脚本。它创建了一个新的根文件系统的 Btrfs 快照(snapshot),然后对这个系统进行更新。如果相关更新都安装成功了,那么该脚本会把这跟新的快照标记为系统下次启动时的默认快照。如果出现了错误,该快照就会被丢弃,仍然使用之前的快照来作为默认的启动选项。
重启时就会开始采用新的快照;如果系统在重启期间检测到问题的话,也会自动回滚到之前的默认快照。用户也可以使用 transactional-update rollback 命令手动回滚。这一整个 transactional update 的过程在 openSUSE 的文档中有解释。
Escaping from Flatpakland
跟传统的发行版软件仓库中的内容相比起来,Flatpak 的数量还是非常有限的。目前,对于 MicroOS Desktop 使用 flatpak remote-ls 命令返回的条目进行一下统计,可以看到 Flathub 上的 Flatpaks 超过 3600 个。因此,用户总会有可能需要运行一些没有以 Flatpak 形式出现的软件。但 MicroOS Desktop 也提供了一个解决方案:它在默认安装中附带了 Distrobox。Distrobox 使用 Podman 来创建与 host 紧密结合的容器,会共享用户的 home 目录、外部存储、USB 设备以及图形应用程序。
因此,如果用户想要使用的特定软件并没有相应的 Flatpak 打包的话,在终端中运行一个简单的 distrobox-enter 命令就可以创建(或者进入,如果容器之前已经创建了的话)一个运行 Tumbleweed 的容器。在这个容器中,openSUSE 仓库中所有可用的 RPM 包都可以用 zypper 命令安装。目前有 75000 个以上的软件包可用。请看下面的图片,显示了一个运行 Tumbleweed 的 Distrobox 容器,并查询可用软件包的数量,同时在 host 上运行 GNOME Software 并显示来自 Flathub 的 Flatpak。
[桌面]
Distrobox 也能够从容器中导出一个应用程序到 host 上。这将创建一个 .desktop 文件,从而使应用程序出现在 GNOME 的 Activity 活动中。如果用户点击这个图标,就会在后台启动 Distrobox 容器,并在 host 的桌面上打开应用程序的窗口。该应用程序只是作为 host 的一个正常的桌面应用程序出现。命令行应用程序也可以被 export 出来,例如,export 到用户的~/bin 目录。如果用户启动这个脚本,就会在容器中运行该应用程序。另一种方法也可以:distrobox-host-exec 会让用户在容器中执行 host 上的命令。
对于那些哪怕用 Distrobox 也无法安装的软件,最后的办法是使用 transactional-update 命令在主机上安装 RPM 包,该命令会在制作快照后安装软件;然后需要重启来使新的快照生效,从而可以使用新软件。但只建议在驱动程序、内核模块、虚拟专用网络(VPN)客户端和其他必须与操作系统紧密结合的底层软件包上使用这种方法,因为 host 中每一个额外的软件包都可能会带来一些出现稳定性问题的风险。MicroOS Desktop wiki 有一些使用 transactional-update 的提示。
Newest developments
OpenSUSE MicroOS 与 Adaptable Linux Platform(ALP)有关系,ALP 是最小的、不可改变的操作系统,准备成为 SUSE 的下一代企业 Linux 发行版。我们鼓励 OpenSUSE 用户试用 MicroOS Desktop,看看使用不可变的桌面如何适配到他们的工作流程中去,并向 ALP project 提供反馈。
SUSE 以其强大的配置工具 YaST 而闻名,它能够处理所有类型的系统管理工作。openSUSE 的长期用户在使用 MicroOS Desktop 进行配置的时候会很怀念 YaST,尽管它还是被用在了安装发行版的过程中。YaST 博客指出,YaST 的某些部分需要调整之后才能更好地处理像 MicroOS 这样的事务性系统(transactional system)的管理。但是,话说回来,一个最小的系统可能也不应该需要太多的管理工作。
目前 MicroOS Desktop 还不支持全盘加密。用户能够在安装程序中定制他们的分区,但这样得到的最终配置有可能无法正常工作。在 Reddit 上,MicroOS 发布工程师和 MicroOS Desktop 的主要开发者 Richard Brown 说,当 MicroOS Desktop 停止使用 YaST 进行安装时,就可以期望使用全盘加密了。值得注意的是,Brown 将在 4 月份转入另一个角色,即 SUSE 的发行架构师。
MicroOS 也缺乏一个防火墙。据 Brown 说,这是特意设计成这样的,因为防火墙会给容器运行时(container runtime)带来麻烦。他还说,这并不会有什么真正的好处,"因为你应该在容器中运行你的工作负载,端口映射/开放/重定向是配置容器的重要组成部分"。用户仍然可以安装 firewalld,但它不会被默认安装进来,"除非它能跟容器的配套工具很好地配合起来"。
Brown 还在为那些希望拥有一个基于不可改变的操作系统的完全可定制的桌面环境的开发者制定一个解决方案。他的 Project Greybeard 将基于 MicroOS Desktop,使用 Wayland compositor 和 tiling window manager Sway。它不是一个官方的 openSUSE 项目(目前还不是),Brown 认为它是为那些想建立 openSUSE MicroOS 或 MicroOS Desktop 的定制衍生品的开发者提供的一个范例项目。
Conclusion
对于那些喜欢自己定制的用户来说,openSUSE MicroOS Desktop 并不能完全取代正常的 openSUSE 桌面,因为对桌面可以配置的选项相当少。然而,在特定的情况下,openSUSE 的不可更改的桌面还是相当好用的。它可能是习惯于移动操作系统工作方式的人的理想操作系统。在 Chromebook、iOS 或 Android 上,操作系统本身也不是可定制的。用户只能通过基于映像文件的系统升级来升级他们的操作系统,而且他们安装的也是独立的应用程序。OpenSUSE MicroOS Desktop 为 Linux 桌面提供了同样的方式。
全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。
欢迎分享、转载及基于现有协议再创作~
长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~