AutoYaST 是我们用户(包括客户和合作伙伴)的重要工具。因此,从一开始就很清楚 D-Installer 应该能够以无人值守的方式安装系统。

本文描述了此功能的现状,并提供了一些关于我们计划的提示。但我们想强调的是,目前一切尚未确定(尚未),因此建设性的意见和建议将不胜感激。

架构

当我们开始构建 D-Installer 时,我们的一个设计目标是保持所有组件之间清晰的关注点分离。因此,D-Installer 的核心是一个 D-Bus 服务,它不与任何用户界面耦合。Web UI 连接到该接口以获取/设置配置设置。

从这个角度来看,自动安装的系统定义是另一个用户界面。D-Bus 服务无论配置来自 Web UI 还是自动安装配置文件,行为都相同。让我再次重复一遍:我们希望实现清晰的关注点分离。

遵循这一原则,安装配置文件的下载、评估和验证由我们的 新的命令行界面 执行。拥有一个外部工具来注入配置文件可以启用一些有趣的使用案例,如果你继续阅读就会发现。

用 Jsonnet 替换 XML

虽然你可能有自己的列表,但有一些关于 AutoYaST 配置文件的东西是我们不喜欢的

  • XML 是一种适用于许多用例的优秀语言。但是,在 2023 年,对于自动安装系统,有更多简洁的替代方案。
  • 它们相当冗长,尤其是在所有类型注释和集合的指定方式方面。
  • 基于 libxml2 的运行时验证非常差。而且 Jing 无法用于安装介质。

因此,我们研究了声明式语言的格局,并决定采用 Google 的 Jsonnet。它是一个 JSON 的超集,添加了变量、函数、导入等。一个最小的配置文件如下所示

{
  software: {
    product: 'ALP',
  },
  user: {
    fullName: 'Jane Doe',
    userName: 'jane.doe',
    password: '123456',
  }
}

但是,通过利用 Jsonnet 的特性,我们还可以拥有动态配置文件,用一个更好且唯一的替代方案来替换规则/类或 ERB 以达到这个目的。让我们看一下复杂的配置文件

local dinstaller = import 'hw.libsonnet';
local findBiggestDisk(disks) =
  local sizedDisks = std.filter(function(d) std.objectHas(d, 'size'), disks);
  local sorted = std.sort(sizedDisks, function(x) x.size);
  sorted[0].logicalname;

{
  software: {
    product: 'ALP',
  },
  user: {
    fullName: 'Jane Doe',
    userName: 'jane.doe',
    password: '123456',
  },
  // look ma, there are comments!
  localization: {
    language: 'en_US',
    keyboard: 'en_US',
  },
  storage: {
    devices: [
      {
        name: findBiggestDisk(dinstaller.disks),
      },
    ],
  },
  scripts: [
    {
      type: 'post',
      url: 'https: //myscript.org/test.sh',
    },
    {
      type: 'pre',
      source: |||
        #!/bin/bash

        echo hello
      |||,
    },
  ],
}

此 Jsonnet 文件在安装时进行评估和验证,生成一个 JSON 配置文件,其中 findBiggestDisk(dinstaller.disks) 被替换为最大的磁盘的名称。

请注意,定义 格式 仍在进行中,因此这些示例将来可能会发生变化。

用脚本替换配置文件

在处理自动安装支持时,我们认为允许我们的用户注入脚本而不是配置文件可能是一个好主意。该脚本可以使用命令行界面与 D-Installer 交互。这样,你就可以设置自己的自动安装系统。

#!/bin/bash

dinstaller config set software.product="Tumbleweed"
dinstaller config add storage.devices name=/dev/sda
dinstaller wait
dinstaller install

请记住,这只是一个想法,但我们想探索它将我们带向何方。

与其它工具的更好集成

将 AutoYaST 与其它工具集成可能很棘手,因为它没有提供报告安装进度的机制。再次通过我们的 CLI,我们计划通过提供这种机制来解决这个问题,坦率地说,这种机制已经存在于许多配置系统中。

关于向后兼容性呢?

以防你好奇,我们计划(部分)支持旧的 AutoYaST 配置文件。我们知道许多用户已经大量投资于他们的配置文件,我们不希望所有这些工作都付诸东流。但是,并非所有 AutoYaST 功能都存在于 D-Installer 中,因此请预计会发生一些更改和限制。

我们现在有一个小型工具,用于获取、评估和验证 AutoYaST 配置文件,生成基于 JSON 的配置文件。它还远未完成,但这是一个良好的开端。

当前状态

现在让我们回答显而易见的问题:当前状态如何?我们预计在 D-Installer 的下一次发布中交付基本功能,但会存在一些限制。

  • 仍然需要用户界面来回答问题或观察进度。
  • 支持动态配置文件,但注入配置文件中的硬件信息不完整。
  • 缺少错误报告机制。
  • iSCSI 和 DASD 尚未在自动安装中得到支持。

总结

我们希望已经解决了你对 D-Installer 中自动安装支持的主要担忧。正如你所看到的,它仍然是一个正在进行中的工作,但我们预计将在未来的发布版本中完善实现,以便更快地实现对无人值守安装的一流支持。

如果你有任何进一步的问题,请告诉我们。