Ubuntu 把 hwctl 从 deb 迁到 snap:核心工具换包格式意味着什么

2026-08-04 52 预计阅读时间: 1 分钟
来源: oschina.net AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:7 分钟

Ubuntu 正在把硬件认证状态检查工具 hwctl 从 deb 包迁移为 snap。这个变化的关键并不只是安装命令不同,而是 Canonical 对软件边界作出了明确判断:hwctl 及其依赖只服务于 Ubuntu,没有其他 Debian 系发行版需要消费这些 deb 包,因此继续维护传统发行版包的复用价值很低。

为什么 hwctl 适合单独迁移

Canonical 工程师 Alan Griffiths 给出的理由很直接:hwctl 是 Ubuntu 专有工具,它的依赖同样只面向 Ubuntu。这里所谓 deb 版本“受众为零”,更准确地说,是指 Ubuntu 之外没有下游发行版依赖这些 deb 包,并不是说 Ubuntu 用户不使用 hwctl

这使它成为适合迁移到 snap 的候选对象:

  • 不需要维持 Debian 或其他发行版能够复用的包结构。
  • 工具和专用依赖可以作为一个整体发布,减少系统仓库中的依赖协调。
  • 工具更新不必完全跟随 Ubuntu 发行版的软件仓库节奏。
  • 维护者可以围绕单一 Ubuntu 运行环境测试和交付。

不过,“适合迁移”不等于“迁移没有成本”。deb 由 APT 和系统包数据库管理;snap 则由 snapd 管理,拥有独立的版本通道、自动更新和权限模型。运维脚本、离线镜像与合规扫描如果只认识 dpkg,就可能漏掉这个工具。

改变的不只是安装命令

对普通用户而言,最明显的差异是包管理入口发生变化:

# deb 包的常见检查方式
apt-cache policy hwctl
dpkg-query -W -f='${Package}\t${Version}\n' hwctl 2>/dev/null || true

# snap 包的常见检查方式
snap info hwctl
snap list hwctl 2>/dev/null || true

以上命令可以直接运行;如果当前 Ubuntu 版本尚未发布对应 snap,snap info hwctl 会报告找不到该 snap,这本身也能帮助确认迁移是否已经落到所用的软件源或发布通道。

迁移还会影响几个运维假设:

关注点 deb snap
查询工具 aptdpkg snap
更新机制 通常由 APT 更新计划驱动 通常由 snapd 自动刷新
版本来源 Ubuntu 软件仓库 Snap Store 及其通道
回退方式 安装指定 deb 版本并处理依赖 可使用 snap 的修订版本与回退能力
权限边界 主要依赖传统 Unix 权限和系统集成 还需关注 snap confinement 与接口连接

对于需要读取硬件和系统状态的工具,权限尤其值得验证。包能安装成功,不代表它在受限环境中一定能够访问全部设备或系统接口。具体接口应以实际发布的 snap 元数据为准,不应预先假设它采用严格限制或经典模式。

可以这样改造资产清单脚本

下面的脚本同时检查 deb、snap 和最终可执行文件,适合改造成巡检或迁移验证任务。它不会安装或删除任何软件:

#!/usr/bin/env bash
set -u

printf '%-12s %s\n' 'CHECK' 'RESULT'

if dpkg-query -W -f='${Version}' hwctl >/tmp/hwctl-deb-version 2>/dev/null; then
  printf '%-12s %s\n' 'deb' "installed: $(cat /tmp/hwctl-deb-version)"
else
  printf '%-12s %s\n' 'deb' 'not installed'
fi
rm -f /tmp/hwctl-deb-version

if command -v snap >/dev/null 2>&1 && snap list hwctl >/dev/null 2>&1; then
  snap_version=$(snap list hwctl | awk 'NR == 2 {print $2 " (rev " $3 ")"}')
  printf '%-12s %s\n' 'snap' "installed: ${snap_version}"
else
  printf '%-12s %s\n' 'snap' 'not installed'
fi

if command -v hwctl >/dev/null 2>&1; then
  printf '%-12s %s\n' 'command' "$(command -v hwctl)"
else
  printf '%-12s %s\n' 'command' 'not found in PATH'
fi

将它保存为 check-hwctl.sh 后运行:

chmod +x check-hwctl.sh
./check-hwctl.sh

在自动化系统中,不要只把 apt install hwctl 替换为某条 snap 命令就结束。还应检查调用路径是否写死为 /usr/bin/hwctl、主机是否运行 snapd、出口策略是否允许访问所需软件源,以及更新窗口是否符合组织要求。

采用前应核对什么

这次迁移体现的是一种有边界的打包策略:当软件只属于 Ubuntu、依赖没有跨发行版消费者,并且维护者希望独立交付时,snap 能减少 deb 仓库中的专用维护工作。它并不能推出“所有核心包都会转成 snap”,也不能证明 snap 对每种系统组件都更合适。

升级或制作基础镜像时,建议核对以下事项:

  • 目标 Ubuntu 版本是否已经提供 hwctl snap,以及使用哪个通道。
  • 现有脚本是否依赖 dpkg-queryapt-cache 或固定的可执行文件路径。
  • snap 的权限接口能否覆盖硬件认证检查所需的系统访问。
  • 离线安装、代理、镜像和漏洞扫描流程是否包含 snap。
  • 自动刷新和回退策略是否满足变更管理要求。

对桌面用户,这可能只是安装来源发生变化;对管理成百上千台 Ubuntu 主机的团队,它则是一次资产发现、更新控制和软件供应链边界的调整。


相关推荐