Skip to content

Commit 67b0ebc

Browse files
committed
kb/fwupd.md: add instructions for FreeBSD
It works, but not without issues. More work will be necessary to make it fully useable. Signed-off-by: Sergii Dmytruk <sergii.dmytruk@3mdeb.com>
1 parent c9af3e2 commit 67b0ebc

File tree

1 file changed

+131
-2
lines changed

1 file changed

+131
-2
lines changed

docs/kb/fwupd.md

Lines changed: 131 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,9 +182,76 @@ it to perform firmware updates.
182182
```
183183
</details>
184184

185+
=== "FreeBSD"
186+
187+
!!! warning
188+
`fwupd` on FreeBSD is very much work in progress as of March 2026. The
189+
basic elements are there, but user experience may be far from perfect.
190+
In particular, not all functionality is available (e.g., `fwupd` won't
191+
reboot for you, update may be reported as "in progress" after it has
192+
been applied) or works reliably (may complain about missing ESP,
193+
although this error may be gone on second try or after restarting
194+
`fwupd`). In addition to that, FreeBSD loader and/or kernel has issues
195+
with ESRT which may prevent `uefi_capsule` plugin of `fwupd` from
196+
working.
197+
198+
`fwupd` is available in ports, but the version there lacks UEFI capsules.
199+
The necessary changes are being [upstreamed][D55590], until then a
200+
relatively complicated setup in necessary to have a chance of firmware
201+
updates working. The following instructions assume the system isn't
202+
configured much, make adjustments to not overwrite existing configuration if
203+
that's not the case.
204+
205+
Start by switching from "quaterly" to "latest" packages to have an already
206+
updated `bsdisks` (necessary to find ESP):
207+
208+
```terminal
209+
# mkdir -p /usr/local/etc/pkg/repos
210+
# sed 's!/quarterly!/latest!' /etc/pkg/FreeBSD.conf > /usr/local/etc/pkg/repos/FreeBSD.conf
211+
```
212+
213+
Then install `fwupd`, `bsdisks` and various build dependencies. A few ports
214+
will be reinstalled later, this step is just to reuse binary packages and
215+
not build everything from sources. Run the following command:
216+
217+
```terminal
218+
# pkg install fwupd bsdisks meson help2man noto-sans py311-Jinja2 py311-pygobject py311-pangocffi gettext-tools pkgconf vala dbus cmake ninja git
219+
```
220+
221+
Now get the version of ports with necessary fixes and reinstall the
222+
packages (cloning will take time, building can too; there will also be a few
223+
dialogs about port options, just agreeing should do but can choose to not
224+
build documentation):
225+
226+
```terminal
227+
# git clone --branch=fwupd-2026 --depth=1 --filter=blob:none https://github.com/3mdeb/freebsd-ports /usr/ports
228+
# make -C /usr/ports/devel/efivar/ deinstall
229+
# make -C /usr/ports/devel/gnu-efi/ reinstall
230+
# make -C /usr/ports/sysutils/fwupd-efi/ reinstall
231+
# make -C /usr/ports/sysutils/fwupd/ reinstall
232+
```
233+
234+
`fwupd` communicates with `bsdisks` over D-Bus, so it must be running
235+
(`fwupdmgr` also depends on D-Bus, otherwise using `fwupdtool` as root is
236+
the only option). It can be enabled permanently and then launched like
237+
this:
238+
239+
```terminal
240+
# echo 'dbus_enable="YES"' >> /etc/rc.conf
241+
# service dbus start
242+
```
243+
244+
This is how to start D-Bus temporarily:
245+
246+
```terminal
247+
# service dbus onestart
248+
```
249+
250+
[D55590]: https://reviews.freebsd.org/D55590
251+
185252
### Checking the current firmware version
186253

187-
=== "Ubuntu, Fedora"
254+
=== "Ubuntu, Fedora, FreeBSD"
188255
To check the currently used firmware version, run the following command
189256

190257
```bash
@@ -260,7 +327,7 @@ it to perform firmware updates.
260327

261328
### Checking for updates
262329

263-
=== "Ubuntu, Fedora"
330+
=== "Ubuntu, Fedora, FreeBSD"
264331
To check for available updates for your device, run the following commands
265332

266333
```bash
@@ -402,6 +469,40 @@ are met.
402469
and the updates on LVFS may not be found using this tool. Refer to
403470
[troubleshooting](#no-updates-available-qubesos).
404471

472+
=== "FreeBSD"
473+
To update your firmware, run the following commands:
474+
475+
```terminal
476+
# fwupdmgr refresh
477+
# fwupdmgr update --no-reboot-check
478+
# reboot
479+
```
480+
481+
<details><summary>Example of an update process:</summary>
482+
```
483+
# fwupdmgr update --no-reboot-check
484+
Devices with no available firmware updates:
485+
• UEFI dbx
486+
• SSDPR-PX600-250-80
487+
╔══════════════════════════════════════════════════════════════════════════════╗
488+
║ Upgrade System Firmware from 1.0.0 to 1.0.1? ║
489+
╠══════════════════════════════════════════════════════════════════════════════╣
490+
║ New Dasharo firmware release for the NovaCustom Meteor Lake laptops ║
491+
║ ║
492+
║ with integrated graphics, featuring numerous bug fixes, performance ║
493+
║ ║
494+
║ improvements and stability fixes. ║
495+
║ ║
496+
║ V54x_6x_TU must remain plugged into a power source for the duration of the ║
497+
║ update to avoid damage. ║
498+
╚══════════════════════════════════════════════════════════════════════════════╝
499+
Perform operation? [Y|n]: y
500+
Waiting… [***************************************]
501+
Successfully installed firmware
502+
Do not turn off your computer or remove the AC adapter while the update is in progress.
503+
```
504+
</details>
505+
405506
!!! warning
406507
After the command finishes, a reboot is necessary to apply the update.
407508
The fwupd UEFI application that performs the update will be booted
@@ -438,6 +539,23 @@ source. We will use `novacustom_v54x_mtl_igpu_v1.0.1_btg_prod.cab` downloaded fr
438539
$ sudo fwupdmgr local-install novacustom_v54x_mtl_igpu_v1.0.1_btg_prod.cab
439540
```
440541

542+
=== "FreeBSD"
543+
To update your firmware using a locally available cabinet file, follow the
544+
steps:
545+
546+
1. Allow updates from untrusted sources
547+
```terminal
548+
# printf '[fwupd]\nOnlyTrusted=false\n' > /usr/local/etc/fwupd/fwupd.conf
549+
```
550+
2. Perform a local install
551+
```terminal
552+
# fwupdmgr local-install --no-reboot-check novacustom_v54x_mtl_igpu_v1.0.1_btg_prod.cab
553+
```
554+
3. Reboot to apply the update
555+
```terminal
556+
# reboot
557+
```
558+
441559
#### Update troubleshooting
442560

443561
##### No output from fwupdmgr update
@@ -607,6 +725,17 @@ manually from fwupd.org.
607725
`qubes-fwupdmgr` doesn't currently support `get-results` command of
608726
`fwupdmgr`.
609727

728+
=== "FreeBSD"
729+
The following command is supposed to report update results:
730+
731+
```bash
732+
$ fwupdmgr get-results
733+
```
734+
735+
However, this is likely to not produce any results because fwupd fails to
736+
finalize the update. `fwupdmgr get-devices` incorrectly states that "An
737+
update is in progress" along with displaying version that shows the update
738+
has already happened.
610739

611740
For another way to verify an update has really happened refer to
612741
[Checking The Current Firmware Version](#checking-the-current-firmware-version).

0 commit comments

Comments
 (0)