swupd¶
swupd 将 Clear Linux* OS 安装与上游更新和软件进行链接。
描述¶
swupd 有两个主要功能:
- 通过安装 bundle 文件而非软件包来管理软件并替换 APT 或 YUM。
- 检查是否存在系统更新并进行安装。
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 工具。
工作原理¶
必备条件¶
- 设备网络连接良好。
- 设备可连接到更新服务器。默认服务器地址为:http://update.clearlinux.org
更新¶
Clear Linux OS 更新默认自动进行,但也可设为按需进行。swupd 可确保定期更新既简单又安全。它还可检查当前已安装文件和软件的有效性,并可更正所有问题。
清单¶
Clear Linux OS 软件更新内容由数据和元数据组成。数据是指操作系统中的文件。元数据包含将数据正确配置到操作系统文件系统、更新系统以及向操作系统添加或删除其他内容所需的相关信息。
清单多为用于描述内容的长哈希列表。每个 bundle 文件均有自己的清单文件。主清单文件描述了所有清单,可以将其绑定在一起。
完整文件、数据包和增量包¶
要加速更新并优化内容交付,可通过以下方法获取配置到系统的更新数据:
- 在每个版本中,始终会为每个文件生成完整文件。此操作可让所有 Clear Linux OS 直接获取每个版本的精确内容副本。例如,如果操作系统验证需替换单个文件,则可使用此操作。
- 数据包可用于某些版本。它们将大量文件进行组合,从而加速安装介质制作过程,加快大型更新过程。
- 增量包是只包含更新(二进制差异)的优化版本的数据包。如果没有原始文件内容,则无法使用。
bundle 文件搜索¶
swupd 可搜索下载清单数据,查找与此字词匹配的 bundle 文件。每次搜索只输入一个字词或带连字符的字词。使用命令 man swupd,了解更多信息。
系统只返回基本 bundle 文件。bundle 文件可通过 include 包含其他 bundle 文件。有关更多详细信息,请参阅 Bundle Definition Files 及其子目录 bundle 文件。
已安装的 bundle 文件在搜索结果中标记为(已安装)。
您可以选择查看 GitHub* 上的 bundles。
示例¶
例 1:禁用和启用自动更新¶
Clear Linux OS 更新默认自动进行,但也可设为按需进行。
验证当前的自动更新设置。
sudo swupd autoupdate
输出:
Enabled
禁用自动更新。
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.
手动检查是否存在更新。
sudo swupd check-update
确定所需的更新后对其进行安装。
sudo swupd update --version <version number>
再次启用自动安装。
sudo swupd autoupdate --enable
例 2:查找并安装 Kata 容器*¶
Kata 容器是一种常见的容器实现。与其他容器实现不同,每个 Kata 容器均有自己的内核实例,在自己的 虚拟机 上运行,增强了安全性。
虽然存在大量依存关系,但由于您只需添加一个 bundle 文件便可使用 Kata Containers containers-virt,因此 Clear Linux OS 大大简化了安装过程。此外,请查阅教程:Kata Containers*。
找到正确的 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。
添加 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,了解更多详细信息。