简介

YaST2 是一个历史悠久的工程,已经存在了 20 多年。它不断发展,并且在每一次 SUSE 和 openSUSE 发布版本中,都会引入许多新特性(以及一些新的错误)。毋庸置疑,在某种程度上,YaST2 确实显露出它的年龄。我们意识到这一点,并且一直在努力解决这个问题。存储层的成功重写,带来了许多特性,是我们引以为豪的例子。

现在,SLE 15 SP2 和 openSUSE Leap 15.2 特性的开发基本完成,我们已经开始关注 AutoYaST。本文的目的是介绍我们现代化 AutoYaST 的计划。

首先,让我们明确一点:我们不打算重写 AutoYaST。我们想要做的是

  • 修复一些错误并移除一些已知的限制。
  • 改进 AutoYaST 周围的工具。
  • 引入一些可以帮助我们用户的特性。
  • 努力提高代码质量。

虽然目前还没有最终确定,但本文试图介绍一些我们正在考虑的想法。但它们仅仅是想法。我们已经确定了我们想要改进的主要领域,现在我们正在尝试制定一个更具体(和现实)的计划。

创建配置文件不必困难

也许使用 AutoYaST 的主要抱怨之一是编写配置文件可能很棘手。最简单的方法是执行手动安装,然后从命令行或使用 AutoYaST UI 生成配置文件。

如果您决定采用命令行方法,yast2 clone_system 会生成一个包含底层系统所有细节的 XML 文件。生成的配置文件相当长,通常您需要通过删除不重要的部分来缩短它。例如,您不需要完整的用户列表(相应的软件包会创建它们)或服务。

另一种方法是使用 AutoYaST UI,它是一个允许您创建和编辑配置文件的工具,但它有几个需要修复的错误。

作为 现代化 AutoYaST 计划的一部分,我们希望在处理配置文件时让事情变得更容易。我们正在考虑几个选项

  • 改进 AutoYaST UI 的质量。
  • 提供一组您可以基于的模板:minimalhardening 等。
  • 可选地,不导出默认选项,从而缩短配置文件。
  • 实现一个向导,可以引导您从头开始创建配置文件(选择产品、附加组件列表、文件系统类型等)。它还可以提供一个 CLI
$ yast2 autoyast_profile --product SLES-15.2 \
  --addons sle-module-basesystem,sle-module-development-tools \
  --regcode XXXX \
  --filesystem btrfs

集成配置文件验证

使用 XML 的一个优点是,我们可以依赖现有的工具来验证配置文件。AutoYaST 指南 文档 描述了 xmllintjing 的用法。作为这项计划的一部分,我们希望在安装过程中集成验证。因此,AutoYaST 首先要做的事情之一就是检查配置文件是否有效。

然而,这种验证无法检测到逻辑问题。其中一些问题可以通过分析配置文件轻松找到,我们可以考虑添加一些额外的检查。但还有另一类问题是您无法预料的。例如,考虑您想要重用不存在的分区。这把我们带到下一个主题:错误报告。

更好的错误报告

如果安装过程中发生意外情况,AutoYaST 会报告该问题。用户可以根据其严重程度决定是否应该停止安装。显然,在某些情况下,安装根本不可能,AutoYaST 会中止该过程。

错误报告基础设施可以改进。例如,将相关消息分组并一次性显示它们会很好,而不是多次停止安装。幸运的是,在存储层重写期间,我们引入了一种机制,使我们能够做到这一点。现在的问题是扩展其 API 并将其用于更多地方。

另一个不错的特性可能是允许不仅按其严重程度,而且按其模块过滤消息(例如,仅分区警告),从而对错误报告提供更多控制。并且新代码将使我们能够做到这一点。

摆脱第二阶段

根据配置文件的内容,安装将在第一次重新启动之后完成。过去,SUSE 和 openSUSE 安装分为两个阶段,称为阶段,但对于手动安装来说不再是这样。但是,AutoYaST 在某些情况下仍然需要它。例如,如果您使用 <files> 部分,AutoYaST 会在重新启动后复制文件。

我们计划将所有可以移动到第一阶段的内容,完全跳过第二阶段。但是,我们将保留第二阶段,因为第三方模块可以使用它作为扩展点。但 YaST2 核心模块应该避免使用它。

说实话,听起来比实际容易(有一些需要考虑的边缘情况),而且我们仍在检查这在技术上是否可行。

引入动态配置文件

在某些情况下,需要在运行时修改配置文件。例如,假设您想使用不同的软件选择安装多台机器。配置文件将几乎相同,因此为每台机器保留一个配置文件没有意义。

AutoYaST 已经提供了两种机制:规则和类预安装脚本

前者是一个功能,由于某种原因,它仍然相对不为人所知。它允许根据一组在运行时应用的规则组合多个 XML 文件。虽然它非常强大,但其规范非常冗长,并且合并过程 在某些情况下可能非常令人困惑

或者,预安装脚本被广泛使用。然后您可以依赖于经典的 Linux 工具(sed、awk 等),或者 Python,或者 Perl,或者 Ruby……好吧,您不能使用 Ruby,但我们会修复它。 :sweat_smile:

但是,我们一直在考虑通过允许在 AutoYaST 配置文件中嵌入 Ruby (ERB) 来使事情变得更加容易

<?xml version="1.0" encoding="utf-8"?>
<partitioning config:type="list">
  <drive>
    <!-- vda, sda, ... -->
    <device><%= script("find_root_device.sh") -%></device>
    <use>all</use>
  </drive>
</partitioning>

<%= include_file("https://example.net/profiles/software-#{node["mac"]}.xml") %>
    
<% if arch?("s390x") -%>
<dasd>
  <!-- dasd configuration -->
</dasd>
<% end -%>

请记住,这只是一个例子,我们甚至不知道这个功能对您是否有意义。您觉得呢?

结论

阅读本文后,您可能有评论或新的想法要讨论。我们很乐意听取您的意见!因此,您可以联系 YaST 团队,通过 yast-developensuse-autoinstall 邮件列表,或者如果您喜欢,我们通常在 #yast 频道Freenode 上。

最后,我们想感谢所有参与讨论的人(例如,AutoYaST 的(近)未来AutoYaST 工具:需要反馈)以及 SUSE 的同事为我们提供反馈和想法。