等待结束了,YaST 团队最新 Scrum 冲刺报告来啦!在上一篇帖子中,我们承诺这次冲刺后会有更多成果展示……现在我们做到了。这次冲刺非常高效,所以我们直接进入最有趣的部分。
更多自更新改进
在之前的两篇博文中提到的 YaST 自更新功能(冲刺 16 和 冲刺 17)也得到了一些改进。
在 这个 gist(包含截图)中,你可以看到在安装程序自更新后,前后跳转工作流时所做的修复。
但更重要的是 AutoYaST 中对新功能的改进。如果你想使用自己的自更新仓库,你必须在启动命令行中指定它。这在单个安装中很容易,但如果你想使用 AutoYaST 安装许多机器,那么在每次安装时都输入可能很长的 URL 听起来很烦人。
在这个冲刺中,我们改进了自定义更新 URL 的处理方式,以便可以从 AutoYaST XML 配置文件中读取它。现在你只需要将自定义 URL 写入配置文件一次,它就会在每次 AutoYaST 安装中自动使用。
UI 中没有什么可展示的,日志证明自更新确实被加载了。
你可以在 文档 中找到有关在配置文件中指定 URL 和评估自更新仓库 URL 的更多详细信息。
告别 perl-Bootloader
很长一段时间以来,我们一直计划停止使用 Perl-Bootloader 作为 yast2-Bootloader 的库,并且最终我们成功实现了这一点。这个改变有很多原因。
从用户角度来看,最明显的原因是速度和大小。摆脱 Perl-Bootloader 意味着我们不再执行两次硬件探测(一次用于 Perl-Bootloader,另一次用于 grub2-config),从而加快内核更新速度。此外,我们不仅简化并减小了 yast2-bootloader 本身的大小。删除 Perl 库和其他相关依赖项,可以实现更小的最小系统,这在各种环境和场景中非常重要。
从开发人员的角度来看,主要原因是统一使用的编程语言,并重用现有的文件读取和解析解决方案。现在 yast2-bootloader 使用 Augeas 文件解析器和序列化器,这不仅允许我们减少需要维护的代码,还提供更智能的编辑和更好的配置文件注释处理。
作为令人愉悦的副作用,这种改变也导致了许多变通方法的删除、引导程序安装工作流程的简化以及源代码质量的明显提高。此外,我们还提高了整个模块的测试覆盖率,以确保我们没有破坏太多东西。但如果没有一些极客数据来证明这些说法,所有这些都将是空谈,所以它们来了。
- 新增 2945 行代码,删除 5963 行 (4d776…master)
- 单元测试覆盖率从 69% 提高到 81%
- 代码气候质量评级从 1.73 提高到 3.31(0 是最差,4 是最好)
当然,在如此大规模的重写之后,出现一些新的错误的可能性很高,但我们真的相信这些改进是值得的。
存储重构:分区位置的计算
对于 storage-ng 项目,我们朝着现代系统迈出了重要一步。我们不再使用磁盘的几何体和柱面,而是只使用扇区。
对用户的优势是更好地控制新分区的尺寸。由于到目前为止,尺寸必须是柱面尺寸的倍数,通常为 7.84 MiB,因此无法创建非常小的分区,例如用于 BIOS 启动分区。此外,分区的大小通常不是 YaST 中输入的确切数字,例如 509.88 MiB 而不是 512 MiB。
现在分区的大小尽可能精确,通常是 512 B 或 4 KiB 的倍数。
与过去一样,我们还注意优化分区对齐,以避免由于读-修改-写周期而导致的性能损失。
Snapper:更好的清理规则
Snapper 是一个很棒的工具,但当前的默认配置通常会导致它对磁盘空间过于贪婪。在这个冲刺中,实施了一组新的清理规则,从而可以更合理地使用磁盘。
该功能已经开发完成,提交到 Factory 甚至集成到正在烹饪的 SUSE Enterprise 的下一个版本中。但是,正如大家所知,openSUSE Tumbleweed 的测试工作流程(暂存项目、openQA 等)有时会导致新功能在发行版中出现一些延迟。一旦新功能到达 Tumbleweed,将在 snapper.io 上发布一篇博文,解释新功能。
改进引导程序密码保护
YaST2-Bootloader 中的密码保护小部件自 GRUB1 时代以来就没有改变过,但 GRUB2 允许更精细地调整密码设置。事实上,它包含一个完整的用户管理系统,其中多个用户可以具有不同的权限和不同的密码。对于 YaST,我们喜欢保持简单,因此仅支持“root”用户的密码。这让一些人感到困惑,所以我们决定通过调整一些标签来改善用户体验……并在过程中修复了一些拼写错误。 ![]()
两张图片胜过千言万语,所以你可以在这里看到更改前的对话框
以及下面的新外观,它为密码规范添加了更多说明。当然,帮助文本(未在屏幕截图中显示)也得到了改进,以反映这些更改。
处理默认产品模式
YaST 安装程序实现了几种指定已安装产品的默认模式的方法。其中一种是使用产品软件包的 Recommends RPM 依赖项。(其他可能性包括 control.xml 文件或介质上的 content 文件。)
安装程序默认安装推荐的软件包,因此默认模式会自动安装在初始安装中。
但是,这种方法在系统升级期间会带来麻烦。如果你删除一些由默认安装的软件包或模式,然后进行系统升级,安装程序将(无声地)将删除的软件包或模式作为 Recommends 依赖项拉回来。
解决方案是提供另一种机制来选择默认模式。新的实现允许使用特定的 Provides RPM 包标签,该标签指定产品的默认模式名称。
新的标签是 defaultpattern(pattern),其中“pattern”是默认模式的名称。YaST 查找这些特定的标签并收集所有已安装或更新产品的模式名称。此步骤在基于软件包的系统升级期间跳过,因此应该避免在系统升级中添加不必要的软件包。
显然,产品本身需要从 RPM 依赖项切换到这种新的风格。到目前为止,它仅受 SLES12 SP2 高可用性 插件的支持。
有关详细信息,请参阅 https://github.com/yast/yast-packager/wiki/Selecting-the-default-product-patterns。
存储重构:更进一步,迈向完美的启动布局
在 几份报告之前,我们公开了我们的意图,即挤压一些启动专家的头脑,以便创建能够始终提出明智的分区方案的 Ruby 类。美味的结果终于 在仓库中,并附带了一个相当完整的 文档,解释代码背后的逻辑。
如果你不喜欢阅读 Ruby 代码,但又足够极客,你还可以查看 RSpec 单元测试生成的输出,它显示了新的分区提案将在启动要求方面如何表现。
存储重构:新提案中的其他改进
除了已经提到的启动相关分区改进之外,全新的分区提案还获得了在需要时缩小 Windows 分区(以一种明智且温和的方式)以及重用可以与其他已安装系统共享的分区的能力,例如 PReP 的交换分区。即使重用交换分区不可行,并且提案需要删除现有的交换分区以创建不同的分区,它也会注意重用旧标签和 UUID,以便同一计算机中的其他系统在更改分区布局后仍然可以找到合适的交换分区。因为我们都可以成为更好的公民……
此外,我们还迈出了开发更智能方法的第一步,该方法可以在空闲空间分散在多个不同磁盘或磁盘块上时,提出一个可靠的分区方案。这仍然是一个正在进行中的工作,但你可以相信在未来 (open)SUSE 在你的稀疏硬盘空间中会找到一个不错的家。
防止在 S/390 主机上错误使用 LDL DASD 磁盘
在 S/390 主机上运行的 Linux 系统中存储设备的管理是一个棘手的话题,充满了边缘情况。根据磁盘的类型、格式和其他因素,一些看似简单的操作(例如创建分区)是不可能的。如果你对该主题感兴趣并想学习很多奇怪的首字母缩写词,我们建议 这篇文章。
我们意识到专家分区器允许用户指定实际上不受支持的一些操作,这导致安装在后续步骤中中止。为了避免这种情况,我们改进了专家分区器,以检测这些不受支持的 S/390 配置并提醒用户,如下面的屏幕截图所示。

