我们即将完成 SUSE Linux Enterprise 15 的功能开发,因此这次我们带来了大量关于新的存储、分区器、防火墙增强功能和角色的信息,这些功能现在也适用于 SUSE Linux Enterprise 的桌面版本。除此之外,我们还解决了 Tumbleweed 安装过程中的内存占用问题,并再次成功解决。让我们深入了解详情!

/etc/fstab 中特定文件系统类型的默认挂载选项已回归

我们重新实现了 YaST 存储堆栈重写后仍然缺失的一项功能:针对每个文件系统类型可能不同的 /etc/fstab 中的合理挂载选项。例如,对于 Ext4 文件系统,我们默认会设置 data=ordered,acl,user_xattr 选项。当然,如果默认选项不适合您,您仍然可以在分区器中更改这些选项。

对于大多数文件系统类型,这很简单:只需填充一个包含固定默认选项的表即可。但对于其他一些文件系统类型,特别是旧版 Microsoft 文件系统 FAT/VFAT,这涉及到一些不太简单的启发式方法来确定区域设置数据,以便我们可以为 iocharset=... 和 codepage=... 提供合理的值;这些值对于在 Linux 和 MS Windows 系统之间重新编码带有非 ASCII 国际字符的文件名是必要的;否则,在 Linux 系统上挂载时,您可能甚至看不到这些文件。

恢复专家分区器中的部分功能

我们继续将旧分区器的功能带回到 Storage-ng 的重新实现中。在此冲刺期间,轮到 NFS 和设备图部分了。

从技术角度来看,NFS 的情况有些特殊,因为它是由专家分区器直接管理的唯一部分。相反,访问该部分时会执行嵌入式的 yast2-nfs-client 版本。这种方法在本重新实现中也得到了遵循,这意味着 NFS 是旧分区器及其 Storage-ng 克隆将提供绝对相同体验和行为(包括功能和错误)的唯一部分。请注意:libstorage-ng 中 NFSv4 支持尚未完全实现,因此关于 NFS 版本的复选框可能会被忽略,直到该支持到达您的发行版。

另一方面,“设备图”部分与分区器的其他大部分内容一样,是从头开始重写的。除了已经知道的显示系统在应用更改后将如何呈现的图形之外,它现在还包括一个单独选项卡中的当前系统表示。这两个图形都是交互式的,双击任何节点会将用户带到分区器中相应的部分。

如您在之前的屏幕截图中看到的,导出到 Graphviz 格式的常规按钮不再孤单。它的新朋友允许将图形导出到 YaST 团队用于重现测试场景的非常详细的 XML 格式。

当然,如果使用基于文本的 ncurses 界面,则“设备图”部分不可用,如比较以下屏幕截图的左侧部分与之前的截图所示。

分区器:LVM 薄配置

我们的新专家分区器已经能够管理 LVM 卷组和逻辑卷数周了。但现在它也恢复了处理 LVM 薄池和卷的能力。LVM 薄配置是一种强大的技术,在需要为大量用户管理存储资源时非常有用。基本上,薄配置允许您提供比系统中实际可用的存储空间更多的存储空间。只有在真正需要时,您才能增加实际的硬件存储空间。有关 LVM 薄配置的更多信息,您可以在 此链接 找到一个很棒的指南。

使用专家分区器,您可以以类似于创建普通逻辑卷的方式在 LVM 卷组上创建薄池。您只需添加一个新的逻辑卷并在第一个对话框中选中“薄池”选项即可。一旦卷组包含至少一个薄池,您就可以创建薄卷。再次,该过程完全相同。添加一个新的逻辑卷并选择“薄卷”选项以及要在哪个池中创建它。其余步骤与创建普通逻辑卷完全相同。

除了创建新的薄池和卷之外,现在还提供编辑、调整大小和删除所有类型的逻辑卷(普通卷、薄池和薄卷)的选项。在调整薄池大小时,如果结果池过度提交,您将收到警告。请查看以下屏幕截图。

AutoYaST 中调整分区和逻辑卷大小

