swupd

swupd 将 Clear Linux* OS 安装与上游更新和软件进行链接。

描述

swupd 有两个主要功能:

  1. 通过安装 bundle 文件而非软件包来管理软件并替换 APT 或 YUM。
  2. 检查是否存在系统更新并进行安装。

swupd 可管理后台的重叠依存关系,从而确保所有软件在整个系统中兼容。它可以验证操作系统、清理缓存文件和修复问题。

Bundles 包含提供软件功能所需的一切。它们是 Clear Linux OS 管理的最小粒度组件。bundle 文件附带所有依存关系,而非在安装软件时下载一系列软件包依存关系。

版本管理

使用软件包管理器监控软件版本兼容性或比较大量 Linux 发行版上的多个系统可能十分麻烦。

借助 Clear Linux OS swupd,则可在个别文件级别进行版本管理。也就是说,Clear Linux OS 会生成全新的操作系统版本,且附带对系统所做的所有软件更改,其中包括软件降级或删除。此滚动发布版本管理模型类似于 git 内部版本跟踪,会跟踪所有单个文件提交并在更改时将指针前移。

表示操作系统当前版本的数字,描述操作系统上所有软件的版本。每个内部版本均由一组特定的 bundle 文件组成,而这些 bundle 文件则由特定版本的软件包组成。如果系统管理员日常需要确定哪些系统缺少最新安全修复程序,或哪些软件组合已经过测试,这对他们来说十分重要。对于同一数字的每个版本,均可以保证包含相同版本的软件,因此在运行同一版本的 Clear Linux OS 的两个系统之间不会产生混淆。

更新中

Clear Linux OS 默认强制定期更新操作系统,并自动对照版本服务器检查是否存在更新。内容服务器提供针对所有版本的文件和元数据内容,并可与版本服务器相同。内容 URL 服务器以清单形式提供元数据,列出并描述文件内容、符号链接和目录。此外,实际内容还会以存档文件的形式提供给客户端。

Clear Linux OS 的软件更新也十分高效。与基于软件包的发行版不同,swupd 只会更新已更改的文件,而非整个软件包。例如,操作系统安全补丁大小经常只有 15 KB。通过使用二进制增量,Clear Linux OS 可只应用所需的内容。

有关如何为 Clear Linux OS 生成更新内容的详细信息,请参阅 mixer 工具。

工作原理

必备条件

更新

Clear Linux OS 更新默认自动进行,但也可设为按需进行。swupd 可确保定期更新既简单又安全。它还可检查当前已安装文件和软件的有效性,并可更正所有问题。

清单

Clear Linux OS 软件更新内容由数据和元数据组成。数据是指操作系统中的文件。元数据包含将数据正确配置到操作系统文件系统、更新系统以及向操作系统添加或删除其他内容所需的相关信息。

清单多为用于描述内容的长哈希列表。每个 bundle 文件均有自己的清单文件。主清单文件描述了所有清单,可以将其绑定在一起。

完整文件、数据包和增量包

要加速更新并优化内容交付,可通过以下方法获取配置到系统的更新数据:

  • 在每个版本中,始终会为每个文件生成完整文件。此操作可让所有 Clear Linux OS 直接获取每个版本的精确内容副本。例如,如果操作系统验证需替换单个文件,则可使用此操作。
  • 数据包可用于某些版本。它们将大量文件进行组合,从而加速安装介质制作过程,加快大型更新过程。
  • 增量包是只包含更新(二进制差异)的优化版本的数据包。如果没有原始文件内容,则无法使用。

示例

例 1:禁用和启用自动更新

Clear Linux OS 更新默认自动进行,但也可设为按需进行。

  1. 验证当前的自动更新设置。

    sudo swupd autoupdate
    

    输出:

    Enabled
    
  2. 禁用自动更新。

    sudo swupd autoupdate --disable
    

    输出:

    Warning: disabling automatic updates may take you out of compliance with your IT policy
    
    Running systemctl to disable updates
    Created symlink /etc/systemd/system/swupd-update.service → /dev/null.
    Created symlink /etc/systemd/system/swupd-update.timer → /dev/null.
    
  3. 手动检查是否存在更新。

    sudo swupd check-update
    
  4. 确定所需的更新后对其进行安装。

    sudo swupd update --version <version number>
    
  5. 再次启用自动安装。

    sudo swupd autoupdate --enable
    

例 2:查找并安装 Kata 容器*

Kata 容器是一种常见的容器实现。与其他容器实现不同,每个 Kata 容器均有自己的内核实例,在自己的 虚拟机 上运行,增强了安全性。

虽然存在大量依存关系,但由于您只需添加一个 bundle 文件便可使用 Kata Containers containers-virt,因此 Clear Linux OS 大大简化了安装过程。此外,请查阅教程:Kata Containers*

  1. 找到正确的 bundle 文件。

    要返回搜索字符串的所有潜在匹配项,请输入 swupd search,后跟“kata”:

    sudo swupd search kata
    

    输出如下所示:

    Bundle with the best search result:
    
    containers-virt - Run container applications from Dockerhub in
    lightweight virtual machines
    
    This bundle can be installed with:
    
         swupd bundle-add  containers-virt
    
    Alternative bundle options are
    
         cloud-native-basic - Contains ClearLinux native software for Cloud
    

    注解

    如果未出现包含特定字词的搜索结果,请缩短搜索字词后重试。例如,使用 kube 而非 kubernetes

  2. 添加 bundle 文件。

    sudo swupd bundle-add containers-virt
    

    注解

    要添加多个 bundle 文件,请添加一个空格,后跟 bundle 文件名称。

    成功安装的输出如下所示:

    Downloading packs...
    
    Extracting containers-virt pack for version 24430
        ...50%
    Extracting kernel-container pack for version 24430
        ...100%
    Starting download of remaining update content. This may take a while...
        ...100%
    Finishing download of update content...
    Installing bundle(s) files...
        ...100%
    Calling post-update helper scripts.
    Successfully installed 1 bundle
    

例 3:验证并更正系统文件不匹配错误

swupd 可确定是否已添加、覆盖、删除或修改系统目录和文件(例如权限)。

sudo swupd diagnose

swupd 所监控的所有目录均会根据清单数据进行验证。哈希不匹配项将按如下方式进行标记:

Verifying version 23300
Verifying files
   ...0%
Hash mismatch for file: /usr/bin/chardetect
...
...
Hash mismatch for file: /usr/lib/python3.6/site-packages/urllib3/util/wait.py
   ...100%
Inspected 237180 files
   423 files did not match
Verify successful

在此情况下,安装在默认安装之上的 Python* 软件包将被标记为不匹配。swupd 可根据命令行选项指令来忽略或修复问题。

swupd 可更正检测到的所有问题。还可以添加其他指令,其中包括要忽略的目录的白名单。

以下命令可修复问题,删除未知项目,忽略匹配 /usr/lib/python 的文件或目录:

sudo swupd repair --picky --picky-whitelist=/usr/lib/python

快速参考

swupd info
返回当前安装的版本和更新服务器。
swupd update <version number>
如果未使用参数,则更新到特定版本或最新版本。
swupd bundle-list [–all]
列出已安装的 bundle 文件。
swupd bundle <search term>
查找包含搜索字词的 bundle 文件。
swupd bundle-add <bundle name>
添加 bundle 文件。
swupd bundle-remove <bundle name>
删除 bundle 文件。
swupd –help
列出其他 swupd 命令。
man swupd
打开 swupd 手册页。

请参阅 GitHub 上的 swupd source documentation,了解更多详细信息。