AutoYaST:将网络设备重命名移动到安装的第一阶段
我们重构了网络模块以统一设备命名处理。现在 AutoYaST 已经在安装的第 1 阶段分配 udev 命名规则了。(yast2-network-3.1.147,autoyast2-3.1.121)
团队的新玩具
我们获得了一个新的服务器来通过 openQA 和 AutoYaST 运行集成测试。
AutoYaST 测试过去需要 8 小时,现在完成需要 1.5 小时。
与其他 (open)SUSE 团队的合作
尽管我们称自己为“YaST 团队”,但我们很高兴与公司中的其他团队和社区中的人们分享该项目。在这个冲刺中,我们有机会审查了两个重要功能的代码。
处理 LDAP、Kerberos、Active Directory、NSS、PAM 和 SSSD 的身份验证客户端模块得到了重大升级 (yast2-auth-client-3.3.7)。
几个月来,Tumbleweed 已经有一个 firewalld 的软件包(参见 FATE#318356)。正在努力使 YaST 意识到它,但尚未合并。如果你感兴趣,你必须在 git 仓库 中找到它。
结束语
毫无疑问,这是一个非常高效的冲刺,而且像往常一样,这份报告只是团队交付的全部工作的样本。为了精确并取悦数字爱好者,这份报告涵盖的功能和修复代表了 85 个 Scrum 故事点,总共交付了 124 个故事点。希望足以让你在大约三周后的下一次报告之前保持娱乐。到那时再见!