在旧版本中,当配置文件中的提议分区不适合磁盘时,AutoYaST 会尽力缩小最大的分区。一个典型的用例是将根 (/) 分区设置为巨大的值,以便该配置文件可以用于具有不同磁盘大小的系统(因为 AutoYaST 会负责缩小该分区以使其适应)。老实说,在这种情况下最好的解决方案是将大小设置为 max,以便 AutoYaST 执行预期的操作。

但是,如果出于任何原因想要布局不合适,AutoYaST 现在会更智能地处理:它不会盲目地缩小最大的分区,而是会尝试以(某种程度上的)比例方式缩小所有分区,并告知用户新的大小。

AutoYaST 安装中的小行为变化

到目前为止,AutoYaST 会默默地忽略不可安装的软件包,这在 AutoYaST 配置文件中定义。从现在开始,用户将被告知这些软件包无法安装。

SUSE Linux Enterprise Desktop 15 的系统角色

SUSE Linux Enterprise 使用系统角色来定义安装过程期间要安装在系统上的软件包,以便它拥有执行其“角色”所需的软件。此功能已适用于 SUSE Linux Enterprise Server,现在也适用于 SUSE Linux Enterprise Desktop。为了为您的系统选择特定的角色,您需要在安装过程中选择包含该角色的模块或扩展。桌面端有四种可用角色

  • GNOME 桌面(Wayland):在选择桌面生产力(在 SLED 上)或工作站扩展时可用。
  • GNOME 桌面(X11):在选择桌面生产力(在 SLED 上)或工作站扩展时可用。
  • GNOME 桌面(基本):在选择桌面应用程序模块时可用。
  • IceWM 桌面(最小):在选择 Basesystem 模块时可用。

Firewalld 增强功能

在过去的冲刺中,我们的团队一直在努力将 firewalld 与 AutoYaST 以及在不同模块(http-server、squid、dns-server 等)中打开端口/服务的 CWM 库集成。以下是我们在此次冲刺期间所做的更改

YaST 防火墙模块已弃用

由于我们现在已在我们的发行版中采用 firewalld,因此不再需要 YaST 防火墙模块。因此,如 此处 所示,我们已弃用 YaST 防火墙模块,并建议使用 firewall-config 通过用户界面或 firewall-cmd 通过命令行配置防火墙。

AutoYaST

已定义一个新的 AutoYaST 模式用于 firewalld 配置,尽管支持的功能非常有限。

我们可以配置诸如默认区域、服务状态、要记录的软件包类型以及特定于区域的配置(例如接口、服务、端口、协议和源)之类的属性。

例如,基于 SuSEFirewall2 的配置文件定义了 EXT 区域中的一些接口、服务和端口,如下所示

<firewall> 
  <enable_firewall config:type="boolean">true</enable_firewall>
  <start_firewall config:type="boolean">true</start_firewall>
  <FW_DEV_EXT>eth0</FW_DEV_EXT>
  <FW_SERVICES_EXT_TCP>443 80 8080</FW_SERVICES_EXT_TCP>
  <FW_SERVICES_EXT_UDP>21 22</FW_SERVICES_EXT_UDP>
  <FW_CONFIGURATIONS_EXT>dhcp dhcpv6 samba vnc-server</FW_CONFIGURATIONS_INT>
</firewall>

将被转换为如下所示

<firewall>
  <enable_firewall config:type="boolean">true</enable_firewall>
  <start_firewall config:type="boolean">true</start_firewall>
  <default_zone>public</default_zone>
  <zones config:type="list">
    <zone>
      <name>public</name>
      <interfaces config:type="list">
        <interface>eth0</interface>
      </interfaces>
      <services config:type="list">
        <service>dhcp</service>
        <service>dhcpv6</service>
        <service>samba</service>
        <service>vnc-server</service>
      </services>
      <ports config:type="list">
        <port>21/udp</port>
        <port>22/udp</port>
        <port>80/tcp</port>
        <port>443/tcp</port>
        <port>8080/tcp</port>
      </ports>
    </zone>
  </zones>
</firewall>

基于 SuSEFirewall2 的配置文件将继续工作,尽管仅限于 YaST 当前支持的配置。

在 autoinstallation 期间,如果配置文件具有不支持的属性,将显示错误,但是,我们将能够继续安装,并且还会显示警告,建议使用新的模式,即使所有属性都可以转换。

