fwupd/fwupd
GitHub: fwupd/fwupd
Linux 平台的标准固件更新守护进程,通过 LVFS 实现跨厂商固件的自动、安全更新。
Stars: 3881 | Forks: 559
# fwupd
[](https://github.com/fwupd/fwupd/actions/workflows/ci.yml)
[](https://hosted.weblate.org/engage/fwupd/)
[](https://github.com/fwupd/fwupd/actions/workflows/codeql-analysis.yml)
[](https://scan.coverity.com/projects/10744)
[](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:fwupd)
[](https://codecov.io/gh/fwupd/fwupd)
[](https://securityscorecards.dev/viewer/?uri=github.com/fwupd/fwupd)
[](https://www.bestpractices.dev/projects/8751)
本项目旨在使 Linux 上的固件更新变得自动、安全且可靠。
更多信息请访问[网站](https://fwupd.org/)。
## 获取帮助?
- [此仓库](https://github.com/fwupd/fwupd)中的 GitHub issues 和讨论
## 编译
有关如何构建 fwupd 开发环境,请参阅[构建和调试](docs/building.md)。
用户应仅安装由其发行版提供并通过包维护者管理和测试的 fwupd 更新。
发行版还会测试 fwupd 与系统上其他软件的交互情况,例如 GNOME Software。
安装 fwupd 时使用 [Snap](https://github.com/fwupd/fwupd/wiki/fwupd-snap)
或 [Flatpak](https://github.com/fwupd/fwupd/wiki/fwupd-flatpak) 可能
有助于在命令行更新需要最新 fwupd 版本的特定设备,但这不应被视为替代发行版提供的系统版本。
### 使用 Tartan
[Tartan](https://gitlab.freedesktop.org/tartan/tartan/-/wikis/home) 是一个构建用于分析 GLib 代码的 LLVM 静态分析插件。可以通过以下方式安装并运行:
```
mkdir build-tartan
CC=clang-18 meson ../
SCANBUILD=../contrib/tartan.sh ninja scan-build
```
## LVFS
本项目默认配置为从 [Linux Vendor Firmware Service (LVFS)](https://fwupd.org/) 下载固件。
该服务面向所有希望向 Linux 用户提供其固件的 OEM 和固件创建者。
您可以在 [fwupd 网站](https://fwupd.org)的硬件供应商部分找到有关创建固件 capsule 技术细节的更多信息。
## 基本使用流程(命令行)
如果您拥有 fwupd 支持的固件设备,可以通过以下方式使用 fwupd 的命令行工具检查并应用更新。
`# fwupdmgr get-devices`
这将显示 fwupd 检测到的所有设备。
`# fwupdmgr refresh`
这将从 LVFS 下载最新的元数据。
`# fwupdmgr get-updates`
如果系统上的任何设备有可用更新,它们将被显示出来。
`# fwupdmgr update`
这将下载并应用系统的所有更新。
- 可以实时应用的更新将立即执行。
- 在启动时运行的更新将被暂存,直到下次重启。
您可以在 [fwupd 网站](https://fwupd.org)的最终用户部分找到有关更新工作流程的更多信息。
## Passim
如果同时安装并启用了 [Passim](https://github.com/hughsie/passim/blob/main/README.md) 项目,fwupd 将重新发布下载的元数据文件,默认在 `0.0.0.0:27500` 上提供服务。
同一网络上的其他客户端可以通过 mDNS/LLMNR 利用此功能,以减少到配置远程源的的网络带宽。
要禁用此功能,可以在 `/etc/fwupd/daemon.conf` 中设置 `P2pPolicy=none`,卸载 passim 包或在终端中使用 `systemctl mask passim.service`。
## 报告状态
fwupd 将鼓励用户向 LVFS 报告成功和失败的更新。这是一项可选功能,但受到鼓励,因为它向 LVFS 管理员和 OEM 开发人员提供了有关固件更新过程效率的宝贵反馈。
有关此数据的隐私政策可以在 [lvfs readthedocs 站点](https://lvfs.readthedocs.io/en/latest/privacy.html)上查看。
要报告更新状态,请运行:
`# fwupdmgr report-history`
只有从 LVFS 分发的更新才会被报告给 LVFS。
## 企业使用
在企业环境中,可以使用“已批准更新”功能控制更新流程。这允许域管理员从中央服务器(例如 LVFS 或镜像)筛选可能的更新,仅保留已在您的组织中专门测试过的固件。
可以通过将 `ApprovalRequired=true` 添加到远程配置文件(例如 `lvfs.conf`)来启用已批准更新列表。启用后,可以在 `fwupd.conf` 中使用逗号分隔的列表设置已批准更新列表。
例如:
```
ApprovedFirmware=foo,bar
```
其中 `foo,bar` 指的是元数据文件中对应于两个更新的容器校验和(checksums)。
此外,可以使用 `fwupdmgr set-approved-firmware baz` 或使用 D-Bus 接口来补充已批准固件列表。
## 其他前端
fwupdmgr 是一个命令行客户端,但 [fwupdmgr 手册页](https://fwupd.github.io/libfwupdplugin/fwupdmgr.html#description)中列出了各种额外的图形前端。
## SAST 工具
- [Coverity](https://scan.coverity.com/) - 用于 Java、C/C++、C#、JavaScript、Ruby 和 Python 代码的静态分析器。
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_medium=github&utm_campaign=open_source) - 用于 C、C++、C# 和 Java 代码的静态分析器。
## 打包说明
如果您正在下游开发或维护 fwupd 软件包,请考虑以下注意事项。
- 应谨慎使用 Meson 构建选项 `systemd_unit_user`,并且指定的用户(或结果组)应不被
非特权系统用户访问。否则,这可能会带来权限提升的风险。此设置的默认值(`DynamicUser=true`)是
安全的,应在一般情况下使用。
标签:Awesome, BIOS更新, DNS解析, Flatpak, GNOME, LVFS, Snap, UEFI, 固件更新, 基础设施, 安全更新, 客户端加密, 开源项目, 操作系统, 服务端组件, 硬件管理, 系统守护进程, 系统管理, 自动更新, 设备驱动, 预握手