通过接口选择在区域中打开端口/服务

在 YaST 中,CWMFirewallInterfaces 模块提供了一组用于通过接口选择(每个接口属于一个区域)在区域中打开服务的窗口小部件定义。

该模块已适应与新的 firewalld API 配合使用。

如果未定义 firewalld 服务(可能是因为运输该服务的软件包尚未适应),则 CWMFirewallInterfaces 小部件将显示一个缺失的服务列表,建议部署它们以配置防火墙。

从 Xinetd 迁移到 Systemd 套接字

应我们软件包的朋友的要求,现在按需启动服务的未来是 systemd 套接字而不是 xinetd。为此有多种原因,但对我们来说最重要的原因是我们可以专注于一件事并做好它。

支持不同的按需启动服务的方式很困难,尤其是在用户可以设置套接字的情况下处理这种情况。我们以前使其发生的方法是在 /etc/xinetd.d/ 中编写一个文件并重新加载 xinetd。但是,这种方法很难调试。除此之外,我们还希望将我们的方法与打包人员建议的方法统一起来。

那么我们在本次冲刺中做了什么?目标是进行一些研究,在一个特定模块上创建一个概念验证,并找到在统一按需启动服务方法时可能遇到的障碍。我们发现从 xinetd 到 systemd 套接字的转换非常容易,但也不能自动完成。基本上,我们需要做的是使用 systemctl 调用(我们已经支持)来激活软件包提供的套接字,而不是我们以前的方法,即在 /etc/xinetd.d/ 中编写一个文件并重新加载 xinetd。这种更改将比以前更容易实现我们的目标。

最困难的部分是 xinetd 配置文件通常还包含 YaST 可以并且想要修改的服务配置。使用 systemd 套接字不再可能,这也是我们无法自动进行此转换的原因。

那么我们将如何进行 YaST 模块的转换?我们首先检查了所有使用 xinetd 的模块,并验证对于大多数模块,转换是直接的。YaST 还有一个用于 inetd 配置的模块,这不再有意义,因此计划在不久的将来删除它,并在服务管理器模块中允许套接字激活。

一个有问题的是 ftp-server,它支持两个后端:vsftp 和 pure-ftp。这有问题,因为 pure-ftp 不支持 systemd 套接字,仅支持 xinetd。我们计划讨论如何处理它,因为我们也不喜欢支持两个后端,因为它使我们的用户在只想快速配置 ftp 服务器时更加困难。对于 SLE 用户,我们已经仅支持 vstftp,因此如果我们达成一致,我们可能也会在 YaST 中仅支持此服务器。但现在还没有确定。

再次出现内存占用问题

我们再次不得不提及与内存占用的斗争。这次问题发生在 Tumbleweed 的 NET iso 中,它在安装过程中应该只需要不超过 1 GiB 的内存。

在我们的研究开始时,我们没有可疑的代码需要检查,我们只是知道它可能与 NET iso 使用 Tumbleweed 的整个仓库(超过 60k 个软件包),而 DVD iso 仅使用软件包子集有关。

那么我们使用了什么技术来找到代码中的问题部分?我们更改了日志记录,以便将整个进程的内存状态附加到每一行日志中。通过使用这种方法,我们很快确定了代码中的问题部分。该问题代码仅负责日志记录,但由于它正在搜索所有软件包并加载所有软件包属性,它正在消耗大量数据并导致此内存问题。

作为热修复,我们从软件包中删除了此日志记录,并将其保留给模式和产品,这对于我们来说更重要并且内存占用量较低。我们还查看了所有搜索所有软件包属性的代码,并尽可能地减少了它。最后,我们在磁盘准备和 rpm 安装过程之前强制 Ruby 垃圾收集器运行,从而降低了安装过程的内存占用量。

我们再次取得了圆满的结局,现在可以使用图形化安装程序以 1 GiB 的内存安装 NET iso。

总结

随着我们越来越接近完成 SLES 15,我们将变得越来越忙碌,需要完成功能和错误。因此,YaST 团队已经在努力进行冲刺 51,我们期待在两周后与您分享更多我们正在做的事情。与此同时,玩得开心,并保持关注!